summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibGUI/Window.cpp32
-rw-r--r--Userland/Libraries/LibGUI/Window.h4
2 files changed, 27 insertions, 9 deletions
diff --git a/Userland/Libraries/LibGUI/Window.cpp b/Userland/Libraries/LibGUI/Window.cpp
index ef2da2f1cc..f5706a361c 100644
--- a/Userland/Libraries/LibGUI/Window.cpp
+++ b/Userland/Libraries/LibGUI/Window.cpp
@@ -615,6 +615,9 @@ void Window::handle_fonts_change_event(FontsChangeEvent& event)
});
};
dispatch_fonts_change(*m_main_widget.ptr(), dispatch_fonts_change);
+
+ if (is_auto_shrinking())
+ schedule_relayout();
}
void Window::handle_screen_rects_change_event(ScreenRectsChangeEvent& event)
@@ -1096,6 +1099,14 @@ void Window::set_obey_widget_min_size(bool obey_widget_min_size)
}
}
+void Window::set_auto_shrink(bool shrink)
+{
+ if (m_auto_shrink == shrink)
+ return;
+ m_auto_shrink = shrink;
+ schedule_relayout();
+}
+
void Window::set_maximized(bool maximized)
{
m_maximized = maximized;
@@ -1119,16 +1130,19 @@ void Window::set_minimized(bool minimized)
void Window::update_min_size()
{
- if (main_widget()) {
- main_widget()->do_layout();
- if (m_obey_widget_min_size) {
- auto min_size = main_widget()->effective_min_size();
- Gfx::IntSize size = { MUST(min_size.width().shrink_value()), MUST(min_size.height().shrink_value()) };
- m_minimum_size_when_windowless = size;
- if (is_visible())
- ConnectionToWindowServer::the().async_set_window_minimum_size(m_window_id, size);
- }
+ if (!main_widget())
+ return;
+ main_widget()->do_layout();
+
+ auto min_size = main_widget()->effective_min_size();
+ Gfx::IntSize size = { MUST(min_size.width().shrink_value()), MUST(min_size.height().shrink_value()) };
+ if (is_obeying_widget_min_size()) {
+ m_minimum_size_when_windowless = size;
+ if (is_visible())
+ ConnectionToWindowServer::the().async_set_window_minimum_size(m_window_id, size);
}
+ if (is_auto_shrinking())
+ resize(size);
}
void Window::schedule_relayout()
diff --git a/Userland/Libraries/LibGUI/Window.h b/Userland/Libraries/LibGUI/Window.h
index 41670a9753..e3f055bd68 100644
--- a/Userland/Libraries/LibGUI/Window.h
+++ b/Userland/Libraries/LibGUI/Window.h
@@ -63,6 +63,9 @@ public:
bool is_obeying_widget_min_size() { return m_obey_widget_min_size; }
void set_obey_widget_min_size(bool);
+ bool is_auto_shrinking() const { return m_auto_shrink; }
+ void set_auto_shrink(bool);
+
bool is_minimizable() const { return m_minimizable; }
void set_minimizable(bool minimizable) { m_minimizable = minimizable; }
@@ -321,6 +324,7 @@ private:
bool m_moved_by_client { false };
bool m_blocks_emoji_input { false };
bool m_resizing { false };
+ bool m_auto_shrink { false };
};
}