summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
authoretaIneLp <etaIneLp@gmail.com>2021-01-30 13:57:27 -0500
committerAndreas Kling <kling@serenityos.org>2021-01-30 22:59:16 +0100
commite625ae1130c95ddb5b7de7d65f9cdbabde431920 (patch)
treefc2dcf1326fc2b7350d42855799421c7672bb1ca /Userland
parentc0e88b971052c6b700e87f7c183eb743b0de992f (diff)
downloadserenity-e625ae1130c95ddb5b7de7d65f9cdbabde431920.zip
WindowManager: Restore a window's geometry when untiling it
Specifically, when untiling it using the Super-{Left,Right} shortcuts Fixes #5182
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Services/WindowServer/Window.cpp12
-rw-r--r--Userland/Services/WindowServer/Window.h2
-rw-r--r--Userland/Services/WindowServer/WindowManager.cpp8
3 files changed, 15 insertions, 7 deletions
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<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));
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<Gfx::IntPoint> 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())