static void handle_window_event (GdkWindow *window, const MirWindowEvent *event) { GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl); MirWindowState state; switch (mir_window_event_get_attribute (event)) { case mir_window_attrib_type: _gdk_mir_window_impl_set_window_type (impl, mir_window_event_get_attribute_value (event)); break; case mir_window_attrib_state: state = mir_window_event_get_attribute_value (event); _gdk_mir_window_impl_set_window_state (impl, state); switch (state) { case mir_window_state_restored: case mir_window_state_hidden: gdk_synthesize_window_state (window, GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN, 0); break; case mir_window_state_minimized: gdk_synthesize_window_state (window, GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN, GDK_WINDOW_STATE_ICONIFIED); break; case mir_window_state_maximized: case mir_window_state_vertmaximized: case mir_window_state_horizmaximized: gdk_synthesize_window_state (window, GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_FULLSCREEN, GDK_WINDOW_STATE_MAXIMIZED); break; case mir_window_state_fullscreen: gdk_synthesize_window_state (window, GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_MAXIMIZED, GDK_WINDOW_STATE_FULLSCREEN); break; default: break; } break; case mir_window_attrib_swapinterval: break; case mir_window_attrib_focus: generate_focus_event (window, mir_window_event_get_attribute_value (event) != 0); break; default: break; } }
static void generate_focus_event (GdkWindow *window, gboolean focused) { GdkEvent *event; if (focused) gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FOCUSED); else gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FOCUSED, 0); event = gdk_event_new (GDK_FOCUS_CHANGE); event->focus_change.send_event = FALSE; event->focus_change.in = focused; send_event (window, get_pointer (window), event); }