mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:58:12 +00:00
LibGUI: Add ScreenRectChangeEvent and deliver it to windows and widgets
Having to rely on GUI::Desktop's on_rect_change is quite limiting and a bit awkward (continuing to use it would mean having to setup the callback in every application using a webview) - we need a better way of letting widgets know of a screen rect change automatically. The specific use case will be IPWV/OOPWV which need to keep track of the screen rect and notify the WebContent service of any change (which on its own deliberately can't interact with WindowServer at all). It'll also be useful for notification windows and the taskbar, which currently both rely on the GUI::Desktop callback but will now be able to listen and react to the event themselves.
This commit is contained in:
parent
a5db11c1f0
commit
5367bbb82c
7 changed files with 49 additions and 0 deletions
|
@ -507,6 +507,22 @@ void Window::handle_theme_change_event(ThemeChangeEvent& event)
|
|||
dispatch_theme_change(*m_main_widget.ptr(), dispatch_theme_change);
|
||||
}
|
||||
|
||||
void Window::handle_screen_rect_change_event(ScreenRectChangeEvent& event)
|
||||
{
|
||||
if (!m_main_widget)
|
||||
return;
|
||||
auto dispatch_screen_rect_change = [&](auto& widget, auto recursive) {
|
||||
widget.dispatch_event(event, this);
|
||||
widget.for_each_child_widget([&](auto& widget) -> IterationDecision {
|
||||
widget.dispatch_event(event, this);
|
||||
recursive(widget, recursive);
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
};
|
||||
dispatch_screen_rect_change(*m_main_widget.ptr(), dispatch_screen_rect_change);
|
||||
screen_rect_change_event(event);
|
||||
}
|
||||
|
||||
void Window::handle_drag_move_event(DragEvent& event)
|
||||
{
|
||||
if (!m_main_widget)
|
||||
|
@ -574,6 +590,9 @@ void Window::event(Core::Event& event)
|
|||
if (event.type() == Event::ThemeChange)
|
||||
return handle_theme_change_event(static_cast<ThemeChangeEvent&>(event));
|
||||
|
||||
if (event.type() == Event::ScreenRectChange)
|
||||
return handle_screen_rect_change_event(static_cast<ScreenRectChangeEvent&>(event));
|
||||
|
||||
Core::Object::event(event);
|
||||
}
|
||||
|
||||
|
@ -799,6 +818,10 @@ void Window::wm_event(WMEvent&)
|
|||
{
|
||||
}
|
||||
|
||||
void Window::screen_rect_change_event(ScreenRectChangeEvent&)
|
||||
{
|
||||
}
|
||||
|
||||
void Window::set_icon(const Gfx::Bitmap* icon)
|
||||
{
|
||||
if (m_icon == icon)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue