Browse Source

WorkspacePicker: Hide tray applet entirely when there's only 1 workspace

Instead of collapsing to a 1x1 applet, we now hide the applet window
entirely, which stops it from taking up space in the system tray.
Andreas Kling 3 years ago
parent
commit
419e986dcc

+ 0 - 9
Userland/Applets/WorkspacePicker/DesktopStatusWindow.cpp

@@ -113,15 +113,6 @@ private:
 
 DesktopStatusWindow::DesktopStatusWindow()
 {
-    GUI::Desktop::the().on_receive_screen_rects([&](GUI::Desktop&) {
-        auto& desktop = GUI::Desktop::the();
-        if (desktop.workspace_rows() == 1 && desktop.workspace_columns() == 1)
-            resize(0, 0);
-        else
-            resize(28, 16);
-
-        update();
-    });
     set_window_type(GUI::WindowType::Applet);
     set_has_alpha_channel(true);
     m_widget = &set_main_widget<DesktopStatusWidget>();

+ 25 - 6
Userland/Applets/WorkspacePicker/main.cpp

@@ -18,6 +18,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
     TRY(Core::System::pledge("stdio recvfd sendfd rpath unix"));
 
     auto app = TRY(GUI::Application::try_create(arguments));
+    app->set_quit_when_last_window_deleted(false);
 
     // We need to obtain the WM connection here as well before the pledge shortening.
     GUI::ConnectionToWindowManagerServer::the();
@@ -26,15 +27,33 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
 
     auto window = TRY(DesktopStatusWindow::try_create());
     window->set_title("WorkspacePicker");
+    window->resize(28, 16);
 
     auto& desktop = GUI::Desktop::the();
-    if (desktop.workspace_rows() == 1 && desktop.workspace_columns() == 1)
-        window->resize(0, 0);
-    else
-        window->resize(28, 16);
 
-    window->show();
-    window->make_window_manager(WindowServer::WMEventMask::WorkspaceChanges);
+    auto hide_tray_icon = [&] {
+        window->hide();
+    };
+
+    auto show_tray_icon = [&] {
+        if (!window->is_visible()) {
+            window->show();
+            window->make_window_manager(WindowServer::WMEventMask::WorkspaceChanges);
+        }
+    };
+
+    if (desktop.workspace_rows() != 1 || desktop.workspace_columns() != 1) {
+        show_tray_icon();
+    }
+
+    desktop.on_receive_screen_rects([&](auto&) {
+        if (desktop.workspace_rows() == 1 && desktop.workspace_columns() == 1) {
+            hide_tray_icon();
+        } else {
+            window->update();
+            show_tray_icon();
+        }
+    });
 
     return app->exec();
 }