mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 07:07:45 +00:00
Taskbar: Only show the current desktop's window buttons
By tracking what virtual desktop a window is on, and what desktop is being viewed we can show or hide the window buttons accordingly.
This commit is contained in:
parent
5acee4b4d0
commit
cc707270ae
4 changed files with 40 additions and 1 deletions
|
@ -221,6 +221,7 @@ void TaskbarWindow::update_window_button(::Window& window, bool show_as_active)
|
||||||
button->set_text(window.title());
|
button->set_text(window.title());
|
||||||
button->set_tooltip(window.title());
|
button->set_tooltip(window.title());
|
||||||
button->set_checked(show_as_active);
|
button->set_checked(show_as_active);
|
||||||
|
button->set_visible(is_window_on_current_virtual_desktop(window));
|
||||||
}
|
}
|
||||||
|
|
||||||
::Window* TaskbarWindow::find_window_owner(::Window& window) const
|
::Window* TaskbarWindow::find_window_owner(::Window& window) const
|
||||||
|
@ -304,6 +305,7 @@ void TaskbarWindow::wm_event(GUI::WMEvent& event)
|
||||||
window.set_active(changed_event.is_active());
|
window.set_active(changed_event.is_active());
|
||||||
window.set_minimized(changed_event.is_minimized());
|
window.set_minimized(changed_event.is_minimized());
|
||||||
window.set_progress(changed_event.progress());
|
window.set_progress(changed_event.progress());
|
||||||
|
window.set_virtual_desktop(changed_event.virtual_desktop_row(), changed_event.virtual_desktop_column());
|
||||||
|
|
||||||
auto* window_owner = find_window_owner(window);
|
auto* window_owner = find_window_owner(window);
|
||||||
if (window_owner == &window) {
|
if (window_owner == &window) {
|
||||||
|
@ -336,6 +338,10 @@ void TaskbarWindow::wm_event(GUI::WMEvent& event)
|
||||||
warnln("failed to spawn 'Assistant' when requested via Super+Space");
|
warnln("failed to spawn 'Assistant' when requested via Super+Space");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GUI::Event::WM_VirtualDesktopChanged: {
|
||||||
|
auto& changed_event = static_cast<GUI::WMVirtualDesktopChangedEvent&>(event);
|
||||||
|
virtual_desktop_change_event(changed_event.current_row(), changed_event.current_column());
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -345,3 +351,19 @@ void TaskbarWindow::screen_rects_change_event(GUI::ScreenRectsChangeEvent& event
|
||||||
{
|
{
|
||||||
on_screen_rects_change(event.rects(), event.main_screen_index());
|
on_screen_rects_change(event.rects(), event.main_screen_index());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TaskbarWindow::is_window_on_current_virtual_desktop(::Window& window) const
|
||||||
|
{
|
||||||
|
return window.virtual_desktop_row() == m_current_virtual_desktop_row && window.virtual_desktop_column() == m_current_virtual_desktop_column;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskbarWindow::virtual_desktop_change_event(unsigned current_row, unsigned current_column)
|
||||||
|
{
|
||||||
|
m_current_virtual_desktop_row = current_row;
|
||||||
|
m_current_virtual_desktop_column = current_column;
|
||||||
|
|
||||||
|
WindowList::the().for_each_window([&](auto& window) {
|
||||||
|
if (auto* button = window.button())
|
||||||
|
button->set_visible(is_window_on_current_virtual_desktop(window));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -34,6 +34,9 @@ private:
|
||||||
|
|
||||||
void update_applet_area();
|
void update_applet_area();
|
||||||
|
|
||||||
|
bool is_window_on_current_virtual_desktop(::Window&) const;
|
||||||
|
void virtual_desktop_change_event(unsigned, unsigned);
|
||||||
|
|
||||||
NonnullRefPtr<GUI::Menu> m_start_menu;
|
NonnullRefPtr<GUI::Menu> m_start_menu;
|
||||||
RefPtr<GUI::Widget> m_task_button_container;
|
RefPtr<GUI::Widget> m_task_button_container;
|
||||||
RefPtr<Gfx::Bitmap> m_default_icon;
|
RefPtr<Gfx::Bitmap> m_default_icon;
|
||||||
|
@ -43,4 +46,7 @@ private:
|
||||||
RefPtr<GUI::Button> m_start_button;
|
RefPtr<GUI::Button> m_start_button;
|
||||||
|
|
||||||
RefPtr<Desktop::AppFile> m_assistant_app_file;
|
RefPtr<Desktop::AppFile> m_assistant_app_file;
|
||||||
|
|
||||||
|
unsigned m_current_virtual_desktop_row { 0 };
|
||||||
|
unsigned m_current_virtual_desktop_column { 0 };
|
||||||
};
|
};
|
||||||
|
|
|
@ -48,6 +48,14 @@ public:
|
||||||
void set_modal(bool modal) { m_modal = modal; }
|
void set_modal(bool modal) { m_modal = modal; }
|
||||||
bool is_modal() const { return m_modal; }
|
bool is_modal() const { return m_modal; }
|
||||||
|
|
||||||
|
void set_virtual_desktop(unsigned row, unsigned column)
|
||||||
|
{
|
||||||
|
m_virtual_desktop_row = row;
|
||||||
|
m_virtual_desktop_column = column;
|
||||||
|
}
|
||||||
|
unsigned virtual_desktop_row() const { return m_virtual_desktop_row; }
|
||||||
|
unsigned virtual_desktop_column() const { return m_virtual_desktop_column; }
|
||||||
|
|
||||||
void set_progress(Optional<int> progress)
|
void set_progress(Optional<int> progress)
|
||||||
{
|
{
|
||||||
if (m_progress == progress)
|
if (m_progress == progress)
|
||||||
|
@ -68,6 +76,8 @@ private:
|
||||||
Gfx::IntRect m_rect;
|
Gfx::IntRect m_rect;
|
||||||
RefPtr<GUI::Button> m_button;
|
RefPtr<GUI::Button> m_button;
|
||||||
RefPtr<Gfx::Bitmap> m_icon;
|
RefPtr<Gfx::Bitmap> m_icon;
|
||||||
|
unsigned m_virtual_desktop_row { 0 };
|
||||||
|
unsigned m_virtual_desktop_column { 0 };
|
||||||
bool m_active { false };
|
bool m_active { false };
|
||||||
bool m_minimized { false };
|
bool m_minimized { false };
|
||||||
bool m_modal { false };
|
bool m_modal { false };
|
||||||
|
|
|
@ -60,7 +60,8 @@ int main(int argc, char** argv)
|
||||||
window->make_window_manager(
|
window->make_window_manager(
|
||||||
WindowServer::WMEventMask::WindowStateChanges
|
WindowServer::WMEventMask::WindowStateChanges
|
||||||
| WindowServer::WMEventMask::WindowRemovals
|
| WindowServer::WMEventMask::WindowRemovals
|
||||||
| WindowServer::WMEventMask::WindowIconChanges);
|
| WindowServer::WMEventMask::WindowIconChanges
|
||||||
|
| WindowServer::WMEventMask::VirtualDesktopChanges);
|
||||||
|
|
||||||
return app->exec();
|
return app->exec();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue