summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibGUI/Window.cpp18
-rw-r--r--Userland/Libraries/LibGUI/Window.h3
-rw-r--r--Userland/Services/WindowServer/ConnectionFromClient.cpp3
-rw-r--r--Userland/Services/WindowServer/Window.cpp21
-rw-r--r--Userland/Services/WindowServer/Window.h2
5 files changed, 14 insertions, 33 deletions
diff --git a/Userland/Libraries/LibGUI/Window.cpp b/Userland/Libraries/LibGUI/Window.cpp
index 7857419ad4..c5bbf06075 100644
--- a/Userland/Libraries/LibGUI/Window.cpp
+++ b/Userland/Libraries/LibGUI/Window.cpp
@@ -70,7 +70,7 @@ Window::Window(Core::Object* parent)
, m_menubar(Menubar::construct())
{
all_windows->set(this);
- m_rect_when_windowless = { -5000, -5000, 140, 140 };
+ m_rect_when_windowless = { -5000, -5000, 0, 0 };
m_title_when_windowless = "GUI::Window";
register_property(
@@ -289,7 +289,8 @@ Gfx::IntSize Window::minimum_size() const
void Window::set_minimum_size(Gfx::IntSize const& size)
{
- m_minimum_size_modified = true;
+ VERIFY(size.width() >= 0 && size.height() >= 0);
+ VERIFY(!is_obeying_widget_min_size());
m_minimum_size_when_windowless = size;
if (is_visible())
@@ -311,14 +312,6 @@ void Window::center_within(Window const& other)
void Window::set_window_type(WindowType window_type)
{
m_window_type = window_type;
-
- if (!m_minimum_size_modified) {
- // Apply minimum size defaults.
- if (m_window_type == WindowType::Normal || m_window_type == WindowType::ToolWindow)
- m_minimum_size_when_windowless = { 50, 50 };
- else
- m_minimum_size_when_windowless = { 1, 1 };
- }
}
void Window::make_window_manager(unsigned event_mask)
@@ -1044,7 +1037,10 @@ void Window::update_min_size()
main_widget()->do_layout();
if (m_obey_widget_min_size) {
auto min_size = main_widget()->effective_min_size();
- set_minimum_size(MUST(min_size.width().shrink_value()), MUST(min_size.height().shrink_value()));
+ 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);
}
}
}
diff --git a/Userland/Libraries/LibGUI/Window.h b/Userland/Libraries/LibGUI/Window.h
index f26cbceb6e..fed8d00d22 100644
--- a/Userland/Libraries/LibGUI/Window.h
+++ b/Userland/Libraries/LibGUI/Window.h
@@ -278,8 +278,7 @@ private:
WeakPtr<Widget> m_automatic_cursor_tracking_widget;
WeakPtr<Widget> m_hovered_widget;
Gfx::IntRect m_rect_when_windowless;
- Gfx::IntSize m_minimum_size_when_windowless { 50, 50 };
- bool m_minimum_size_modified { false };
+ Gfx::IntSize m_minimum_size_when_windowless { 0, 0 };
String m_title_when_windowless;
Vector<Gfx::IntRect, 32> m_pending_paint_event_rects;
Gfx::IntSize m_size_increment;
diff --git a/Userland/Services/WindowServer/ConnectionFromClient.cpp b/Userland/Services/WindowServer/ConnectionFromClient.cpp
index 4a451e9fb3..13aed5f3de 100644
--- a/Userland/Services/WindowServer/ConnectionFromClient.cpp
+++ b/Userland/Services/WindowServer/ConnectionFromClient.cpp
@@ -470,6 +470,9 @@ Messages::WindowServer::GetWindowRectResponse ConnectionFromClient::get_window_r
static Gfx::IntSize calculate_minimum_size_for_window(Window const& window)
{
+ if (window.is_frameless())
+ return { 0, 0 };
+
// NOTE: Windows with a title bar have a minimum size enforced by the system,
// because we want to always keep their title buttons accessible.
if (window.type() == WindowType::Normal || window.type() == WindowType::ToolWindow) {
diff --git a/Userland/Services/WindowServer/Window.cpp b/Userland/Services/WindowServer/Window.cpp
index 5990f364a3..cabcfdface 100644
--- a/Userland/Services/WindowServer/Window.cpp
+++ b/Userland/Services/WindowServer/Window.cpp
@@ -19,8 +19,6 @@
namespace WindowServer {
-static constexpr Gfx::IntSize s_default_normal_minimum_size = { 50, 50 };
-
static String default_window_icon_path()
{
return "/res/icons/16x16/window.png";
@@ -88,10 +86,6 @@ Window::Window(Core::Object& parent, WindowType type)
, m_icon(default_window_icon())
, m_frame(*this)
{
- // Set default minimum size for Normal windows
- if (m_type == WindowType::Normal)
- m_minimum_size = s_default_normal_minimum_size;
-
WindowManager::the().add_window(*this);
frame().window_was_constructed({});
}
@@ -112,10 +106,6 @@ Window::Window(ConnectionFromClient& client, WindowType window_type, int window_
, m_icon(default_window_icon())
, m_frame(*this)
{
- // Set default minimum size for Normal windows
- if (m_type == WindowType::Normal)
- m_minimum_size = s_default_normal_minimum_size;
-
if (parent_window)
set_parent_window(*parent_window);
WindowManager::the().add_window(*this);
@@ -169,7 +159,7 @@ void Window::set_rect(Gfx::IntRect const& rect)
void Window::set_rect_without_repaint(Gfx::IntRect const& rect)
{
- VERIFY(!rect.is_empty());
+ VERIFY(rect.width() >= 0 && rect.height() >= 0);
if (m_rect == rect)
return;
auto old_rect = m_rect;
@@ -248,16 +238,9 @@ void Window::nudge_into_desktop(Screen* target_screen, bool force_titlebar_visib
void Window::set_minimum_size(Gfx::IntSize const& size)
{
- if (size.is_null())
- return;
-
+ VERIFY(size.width() >= 0 && size.height() >= 0);
if (m_minimum_size == size)
return;
-
- // Disallow setting minimum zero widths or heights.
- if (size.width() == 0 || size.height() == 0)
- return;
-
m_minimum_size = size;
}
diff --git a/Userland/Services/WindowServer/Window.h b/Userland/Services/WindowServer/Window.h
index 79ec348edc..d6a5e44748 100644
--- a/Userland/Services/WindowServer/Window.h
+++ b/Userland/Services/WindowServer/Window.h
@@ -450,7 +450,7 @@ private:
float m_alpha_hit_threshold { 0.0f };
Gfx::IntSize m_size_increment;
Gfx::IntSize m_base_size;
- Gfx::IntSize m_minimum_size { 1, 1 };
+ Gfx::IntSize m_minimum_size { 0, 0 };
NonnullRefPtr<Gfx::Bitmap> m_icon;
RefPtr<Cursor> m_cursor;
RefPtr<Cursor> m_cursor_override;