From cc6db526a6e595918a3e43312df8f724275e4e6a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 2 May 2021 10:42:25 +0200 Subject: [PATCH] WindowServer+LibGUI+Taskbar: Store window progress as Optional We were previously using the magical constant -1 to signify that a window had no progress state. Be more explicit an use an Optional. :^) --- Userland/Libraries/LibGUI/Event.h | 6 +++--- Userland/Libraries/LibGUI/Window.cpp | 2 +- Userland/Libraries/LibGUI/Window.h | 2 +- Userland/Services/Taskbar/TaskbarButton.cpp | 8 +++----- Userland/Services/Taskbar/WindowList.h | 6 +++--- Userland/Services/WindowServer/Window.cpp | 2 +- Userland/Services/WindowServer/Window.h | 11 ++++++----- .../Services/WindowServer/WindowManagerClient.ipc | 2 +- Userland/Services/WindowServer/WindowServer.ipc | 2 +- 9 files changed, 20 insertions(+), 21 deletions(-) diff --git a/Userland/Libraries/LibGUI/Event.h b/Userland/Libraries/LibGUI/Event.h index 9a0d9cf1b80..34b8b65759b 100644 --- a/Userland/Libraries/LibGUI/Event.h +++ b/Userland/Libraries/LibGUI/Event.h @@ -126,7 +126,7 @@ public: class WMWindowStateChangedEvent : public WMEvent { public: - WMWindowStateChangedEvent(int client_id, int window_id, int parent_client_id, int parent_window_id, const StringView& title, const Gfx::IntRect& rect, bool is_active, bool is_modal, WindowType window_type, bool is_minimized, bool is_frameless, int progress) + WMWindowStateChangedEvent(int client_id, int window_id, int parent_client_id, int parent_window_id, const StringView& title, const Gfx::IntRect& rect, bool is_active, bool is_modal, WindowType window_type, bool is_minimized, bool is_frameless, Optional progress) : WMEvent(Event::Type::WM_WindowStateChanged, client_id, window_id) , m_parent_client_id(parent_client_id) , m_parent_window_id(parent_window_id) @@ -150,7 +150,7 @@ public: WindowType window_type() const { return m_window_type; } bool is_minimized() const { return m_minimized; } bool is_frameless() const { return m_frameless; } - int progress() const { return m_progress; } + Optional progress() const { return m_progress; } private: int m_parent_client_id; @@ -162,7 +162,7 @@ private: bool m_modal; bool m_minimized; bool m_frameless; - int m_progress; + Optional m_progress; }; class WMWindowRectChangedEvent : public WMEvent { diff --git a/Userland/Libraries/LibGUI/Window.cpp b/Userland/Libraries/LibGUI/Window.cpp index 442c8ef5570..ae032968399 100644 --- a/Userland/Libraries/LibGUI/Window.cpp +++ b/Userland/Libraries/LibGUI/Window.cpp @@ -1021,7 +1021,7 @@ void Window::did_remove_widget(Badge, Widget& widget) m_automatic_cursor_tracking_widget = nullptr; } -void Window::set_progress(int progress) +void Window::set_progress(Optional progress) { VERIFY(m_window_id); WindowServerConnection::the().post_message(Messages::WindowServer::SetWindowProgress(m_window_id, progress)); diff --git a/Userland/Libraries/LibGUI/Window.h b/Userland/Libraries/LibGUI/Window.h index 20b0a642dd6..3258287f9ee 100644 --- a/Userland/Libraries/LibGUI/Window.h +++ b/Userland/Libraries/LibGUI/Window.h @@ -190,7 +190,7 @@ public: Window* find_parent_window(); - void set_progress(int); + void set_progress(Optional); void update_cursor(Badge) { update_cursor(); } diff --git a/Userland/Services/Taskbar/TaskbarButton.cpp b/Userland/Services/Taskbar/TaskbarButton.cpp index b618011df3f..ec5f9250230 100644 --- a/Userland/Services/Taskbar/TaskbarButton.cpp +++ b/Userland/Services/Taskbar/TaskbarButton.cpp @@ -103,8 +103,6 @@ void TaskbarButton::paint_event(GUI::PaintEvent& event) if (text().is_empty()) return; - bool has_progress = window.progress() >= 0 && window.progress() <= 100; - auto content_rect = rect().shrunken(8, 2); auto icon_location = content_rect.center().translated(-(icon.width() / 2), -(icon.height() / 2)); if (!text().is_empty()) @@ -125,12 +123,12 @@ void TaskbarButton::paint_event(GUI::PaintEvent& event) icon_location.move_by(1, 1); } - if (has_progress) { + if (window.progress().has_value()) { auto adjusted_rect = rect().shrunken(4, 4); if (is_being_pressed() || is_checked()) { adjusted_rect.set_height(adjusted_rect.height() + 1); } - paint_custom_progressbar(painter, adjusted_rect, text_rect, palette(), 0, 100, window.progress(), text(), font, text_alignment()); + paint_custom_progressbar(painter, adjusted_rect, text_rect, palette(), 0, 100, window.progress().value(), text(), font, text_alignment()); } if (is_enabled()) { @@ -142,6 +140,6 @@ void TaskbarButton::paint_event(GUI::PaintEvent& event) painter.blit_disabled(icon_location, icon, icon.rect(), palette()); } - if (!has_progress) + if (!window.progress().has_value()) paint_text(painter, text_rect, font, text_alignment()); } diff --git a/Userland/Services/Taskbar/WindowList.h b/Userland/Services/Taskbar/WindowList.h index cb477f01482..de0c96ed2dc 100644 --- a/Userland/Services/Taskbar/WindowList.h +++ b/Userland/Services/Taskbar/WindowList.h @@ -48,7 +48,7 @@ public: void set_modal(bool modal) { m_modal = modal; } bool is_modal() const { return m_modal; } - void set_progress(int progress) + void set_progress(Optional progress) { if (m_progress == progress) return; @@ -57,7 +57,7 @@ public: m_button->update(); } - int progress() const { return m_progress; } + Optional progress() const { return m_progress; } const Gfx::Bitmap* icon() const { return m_icon.ptr(); } @@ -71,7 +71,7 @@ private: bool m_active { false }; bool m_minimized { false }; bool m_modal { false }; - int m_progress { -1 }; + Optional m_progress; }; class WindowList { diff --git a/Userland/Services/WindowServer/Window.cpp b/Userland/Services/WindowServer/Window.cpp index f3f2fbaa83e..1d7a6687419 100644 --- a/Userland/Services/WindowServer/Window.cpp +++ b/Userland/Services/WindowServer/Window.cpp @@ -918,7 +918,7 @@ bool Window::is_modal() const return true; } -void Window::set_progress(int progress) +void Window::set_progress(Optional progress) { if (m_progress == progress) return; diff --git a/Userland/Services/WindowServer/Window.h b/Userland/Services/WindowServer/Window.h index 13fee234d26..04290b27dc5 100644 --- a/Userland/Services/WindowServer/Window.h +++ b/Userland/Services/WindowServer/Window.h @@ -72,8 +72,6 @@ class Window final : public Core::Object , public InlineLinkedListNode { C_OBJECT(Window) public: - Window(ClientConnection&, WindowType, int window_id, bool modal, bool minimizable, bool frameless, bool resizable, bool fullscreen, bool accessory, Window* parent_window = nullptr); - Window(Core::Object&, WindowType); virtual ~Window() override; bool is_modified() const { return m_modified; } @@ -295,8 +293,8 @@ public: bool should_show_menubar() const { return m_should_show_menubar; } - int progress() const { return m_progress; } - void set_progress(int); + Optional progress() const { return m_progress; } + void set_progress(Optional); bool is_destroyed() const { return m_destroyed; } void destroy(); @@ -324,6 +322,9 @@ public: void set_menubar(Menubar*); private: + Window(ClientConnection&, WindowType, int window_id, bool modal, bool minimizable, bool frameless, bool resizable, bool fullscreen, bool accessory, Window* parent_window = nullptr); + Window(Core::Object&, WindowType); + virtual void event(Core::Event&) override; void handle_mouse_event(const MouseEvent&); void handle_keydown_event(const KeyEvent&); @@ -398,7 +399,7 @@ private: MenuItem* m_window_menu_close_item { nullptr }; MenuItem* m_window_menu_menubar_visibility_item { nullptr }; int m_minimize_animation_step { -1 }; - int m_progress { -1 }; + Optional m_progress; bool m_should_show_menubar { true }; bool m_modified { false }; }; diff --git a/Userland/Services/WindowServer/WindowManagerClient.ipc b/Userland/Services/WindowServer/WindowManagerClient.ipc index facda30d8ef..b5fd250f6b5 100644 --- a/Userland/Services/WindowServer/WindowManagerClient.ipc +++ b/Userland/Services/WindowServer/WindowManagerClient.ipc @@ -1,7 +1,7 @@ endpoint WindowManagerClient { WindowRemoved(i32 wm_id, i32 client_id, i32 window_id) =| - WindowStateChanged(i32 wm_id, i32 client_id, i32 window_id, i32 parent_client_id, i32 parent_window_id, bool is_active, bool is_minimized, bool is_modal, bool is_frameless, i32 window_type, [UTF8] String title, Gfx::IntRect rect, i32 progress) =| + WindowStateChanged(i32 wm_id, i32 client_id, i32 window_id, i32 parent_client_id, i32 parent_window_id, bool is_active, bool is_minimized, bool is_modal, bool is_frameless, i32 window_type, [UTF8] String title, Gfx::IntRect rect, Optional progress) =| WindowIconBitmapChanged(i32 wm_id, i32 client_id, i32 window_id, Gfx::ShareableBitmap bitmap) =| WindowRectChanged(i32 wm_id, i32 client_id, i32 window_id, Gfx::IntRect rect) =| AppletAreaSizeChanged(i32 wm_id, Gfx::IntSize size) =| diff --git a/Userland/Services/WindowServer/WindowServer.ipc b/Userland/Services/WindowServer/WindowServer.ipc index 3aef59ca30e..5f514268ddf 100644 --- a/Userland/Services/WindowServer/WindowServer.ipc +++ b/Userland/Services/WindowServer/WindowServer.ipc @@ -54,7 +54,7 @@ endpoint WindowServer SetWindowTitle(i32 window_id, [UTF8] String title) => () GetWindowTitle(i32 window_id) => ([UTF8] String title) - SetWindowProgress(i32 window_id, i32 progress) =| + SetWindowProgress(i32 window_id, Optional progress) =| SetWindowModified(i32 window_id, bool modified) =| IsWindowModified(i32 window_id) => (bool modified)