diff options
author | Alexander Larsson <alexl@redhat.com> | 2009-01-31 19:42:44 +0100 |
---|---|---|
committer | Alexander Larsson <alex@localhost.localdomain> | 2009-04-02 10:15:30 +0200 |
commit | 26cbf87d7d70e9eae4dea4667aee40c9d154184f (patch) | |
tree | 1c1c236e6fe515cd2dc2183fe50d614ccb9b3886 /gdk/gdkinternals.h | |
parent | 526ff6dd68316e67f4b5570c934c7a729d5db35a (diff) | |
download | gtk+-26cbf87d7d70e9eae4dea4667aee40c9d154184f.tar.gz |
New approach for grab tracking code
We try to track the exact grab state, i.e. whats valid on the client
now and whats comming soon via the xserver roundtrip (and when).
Diffstat (limited to 'gdk/gdkinternals.h')
-rw-r--r-- | gdk/gdkinternals.h | 49 |
1 files changed, 37 insertions, 12 deletions
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index dc7fec8c93..33822365ac 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -170,6 +170,24 @@ struct _GdkEventPrivate gpointer windowing_data; }; +/* Tracks information about the pointer grab on this display */ +typedef struct +{ + GdkWindow *window; + GdkWindow *native_window; + gulong serial_start; + gulong serial_end; /* exclusive, i.e. not active on serial_end */ + gboolean owner_events; + guint event_mask; + gboolean implicit; + gboolean converted_implicit; + guint32 time; + + gboolean activated; + gboolean implicit_ungrab; + gboolean grab_one_pointer_release_event; +} GdkPointerGrabInfo; + extern GdkEventFunc _gdk_event_func; /* Callback for events */ extern gpointer _gdk_event_data; extern GDestroyNotify _gdk_event_notify; @@ -464,18 +482,24 @@ char *_gdk_windowing_get_startup_notify_id (GAppLaunchContext *context, void _gdk_windowing_launch_failed (GAppLaunchContext *context, const char *startup_notify_id); -void _gdk_display_set_has_pointer_grab (GdkDisplay *display, - GdkWindow *window, - GdkWindow *native_window, - gboolean owner_events, - GdkEventMask event_mask, - unsigned long serial, - guint32 time, +GdkPointerGrabInfo *_gdk_display_get_active_pointer_grab (GdkDisplay *display); +void _gdk_display_pointer_grab_update (GdkDisplay *display, + gulong current_serial); +GdkPointerGrabInfo *_gdk_display_get_last_pointer_grab (GdkDisplay *display); +GdkPointerGrabInfo *_gdk_display_add_pointer_grab (GdkDisplay *display, + GdkWindow *window, + GdkWindow *native_window, + gboolean owner_events, + GdkEventMask event_mask, + unsigned long serial_start, + guint32 time, + gboolean implicit); +GdkPointerGrabInfo * _gdk_display_has_pointer_grab (GdkDisplay *display, + gulong serial); +gboolean _gdk_display_end_pointer_grab (GdkDisplay *display, + gulong serial, + GdkWindow *if_child, gboolean implicit); -void _gdk_display_unset_has_pointer_grab (GdkDisplay *display, - gboolean implicit, - gboolean do_grab_one_pointer_release_event, - guint32 time); void _gdk_display_set_has_keyboard_grab (GdkDisplay *display, GdkWindow *window, GdkWindow *native_window, @@ -518,7 +542,8 @@ void _gdk_syntesize_crossing_events (GdkDisplay *display, gint toplevel_y, GdkModifierType mask, guint32 time_, - GdkEvent *event_in_queue); + GdkEvent *event_in_queue, + gulong serial); void _gdk_display_set_window_under_pointer (GdkDisplay *display, GdkWindow *window); |