]> Pileus Git - ~andy/gtk/blobdiff - gdk/gdkinternals.h
Use gdk_window_get_root_cords to get popup position for combobox
[~andy/gtk] / gdk / gdkinternals.h
index 781a79957628ae97c7bd51be7c39e1def3176724..b6da9bb1dd2a62d5bad41a18934cba8b8d2208b2 100644 (file)
@@ -170,6 +170,109 @@ 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;
+  guint32 time;
+
+  gboolean activated;
+  gboolean implicit_ungrab;
+  gboolean grab_one_pointer_release_event;
+} GdkPointerGrabInfo;
+
+typedef struct _GdkInputWindow GdkInputWindow;
+
+/* Private version of GdkWindowObject. The initial part of this strucuture
+   is public for historical reasons. Don't change that part */
+typedef struct _GdkWindowPaint             GdkWindowPaint;
+
+struct _GdkWindowObject
+{
+  /* vvvvvvv THIS PART IS PUBLIC. DON'T CHANGE vvvvvvvvvvvvvv */
+  GdkDrawable parent_instance;
+
+  GdkDrawable *impl; /* window-system-specific delegate object */  
+  
+  GdkWindowObject *parent;
+
+  gpointer user_data;
+
+  gint x;
+  gint y;
+  
+  gint extension_events;
+
+  GList *filters;
+  GList *children;
+
+  GdkColor bg_color;
+  GdkPixmap *bg_pixmap;
+  
+  GSList *paint_stack;
+  
+  GdkRegion *update_area;
+  guint update_freeze_count;
+  
+  guint8 window_type;
+  guint8 depth;
+  guint8 resize_count;
+
+  GdkWindowState state;
+  
+  guint guffaw_gravity : 1;
+  guint input_only : 1;
+  guint modal_hint : 1;
+  guint composited : 1;
+  
+  guint destroyed : 2;
+
+  guint accept_focus : 1;
+  guint focus_on_map : 1;
+  guint shaped : 1;
+  
+  GdkEventMask event_mask;
+
+  guint update_and_descendants_freeze_count;
+
+  GdkWindowRedirect *redirect;
+
+  /* ^^^^^^^^^^ THIS PART IS PUBLIC. DON'T CHANGE ^^^^^^^^^^ */
+  
+  /* The GdkWindowObject that has the impl, ref:ed if another window.
+   * This ref is required to keep the wrapper of the impl window alive
+   * for as long as any GdkWindow references the impl. */
+  GdkWindowObject *impl_window; 
+  int abs_x, abs_y; /* Absolute offset in impl */
+  gint width, height;
+  guint32 clip_tag;
+  GdkRegion *clip_region; /* Clip region (wrt toplevel) in window coords */
+  GdkRegion *clip_region_with_children; /* Clip region in window coords */
+  GdkCursor *cursor;
+  gint8 toplevel_window_type;
+  guint effective_visibility : 2;
+  guint visibility : 2; /* The visibility wrt the toplevel (i.e. based on clip_region) */
+  guint native_visibility : 2; /* the native visibility of a impl windows */
+  guint has_offscreen_children : 1;
+
+  GdkWindowPaint *implicit_paint;
+  GdkInputWindow *input_window; /* only set for impl windows */
+
+  GList *outstanding_moves;
+
+  GdkRegion *shape;
+  GdkRegion *input_shape;
+  
+  cairo_surface_t *cairo_surface;
+};
+
+
 extern GdkEventFunc   _gdk_event_func;    /* Callback for events */
 extern gpointer       _gdk_event_data;
 extern GDestroyNotify _gdk_event_notify;
@@ -269,11 +372,6 @@ GdkPixmap *_gdk_bitmap_create_from_data  (GdkDrawable    *drawable,
                                           const gchar    *data,
                                           gint            width,
                                           gint            height);
-void       _gdk_pixmap_set_as_backing    (GdkPixmap      *pixmap,
-                                         GdkWindow      *window,
-                                         int             x_offset,
-                                         int             y_offset);
-                                         
 
 void       _gdk_window_impl_new          (GdkWindow      *window,
                                          GdkWindow      *real_parent,
@@ -300,6 +398,7 @@ void _gdk_gc_init (GdkGC           *gc,
                   GdkGCValuesMask  values_mask);
 
 GdkRegion *_gdk_gc_get_clip_region (GdkGC *gc);
+gboolean   _gdk_gc_get_exposures   (GdkGC *gc);
 GdkFill    _gdk_gc_get_fill        (GdkGC *gc);
 GdkPixmap *_gdk_gc_get_tile        (GdkGC *gc);
 GdkBitmap *_gdk_gc_get_stipple     (GdkGC *gc);
@@ -338,8 +437,8 @@ gchar *_gdk_windowing_substitute_screen_number (const gchar *display_name,
 
 gulong   _gdk_windowing_window_get_next_serial  (GdkDisplay *display);
 void     _gdk_windowing_window_get_offsets      (GdkWindow  *window,
-                                                gint       *x_offset,
-                                                gint       *y_offset);
+                                                                                                gint       *x_offset,
+                                                                                                gint       *y_offset);
 GdkRegion *_gdk_windowing_window_get_shape      (GdkWindow  *window);
 GdkRegion *_gdk_windowing_window_get_input_shape(GdkWindow  *window);
 GdkRegion *_gdk_windowing_get_shape_for_mask    (GdkBitmap *mask);
@@ -350,15 +449,17 @@ void       _gdk_windowing_get_pointer        (GdkDisplay       *display,
                                              gint             *x,
                                              gint             *y,
                                              GdkModifierType  *mask);
-GdkWindow* _gdk_windowing_window_get_pointer (GdkDisplay       *display,
-                                             GdkWindow        *window,
-                                             gint             *x,
-                                             gint             *y,
-                                             GdkModifierType  *mask);
 GdkWindow* _gdk_windowing_window_at_pointer  (GdkDisplay       *display,
                                              gint             *win_x,
                                              gint             *win_y,
                                              GdkModifierType  *mask);
+GdkGrabStatus _gdk_windowing_pointer_grab    (GdkWindow        *window,
+                                             GdkWindow        *native,
+                                             gboolean          owner_events,
+                                             GdkEventMask      event_mask,
+                                             GdkWindow        *confine_to,
+                                             GdkCursor        *cursor,
+                                             guint32           time);
 void _gdk_windowing_got_event                (GdkDisplay       *display,
                                              GList            *event_link,
                                              GdkEvent         *event,
@@ -469,18 +570,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,
@@ -502,6 +609,8 @@ void _gdk_windowing_set_cairo_surface_size (cairo_surface_t *surface,
 cairo_surface_t * _gdk_windowing_create_cairo_surface (GdkDrawable *drawable,
                                                       int width,
                                                       int height);
+GdkWindow * _gdk_window_find_child_at (GdkWindow *window,
+                                      int x, int y);
 GdkWindow * _gdk_window_find_descendant_at (GdkWindow *toplevel,
                                            double x, double y,
                                            double *found_x,
@@ -523,7 +632,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);
 
@@ -537,6 +647,10 @@ GdkRegion *_gdk_window_calculate_full_clip_region    (GdkWindow     *window,
                                                       gint          *base_y_offset);
 gboolean    _gdk_window_has_impl (GdkWindow *window);
 GdkWindow * _gdk_window_get_impl_window (GdkWindow *window);
+GdkWindow *_gdk_window_get_input_window_for_event (GdkWindow *native_window,
+                                                  GdkEventType event_type,
+                                                  int x, int y,
+                                                  gulong serial);
 GdkRegion  *_gdk_region_new_from_yxbanded_rects (GdkRectangle *rects, int n_rects);
 
 /*****************************