diff --git a/Userland/Services/WindowServer/Window.cpp b/Userland/Services/WindowServer/Window.cpp index 19fcdd68dc..50a37ddc4a 100644 --- a/Userland/Services/WindowServer/Window.cpp +++ b/Userland/Services/WindowServer/Window.cpp @@ -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 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(m_rect)); diff --git a/Userland/Services/WindowServer/Window.h b/Userland/Services/WindowServer/Window.h index 4a40ec76eb..ed7f4ca946 100644 --- a/Userland/Services/WindowServer/Window.h +++ b/Userland/Services/WindowServer/Window.h @@ -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 fixed_point = {}); bool is_occluded() const { return m_occluded; } void set_occluded(bool); diff --git a/Userland/Services/WindowServer/WindowManager.cpp b/Userland/Services/WindowServer/WindowManager.cpp index 5457c42de7..257dc65cec 100644 --- a/Userland/Services/WindowServer/WindowManager.cpp +++ b/Userland/Services/WindowServer/WindowManager.cpp @@ -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())