diff options
author | Matthias Clasen <mclasen@redhat.com> | 2017-11-28 22:37:42 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2017-11-28 22:37:42 -0500 |
commit | f58603219503d0465497c44a611916ea02df6d9b (patch) | |
tree | 243a2a0ee9246af34097df69f68795bc7a163856 | |
parent | 2287e936f38155aef7a40453c300a0a7fd94a8af (diff) | |
download | gtk+-wip/matthiasc/monitor-signals.tar.gz |
wayland: emit ::enter/leave-monitorwip/matthiasc/monitor-signals
These signals directly mirror the surface_enter/leave events
of the Wayland protocol, so this is very staightforward.
-rw-r--r-- | gdk/wayland/gdkdisplay-wayland.c | 7 | ||||
-rw-r--r-- | gdk/wayland/gdkprivate-wayland.h | 2 | ||||
-rw-r--r-- | gdk/wayland/gdkwindow-wayland.c | 12 |
3 files changed, 21 insertions, 0 deletions
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c index 790974b209..d85028eaf7 100644 --- a/gdk/wayland/gdkdisplay-wayland.c +++ b/gdk/wayland/gdkdisplay-wayland.c @@ -2086,6 +2086,13 @@ get_monitor_for_output (GdkWaylandDisplay *display_wayland, return NULL; } +GdkMonitor * +gdk_wayland_display_get_monitor_for_output (GdkDisplay *display, + struct wl_output *output) +{ + return (GdkMonitor *)get_monitor_for_output (GDK_WAYLAND_DISPLAY (display), output); +} + static void gdk_wayland_display_remove_output (GdkWaylandDisplay *display_wayland, guint32 id) diff --git a/gdk/wayland/gdkprivate-wayland.h b/gdk/wayland/gdkprivate-wayland.h index 0a21c89ed4..ed79e8992a 100644 --- a/gdk/wayland/gdkprivate-wayland.h +++ b/gdk/wayland/gdkprivate-wayland.h @@ -208,6 +208,8 @@ guint32 gdk_wayland_display_get_output_scale (GdkWaylandDisplay *display_wayland struct wl_output *output); struct wl_output *gdk_wayland_display_get_wl_output (GdkDisplay *display, int monitor_num); +GdkMonitor *gdk_wayland_display_get_monitor_for_output (GdkDisplay *display, + struct wl_output *output); void _gdk_wayland_window_set_grab_seat (GdkWindow *window, GdkSeat *seat); diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index 1ae53ad975..ffe8731940 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -1193,12 +1193,18 @@ surface_enter (void *data, { GdkWindow *window = GDK_WINDOW (data); GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl); + GdkDisplay *display; + GdkMonitor *monitor; GDK_NOTE (EVENTS, g_message ("surface enter, window %p output %p", window, output)); impl->display_server.outputs = g_slist_prepend (impl->display_server.outputs, output); + display = gdk_window_get_display (window); + monitor = gdk_wayland_display_get_monitor_for_output (display, output); + gdk_window_enter_monitor (window, monitor); + gdk_wayland_window_update_scale (window); } @@ -1209,12 +1215,18 @@ surface_leave (void *data, { GdkWindow *window = GDK_WINDOW (data); GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl); + GdkDisplay *display; + GdkMonitor *monitor; GDK_NOTE (EVENTS, g_message ("surface leave, window %p output %p", window, output)); impl->display_server.outputs = g_slist_remove (impl->display_server.outputs, output); + display = gdk_window_get_display (window); + monitor = gdk_wayland_display_get_monitor_for_output (display, output); + gdk_window_leave_monitor (window, monitor); + if (impl->display_server.outputs) gdk_wayland_window_update_scale (window); } |