1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 09:07:35 +00:00

WindowManager: Restore a window's geometry when untiling it

Specifically, when untiling it using the Super-{Left,Right} shortcuts

Fixes #5182
This commit is contained in:
etaIneLp 2021-01-30 13:57:27 -05:00 committed by Andreas Kling
parent c0e88b9710
commit e625ae1130
3 changed files with 15 additions and 7 deletions

View file

@ -702,7 +702,7 @@ Gfx::IntRect Window::tiled_rect(WindowTileType tiled) const
} }
} }
bool Window::set_untiled(const Gfx::IntPoint& fixed_point) bool Window::set_untiled(Optional<Gfx::IntPoint> fixed_point)
{ {
if (m_tiled == WindowTileType::None) if (m_tiled == WindowTileType::None)
return false; return false;
@ -710,9 +710,13 @@ bool Window::set_untiled(const Gfx::IntPoint& fixed_point)
m_tiled = WindowTileType::None; m_tiled = WindowTileType::None;
auto new_rect = Gfx::IntRect(m_rect); if (fixed_point.has_value()) {
new_rect.set_size_around(m_untiled_rect.size(), fixed_point); auto new_rect = Gfx::IntRect(m_rect);
set_rect(new_rect); new_rect.set_size_around(m_untiled_rect.size(), fixed_point.value());
set_rect(new_rect);
} else {
set_rect(m_untiled_rect);
}
Core::EventLoop::current().post_event(*this, make<ResizeEvent>(m_rect)); Core::EventLoop::current().post_event(*this, make<ResizeEvent>(m_rect));

View file

@ -110,7 +110,7 @@ public:
WindowTileType tiled() const { return m_tiled; } WindowTileType tiled() const { return m_tiled; }
void set_tiled(WindowTileType); void set_tiled(WindowTileType);
bool set_untiled(const Gfx::IntPoint& fixed_point); bool set_untiled(Optional<Gfx::IntPoint> fixed_point = {});
bool is_occluded() const { return m_occluded; } bool is_occluded() const { return m_occluded; }
void set_occluded(bool); void set_occluded(bool);

View file

@ -1133,8 +1133,10 @@ void WindowManager::event(Core::Event& event)
return; return;
} }
if (key_event.key() == Key_Left) { if (key_event.key() == Key_Left) {
if (m_active_input_window->tiled() == WindowTileType::Left)
return;
if (m_active_input_window->tiled() != WindowTileType::None) { if (m_active_input_window->tiled() != WindowTileType::None) {
m_active_input_window->set_tiled(WindowTileType::None); m_active_input_window->set_untiled();
return; return;
} }
if (m_active_input_window->is_maximized()) if (m_active_input_window->is_maximized())
@ -1143,8 +1145,10 @@ void WindowManager::event(Core::Event& event)
return; return;
} }
if (key_event.key() == Key_Right) { if (key_event.key() == Key_Right) {
if (m_active_input_window->tiled() == WindowTileType::Right)
return;
if (m_active_input_window->tiled() != WindowTileType::None) { if (m_active_input_window->tiled() != WindowTileType::None) {
m_active_input_window->set_tiled(WindowTileType::None); m_active_input_window->set_untiled();
return; return;
} }
if (m_active_input_window->is_maximized()) if (m_active_input_window->is_maximized())