diff options
author | Matthias Clasen <mclasen@redhat.com> | 2017-11-28 22:36:17 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-04-13 07:54:31 -0400 |
commit | 3ee18b88b947198a3f86e363be445e5dbb68fbca (patch) | |
tree | bbc0bc55cc2399f60b4268d662e15a2e48bbd647 | |
parent | 64b0c63190a19a080dd37268d5351c0e199cb4d2 (diff) | |
download | gtk+-3ee18b88b947198a3f86e363be445e5dbb68fbca.tar.gz |
gdk: Add ::enter/leave-monitor signals
These are useful to keep track of what monitors a window is on.
-rw-r--r-- | gdk/gdkinternals.h | 6 | ||||
-rw-r--r-- | gdk/gdksurface.c | 54 |
2 files changed, 60 insertions, 0 deletions
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); +} |