mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 14:17:42 +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:
parent
8862434376
commit
419e986dcc
2 changed files with 25 additions and 15 deletions
|
@ -113,15 +113,6 @@ private:
|
||||||
|
|
||||||
DesktopStatusWindow::DesktopStatusWindow()
|
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_window_type(GUI::WindowType::Applet);
|
||||||
set_has_alpha_channel(true);
|
set_has_alpha_channel(true);
|
||||||
m_widget = &set_main_widget<DesktopStatusWidget>();
|
m_widget = &set_main_widget<DesktopStatusWidget>();
|
||||||
|
|
|
@ -18,6 +18,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
TRY(Core::System::pledge("stdio recvfd sendfd rpath unix"));
|
TRY(Core::System::pledge("stdio recvfd sendfd rpath unix"));
|
||||||
|
|
||||||
auto app = TRY(GUI::Application::try_create(arguments));
|
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.
|
// We need to obtain the WM connection here as well before the pledge shortening.
|
||||||
GUI::ConnectionToWindowManagerServer::the();
|
GUI::ConnectionToWindowManagerServer::the();
|
||||||
|
@ -26,15 +27,33 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
|
|
||||||
auto window = TRY(DesktopStatusWindow::try_create());
|
auto window = TRY(DesktopStatusWindow::try_create());
|
||||||
window->set_title("WorkspacePicker");
|
window->set_title("WorkspacePicker");
|
||||||
|
window->resize(28, 16);
|
||||||
|
|
||||||
auto& desktop = GUI::Desktop::the();
|
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();
|
auto hide_tray_icon = [&] {
|
||||||
window->make_window_manager(WindowServer::WMEventMask::WorkspaceChanges);
|
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();
|
return app->exec();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue