From 7afb7e65d5a8da4f41750f1868dca3af33dad251 Mon Sep 17 00:00:00 2001 From: Arda Cinar Date: Fri, 25 Nov 2022 18:13:12 +0300 Subject: [PATCH] Taskbar: Made it possible to add a system menu to taskbar later This makes it possible to construct the taskbar before the system menu and remove the awkward reference in Taskbar/main.cpp --- Userland/Services/Taskbar/TaskbarWindow.cpp | 32 ++++++++++++++------- Userland/Services/Taskbar/TaskbarWindow.h | 7 +++-- Userland/Services/Taskbar/main.cpp | 3 +- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/Userland/Services/Taskbar/TaskbarWindow.cpp b/Userland/Services/Taskbar/TaskbarWindow.cpp index 7b5d52378dc..32867914ad1 100644 --- a/Userland/Services/Taskbar/TaskbarWindow.cpp +++ b/Userland/Services/Taskbar/TaskbarWindow.cpp @@ -52,8 +52,7 @@ private: } }; -TaskbarWindow::TaskbarWindow(NonnullRefPtr system_menu) - : m_system_menu(move(system_menu)) +TaskbarWindow::TaskbarWindow() { set_window_type(GUI::WindowType::Taskbar); set_title("Taskbar"); @@ -64,15 +63,8 @@ TaskbarWindow::TaskbarWindow(NonnullRefPtr system_menu) main_widget.set_layout(); main_widget.layout()->set_margins({ 2, 3, 0, 3 }); - m_start_button = GUI::Button::construct("Serenity"); - set_start_button_font(Gfx::FontDatabase::default_font().bold_variant()); - m_start_button->set_icon_spacing(0); - auto app_icon = GUI::Icon::default_icon("ladyball"sv); - m_start_button->set_icon(app_icon.bitmap_for_size(16)); - m_start_button->set_menu(m_system_menu); - - main_widget.add_child(*m_start_button); - main_widget.add(); + m_quick_launch = Taskbar::QuickLaunchWidget::construct(); + main_widget.add_child(*m_quick_launch); m_task_button_container = main_widget.add(); m_task_button_container->set_layout(); @@ -99,6 +91,21 @@ TaskbarWindow::TaskbarWindow(NonnullRefPtr system_menu) m_assistant_app_file = Desktop::AppFile::open(af_path); } +void TaskbarWindow::add_system_menu(NonnullRefPtr system_menu) +{ + m_system_menu = move(system_menu); + + m_start_button = GUI::Button::construct("Serenity"); + set_start_button_font(Gfx::FontDatabase::default_font().bold_variant()); + m_start_button->set_icon_spacing(0); + auto app_icon = GUI::Icon::default_icon("ladyball"sv); + m_start_button->set_icon(app_icon.bitmap_for_size(16)); + m_start_button->set_menu(m_system_menu); + + GUI::Widget* main = main_widget(); + main->insert_child_before(*m_start_button, *m_quick_launch); +} + void TaskbarWindow::config_string_did_change(String const& domain, String const& group, String const& key, String const& value) { if (domain == "Taskbar" && group == "Clock" && key == "TimeFormat") { @@ -296,6 +303,9 @@ void TaskbarWindow::wm_event(GUI::WMEvent& event) break; } case GUI::Event::WM_SuperKeyPressed: { + if (!m_system_menu) + break; + if (m_system_menu->is_visible()) { m_system_menu->dismiss(); } else { diff --git a/Userland/Services/Taskbar/TaskbarWindow.h b/Userland/Services/Taskbar/TaskbarWindow.h index 0e62403c612..d10f55eb486 100644 --- a/Userland/Services/Taskbar/TaskbarWindow.h +++ b/Userland/Services/Taskbar/TaskbarWindow.h @@ -7,6 +7,7 @@ #pragma once #include "ClockWidget.h" +#include "Taskbar/QuickLaunchWidget.h" #include "WindowList.h" #include #include @@ -26,9 +27,10 @@ public: static int taskbar_icon_size() { return 16; } virtual void config_string_did_change(String const&, String const&, String const&, String const&) override; + virtual void add_system_menu(NonnullRefPtr system_menu); private: - explicit TaskbarWindow(NonnullRefPtr system_menu); + explicit TaskbarWindow(); static void show_desktop_button_clicked(unsigned); static void toggle_show_desktop(); void set_quick_launch_button_data(GUI::Button&, String const&, NonnullRefPtr); @@ -49,7 +51,7 @@ private: void set_start_button_font(Gfx::Font const&); - NonnullRefPtr m_system_menu; + RefPtr m_system_menu; RefPtr m_task_button_container; RefPtr m_default_icon; @@ -57,6 +59,7 @@ private: RefPtr m_applet_area_container; RefPtr m_start_button; RefPtr m_show_desktop_button; + RefPtr m_quick_launch; RefPtr m_clock_widget; RefPtr m_assistant_app_file; diff --git a/Userland/Services/Taskbar/main.cpp b/Userland/Services/Taskbar/main.cpp index b1846ba319c..92db2e237b1 100644 --- a/Userland/Services/Taskbar/main.cpp +++ b/Userland/Services/Taskbar/main.cpp @@ -70,7 +70,8 @@ ErrorOr serenity_main(Main::Arguments arguments) auto menu = TRY(build_system_menu(window_ref)); menu->realize_menu_if_needed(); - auto window = TRY(TaskbarWindow::try_create(move(menu))); + auto window = TRY(TaskbarWindow::try_create()); + window->add_system_menu(menu); window_ref.window = window.ptr(); window->show();