Serenity Operating System
at master 73 lines 2.5 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include "ClockWidget.h" 10#include "WindowList.h" 11#include <AK/NonnullRefPtr.h> 12#include <LibConfig/Listener.h> 13#include <LibDesktop/AppFile.h> 14#include <LibGUI/Widget.h> 15#include <LibGUI/Window.h> 16#include <LibGfx/ShareableBitmap.h> 17#include <Services/Taskbar/QuickLaunchWidget.h> 18#include <Services/WindowServer/ScreenLayout.h> 19 20class TaskbarWindow final : public GUI::Window 21 , public Config::Listener { 22 C_OBJECT(TaskbarWindow); 23 24public: 25 static ErrorOr<NonnullRefPtr<TaskbarWindow>> create(); 26 virtual ~TaskbarWindow() override = default; 27 28 static int taskbar_height() { return 27; } 29 static int taskbar_icon_size() { return 16; } 30 31 virtual void config_string_did_change(DeprecatedString const&, DeprecatedString const&, DeprecatedString const&, DeprecatedString const&) override; 32 virtual void add_system_menu(NonnullRefPtr<GUI::Menu> system_menu); 33 34private: 35 explicit TaskbarWindow(); 36 static void show_desktop_button_clicked(unsigned); 37 static void toggle_show_desktop(); 38 void on_screen_rects_change(Vector<Gfx::IntRect, 4> const&, size_t); 39 NonnullRefPtr<GUI::Button> create_button(WindowIdentifier const&); 40 void add_window_button(::Window&, WindowIdentifier const&); 41 void remove_window_button(::Window&, bool); 42 void update_window_button(::Window&, bool); 43 44 ErrorOr<void> populate_taskbar(); 45 ErrorOr<void> load_assistant(); 46 47 virtual void event(Core::Event&) override; 48 virtual void wm_event(GUI::WMEvent&) override; 49 virtual void screen_rects_change_event(GUI::ScreenRectsChangeEvent&) override; 50 51 void update_applet_area(); 52 53 bool is_window_on_current_workspace(::Window&) const; 54 void workspace_change_event(unsigned, unsigned); 55 56 void set_start_button_font(Gfx::Font const&); 57 58 RefPtr<GUI::Menu> m_system_menu; 59 RefPtr<GUI::Widget> m_task_button_container; 60 RefPtr<Gfx::Bitmap> m_default_icon; 61 62 Gfx::IntSize m_applet_area_size; 63 RefPtr<GUI::Frame> m_applet_area_container; 64 RefPtr<GUI::Button> m_start_button; 65 RefPtr<GUI::Button> m_show_desktop_button; 66 RefPtr<Taskbar::QuickLaunchWidget> m_quick_launch; 67 RefPtr<Taskbar::ClockWidget> m_clock_widget; 68 69 RefPtr<Desktop::AppFile> m_assistant_app_file; 70 71 unsigned m_current_workspace_row { 0 }; 72 unsigned m_current_workspace_column { 0 }; 73};