mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 01:07:35 +00:00
WindowServer: Introduce a WM event mask so Taskbar can ignore window rects.
Taskbar was waking up to do nothing every time a window rect changed.
This commit is contained in:
parent
ab94a6be00
commit
49e7ffc06a
10 changed files with 97 additions and 3 deletions
|
@ -30,9 +30,13 @@ public:
|
|||
FocusOut,
|
||||
WindowCloseRequest,
|
||||
ContextMenu,
|
||||
|
||||
__Begin_WM_Events,
|
||||
WM_WindowRemoved,
|
||||
WM_WindowStateChanged,
|
||||
WM_WindowRectChanged,
|
||||
WM_WindowIconChanged,
|
||||
__End_WM_Events,
|
||||
};
|
||||
|
||||
GEvent() { }
|
||||
|
@ -95,6 +99,20 @@ private:
|
|||
bool m_minimized;
|
||||
};
|
||||
|
||||
class GWMWindowRectChangedEvent : public GWMEvent {
|
||||
public:
|
||||
GWMWindowRectChangedEvent(int client_id, int window_id, const Rect& rect)
|
||||
: GWMEvent(GEvent::Type::WM_WindowRectChanged, client_id, window_id)
|
||||
, m_rect(rect)
|
||||
{
|
||||
}
|
||||
|
||||
Rect rect() const { return m_rect; }
|
||||
|
||||
private:
|
||||
Rect m_rect;
|
||||
};
|
||||
|
||||
class GWMWindowIconChangedEvent : public GWMEvent {
|
||||
public:
|
||||
GWMWindowIconChangedEvent(int client_id, int window_id, const String& icon_path)
|
||||
|
|
|
@ -175,6 +175,8 @@ void GEventLoop::handle_wm_event(const WSAPI_ServerMessage& event, GWindow& wind
|
|||
#endif
|
||||
if (event.type == WSAPI_ServerMessage::WM_WindowStateChanged)
|
||||
return post_event(window, make<GWMWindowStateChangedEvent>(event.wm.client_id, event.wm.window_id, String(event.text, event.text_length), event.wm.rect, event.wm.is_active, (GWindowType)event.wm.window_type, event.wm.is_minimized));
|
||||
if (event.type == WSAPI_ServerMessage::WM_WindowRectChanged)
|
||||
return post_event(window, make<GWMWindowRectChangedEvent>(event.wm.client_id, event.wm.window_id, event.wm.rect));
|
||||
if (event.type == WSAPI_ServerMessage::WM_WindowIconChanged)
|
||||
return post_event(window, make<GWMWindowIconChangedEvent>(event.wm.client_id, event.wm.window_id, String(event.text, event.text_length)));
|
||||
if (event.type == WSAPI_ServerMessage::WM_WindowRemoved)
|
||||
|
|
|
@ -277,7 +277,7 @@ void GWindow::event(CEvent& event)
|
|||
return;
|
||||
}
|
||||
|
||||
if (event.type() == GEvent::WM_WindowRemoved || event.type() == GEvent::WM_WindowStateChanged || event.type() == GEvent::WM_WindowIconChanged)
|
||||
if (event.type() > GEvent::__Begin_WM_Events && event.type() < GEvent::__End_WM_Events)
|
||||
return wm_event(static_cast<GWMEvent&>(event));
|
||||
|
||||
CObject::event(event);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue