diff --git a/Libraries/LibGUI/WindowType.h b/Libraries/LibGUI/WindowType.h index 7c2c63930b..b3b2638aba 100644 --- a/Libraries/LibGUI/WindowType.h +++ b/Libraries/LibGUI/WindowType.h @@ -39,6 +39,7 @@ enum class WindowType { Menubar, MenuApplet, Notification, + Desktop, }; } diff --git a/Servers/WindowServer/ClientConnection.cpp b/Servers/WindowServer/ClientConnection.cpp index a94b9ea4ac..9047a1acc5 100644 --- a/Servers/WindowServer/ClientConnection.cpp +++ b/Servers/WindowServer/ClientConnection.cpp @@ -446,6 +446,10 @@ OwnPtr ClientConnection::handle(co window->set_title(message.title()); if (!message.fullscreen()) window->set_rect(message.rect()); + if (window->type() == WindowType::Desktop) { + window->set_rect(Screen::the().rect()); + window->recalculate_rect(); + } window->set_show_titlebar(message.show_titlebar()); window->set_opacity(message.opacity()); window->set_size_increment(message.size_increment()); diff --git a/Servers/WindowServer/WindowManager.h b/Servers/WindowServer/WindowManager.h index a415144fd4..717f8fccc9 100644 --- a/Servers/WindowServer/WindowManager.h +++ b/Servers/WindowServer/WindowManager.h @@ -309,6 +309,8 @@ IterationDecision WindowManager::for_each_visible_window_of_type_from_back_to_fr template IterationDecision WindowManager::for_each_visible_window_from_back_to_front(Callback callback) { + if (for_each_visible_window_of_type_from_back_to_front(WindowType::Desktop, callback) == IterationDecision::Break) + return IterationDecision::Break; if (for_each_visible_window_of_type_from_back_to_front(WindowType::Normal, callback) == IterationDecision::Break) return IterationDecision::Break; if (for_each_visible_window_of_type_from_back_to_front(WindowType::Taskbar, callback) == IterationDecision::Break) @@ -356,13 +358,15 @@ IterationDecision WindowManager::for_each_visible_window_from_front_to_back(Call return IterationDecision::Break; if (for_each_visible_window_of_type_from_front_to_back(WindowType::Menubar, callback) == IterationDecision::Break) return IterationDecision::Break; - if (for_each_visible_window_of_type_from_back_to_front(WindowType::Notification, callback) == IterationDecision::Break) + if (for_each_visible_window_of_type_from_front_to_back(WindowType::Notification, callback) == IterationDecision::Break) return IterationDecision::Break; if (for_each_visible_window_of_type_from_front_to_back(WindowType::Tooltip, callback) == IterationDecision::Break) return IterationDecision::Break; if (for_each_visible_window_of_type_from_front_to_back(WindowType::Taskbar, callback) == IterationDecision::Break) return IterationDecision::Break; - return for_each_visible_window_of_type_from_front_to_back(WindowType::Normal, callback); + if (for_each_visible_window_of_type_from_front_to_back(WindowType::Normal, callback) == IterationDecision::Break) + return IterationDecision::Break; + return for_each_visible_window_of_type_from_front_to_back(WindowType::Desktop, callback); } template diff --git a/Servers/WindowServer/WindowType.h b/Servers/WindowServer/WindowType.h index aafb2f19ed..a3c53007a1 100644 --- a/Servers/WindowServer/WindowType.h +++ b/Servers/WindowServer/WindowType.h @@ -37,4 +37,5 @@ enum class WindowType { Menubar, MenuApplet, Notification, + Desktop, };