1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 11:38:11 +00:00

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.
This commit is contained in:
Andreas Kling 2022-07-31 17:19:19 +02:00
parent 8862434376
commit 419e986dcc
2 changed files with 25 additions and 15 deletions

View file

@ -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();
}