[gtk/wip/matthiasc/monitor-signals: 9388/9389] gdk: Add ::enter/leave-monitor signals



commit 3ee18b88b947198a3f86e363be445e5dbb68fbca
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Nov 28 22:36:17 2017 -0500

    gdk: Add ::enter/leave-monitor signals
    
    These are useful to keep track of what monitors a window is on.

 gdk/gdkinternals.h |  6 ++++++
 gdk/gdksurface.c   | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)
---
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h
index 30715af56e..096b89aec5 100644
--- a/gdk/gdkinternals.h
+++ b/gdk/gdkinternals.h
@@ -185,6 +185,11 @@ gboolean gdk_surface_handle_event (GdkEvent       *event);
 GdkSeat * gdk_surface_get_seat_from_event (GdkSurface *surface,
                                            GdkEvent    *event);
 
+void       gdk_surface_enter_monitor (GdkSurface *surface,
+                                      GdkMonitor *monitor);
+void       gdk_surface_leave_monitor (GdkSurface *surface,
+                                      GdkMonitor *monitor);
+
 /*****************************************
  * Interfaces provided by windowing code *
  *****************************************/
@@ -296,6 +301,7 @@ void gdk_surface_get_geometry (GdkSurface *surface,
 
 GdkGLContext *gdk_surface_get_shared_data_gl_context (GdkSurface *surface);
 
+
 /*
  * GdkSeatGrabPrepareFunc:
  * @seat: the #GdkSeat being grabbed
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index 9dae9a93b5..c02c66b66b 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -76,6 +76,8 @@ enum {
   SIZE_CHANGED,
   RENDER,
   EVENT,
+  ENTER_MONITOR,
+  LEAVE_MONITOR,
   LAST_SIGNAL
 };
 
@@ -532,6 +534,44 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
   g_signal_set_va_marshaller (signals[EVENT],
                               G_OBJECT_CLASS_TYPE (object_class),
                               _gdk_marshal_BOOLEAN__BOXEDv);
+
+  /**
+   * GdkSurface::enter-montor:
+   * @surface: the #GdkSurface
+   * @monitor: the monitor
+   *
+   * Emitted when @surface starts being present on the monitor.
+   */ 
+  signals[ENTER_MONITOR] =
+    g_signal_new (g_intern_static_string ("enter-monitor"),
+                  G_OBJECT_CLASS_TYPE (object_class),
+                  G_SIGNAL_RUN_FIRST,
+                  0,
+                  NULL,
+                  NULL,
+                  NULL,
+                  G_TYPE_NONE,
+                  1,
+                  GDK_TYPE_MONITOR);
+
+  /**
+   * GdkSurface::leave-montor:
+   * @surface: the #GdkSurface
+   * @monitor: the monitor
+   *
+   * Emitted when @surface stops being present on the monitor.
+   */ 
+  signals[LEAVE_MONITOR] =
+    g_signal_new (g_intern_static_string ("leave-monitor"),
+                  G_OBJECT_CLASS_TYPE (object_class),
+                  G_SIGNAL_RUN_FIRST,
+                  0,
+                  NULL,
+                  NULL,
+                  NULL,
+                  G_TYPE_NONE,
+                  1,
+                  GDK_TYPE_MONITOR);
 }
 
 static void
@@ -3035,3 +3075,17 @@ gdk_surface_get_seat_from_event (GdkSurface *surface,
     }
   return gdk_display_get_default_seat (surface->display);
 }
+
+void
+gdk_surface_enter_monitor (GdkSurface *surface,
+                           GdkMonitor *monitor)
+{
+  g_signal_emit (surface, signals[ENTER_MONITOR], 0, monitor);
+}
+
+void
+gdk_surface_leave_monitor (GdkSurface *surface,
+                           GdkMonitor *monitor)
+{
+  g_signal_emit (surface, signals[LEAVE_MONITOR], 0, monitor);
+}


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