From 440e80c832b8ef2fd3d8a73993c9fa8ba6192fa2 Mon Sep 17 00:00:00 2001 From: William Hua Date: Fri, 14 Oct 2016 17:00:34 -0400 Subject: [PATCH] mir: track focused window https://bugzilla.gnome.org/show_bug.cgi?id=775732 --- gdk/mir/gdkmir-private.h | 4 ++++ gdk/mir/gdkmirdisplay.c | 21 +++++++++++++++++++++ gdk/mir/gdkmireventsource.c | 10 ++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/gdk/mir/gdkmir-private.h b/gdk/mir/gdkmir-private.h index 69f927fab9..0ccf28e0b3 100644 --- a/gdk/mir/gdkmir-private.h +++ b/gdk/mir/gdkmir-private.h @@ -107,6 +107,10 @@ void _gdk_mir_event_source_queue (GdkMirWindowReference *window_ref, const MirEv MirPixelFormat _gdk_mir_display_get_pixel_format (GdkDisplay *display, MirBufferUsage usage); +void _gdk_mir_display_focus_window (GdkDisplay *display, GdkWindow *window); + +void _gdk_mir_display_unfocus_window (GdkDisplay *display, GdkWindow *window); + gboolean _gdk_mir_display_init_egl_display (GdkDisplay *display); EGLDisplay _gdk_mir_display_get_egl_display (GdkDisplay *display); diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c index 77fa665b71..0e37794afe 100644 --- a/gdk/mir/gdkmirdisplay.c +++ b/gdk/mir/gdkmirdisplay.c @@ -51,6 +51,8 @@ typedef struct GdkMirDisplay GdkKeymap *keymap; + GdkWindow *focused_window; + MirPixelFormat sw_pixel_format; MirPixelFormat hw_pixel_format; @@ -622,6 +624,25 @@ _gdk_mir_display_get_pixel_format (GdkDisplay *display, return mir_dpy->sw_pixel_format; } +void +_gdk_mir_display_focus_window (GdkDisplay *display, + GdkWindow *window) +{ + GdkMirDisplay *mir_display = GDK_MIR_DISPLAY (display); + + g_set_object (&mir_display->focused_window, window); +} + +void +_gdk_mir_display_unfocus_window (GdkDisplay *display, + GdkWindow *window) +{ + GdkMirDisplay *mir_display = GDK_MIR_DISPLAY (display); + + if (window == mir_display->focused_window) + g_clear_object (&mir_display->focused_window); +} + gboolean _gdk_mir_display_init_egl_display (GdkDisplay *display) { diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c index 8c7e106370..a2a1a128b7 100644 --- a/gdk/mir/gdkmireventsource.c +++ b/gdk/mir/gdkmireventsource.c @@ -240,9 +240,15 @@ generate_focus_event (GdkWindow *window, gboolean focused) GdkEvent *event; if (focused) - gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FOCUSED); + { + gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FOCUSED); + _gdk_mir_display_focus_window (gdk_window_get_display (window), window); + } else - gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FOCUSED, 0); + { + gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FOCUSED, 0); + _gdk_mir_display_unfocus_window (gdk_window_get_display (window), window); + } event = gdk_event_new (GDK_FOCUS_CHANGE); event->focus_change.send_event = FALSE;