X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gdk%2Fgdkinternals.h;h=694391d83c1bf910a791e46d2722647d70fad93a;hb=fc170551b6ffb57d9be6386a5d4d526bdca5bc68;hp=a37f9e8937f41869c7e5f9cb073052f436a3622b;hpb=532818909c861bee6fa0f381894140f961ad4b81;p=~andy%2Fgtk diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index a37f9e893..694391d83 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -77,36 +77,24 @@ typedef enum { GDK_DEBUG_XIM = 1 << 3, GDK_DEBUG_NOGRABS = 1 << 4, GDK_DEBUG_COLORMAP = 1 << 5, - GDK_DEBUG_GDKRGB = 1 << 6, - GDK_DEBUG_GC = 1 << 7, - GDK_DEBUG_PIXMAP = 1 << 8, - GDK_DEBUG_IMAGE = 1 << 9, - GDK_DEBUG_INPUT = 1 <<10, - GDK_DEBUG_CURSOR = 1 <<11, - GDK_DEBUG_MULTIHEAD = 1 <<12, - GDK_DEBUG_XINERAMA = 1 <<13, - GDK_DEBUG_DRAW = 1 <<14, - GDK_DEBUG_EVENTLOOP = 1 <<15 + GDK_DEBUG_GC = 1 << 6, + GDK_DEBUG_PIXMAP = 1 << 7, + GDK_DEBUG_IMAGE = 1 << 8, + GDK_DEBUG_INPUT = 1 << 9, + GDK_DEBUG_CURSOR = 1 <<10, + GDK_DEBUG_MULTIHEAD = 1 <<11, + GDK_DEBUG_XINERAMA = 1 <<12, + GDK_DEBUG_DRAW = 1 <<13, + GDK_DEBUG_EVENTLOOP = 1 <<14 } GdkDebugFlag; -#ifndef GDK_DISABLE_DEPRECATED - -typedef struct _GdkFontPrivate GdkFontPrivate; - -struct _GdkFontPrivate -{ - GdkFont font; - guint ref_count; -}; - -#endif /* GDK_DISABLE_DEPRECATED */ - extern GList *_gdk_default_filters; extern GdkWindow *_gdk_parent_root; extern gint _gdk_error_code; extern gint _gdk_error_warnings; extern guint _gdk_debug_flags; +extern gboolean _gdk_native_windows; #ifdef G_ENABLE_DEBUG @@ -168,6 +156,7 @@ struct _GdkEventPrivate guint flags; GdkScreen *screen; gpointer windowing_data; + GdkDevice *device; }; /* Tracks information about the pointer grab on this display */ @@ -181,20 +170,27 @@ typedef struct guint event_mask; gboolean implicit; guint32 time; + GdkGrabOwnership ownership; - gboolean activated; - gboolean implicit_ungrab; - gboolean grab_one_pointer_release_event; -} GdkPointerGrabInfo; + guint activated : 1; + guint implicit_ungrab : 1; +} GdkDeviceGrabInfo; +typedef struct _GdkInputWindow GdkInputWindow; + +typedef void (* GdkDisplayPointerInfoForeach) (GdkDisplay *display, + GdkDevice *device, + GdkPointerWindowInfo *device_info, + gpointer user_data); /* Private version of GdkWindowObject. The initial part of this strucuture is public for historical reasons. Don't change that part */ typedef struct _GdkWindowPaint GdkWindowPaint; +#define GDK_WINDOW_OBJECT(object) ((GdkWindowObject *) GDK_WINDOW (object)) + struct _GdkWindowObject { - /* vvvvvvv THIS PART IS PUBLIC. DON'T CHANGE vvvvvvvvvvvvvv */ GdkDrawable parent_instance; GdkDrawable *impl; /* window-system-specific delegate object */ @@ -216,7 +212,7 @@ struct _GdkWindowObject GSList *paint_stack; - GdkRegion *update_area; + cairo_region_t *update_area; guint update_freeze_count; guint8 window_type; @@ -235,6 +231,7 @@ struct _GdkWindowObject guint accept_focus : 1; guint focus_on_map : 1; guint shaped : 1; + guint support_multidevice : 1; GdkEventMask event_mask; @@ -242,8 +239,6 @@ struct _GdkWindowObject 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. */ @@ -251,21 +246,36 @@ struct _GdkWindowObject 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 */ + cairo_region_t *clip_region; /* Clip region (wrt toplevel) in window coords */ + cairo_region_t *clip_region_with_children; /* Clip region in window coords */ GdkCursor *cursor; + GHashTable *device_cursor; gint8 toplevel_window_type; - + guint synthesize_crossing_event_queued : 1; + 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 viewable : 1; /* mapped and all parents mapped */ + guint applied_shape : 1; + + guint num_offscreen_children; GdkWindowPaint *implicit_paint; + GdkInputWindow *input_window; /* only set for impl windows */ GList *outstanding_moves; - GdkRegion *shape; - GdkRegion *input_shape; + cairo_region_t *shape; + cairo_region_t *input_shape; cairo_surface_t *cairo_surface; + guint outstanding_surfaces; /* only set on impl window */ + + GList *devices_inside; + GHashTable *device_events; }; +#define GDK_WINDOW_TYPE(d) (((GdkWindowObject*)(GDK_WINDOW (d)))->window_type) +#define GDK_WINDOW_DESTROYED(d) (((GdkWindowObject*)(GDK_WINDOW (d)))->destroyed) extern GdkEventFunc _gdk_event_func; /* Callback for events */ extern gpointer _gdk_event_data; @@ -275,6 +285,7 @@ extern GSList *_gdk_displays; extern gchar *_gdk_display_name; extern gint _gdk_screen_number; extern gchar *_gdk_display_arg_name; +extern gboolean _gdk_enable_multidevice; void _gdk_events_queue (GdkDisplay *display); GdkEvent* _gdk_event_unqueue (GdkDisplay *display); @@ -303,30 +314,8 @@ void gdk_synthesize_window_state (GdkWindow *window, GdkWindowState unset_flags, GdkWindowState set_flags); -#define GDK_SCRATCH_IMAGE_WIDTH 256 -#define GDK_SCRATCH_IMAGE_HEIGHT 64 - -GdkImage* _gdk_image_new_for_depth (GdkScreen *screen, - GdkImageType type, - GdkVisual *visual, - gint width, - gint height, - gint depth); -GdkImage *_gdk_image_get_scratch (GdkScreen *screen, - gint width, - gint height, - gint depth, - gint *x, - gint *y); - -GdkImage *_gdk_drawable_copy_to_image (GdkDrawable *drawable, - GdkImage *image, - gint src_x, - gint src_y, - gint dest_x, - gint dest_y, - gint width, - gint height); +GdkDeviceManager * _gdk_device_manager_new (GdkDisplay *display); + cairo_surface_t *_gdk_drawable_ref_cairo_surface (GdkDrawable *drawable); @@ -335,18 +324,6 @@ cairo_surface_t * _gdk_drawable_create_cairo_surface (GdkDrawable *drawable, int width, int height); -/* GC caching */ -GdkGC *_gdk_drawable_get_scratch_gc (GdkDrawable *drawable, - gboolean graphics_exposures); -GdkGC *_gdk_drawable_get_subwindow_scratch_gc (GdkDrawable *drawable); - -void _gdk_gc_update_context (GdkGC *gc, - cairo_t *cr, - const GdkColor *override_foreground, - GdkBitmap *override_stipple, - gboolean gc_changed, - GdkDrawable *target_drawable); - /************************************* * Interfaces used by windowing code * *************************************/ @@ -355,17 +332,6 @@ GdkPixmap *_gdk_pixmap_new (GdkDrawable *drawable, gint width, gint height, gint depth); -GdkPixmap *_gdk_pixmap_create_from_data (GdkDrawable *drawable, - const gchar *data, - gint width, - gint height, - gint depth, - const GdkColor *fg, - const GdkColor *bg); -GdkPixmap *_gdk_bitmap_create_from_data (GdkDrawable *drawable, - const gchar *data, - gint width, - gint height); void _gdk_window_impl_new (GdkWindow *window, GdkWindow *real_parent, @@ -378,43 +344,20 @@ void _gdk_window_destroy (GdkWindow *window, gboolean foreign_destroy); void _gdk_window_clear_update_area (GdkWindow *window); void _gdk_window_update_size (GdkWindow *window); +gboolean _gdk_window_update_viewable (GdkWindow *window); void _gdk_window_process_updates_recurse (GdkWindow *window, - GdkRegion *expose_region); + cairo_region_t *expose_region); void _gdk_screen_close (GdkScreen *screen); const char *_gdk_get_sm_client_id (void); -void _gdk_gc_init (GdkGC *gc, - GdkDrawable *drawable, - GdkGCValues *values, - GdkGCValuesMask values_mask); - -GdkRegion *_gdk_gc_get_clip_region (GdkGC *gc); -GdkFill _gdk_gc_get_fill (GdkGC *gc); -GdkPixmap *_gdk_gc_get_tile (GdkGC *gc); -GdkBitmap *_gdk_gc_get_stipple (GdkGC *gc); -guint32 _gdk_gc_get_fg_pixel (GdkGC *gc); -guint32 _gdk_gc_get_bg_pixel (GdkGC *gc); -void _gdk_gc_add_drawable_clip (GdkGC *gc, - guint32 region_tag, - GdkRegion *region, - int offset_x, - int offset_y); -void _gdk_gc_remove_drawable_clip (GdkGC *gc); -void _gdk_gc_set_clip_region_internal (GdkGC *gc, - GdkRegion *region, - gboolean reset_origin); -GdkSubwindowMode _gdk_gc_get_subwindow (GdkGC *gc); - /***************************************** * Interfaces provided by windowing code * *****************************************/ /* Font/string functions implemented in module-specific code */ -gint _gdk_font_strlen (GdkFont *font, const char *str); -void _gdk_font_destroy (GdkFont *font); void _gdk_colormap_real_destroy (GdkColormap *colormap); @@ -430,34 +373,41 @@ 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); -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); + gint *x_offset, + gint *y_offset); +cairo_region_t *_gdk_windowing_window_get_shape (GdkWindow *window); +cairo_region_t *_gdk_windowing_window_get_input_shape(GdkWindow *window); +cairo_region_t *_gdk_windowing_get_shape_for_mask (GdkBitmap *mask); +void _gdk_windowing_window_beep (GdkWindow *window); -void _gdk_windowing_get_pointer (GdkDisplay *display, +void _gdk_windowing_get_device_state (GdkDisplay *display, + GdkDevice *device, GdkScreen **screen, 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); +GdkWindow* _gdk_windowing_window_at_device_position (GdkDisplay *display, + GdkDevice *device, + gint *win_x, + gint *win_y, + GdkModifierType *mask, + gboolean get_toplevel); +GdkGrabStatus _gdk_windowing_device_grab (GdkDevice *device, + 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, gulong serial); void _gdk_windowing_window_process_updates_recurse (GdkWindow *window, - GdkRegion *expose_region); + cairo_region_t *expose_region); void _gdk_windowing_before_process_all_updates (void); void _gdk_windowing_after_process_all_updates (void); @@ -496,7 +446,7 @@ struct _GdkPaintableIface void (* begin_paint_region) (GdkPaintable *paintable, GdkWindow *window, - const GdkRegion *region); + const cairo_region_t *region); void (* end_paint) (GdkPaintable *paintable); }; @@ -506,45 +456,6 @@ GType _gdk_paintable_get_type (void) G_GNUC_CONST; GType _gdk_window_impl_get_type (void) G_GNUC_CONST; GType _gdk_pixmap_impl_get_type (void) G_GNUC_CONST; - -/** - * _gdk_windowing_gc_set_clip_region: - * @gc: a #GdkGC - * @region: the new clip region - * @reset_origin: if TRUE, reset the clip_x/y_origin values to 0 - * - * Do any window-system specific processing necessary - * for a change in clip region. Since the clip origin - * will likely change before the GC is used with the - * new clip, frequently this function will only set a flag and - * do the real processing later. - * - * When this function is called, _gdk_gc_get_clip_region - * will already return the new region. - **/ -void _gdk_windowing_gc_set_clip_region (GdkGC *gc, - const GdkRegion *region, - gboolean reset_origin); - -/** - * _gdk_windowing_gc_copy: - * @dst_gc: a #GdkGC from the GDK backend - * @src_gc: a #GdkGC from the GDK backend - * - * Copies backend specific state from @src_gc to @dst_gc. - * This is called before the generic state is copied, so - * the old generic state is still available from @dst_gc - **/ -void _gdk_windowing_gc_copy (GdkGC *dst_gc, - GdkGC *src_gc); - -/* Queries the current foreground color of a GdkGC */ -void _gdk_windowing_gc_get_foreground (GdkGC *gc, - GdkColor *color); -/* Queries the current background color of a GdkGC */ -void _gdk_windowing_gc_get_background (GdkGC *gc, - GdkColor *color); - struct GdkAppLaunchContextPrivate { GdkDisplay *display; @@ -561,82 +472,99 @@ char *_gdk_windowing_get_startup_notify_id (GAppLaunchContext *context, void _gdk_windowing_launch_failed (GAppLaunchContext *context, const char *startup_notify_id); -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_set_has_keyboard_grab (GdkDisplay *display, - GdkWindow *window, - GdkWindow *native_window, - gboolean owner_events, - unsigned long serial, - guint32 time); -void _gdk_display_unset_has_keyboard_grab (GdkDisplay *display, - gboolean implicit); -void _gdk_display_enable_motion_hints (GdkDisplay *display); - +void _gdk_display_device_grab_update (GdkDisplay *display, + GdkDevice *device, + gulong current_serial); +GdkDeviceGrabInfo *_gdk_display_get_last_device_grab (GdkDisplay *display, + GdkDevice *device); +GdkDeviceGrabInfo *_gdk_display_add_device_grab (GdkDisplay *display, + GdkDevice *device, + GdkWindow *window, + GdkWindow *native_window, + GdkGrabOwnership grab_ownership, + gboolean owner_events, + GdkEventMask event_mask, + unsigned long serial_start, + guint32 time, + gboolean implicit); +GdkDeviceGrabInfo * _gdk_display_has_device_grab (GdkDisplay *display, + GdkDevice *device, + gulong serial); +gboolean _gdk_display_end_device_grab (GdkDisplay *display, + GdkDevice *device, + gulong serial, + GdkWindow *if_child, + gboolean implicit); +gboolean _gdk_display_check_grab_ownership (GdkDisplay *display, + GdkDevice *device, + gulong serial); +void _gdk_display_enable_motion_hints (GdkDisplay *display, + GdkDevice *device); + +GdkPointerWindowInfo * _gdk_display_get_pointer_info (GdkDisplay *display, + GdkDevice *device); + +void _gdk_display_pointer_info_foreach (GdkDisplay *display, + GdkDisplayPointerInfoForeach func, + gpointer user_data); void _gdk_window_invalidate_for_expose (GdkWindow *window, - const GdkRegion *region); + cairo_region_t *region); -void _gdk_windowing_set_cairo_surface_size (cairo_surface_t *surface, - int width, - int height); +gboolean _gdk_windowing_set_cairo_surface_size (cairo_surface_t *surface, + int width, + int height); 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, double *found_y); void _gdk_window_add_damage (GdkWindow *toplevel, - GdkRegion *damaged_region); + cairo_region_t *damaged_region); GdkEvent * _gdk_make_event (GdkWindow *window, GdkEventType type, GdkEvent *event_in_queue, gboolean before_event); - -void _gdk_syntesize_crossing_events (GdkDisplay *display, - GdkWindow *src, - GdkWindow *dest, - GdkCrossingMode mode, - gint toplevel_x, - gint toplevel_y, - GdkModifierType mask, - guint32 time_, - GdkEvent *event_in_queue, - gulong serial); +gboolean _gdk_window_event_parent_of (GdkWindow *parent, + GdkWindow *child); + +void _gdk_synthesize_crossing_events (GdkDisplay *display, + GdkWindow *src, + GdkWindow *dest, + GdkDevice *device, + GdkCrossingMode mode, + gint toplevel_x, + gint toplevel_y, + GdkModifierType mask, + guint32 time_, + GdkEvent *event_in_queue, + gulong serial, + gboolean non_linear); void _gdk_display_set_window_under_pointer (GdkDisplay *display, - GdkWindow *window); + GdkDevice *device, + GdkWindow *window); -void _gdk_syntesize_crossing_events_for_geometry_change (GdkWindow *changed_window); +void _gdk_synthesize_crossing_events_for_geometry_change (GdkWindow *changed_window); -GdkRegion *_gdk_window_calculate_full_clip_region (GdkWindow *window, +cairo_region_t *_gdk_window_calculate_full_clip_region (GdkWindow *window, GdkWindow *base_window, gboolean do_children, gint *base_x_offset, gint *base_y_offset); gboolean _gdk_window_has_impl (GdkWindow *window); GdkWindow * _gdk_window_get_impl_window (GdkWindow *window); -GdkRegion *_gdk_region_new_from_yxbanded_rects (GdkRectangle *rects, int n_rects); +GdkWindow *_gdk_window_get_input_window_for_event (GdkWindow *native_window, + GdkEventType event_type, + int x, int y, + gulong serial); /***************************** * offscreen window routines * @@ -653,7 +581,6 @@ void _gdk_offscreen_window_new (GdkWindow *window, * Initialization and exit routines * ************************************/ -void _gdk_image_exit (void); void _gdk_windowing_exit (void); G_END_DECLS