diff --git a/gdk/gdkcairoprivate.h b/gdk/gdkcairoprivate.h new file mode 100644 index 0000000000..b735becc8d --- /dev/null +++ b/gdk/gdkcairoprivate.h @@ -0,0 +1,37 @@ +/* GDK - The GIMP Drawing Kit + * Copyright (C) 2020 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + */ + +#ifndef __GDK_CAIRO_PRIVATE_H___ +#define __GDK_CAIRO_PRIVATE_H__ + +#include +#include + +G_BEGIN_DECLS + +gboolean _gdk_cairo_surface_extents (cairo_surface_t *surface, + GdkRectangle *extents); + +void gdk_cairo_surface_paint_pixbuf (cairo_surface_t *surface, + const GdkPixbuf *pixbuf); + +cairo_region_t *gdk_cairo_region_from_clip (cairo_t *cr); + + +G_END_DECLS + +#endif /* __GDK_CAIRO_PRIVATE_H__ */ diff --git a/gdk/gdkdebug.h b/gdk/gdkdebug.h new file mode 100644 index 0000000000..2098774739 --- /dev/null +++ b/gdk/gdkdebug.h @@ -0,0 +1,73 @@ +/* GDK - The GIMP Drawing Kit + * Copyright (C) 2020 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + */ + +#ifndef __GDK_DEBUG_H__ +#define __GDK_DEBUG_H__ + +G_BEGIN_DECLS + + +typedef enum { + GDK_DEBUG_MISC = 1 << 0, + GDK_DEBUG_EVENTS = 1 << 1, + GDK_DEBUG_DND = 1 << 2, + GDK_DEBUG_INPUT = 1 << 3, + GDK_DEBUG_EVENTLOOP = 1 << 4, + GDK_DEBUG_FRAMES = 1 << 5, + GDK_DEBUG_SETTINGS = 1 << 6, + GDK_DEBUG_OPENGL = 1 << 7, + GDK_DEBUG_VULKAN = 1 << 8, + GDK_DEBUG_SELECTION = 1 << 9, + GDK_DEBUG_CLIPBOARD = 1 << 10, + /* flags below are influencing behavior */ + GDK_DEBUG_NOGRABS = 1 << 11, + GDK_DEBUG_GL_DISABLE = 1 << 12, + GDK_DEBUG_GL_SOFTWARE = 1 << 13, + GDK_DEBUG_GL_TEXTURE_RECT = 1 << 14, + GDK_DEBUG_GL_LEGACY = 1 << 15, + GDK_DEBUG_GL_GLES = 1 << 16, + GDK_DEBUG_GL_DEBUG = 1 << 17, + GDK_DEBUG_VULKAN_DISABLE = 1 << 18, + GDK_DEBUG_VULKAN_VALIDATE = 1 << 19, + GDK_DEBUG_DEFAULT_SETTINGS= 1 << 20 +} GdkDebugFlags; + +extern guint _gdk_debug_flags; + +GdkDebugFlags gdk_display_get_debug_flags (GdkDisplay *display); +void gdk_display_set_debug_flags (GdkDisplay *display, + GdkDebugFlags flags); + +#ifdef G_ENABLE_DEBUG + +#define GDK_DISPLAY_DEBUG_CHECK(display,type) \ + G_UNLIKELY (gdk_display_get_debug_flags (display) & GDK_DEBUG_##type) +#define GDK_DISPLAY_NOTE(display,type,action) G_STMT_START { \ + if (GDK_DISPLAY_DEBUG_CHECK (display,type)) \ + { action; }; } G_STMT_END + +#else /* !G_ENABLE_DEBUG */ + +#define GDK_DISPLAY_DEBUG_CHECK(display,type) 0 +#define GDK_DISPLAY_NOTE(display,type,action) + +#endif /* G_ENABLE_DEBUG */ + +#define GDK_DEBUG_CHECK(type) GDK_DISPLAY_DEBUG_CHECK (NULL,type) +#define GDK_NOTE(type,action) GDK_DISPLAY_NOTE (NULL,type,action) + +#endif diff --git a/gdk/gdkdevice.c b/gdk/gdkdevice.c index 3dbc4ec2c4..d812290b9f 100644 --- a/gdk/gdkdevice.c +++ b/gdk/gdkdevice.c @@ -35,9 +35,8 @@ * The #GdkDevice object represents a single input device, such * as a keyboard, a mouse, a touchpad, etc. * - * See the #GdkSeat documentation for more information - * about the various kinds of logical and physical devices, and their - * relationships. + * See the #GdkSeat documentation for more information about the + * various kinds of devices, and their relationships. */ /** @@ -477,25 +476,6 @@ gdk_device_get_property (GObject *object, } } -/* - * gdk_device_get_position: - * @device: pointer device to query status about. - * @x: (out): location to store root window X coordinate of @device - * @y: (out): location to store root window Y coordinate of @device - * - * Gets the current location of @device in double precision. - */ -void -gdk_device_get_position (GdkDevice *device, - double *x, - double *y) -{ - g_return_if_fail (GDK_IS_DEVICE (device)); - g_return_if_fail (device->source != GDK_SOURCE_KEYBOARD); - - _gdk_device_query_state (device, NULL, NULL, x, y, NULL); -} - /** * gdk_device_get_surface_at_position: * @device: pointer #GdkDevice to query info to. @@ -536,7 +516,8 @@ gdk_device_get_surface_at_position (GdkDevice *device, * gdk_device_get_name: * @device: a #GdkDevice * - * Determines the name of the device. + * Determines the name of the device, suitable + * for showing in a user interface. * * Returns: a name **/ @@ -553,7 +534,8 @@ gdk_device_get_name (GdkDevice *device) * @device: a #GdkDevice * * Determines whether the pointer follows device motion. - * This is not meaningful for keyboard devices, which don't have a pointer. + * This is not meaningful for keyboard devices, which + * don't have a pointer. * * Returns: %TRUE if the pointer follows device motion **/ @@ -642,7 +624,7 @@ _gdk_device_set_associated_device (GdkDevice *device, device->associated = g_object_ref (associated); } -/** +/* * gdk_device_list_physical_devices: * @device: a logical #GdkDevice * @@ -681,7 +663,7 @@ _gdk_device_remove_physical_device (GdkDevice *device, device->physical_devices = g_list_delete_link (device->physical_devices, elem); } -/** +/* * gdk_device_get_n_axes: * @device: a pointer #GdkDevice * @@ -698,7 +680,7 @@ gdk_device_get_n_axes (GdkDevice *device) return device->axes->len; } -/** +/* * gdk_device_get_axis: (skip) * @device: a #GdkDevice * @axes: (array): pointer to an array of axes @@ -1194,8 +1176,7 @@ gdk_device_set_seat (GdkDevice *device, * * Returns the #GdkSeat the device belongs to. * - * Returns: (transfer none): A #GdkSeat. This memory is owned by GTK+ and - * must not be freed. + * Returns: (transfer none): a #GdkSeat **/ GdkSeat * gdk_device_get_seat (GdkDevice *device) diff --git a/gdk/gdkdevice.h b/gdk/gdkdevice.h index 9501041aa7..16508c27a3 100644 --- a/gdk/gdkdevice.h +++ b/gdk/gdkdevice.h @@ -78,57 +78,45 @@ struct _GdkTimeCoord }; GDK_AVAILABLE_IN_ALL -GType gdk_device_get_type (void) G_GNUC_CONST; +GType gdk_device_get_type (void) G_GNUC_CONST; GDK_AVAILABLE_IN_ALL -const char * gdk_device_get_name (GdkDevice *device); +const char * gdk_device_get_name (GdkDevice *device); GDK_AVAILABLE_IN_ALL -gboolean gdk_device_get_has_cursor (GdkDevice *device); - -/* Functions to configure a device */ +const char * gdk_device_get_vendor_id (GdkDevice *device); GDK_AVAILABLE_IN_ALL -GdkInputSource gdk_device_get_source (GdkDevice *device); +const char * gdk_device_get_product_id (GdkDevice *device); GDK_AVAILABLE_IN_ALL -GdkSurface * gdk_device_get_surface_at_position (GdkDevice *device, - double *win_x, - double *win_y); +GdkDisplay * gdk_device_get_display (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +GdkSeat * gdk_device_get_seat (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +GdkDeviceTool * gdk_device_get_device_tool (GdkDevice *device); GDK_AVAILABLE_IN_ALL -GdkDisplay * gdk_device_get_display (GdkDevice *device); +GdkInputSource gdk_device_get_source (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +gboolean gdk_device_get_has_cursor (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +guint gdk_device_get_num_touches (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +GdkModifierType gdk_device_get_modifier_state (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +PangoDirection gdk_device_get_direction (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +gboolean gdk_device_has_bidi_layouts (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +gboolean gdk_device_get_caps_lock_state (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +gboolean gdk_device_get_num_lock_state (GdkDevice *device); +GDK_AVAILABLE_IN_ALL +gboolean gdk_device_get_scroll_lock_state (GdkDevice *device); GDK_AVAILABLE_IN_ALL -const char *gdk_device_get_vendor_id (GdkDevice *device); -GDK_AVAILABLE_IN_ALL -const char *gdk_device_get_product_id (GdkDevice *device); - -GDK_AVAILABLE_IN_ALL -GdkSeat *gdk_device_get_seat (GdkDevice *device); - -GDK_AVAILABLE_IN_ALL -guint gdk_device_get_num_touches (GdkDevice *device); - -GDK_AVAILABLE_IN_ALL -GdkDeviceTool * gdk_device_get_device_tool (GdkDevice *device); - -GDK_AVAILABLE_IN_ALL -gboolean gdk_device_get_caps_lock_state (GdkDevice *device); - -GDK_AVAILABLE_IN_ALL -gboolean gdk_device_get_num_lock_state (GdkDevice *device); - -GDK_AVAILABLE_IN_ALL -gboolean gdk_device_get_scroll_lock_state (GdkDevice *device); - -GDK_AVAILABLE_IN_ALL -GdkModifierType gdk_device_get_modifier_state (GdkDevice *device); - -GDK_AVAILABLE_IN_ALL -PangoDirection gdk_device_get_direction (GdkDevice *device); - -GDK_AVAILABLE_IN_ALL -gboolean gdk_device_has_bidi_layouts (GdkDevice *device); - +GdkSurface * gdk_device_get_surface_at_position (GdkDevice *device, + double *win_x, + double *win_y); G_END_DECLS #endif /* __GDK_DEVICE_H__ */ diff --git a/gdk/gdkdeviceprivate.h b/gdk/gdkdeviceprivate.h index c2d49fe068..39fdba34f0 100644 --- a/gdk/gdkdeviceprivate.h +++ b/gdk/gdkdeviceprivate.h @@ -22,10 +22,47 @@ #include "gdkdevicetool.h" #include "gdkevents.h" #include "gdkseat.h" -#include "gdkinternals.h" G_BEGIN_DECLS +typedef enum +{ + GDK_GRAB_SUCCESS = 0, + GDK_GRAB_ALREADY_GRABBED = 1, + GDK_GRAB_INVALID_TIME = 2, + GDK_GRAB_NOT_VIEWABLE = 3, + GDK_GRAB_FROZEN = 4, + GDK_GRAB_FAILED = 5 +} GdkGrabStatus; + +typedef enum +{ + GDK_EXPOSURE_MASK = 1 << 1, + GDK_POINTER_MOTION_MASK = 1 << 2, + GDK_BUTTON_MOTION_MASK = 1 << 4, + GDK_BUTTON1_MOTION_MASK = 1 << 5, + GDK_BUTTON2_MOTION_MASK = 1 << 6, + GDK_BUTTON3_MOTION_MASK = 1 << 7, + GDK_BUTTON_PRESS_MASK = 1 << 8, + GDK_BUTTON_RELEASE_MASK = 1 << 9, + GDK_KEY_PRESS_MASK = 1 << 10, + GDK_KEY_RELEASE_MASK = 1 << 11, + GDK_ENTER_NOTIFY_MASK = 1 << 12, + GDK_LEAVE_NOTIFY_MASK = 1 << 13, + GDK_FOCUS_CHANGE_MASK = 1 << 14, + GDK_STRUCTURE_MASK = 1 << 15, + GDK_PROPERTY_CHANGE_MASK = 1 << 16, + GDK_PROXIMITY_IN_MASK = 1 << 18, + GDK_PROXIMITY_OUT_MASK = 1 << 19, + GDK_SUBSTRUCTURE_MASK = 1 << 20, + GDK_SCROLL_MASK = 1 << 21, + GDK_TOUCH_MASK = 1 << 22, + GDK_SMOOTH_SCROLL_MASK = 1 << 23, + GDK_TOUCHPAD_GESTURE_MASK = 1 << 24, + GDK_TABLET_PAD_MASK = 1 << 25, + GDK_ALL_EVENTS_MASK = 0x3FFFFFE +} GdkEventMask; + #define GDK_DEVICE_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), GDK_TYPE_DEVICE, GdkDeviceClass)) #define GDK_IS_DEVICE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), GDK_TYPE_DEVICE)) #define GDK_DEVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDK_TYPE_DEVICE, GdkDeviceClass)) @@ -154,6 +191,23 @@ void gdk_device_set_seat (GdkDevice *device, void gdk_device_update_tool (GdkDevice *device, GdkDeviceTool *tool); +GdkGrabStatus gdk_device_grab (GdkDevice *device, + GdkSurface *surface, + gboolean owner_events, + GdkEventMask event_mask, + GdkCursor *cursor, + guint32 time_); +void gdk_device_ungrab (GdkDevice *device, + guint32 time_); +int gdk_device_get_n_axes (GdkDevice *device); +gboolean gdk_device_get_axis (GdkDevice *device, + double *axes, + GdkAxisUse use, + double *value); +GdkAxisUse gdk_device_get_axis_use (GdkDevice *device, + guint index_); + + G_END_DECLS #endif /* __GDK_DEVICE_PRIVATE_H__ */ diff --git a/gdk/gdkdevicetool.h b/gdk/gdkdevicetool.h index d1e5b28e21..1a6a90d756 100644 --- a/gdk/gdkdevicetool.h +++ b/gdk/gdkdevicetool.h @@ -60,19 +60,19 @@ typedef enum { } GdkDeviceToolType; GDK_AVAILABLE_IN_ALL -GType gdk_device_tool_get_type (void) G_GNUC_CONST; +GType gdk_device_tool_get_type (void) G_GNUC_CONST; GDK_AVAILABLE_IN_ALL -guint64 gdk_device_tool_get_serial (GdkDeviceTool *tool); +guint64 gdk_device_tool_get_serial (GdkDeviceTool *tool); GDK_AVAILABLE_IN_ALL -guint64 gdk_device_tool_get_hardware_id (GdkDeviceTool *tool); +guint64 gdk_device_tool_get_hardware_id (GdkDeviceTool *tool); GDK_AVAILABLE_IN_ALL -GdkDeviceToolType gdk_device_tool_get_tool_type (GdkDeviceTool *tool); +GdkDeviceToolType gdk_device_tool_get_tool_type (GdkDeviceTool *tool); GDK_AVAILABLE_IN_ALL -GdkAxisFlags gdk_device_tool_get_axes (GdkDeviceTool *tool); +GdkAxisFlags gdk_device_tool_get_axes (GdkDeviceTool *tool); G_END_DECLS diff --git a/gdk/gdkdisplayprivate.h b/gdk/gdkdisplayprivate.h index 3b5af7e01d..3add2aa31f 100644 --- a/gdk/gdkdisplayprivate.h +++ b/gdk/gdkdisplayprivate.h @@ -22,7 +22,10 @@ #include "gdksurface.h" #include "gdkcursor.h" #include "gdkmonitor.h" -#include "gdkinternals.h" +#include "gdkdebug.h" +#include "gdksurfaceprivate.h" +#include "gdkkeysprivate.h" +#include "gdkdeviceprivate.h" #ifdef GDK_RENDERING_VULKAN #include @@ -241,6 +244,16 @@ GdkEvent * gdk_display_get_event (GdkDisplay *display GdkEvent * gdk_display_peek_event (GdkDisplay *display); gboolean gdk_display_has_pending (GdkDisplay *display); +GdkKeymap * gdk_display_get_keymap (GdkDisplay *display); + +void _gdk_display_set_surface_under_pointer (GdkDisplay *display, + GdkDevice *device, + GdkSurface *surface); + +void _gdk_windowing_got_event (GdkDisplay *display, + GList *event_link, + GdkEvent *event, + gulong serial); G_END_DECLS diff --git a/gdk/gdkdrawcontext.c b/gdk/gdkdrawcontext.c index 6819cb74bd..75d7e61546 100644 --- a/gdk/gdkdrawcontext.c +++ b/gdk/gdkdrawcontext.c @@ -35,7 +35,7 @@ * rendering methods, such as #GdkGLContext or #GdkVulkanContext. It provides * shared functionality between those contexts. * - * You will always interact with one of those s.ubclasses. + * You will always interact with one of those subclasses. * * A GdkDrawContext is always associated with a single toplevel surface. */ @@ -161,7 +161,7 @@ gdk_draw_context_class_init (GdkDrawContextClass *klass) /** * GdkDrawContext:surface: * - * The #GdkSurface the gl context is bound to. + * The #GdkSurface the context is bound to. */ pspecs[PROP_SURFACE] = g_param_spec_object ("surface", diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c index 67a536462c..e1b78a3de9 100644 --- a/gdk/gdkevents.c +++ b/gdk/gdkevents.c @@ -564,11 +564,11 @@ _gdk_event_queue_append (GdkDisplay *display, return g_queue_peek_tail_link (&display->queued_events); } -/** +/* * _gdk_event_queue_remove_link: * @display: a #GdkDisplay * @node: node to remove - * + * * Removes a specified list node from the event queue. **/ void @@ -578,13 +578,13 @@ _gdk_event_queue_remove_link (GdkDisplay *display, g_queue_unlink (&display->queued_events, node); } -/** +/* * _gdk_event_unqueue: * @display: a #GdkDisplay - * + * * Removes and returns the first event from the event * queue that is not still being filled in. - * + * * Returns: (nullable): the event, or %NULL. Ownership is transferred * to the caller. **/ diff --git a/gdk/gdkeventsprivate.h b/gdk/gdkeventsprivate.h index b7eae78706..a521ca5ab5 100644 --- a/gdk/gdkeventsprivate.h +++ b/gdk/gdkeventsprivate.h @@ -599,6 +599,34 @@ GdkEvent * gdk_grab_broken_event_new (GdkSurface *surface, GdkTranslatedKey * gdk_key_event_get_translated_key (GdkEvent *event, gboolean no_lock); +typedef enum +{ + /* Following flag is set for events on the event queue during + * translation and cleared afterwards. + */ + GDK_EVENT_PENDING = 1 << 0, + + /* When we are ready to draw a frame, we pause event delivery, + * mark all events in the queue with this flag, and deliver + * only those events until we finish the frame. + */ + GDK_EVENT_FLUSHED = 1 << 2 +} GdkEventFlags; + +GdkEvent* _gdk_event_unqueue (GdkDisplay *display); + +void _gdk_event_emit (GdkEvent *event); +GList* _gdk_event_queue_find_first (GdkDisplay *display); +void _gdk_event_queue_remove_link (GdkDisplay *display, + GList *node); +GList* _gdk_event_queue_append (GdkDisplay *display, + GdkEvent *event); + +void _gdk_event_queue_handle_motion_compression (GdkDisplay *display); +void gdk_event_queue_handle_scroll_compression (GdkDisplay *display); +void _gdk_event_queue_flush (GdkDisplay *display); + + G_END_DECLS #endif /* __GDK_EVENTS_PRIVATE_H__ */ diff --git a/gdk/gdkglcontextprivate.h b/gdk/gdkglcontextprivate.h index 67fe1a825d..8991332b56 100644 --- a/gdk/gdkglcontextprivate.h +++ b/gdk/gdkglcontextprivate.h @@ -108,6 +108,18 @@ gboolean gdk_gl_context_has_debug (GdkGLContext gboolean gdk_gl_context_use_es_bgra (GdkGLContext *context); +typedef struct { + float x1, y1, x2, y2; + float u1, v1, u2, v2; +} GdkTexturedQuad; + +void gdk_gl_texture_quads (GdkGLContext *context, + guint texture_target, + int n_quads, + GdkTexturedQuad *quads, + gboolean flip_colors); + + G_END_DECLS #endif /* __GDK_GL_CONTEXT_PRIVATE_H__ */ diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index f0a7f6916a..d3559e46c5 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -28,362 +28,16 @@ #define __GDK_INTERNALS_H__ #include -#include "gdkdisplay.h" +#include "gdkenumtypes.h" #include "gdkeventsprivate.h" #include "gdksurfaceprivate.h" -#include "gdkenumtypes.h" #include "gdkdragprivate.h" #include "gdkkeysprivate.h" - -G_BEGIN_DECLS - -/********************** - * General Facilities * - **********************/ - -/* Debugging support */ - -typedef enum { - GDK_DEBUG_MISC = 1 << 0, - GDK_DEBUG_EVENTS = 1 << 1, - GDK_DEBUG_DND = 1 << 2, - GDK_DEBUG_INPUT = 1 << 3, - GDK_DEBUG_EVENTLOOP = 1 << 4, - GDK_DEBUG_FRAMES = 1 << 5, - GDK_DEBUG_SETTINGS = 1 << 6, - GDK_DEBUG_OPENGL = 1 << 7, - GDK_DEBUG_VULKAN = 1 << 8, - GDK_DEBUG_SELECTION = 1 << 9, - GDK_DEBUG_CLIPBOARD = 1 << 10, - /* flags below are influencing behavior */ - GDK_DEBUG_NOGRABS = 1 << 11, - GDK_DEBUG_GL_DISABLE = 1 << 12, - GDK_DEBUG_GL_SOFTWARE = 1 << 13, - GDK_DEBUG_GL_TEXTURE_RECT = 1 << 14, - GDK_DEBUG_GL_LEGACY = 1 << 15, - GDK_DEBUG_GL_GLES = 1 << 16, - GDK_DEBUG_GL_DEBUG = 1 << 17, - GDK_DEBUG_VULKAN_DISABLE = 1 << 18, - GDK_DEBUG_VULKAN_VALIDATE = 1 << 19, - GDK_DEBUG_DEFAULT_SETTINGS= 1 << 20 -} GdkDebugFlags; - -extern guint _gdk_debug_flags; - -GdkDebugFlags gdk_display_get_debug_flags (GdkDisplay *display); -void gdk_display_set_debug_flags (GdkDisplay *display, - GdkDebugFlags flags); - -#ifdef G_ENABLE_DEBUG - -#define GDK_DISPLAY_DEBUG_CHECK(display,type) \ - G_UNLIKELY (gdk_display_get_debug_flags (display) & GDK_DEBUG_##type) -#define GDK_DISPLAY_NOTE(display,type,action) G_STMT_START { \ - if (GDK_DISPLAY_DEBUG_CHECK (display,type)) \ - { action; }; } G_STMT_END - -#else /* !G_ENABLE_DEBUG */ - -#define GDK_DISPLAY_DEBUG_CHECK(display,type) 0 -#define GDK_DISPLAY_NOTE(display,type,action) - -#endif /* G_ENABLE_DEBUG */ - -#define GDK_DEBUG_CHECK(type) GDK_DISPLAY_DEBUG_CHECK (NULL,type) -#define GDK_NOTE(type,action) GDK_DISPLAY_NOTE (NULL,type,action) - -/* Event handling */ - -typedef enum -{ - /* Following flag is set for events on the event queue during - * translation and cleared afterwards. - */ - GDK_EVENT_PENDING = 1 << 0, - - /* When we are ready to draw a frame, we pause event delivery, - * mark all events in the queue with this flag, and deliver - * only those events until we finish the frame. - */ - GDK_EVENT_FLUSHED = 1 << 2 -} GdkEventFlags; - -typedef struct _GdkSurfacePaint GdkSurfacePaint; - -#define GDK_SURFACE_TYPE(d) ((((GdkSurface *)(d)))->surface_type) -#define GDK_SURFACE_DESTROYED(d) (((GdkSurface *)(d))->destroyed) - -GdkEvent* _gdk_event_unqueue (GdkDisplay *display); - -void _gdk_event_emit (GdkEvent *event); -GList* _gdk_event_queue_find_first (GdkDisplay *display); -void _gdk_event_queue_remove_link (GdkDisplay *display, - GList *node); -GList* _gdk_event_queue_append (GdkDisplay *display, - GdkEvent *event); - -void _gdk_event_queue_handle_motion_compression (GdkDisplay *display); -void gdk_event_queue_handle_scroll_compression (GdkDisplay *display); -void _gdk_event_queue_flush (GdkDisplay *display); - -gboolean _gdk_cairo_surface_extents (cairo_surface_t *surface, - GdkRectangle *extents); - -typedef struct { - float x1, y1, x2, y2; - float u1, v1, u2, v2; -} GdkTexturedQuad; - -void gdk_gl_texture_quads (GdkGLContext *paint_context, - guint texture_target, - int n_quads, - GdkTexturedQuad *quads, - gboolean flip_colors); - -void gdk_cairo_surface_paint_pixbuf (cairo_surface_t *surface, - const GdkPixbuf *pixbuf); - -cairo_region_t *gdk_cairo_region_from_clip (cairo_t *cr); - -/************************************* - * Interfaces used by windowing code * - *************************************/ - -void _gdk_surface_destroy (GdkSurface *surface, - gboolean foreign_destroy); -void gdk_surface_invalidate_rect (GdkSurface *surface, - const GdkRectangle *rect); -void gdk_surface_invalidate_region (GdkSurface *surface, - const cairo_region_t *region); -void _gdk_surface_clear_update_area (GdkSurface *surface); -void _gdk_surface_update_size (GdkSurface *surface); -GdkGLContext * gdk_surface_get_paint_gl_context (GdkSurface *surface, - GError **error); -void gdk_surface_get_unscaled_size (GdkSurface *surface, - int *unscaled_width, - int *unscaled_height); -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 * - *****************************************/ - -void _gdk_windowing_got_event (GdkDisplay *display, - GList *event_link, - GdkEvent *event, - gulong serial); - -#define GDK_SURFACE_IS_MAPPED(surface) (((surface)->state & GDK_SURFACE_STATE_WITHDRAWN) == 0) - -void _gdk_synthesize_crossing_events (GdkDisplay *display, - GdkSurface *src, - GdkSurface *dest, - GdkDevice *device, - GdkDevice *source_device, - GdkCrossingMode mode, - double toplevel_x, - double toplevel_y, - GdkModifierType mask, - guint32 time_, - GdkEvent *event_in_queue, - gulong serial, - gboolean non_linear); -void _gdk_display_set_surface_under_pointer (GdkDisplay *display, - GdkDevice *device, - GdkSurface *surface); - -void gdk_surface_destroy_notify (GdkSurface *surface); - -void gdk_synthesize_surface_state (GdkSurface *surface, - GdkSurfaceState unset_flags, - GdkSurfaceState set_flags); - -/** - * GdkGrabStatus: - * @GDK_GRAB_SUCCESS: the resource was successfully grabbed. - * @GDK_GRAB_ALREADY_GRABBED: the resource is actively grabbed by another client. - * @GDK_GRAB_INVALID_TIME: the resource was grabbed more recently than the - * specified time. - * @GDK_GRAB_NOT_VIEWABLE: the grab surface or the @confine_to surface are not - * viewable. - * @GDK_GRAB_FROZEN: the resource is frozen by an active grab of another client. - * @GDK_GRAB_FAILED: the grab failed for some other reason - * - * Returned by gdk_device_grab() to indicate success or the reason for the - * failure of the grab attempt. - */ -typedef enum -{ - GDK_GRAB_SUCCESS = 0, - GDK_GRAB_ALREADY_GRABBED = 1, - GDK_GRAB_INVALID_TIME = 2, - GDK_GRAB_NOT_VIEWABLE = 3, - GDK_GRAB_FROZEN = 4, - GDK_GRAB_FAILED = 5 -} GdkGrabStatus; - -typedef enum -{ - GDK_EXPOSURE_MASK = 1 << 1, - GDK_POINTER_MOTION_MASK = 1 << 2, - GDK_BUTTON_MOTION_MASK = 1 << 4, - GDK_BUTTON1_MOTION_MASK = 1 << 5, - GDK_BUTTON2_MOTION_MASK = 1 << 6, - GDK_BUTTON3_MOTION_MASK = 1 << 7, - GDK_BUTTON_PRESS_MASK = 1 << 8, - GDK_BUTTON_RELEASE_MASK = 1 << 9, - GDK_KEY_PRESS_MASK = 1 << 10, - GDK_KEY_RELEASE_MASK = 1 << 11, - GDK_ENTER_NOTIFY_MASK = 1 << 12, - GDK_LEAVE_NOTIFY_MASK = 1 << 13, - GDK_FOCUS_CHANGE_MASK = 1 << 14, - GDK_STRUCTURE_MASK = 1 << 15, - GDK_PROPERTY_CHANGE_MASK = 1 << 16, - GDK_PROXIMITY_IN_MASK = 1 << 18, - GDK_PROXIMITY_OUT_MASK = 1 << 19, - GDK_SUBSTRUCTURE_MASK = 1 << 20, - GDK_SCROLL_MASK = 1 << 21, - GDK_TOUCH_MASK = 1 << 22, - GDK_SMOOTH_SCROLL_MASK = 1 << 23, - GDK_TOUCHPAD_GESTURE_MASK = 1 << 24, - GDK_TABLET_PAD_MASK = 1 << 25, - GDK_ALL_EVENTS_MASK = 0x3FFFFFE -} GdkEventMask; - -GdkGrabStatus gdk_device_grab (GdkDevice *device, - GdkSurface *surface, - gboolean owner_events, - GdkEventMask event_mask, - GdkCursor *cursor, - guint32 time_); -void gdk_device_ungrab (GdkDevice *device, - guint32 time_); -void gdk_device_get_position (GdkDevice *device, - double *x, - double *y); -int gdk_device_get_n_axes (GdkDevice *device); -gboolean gdk_device_get_axis (GdkDevice *device, - double *axes, - GdkAxisUse use, - double *value); -GdkAxisUse gdk_device_get_axis_use (GdkDevice *device, - guint index_); - -void gdk_surface_get_root_coords (GdkSurface *surface, - int x, - int y, - int *root_x, - int *root_y); -void gdk_surface_get_origin (GdkSurface *surface, - int *x, - int *y); - - -void gdk_surface_get_geometry (GdkSurface *surface, - int *x, - int *y, - int *width, - int *height); - -GdkGLContext *gdk_surface_get_shared_data_gl_context (GdkSurface *surface); - -typedef enum -{ - GDK_HINT_MIN_SIZE = 1 << 1, - GDK_HINT_MAX_SIZE = 1 << 2, -} GdkSurfaceHints; - -typedef enum -{ - GDK_SURFACE_TYPE_HINT_NORMAL, - GDK_SURFACE_TYPE_HINT_DIALOG, - GDK_SURFACE_TYPE_HINT_MENU, /* Torn off menu */ - GDK_SURFACE_TYPE_HINT_TOOLBAR, - GDK_SURFACE_TYPE_HINT_SPLASHSCREEN, - GDK_SURFACE_TYPE_HINT_UTILITY, - GDK_SURFACE_TYPE_HINT_DOCK, - GDK_SURFACE_TYPE_HINT_DESKTOP, - GDK_SURFACE_TYPE_HINT_DROPDOWN_MENU, /* A drop down menu (from a menubar) */ - GDK_SURFACE_TYPE_HINT_POPUP_MENU, /* A popup menu (from right-click) */ - GDK_SURFACE_TYPE_HINT_TOOLTIP, - GDK_SURFACE_TYPE_HINT_NOTIFICATION, - GDK_SURFACE_TYPE_HINT_COMBO, - GDK_SURFACE_TYPE_HINT_DND -} GdkSurfaceTypeHint; - -typedef struct _GdkGeometry GdkGeometry; - -struct _GdkGeometry -{ - int min_width; - int min_height; - int max_width; - int max_height; -}; - -GDK_AVAILABLE_IN_ALL -void gdk_surface_constrain_size (GdkGeometry *geometry, - GdkSurfaceHints flags, - int width, - int height, - int *new_width, - int *new_height); - -/* - * GdkSeatGrabPrepareFunc: - * @seat: the #GdkSeat being grabbed - * @surface: the #GdkSurface being grabbed - * @user_data: user data passed in gdk_seat_grab() - * - * Type of the callback used to set up @surface so it can be - * grabbed. A typical action would be ensuring the surface is - * visible, although there's room for other initialization - * actions. - */ -typedef void (* GdkSeatGrabPrepareFunc) (GdkSeat *seat, - GdkSurface *surface, - gpointer user_data); - -GdkGrabStatus gdk_seat_grab (GdkSeat *seat, - GdkSurface *surface, - GdkSeatCapabilities capabilities, - gboolean owner_events, - GdkCursor *cursor, - GdkEvent *event, - GdkSeatGrabPrepareFunc prepare_func, - gpointer prepare_func_data); -void gdk_seat_ungrab (GdkSeat *seat); -GdkSurface * gdk_surface_new_temp (GdkDisplay *display, - const GdkRectangle *position); - -GdkKeymap * gdk_display_get_keymap (GdkDisplay *display); - -void gdk_surface_begin_resize_drag (GdkSurface *surface, - GdkSurfaceEdge edge, - GdkDevice *device, - int button, - int x, - int y, - guint32 timestamp); - -void gdk_surface_begin_move_drag (GdkSurface *surface, - GdkDevice *device, - int button, - int x, - int y, - guint32 timestamp); - -void gdk_surface_freeze_updates (GdkSurface *surface); -void gdk_surface_thaw_updates (GdkSurface *surface); - - -G_END_DECLS +#include "gdkdeviceprivate.h" +#include "gdkseatprivate.h" +#include "gdkdisplayprivate.h" +#include "gdkcairoprivate.h" +#include "gdkglcontextprivate.h" +#include "gdkdebug.h" #endif /* __GDK_INTERNALS_H__ */ diff --git a/gdk/gdkseat.c b/gdk/gdkseat.c index a88e8e7785..75ef348a2d 100644 --- a/gdk/gdkseat.c +++ b/gdk/gdkseat.c @@ -232,7 +232,7 @@ gdk_seat_get_capabilities (GdkSeat *seat) return seat_class->get_capabilities (seat); } -/** +/* * gdk_seat_grab: * @seat: a #GdkSeat * @surface: the #GdkSurface which will own the grab @@ -306,7 +306,7 @@ gdk_seat_grab (GdkSeat *seat, event, prepare_func, prepare_func_data); } -/** +/* * gdk_seat_ungrab: * @seat: a #GdkSeat * @@ -332,7 +332,7 @@ gdk_seat_ungrab (GdkSeat *seat) * * Returns: (transfer container) (element-type GdkDevice): A list of #GdkDevices. * The list must be freed with g_list_free(), the elements are owned - * by GDK and must not be freed. + * by GTK and must not be freed. **/ GList * gdk_seat_get_devices (GdkSeat *seat, @@ -350,9 +350,9 @@ gdk_seat_get_devices (GdkSeat *seat, * gdk_seat_get_pointer: * @seat: a #GdkSeat * - * Returns the logical device that routes pointer events. + * Returns the device that routes pointer events. * - * Returns: (transfer none) (nullable): a logical #GdkDevice with pointer + * Returns: (transfer none) (nullable): a #GdkDevice with pointer * capabilities. This object is owned by GTK and must not be freed. **/ GdkDevice * @@ -370,9 +370,9 @@ gdk_seat_get_pointer (GdkSeat *seat) * gdk_seat_get_keyboard: * @seat: a #GdkSeat * - * Returns the logical device that routes keyboard events. + * Returns the device that routes keyboard events. * - * Returns: (transfer none) (nullable): a logical #GdkDevice with keyboard + * Returns: (transfer none) (nullable): a #GdkDevice with keyboard * capabilities. This object is owned by GTK and must not be freed. **/ GdkDevice * @@ -468,8 +468,8 @@ gdk_seat_get_tool (GdkSeat *seat, * Returns all #GdkDeviceTools that are known to the * application. * - * Returns: (transfer container) (element-type Gdk.DeviceTool): A list of tools. Free with - * g_list_free(). + * Returns: (transfer container) (element-type Gdk.DeviceTool): + * A list of tools. Free with g_list_free(). **/ GList * gdk_seat_get_tools (GdkSeat *seat) diff --git a/gdk/gdkseatprivate.h b/gdk/gdkseatprivate.h index 171a3bde3a..12453896ad 100644 --- a/gdk/gdkseatprivate.h +++ b/gdk/gdkseatprivate.h @@ -23,7 +23,11 @@ typedef struct _GdkSeatClass GdkSeatClass; #include "gdkseat.h" -#include "gdkinternals.h" +#include "gdkdeviceprivate.h" + +typedef void (* GdkSeatGrabPrepareFunc) (GdkSeat *seat, + GdkSurface *surface, + gpointer user_data); #define GDK_SEAT_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), GDK_TYPE_SEAT, GdkSeatClass)) #define GDK_IS_SEAT_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), GDK_TYPE_SEAT)) @@ -75,4 +79,15 @@ GdkDeviceTool * guint64 serial, guint64 hw_id); +GdkGrabStatus gdk_seat_grab (GdkSeat *seat, + GdkSurface *surface, + GdkSeatCapabilities capabilities, + gboolean owner_events, + GdkCursor *cursor, + GdkEvent *event, + GdkSeatGrabPrepareFunc prepare_func, + gpointer prepare_func_data); +void gdk_seat_ungrab (GdkSeat *seat); + + #endif /* __GDK_SEAT_PRIVATE_H__ */ diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c index db48e34f5a..2145736901 100644 --- a/gdk/gdksurface.c +++ b/gdk/gdksurface.c @@ -1562,7 +1562,7 @@ gdk_surface_thaw_toplevel_updates (GdkSurface *surface) } -/** +/* * gdk_surface_constrain_size: * @geometry: a #GdkGeometry structure * @flags: a mask indicating what portions of @geometry are set diff --git a/gdk/gdksurfaceprivate.h b/gdk/gdksurfaceprivate.h index c9410f506e..e0a0c20b50 100644 --- a/gdk/gdksurfaceprivate.h +++ b/gdk/gdksurfaceprivate.h @@ -171,6 +171,11 @@ struct _GdkSurfaceClass GError **error); }; +#define GDK_SURFACE_DESTROYED(d) (((GdkSurface *)(d))->destroyed) + +#define GDK_SURFACE_IS_MAPPED(surface) (((surface)->state & GDK_SURFACE_STATE_WITHDRAWN) == 0) + + void gdk_surface_set_state (GdkSurface *surface, GdkSurfaceState new_state); @@ -247,6 +252,84 @@ gdk_gravity_flip_vertically (GdkGravity anchor) g_assert_not_reached (); } +void _gdk_surface_destroy (GdkSurface *surface, + gboolean foreign_destroy); +void gdk_surface_invalidate_rect (GdkSurface *surface, + const GdkRectangle *rect); +void gdk_surface_invalidate_region (GdkSurface *surface, + const cairo_region_t *region); +void _gdk_surface_clear_update_area (GdkSurface *surface); +void _gdk_surface_update_size (GdkSurface *surface); + +GdkGLContext * gdk_surface_get_paint_gl_context (GdkSurface *surface, + GError **error); +GdkGLContext * gdk_surface_get_shared_data_gl_context (GdkSurface *surface); + +void gdk_surface_get_unscaled_size (GdkSurface *surface, + int *unscaled_width, + int *unscaled_height); +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); + +GdkSurface * gdk_surface_new_temp (GdkDisplay *display, + const GdkRectangle *position); + +void gdk_surface_destroy_notify (GdkSurface *surface); + +void gdk_synthesize_surface_state (GdkSurface *surface, + GdkSurfaceState unset_flags, + GdkSurfaceState set_flags); + +void gdk_surface_get_root_coords (GdkSurface *surface, + int x, + int y, + int *root_x, + int *root_y); +void gdk_surface_get_origin (GdkSurface *surface, + int *x, + int *y); + + +void gdk_surface_get_geometry (GdkSurface *surface, + int *x, + int *y, + int *width, + int *height); + +void gdk_surface_freeze_updates (GdkSurface *surface); +void gdk_surface_thaw_updates (GdkSurface *surface); + + +typedef enum +{ + GDK_HINT_MIN_SIZE = 1 << 1, + GDK_HINT_MAX_SIZE = 1 << 2, +} GdkSurfaceHints; + +typedef struct _GdkGeometry GdkGeometry; + +struct _GdkGeometry +{ + int min_width; + int min_height; + int max_width; + int max_height; +}; + +GDK_AVAILABLE_IN_ALL +void gdk_surface_constrain_size (GdkGeometry *geometry, + GdkSurfaceHints flags, + int width, + int height, + int *new_width, + int *new_height); + G_END_DECLS #endif /* __GDK_SURFACE_PRIVATE_H__ */ diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c index a7ecb7b19b..b788be2ce7 100644 --- a/gdk/wayland/gdksurface-wayland.c +++ b/gdk/wayland/gdksurface-wayland.c @@ -106,7 +106,6 @@ struct _GdkWaylandSurface unsigned int awaiting_frame : 1; unsigned int awaiting_frame_frozen : 1; unsigned int is_drag_surface : 1; - GdkSurfaceTypeHint hint; int pending_buffer_offset_x; int pending_buffer_offset_y; diff --git a/gdk/win32/gdkdrag-win32.c b/gdk/win32/gdkdrag-win32.c index 9bb6f91539..73b0933077 100644 --- a/gdk/win32/gdkdrag-win32.c +++ b/gdk/win32/gdkdrag-win32.c @@ -1730,7 +1730,7 @@ _gdk_win32_surface_drag_begin (GdkSurface *surface, GDK_NOTE (DND, g_print ("_gdk_win32_surface_drag_begin\n")); - gdk_device_get_position (device, &px, &py); + _gdk_device_query_state (device, NULL, NULL, &px, &py, NULL); x_root = round (px + dx); y_root = round (py + dy); diff --git a/gdk/win32/gdksurface-win32.c b/gdk/win32/gdksurface-win32.c index a559cb3271..4078635148 100644 --- a/gdk/win32/gdksurface-win32.c +++ b/gdk/win32/gdksurface-win32.c @@ -140,7 +140,6 @@ gdk_win32_surface_init (GdkWin32Surface *impl) impl->hicon_big = NULL; impl->hicon_small = NULL; impl->hint_flags = 0; - impl->type_hint = GDK_SURFACE_TYPE_HINT_NORMAL; impl->transient_owner = NULL; impl->transient_children = NULL; impl->num_transients = 0; @@ -332,7 +331,7 @@ get_default_title (void) * get its own class */ static ATOM -RegisterGdkClass (GdkSurfaceType wtype, GdkSurfaceTypeHint wtype_hint) +RegisterGdkClass (GdkSurfaceType wtype) { static ATOM klassTOPLEVEL = 0; static ATOM klassTEMP = 0; @@ -613,7 +612,7 @@ _gdk_win32_display_create_surface (GdkDisplay *display, * under the mouse cursor, this will kill any DND. */ - klass = RegisterGdkClass (surface_type, impl->type_hint); + klass = RegisterGdkClass (surface_type); wtitle = g_utf8_to_utf16 (title, -1, NULL, NULL, NULL); diff --git a/gdk/win32/gdksurface-win32.h b/gdk/win32/gdksurface-win32.h index 1f54b7b070..603401f856 100644 --- a/gdk/win32/gdksurface-win32.h +++ b/gdk/win32/gdksurface-win32.h @@ -256,8 +256,6 @@ struct _GdkWin32Surface */ GdkDrop *drop; - GdkSurfaceTypeHint type_hint; - GdkSurface *transient_owner; GSList *transient_children; int num_transients; diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c index b0a49cc737..31ef5878c1 100644 --- a/gdk/x11/gdksurface-x11.c +++ b/gdk/x11/gdksurface-x11.c @@ -884,6 +884,24 @@ disconnect_frame_clock (GdkSurface *surface) } } +typedef enum +{ + GDK_SURFACE_TYPE_HINT_NORMAL, + GDK_SURFACE_TYPE_HINT_DIALOG, + GDK_SURFACE_TYPE_HINT_MENU, /* Torn off menu */ + GDK_SURFACE_TYPE_HINT_TOOLBAR, + GDK_SURFACE_TYPE_HINT_SPLASHSCREEN, + GDK_SURFACE_TYPE_HINT_UTILITY, + GDK_SURFACE_TYPE_HINT_DOCK, + GDK_SURFACE_TYPE_HINT_DESKTOP, + GDK_SURFACE_TYPE_HINT_DROPDOWN_MENU, /* A drop down menu (from a menubar) */ + GDK_SURFACE_TYPE_HINT_POPUP_MENU, /* A popup menu (from right-click) */ + GDK_SURFACE_TYPE_HINT_TOOLTIP, + GDK_SURFACE_TYPE_HINT_NOTIFICATION, + GDK_SURFACE_TYPE_HINT_COMBO, + GDK_SURFACE_TYPE_HINT_DND +} GdkSurfaceTypeHint; + static void gdk_x11_surface_set_title (GdkSurface *surface, const char *title); static void gdk_x11_surface_set_type_hint (GdkSurface *surface,