[gtk+/wip/matthiasc/monitor-signals: 2/2] wayland: emit ::enter/leave-monitor



commit f58603219503d0465497c44a611916ea02df6d9b
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Nov 28 22:37:42 2017 -0500

    wayland: emit ::enter/leave-monitor
    
    These signals directly mirror the surface_enter/leave events
    of the Wayland protocol, so this is very staightforward.

 gdk/wayland/gdkdisplay-wayland.c |    7 +++++++
 gdk/wayland/gdkprivate-wayland.h |    2 ++
 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 790974b..d85028e 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 0a21c89..ed79e89 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 1ae53ad..ffe8731 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);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]