1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-23 11:55:08 +00:00
serenity/Userland/Services/WindowServer/WindowClient.ipc
thankyouverycool 463aff827e LibGUI+WindowServer: Notify Windows on input preemption
Previously Menus set themselves as active input solely to make
sure CaptureInput modals would close, but this is a functional
half-truth. Menus don't actually use the active input role; they
preempt normal Windows during event handling instead.

Now the active input window is notified on preemption and Menus
can remain outside the active input concept. This lets us make
more granular choices about modal behavior. For now, the only
thing clients care about is menu preemption on popup.

Fixes windows which close on changes to active input closing
on their own context menus.
2022-09-08 23:21:54 +01:00

50 lines
2.9 KiB
Text

#include <LibCore/AnonymousBuffer.h>
#include <LibGfx/ShareableBitmap.h>
endpoint WindowClient
{
fast_greet(Vector<Gfx::IntRect> screen_rects, u32 main_screen_index, u32 workspace_rows, u32 workspace_columns, Core::AnonymousBuffer theme_buffer, String default_font_query, String fixed_width_font_query, String window_title_font_query, Vector<bool> effects, i32 client_id) =|
paint(i32 window_id, Gfx::IntSize window_size, Vector<Gfx::IntRect> rects) =|
mouse_move(i32 window_id, Gfx::IntPoint mouse_position, u32 button, u32 buttons, u32 modifiers, i32 wheel_delta_x, i32 wheel_delta_y, i32 wheel_raw_delta_x, i32 wheel_raw_delta_y, bool is_drag, Vector<String> mime_types) =|
mouse_down(i32 window_id, Gfx::IntPoint mouse_position, u32 button, u32 buttons, u32 modifiers, i32 wheel_delta_x, i32 wheel_delta_y, i32 wheel_raw_delta_x, i32 wheel_raw_delta_y) =|
mouse_double_click(i32 window_id, Gfx::IntPoint mouse_position, u32 button, u32 buttons, u32 modifiers, i32 wheel_delta_x, i32 wheel_delta_y, i32 wheel_raw_delta_x, i32 wheel_raw_delta_y) =|
mouse_up(i32 window_id, Gfx::IntPoint mouse_position, u32 button, u32 buttons, u32 modifiers, i32 wheel_delta_x, i32 wheel_delta_y, i32 wheel_raw_delta_x, i32 wheel_raw_delta_y) =|
mouse_wheel(i32 window_id, Gfx::IntPoint mouse_position, u32 button, u32 buttons, u32 modifiers, i32 wheel_delta_x, i32 wheel_delta_y, i32 wheel_raw_delta_x, i32 wheel_raw_delta_y) =|
window_entered(i32 window_id) =|
window_left(i32 window_id) =|
window_input_entered(i32 window_id) =|
window_input_left(i32 window_id) =|
key_down(i32 window_id, u32 code_point, u32 key, u32 modifiers, u32 scancode) =|
key_up(i32 window_id, u32 code_point, u32 key, u32 modifiers, u32 scancode) =|
window_activated(i32 window_id) =|
window_deactivated(i32 window_id) =|
window_state_changed(i32 window_id, bool minimized, bool maximized, bool occluded) =|
window_input_preempted(i32 window_id, i32 preemptor) =|
window_close_request(i32 window_id) =|
window_resized(i32 window_id, Gfx::IntRect new_rect) =|
menu_item_activated(i32 menu_id, u32 identifier) =|
menu_item_entered(i32 menu_id, u32 identifier) =|
menu_item_left(i32 menu_id, u32 identifier) =|
menu_visibility_did_change(i32 menu_id, bool visible) =|
screen_rects_changed(Vector<Gfx::IntRect> rects, u32 main_screen_index, u32 workspace_rows, u32 workspace_columns) =|
applet_area_rect_changed(Gfx::IntRect rect) =|
drag_accepted() =|
drag_cancelled() =|
drag_dropped(i32 window_id, Gfx::IntPoint mouse_position, [UTF8] String text, HashMap<String,ByteBuffer> mime_data) =|
update_system_theme(Core::AnonymousBuffer theme_buffer) =|
update_system_fonts(String default_font_query, String fixed_width_font_query, String window_title_font_query) =|
update_system_effects(Vector<bool> effects) =|
display_link_notification() =|
track_mouse_move(Gfx::IntPoint mouse_position) =|
ping() =|
}