diff options
author | William Hua <william.hua@canonical.com> | 2016-10-14 17:00:34 -0400 |
---|---|---|
committer | William Hua <william.hua@canonical.com> | 2017-01-05 17:57:36 -0500 |
commit | 440e80c832b8ef2fd3d8a73993c9fa8ba6192fa2 (patch) | |
tree | e413b80b464480f60a82076bb070d38153ed7249 /gdk | |
parent | ed0bd0bba29114a893b1355f799f6568dddf5d9a (diff) | |
download | gtk+-440e80c832b8ef2fd3d8a73993c9fa8ba6192fa2.tar.gz |
mir: track focused window
https://bugzilla.gnome.org/show_bug.cgi?id=775732
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/mir/gdkmir-private.h | 4 | ||||
-rw-r--r-- | gdk/mir/gdkmirdisplay.c | 21 | ||||
-rw-r--r-- | 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; |