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
Notes: sideshowbarker 2024-07-19 18:30:09 +09:00
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)
return false;
@ -710,9 +710,13 @@ bool Window::set_untiled(const Gfx::IntPoint& fixed_point)
m_tiled = WindowTileType::None;
auto new_rect = Gfx::IntRect(m_rect);
new_rect.set_size_around(m_untiled_rect.size(), fixed_point);
set_rect(new_rect);
if (fixed_point.has_value()) {
auto new_rect = Gfx::IntRect(m_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));

View File

@ -110,7 +110,7 @@ public:
WindowTileType tiled() const { return m_tiled; }
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; }
void set_occluded(bool);

View File

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