diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index 489c838270..6fced4e39a 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -5012,6 +5012,7 @@ gtk_selection_data_get_type Drag and Drop GtkDestDefaults GtkDragResult + gtk_drag_dest_set gtk_drag_dest_unset @@ -5027,8 +5028,9 @@ gtk_drag_get_data gtk_drag_get_source_widget gtk_drag_highlight gtk_drag_unhighlight + -gtk_drag_begin_with_coordinates +gtk_drag_begin gtk_drag_cancel gtk_drag_set_icon_widget gtk_drag_set_icon_paintable diff --git a/gdk/broadway/gdkdnd-broadway.c b/gdk/broadway/gdkdnd-broadway.c index 1db76f43d3..e17f705f1e 100644 --- a/gdk/broadway/gdkdnd-broadway.c +++ b/gdk/broadway/gdkdnd-broadway.c @@ -111,13 +111,6 @@ gdk_broadway_drag_drag_drop (GdkDrag *context, g_return_if_fail (context != NULL); } -static void -gdk_broadway_drag_drag_abort (GdkDrag *context, - guint32 time) -{ - g_return_if_fail (context != NULL); -} - void _gdk_broadway_surface_register_dnd (GdkSurface *surface) { @@ -136,6 +129,5 @@ gdk_broadway_drag_class_init (GdkBroadwayDragClass *klass) object_class->finalize = gdk_broadway_drag_finalize; - context_class->drag_abort = gdk_broadway_drag_drag_abort; context_class->drag_drop = gdk_broadway_drag_drag_drop; } diff --git a/gdk/gdkdrag.c b/gdk/gdkdrag.c index 2e8efb8e71..f0ae819e02 100644 --- a/gdk/gdkdrag.c +++ b/gdk/gdkdrag.c @@ -35,17 +35,6 @@ #include "gdkenumtypes.h" #include "gdkeventsprivate.h" -typedef struct _GdkDragPrivate GdkDragPrivate; - -struct _GdkDragPrivate -{ - GdkDisplay *display; - GdkDevice *device; - GdkContentFormats *formats; - GdkDragAction actions; - GdkDragAction suggested_action; -}; - static struct { GdkDragAction action; const gchar *name; @@ -64,6 +53,8 @@ enum { PROP_DEVICE, PROP_DISPLAY, PROP_FORMATS, + PROP_SELECTED_ACTION, + PROP_ACTIONS, N_PROPERTIES }; @@ -71,7 +62,6 @@ enum { CANCEL, DROP_PERFORMED, DND_FINISHED, - ACTION_CHANGED, N_SIGNALS }; @@ -79,7 +69,7 @@ static GParamSpec *properties[N_PROPERTIES] = { NULL, }; static guint signals[N_SIGNALS] = { 0 }; static GList *drags = NULL; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GdkDrag, gdk_drag, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE (GdkDrag, gdk_drag, G_TYPE_OBJECT) /** * SECTION:dnd @@ -87,14 +77,17 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GdkDrag, gdk_drag, G_TYPE_OBJECT) * @short_description: Functions for controlling drag and drop handling * * These functions provide a low level interface for drag and drop. - * The X backend of GDK supports both the Xdnd and Motif drag and drop - * protocols transparently, the Win32 backend supports the WM_DROPFILES - * protocol. * + * The GdkDrag object represents the source side of an ongoing DND operation. + * It is created when a drag is started, and stays alive for duration of + * the DND operation. + * + * The GdkDrop object represents the target side of an ongoing DND operation. + * * GTK+ provides a higher level abstraction based on top of these functions, - * and so they are not normally needed in GTK+ applications. - * See the [Drag and Drop][gtk3-Drag-and-Drop] section of - * the GTK+ documentation for more information. + * and so they are not normally needed in GTK+ applications. See the + * [Drag and Drop][gtk4-Drag-and-Drop] section of the GTK+ documentation + * for more information. */ /** @@ -115,11 +108,9 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GdkDrag, gdk_drag, G_TYPE_OBJECT) GdkDisplay * gdk_drag_get_display (GdkDrag *drag) { - GdkDragPrivate *priv = gdk_drag_get_instance_private (drag); - g_return_val_if_fail (GDK_IS_DRAG (drag), NULL); - return priv->display; + return drag->display; } /** @@ -133,48 +124,25 @@ gdk_drag_get_display (GdkDrag *drag) GdkContentFormats * gdk_drag_get_formats (GdkDrag *drag) { - GdkDragPrivate *priv = gdk_drag_get_instance_private (drag); - g_return_val_if_fail (GDK_IS_DRAG (drag), NULL); - return priv->formats; + return drag->formats; } /** * gdk_drag_get_actions: * @drag: a #GdkDrag * - * Determines the bitmask of actions proposed by the source if - * gdk_drag_get_suggested_action() returns %GDK_ACTION_ASK. + * Determines the bitmask of possible actions proposed by the source. * * Returns: the #GdkDragAction flags **/ GdkDragAction gdk_drag_get_actions (GdkDrag *drag) { - GdkDragPrivate *priv = gdk_drag_get_instance_private (drag); - g_return_val_if_fail (GDK_IS_DRAG (drag), 0); - return priv->actions; -} - -/** - * gdk_drag_get_suggested_action: - * @drag: a #GdkDrag - * - * Determines the suggested drag action of the GdkDrag object. - * - * Returns: a #GdkDragAction value - **/ -GdkDragAction -gdk_drag_get_suggested_action (GdkDrag *drag) -{ - GdkDragPrivate *priv = gdk_drag_get_instance_private (drag); - - g_return_val_if_fail (GDK_IS_DRAG (drag), 0); - - return priv->suggested_action; + return drag->actions; } /** @@ -190,7 +158,7 @@ gdk_drag_get_selected_action (GdkDrag *drag) { g_return_val_if_fail (GDK_IS_DRAG (drag), 0); - return drag->action; + return drag->selected_action; } /** @@ -204,11 +172,9 @@ gdk_drag_get_selected_action (GdkDrag *drag) GdkDevice * gdk_drag_get_device (GdkDrag *drag) { - GdkDragPrivate *priv = gdk_drag_get_instance_private (drag); - g_return_val_if_fail (GDK_IS_DRAG (drag), NULL); - return priv->device; + return drag->device; } static void @@ -224,7 +190,6 @@ gdk_drag_set_property (GObject *gobject, GParamSpec *pspec) { GdkDrag *drag = GDK_DRAG (gobject); - GdkDragPrivate *priv = gdk_drag_get_instance_private (drag); switch (prop_id) { @@ -232,34 +197,48 @@ gdk_drag_set_property (GObject *gobject, drag->content = g_value_dup_object (value); if (drag->content) { - g_assert (priv->formats == NULL); - priv->formats = gdk_content_provider_ref_formats (drag->content); + g_assert (drag->formats == NULL); + drag->formats = gdk_content_provider_ref_formats (drag->content); } break; case PROP_DEVICE: - priv->device = g_value_dup_object (value); - g_assert (priv->device != NULL); - priv->display = gdk_device_get_display (priv->device); + drag->device = g_value_dup_object (value); + g_assert (drag->device != NULL); + drag->display = gdk_device_get_display (drag->device); break; case PROP_FORMATS: - if (priv->formats) + if (drag->formats) { GdkContentFormats *override = g_value_dup_boxed (value); if (override) { - gdk_content_formats_unref (priv->formats); - priv->formats = override; + gdk_content_formats_unref (drag->formats); + drag->formats = override; } } else { - priv->formats = g_value_dup_boxed (value); - g_assert (priv->formats != NULL); + drag->formats = g_value_dup_boxed (value); + g_assert (drag->formats != NULL); } break; + case PROP_SELECTED_ACTION: + { + GdkDragAction action = g_value_get_flags (value); + gdk_drag_set_selected_action (drag, action); + } + break; + + case PROP_ACTIONS: + { + GdkDragAction actions = g_value_get_flags (value); + gdk_drag_set_actions (drag, actions); + } + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; @@ -273,7 +252,6 @@ gdk_drag_get_property (GObject *gobject, GParamSpec *pspec) { GdkDrag *drag = GDK_DRAG (gobject); - GdkDragPrivate *priv = gdk_drag_get_instance_private (drag); switch (prop_id) { @@ -282,15 +260,23 @@ gdk_drag_get_property (GObject *gobject, break; case PROP_DEVICE: - g_value_set_object (value, priv->device); + g_value_set_object (value, drag->device); break; case PROP_DISPLAY: - g_value_set_object (value, priv->display); + g_value_set_object (value, drag->display); break; case PROP_FORMATS: - g_value_set_boxed (value, priv->formats); + g_value_set_boxed (value, drag->formats); + break; + + case PROP_SELECTED_ACTION: + g_value_set_flags (value, drag->selected_action); + break; + + case PROP_ACTIONS: + g_value_set_flags (value, drag->actions); break; default: @@ -303,12 +289,11 @@ static void gdk_drag_finalize (GObject *object) { GdkDrag *drag = GDK_DRAG (object); - GdkDragPrivate *priv = gdk_drag_get_instance_private (drag); drags = g_list_remove (drags, drag); g_clear_object (&drag->content); - g_clear_pointer (&priv->formats, gdk_content_formats_unref); + g_clear_pointer (&drag->formats, gdk_content_formats_unref); if (drag->source_surface) g_object_unref (drag->source_surface); @@ -384,6 +369,25 @@ gdk_drag_class_init (GdkDragClass *klass) G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + properties[PROP_SELECTED_ACTION] = + g_param_spec_flags ("selected-action", + "Selected action", + "The currently selected action", + GDK_TYPE_DRAG_ACTION, + 0, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS | + G_PARAM_EXPLICIT_NOTIFY); + + properties[PROP_ACTIONS] = + g_param_spec_flags ("actions", + "Actions", + "The possible actions", + GDK_TYPE_DRAG_ACTION, + 0, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS | + G_PARAM_EXPLICIT_NOTIFY); /** * GdkDrag::cancel: * @drag: The object on which the signal is emitted @@ -432,43 +436,9 @@ gdk_drag_class_init (GdkDragClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - /** - * GdkDrag::action-changed: - * @drag: The object on which the signal is emitted - * @action: The action currently chosen - * - * A new action is being chosen for the drag operation. - */ - signals[ACTION_CHANGED] = - g_signal_new (g_intern_static_string ("action-changed"), - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdkDragClass, action_changed), - NULL, NULL, - g_cclosure_marshal_VOID__FLAGS, - G_TYPE_NONE, 1, GDK_TYPE_DRAG_ACTION); - g_object_class_install_properties (object_class, N_PROPERTIES, properties); } -/* - * gdk_drag_abort: - * @drag: a #GdkDrag - * @time_: the timestamp for this operation - * - * Aborts a drag without dropping. - * - * This function is called by the drag source. - */ -void -gdk_drag_abort (GdkDrag *drag, - guint32 time_) -{ - g_return_if_fail (GDK_IS_DRAG (drag)); - - GDK_DRAG_GET_CLASS (drag)->drag_abort (drag, time_); -} - /* * gdk_drag_drop: * @drag: a #GdkDrag @@ -608,13 +578,31 @@ gdk_drag_write_finish (GdkDrag *drag, void gdk_drag_set_actions (GdkDrag *drag, - GdkDragAction actions, - GdkDragAction suggested_action) + GdkDragAction actions) { - GdkDragPrivate *priv = gdk_drag_get_instance_private (drag); + if (drag->actions == actions) + return; - priv->actions = actions; - priv->suggested_action = suggested_action; + drag->actions = actions; + + g_object_notify_by_pspec (G_OBJECT (drag), properties[PROP_ACTIONS]); +} + +void +gdk_drag_set_selected_action (GdkDrag *drag, + GdkDragAction action) +{ + GdkCursor *cursor; + + if (drag->selected_action == action) + return; + + drag->selected_action = action; + + cursor = gdk_drag_get_cursor (drag, action); + gdk_drag_set_cursor (drag, cursor); + + g_object_notify_by_pspec (G_OBJECT (drag), properties[PROP_SELECTED_ACTION]); } /** diff --git a/gdk/gdkdrag.h b/gdk/gdkdrag.h index dd24c72fb1..984fc80995 100644 --- a/gdk/gdkdrag.h +++ b/gdk/gdkdrag.h @@ -66,8 +66,6 @@ GdkContentFormats *gdk_drag_get_formats (GdkDrag *drag); GDK_AVAILABLE_IN_ALL GdkDragAction gdk_drag_get_actions (GdkDrag *drag); GDK_AVAILABLE_IN_ALL -GdkDragAction gdk_drag_get_suggested_action (GdkDrag *drag); -GDK_AVAILABLE_IN_ALL GdkDragAction gdk_drag_get_selected_action (GdkDrag *drag); GDK_AVAILABLE_IN_ALL diff --git a/gdk/gdkdragprivate.h b/gdk/gdkdragprivate.h index 01a87ef632..665f8452e5 100644 --- a/gdk/gdkdragprivate.h +++ b/gdk/gdkdragprivate.h @@ -33,8 +33,6 @@ typedef struct _GdkDragClass GdkDragClass; struct _GdkDragClass { GObjectClass parent_class; - void (*drag_abort) (GdkDrag *drag, - guint32 time_); void (*drag_drop) (GdkDrag *drag, guint32 time_); GdkSurface* (*get_drag_surface) (GdkDrag *drag); @@ -54,8 +52,6 @@ struct _GdkDragClass { gboolean (*handle_event) (GdkDrag *drag, const GdkEvent *event); - void (*action_changed) (GdkDrag *drag, - GdkDragAction action); }; struct _GdkDrag { @@ -65,8 +61,13 @@ struct _GdkDrag { GdkSurface *source_surface; GdkSurface *drag_surface; + GdkDisplay *display; + GdkDevice *device; + GdkContentFormats *formats; GdkContentProvider *content; - GdkDragAction action; + + GdkDragAction actions; + GdkDragAction selected_action; guint drop_done : 1; /* Whether gdk_drag_drop_done() was performed */ }; @@ -74,8 +75,9 @@ struct _GdkDrag { void gdk_drag_set_cursor (GdkDrag *drag, GdkCursor *cursor); void gdk_drag_set_actions (GdkDrag *drag, - GdkDragAction actions, - GdkDragAction suggested_action); + GdkDragAction actions); +void gdk_drag_set_selected_action (GdkDrag *drag, + GdkDragAction action); void gdk_drag_cancel (GdkDrag *drag, GdkDragCancelReason reason); @@ -83,8 +85,6 @@ gboolean gdk_drag_handle_source_event (GdkEvent *event); GdkCursor * gdk_drag_get_cursor (GdkDrag *drag, GdkDragAction action); -void gdk_drag_abort (GdkDrag *drag, - guint32 time_); void gdk_drag_drop (GdkDrag *drag, guint32 time_); diff --git a/gdk/gdkdrop.c b/gdk/gdkdrop.c index 03bc1e2485..1f1a9e137c 100644 --- a/gdk/gdkdrop.c +++ b/gdk/gdkdrop.c @@ -34,16 +34,6 @@ #include "gdkpipeiostreamprivate.h" #include "gdksurface.h" -typedef struct _GdkDropPrivate GdkDropPrivate; - -struct _GdkDropPrivate { - GdkDevice *device; - GdkDrag *drag; - GdkContentFormats *formats; - GdkSurface *surface; - GdkDragAction actions; -}; - enum { PROP_0, PROP_ACTIONS, @@ -57,7 +47,7 @@ enum { static GParamSpec *properties[N_PROPERTIES] = { NULL, }; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GdkDrop, gdk_drop, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE (GdkDrop, gdk_drop, G_TYPE_OBJECT) /** * GdkDrop: @@ -94,7 +84,6 @@ gdk_drop_read_local_async (GdkDrop *self, GAsyncReadyCallback callback, gpointer user_data) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); GdkContentFormats *content_formats; const char *mime_type; GTask *task; @@ -103,7 +92,7 @@ gdk_drop_read_local_async (GdkDrop *self, g_task_set_priority (task, io_priority); g_task_set_source_tag (task, gdk_drop_read_local_async); - if (priv->drag == NULL) + if (self->drag == NULL) { g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Drag'n'drop from other applications is not supported.")); @@ -111,7 +100,7 @@ gdk_drop_read_local_async (GdkDrop *self, return; } - content_formats = gdk_content_provider_ref_formats (priv->drag->content); + content_formats = gdk_content_provider_ref_formats (self->drag->content); content_formats = gdk_content_formats_union_serialize_mime_types (content_formats); mime_type = gdk_content_formats_match_mime_type (content_formats, formats); @@ -122,7 +111,7 @@ gdk_drop_read_local_async (GdkDrop *self, stream = gdk_pipe_io_stream_new (); output_stream = g_io_stream_get_output_stream (stream); - gdk_drag_write_async (priv->drag, + gdk_drag_write_async (self->drag, mime_type, output_stream, io_priority, @@ -166,7 +155,6 @@ gdk_drop_set_property (GObject *gobject, GParamSpec *pspec) { GdkDrop *self = GDK_DROP (gobject); - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); switch (prop_id) { @@ -175,26 +163,26 @@ gdk_drop_set_property (GObject *gobject, break; case PROP_DEVICE: - priv->device = g_value_dup_object (value); - g_assert (priv->device != NULL); - if (priv->surface) - g_assert (gdk_surface_get_display (priv->surface) == gdk_device_get_display (priv->device)); + self->device = g_value_dup_object (value); + g_assert (self->device != NULL); + if (self->surface) + g_assert (gdk_surface_get_display (self->surface) == gdk_device_get_display (self->device)); break; case PROP_DRAG: - priv->drag = g_value_dup_object (value); + self->drag = g_value_dup_object (value); break; case PROP_FORMATS: - priv->formats = g_value_dup_boxed (value); - g_assert (priv->formats != NULL); + self->formats = g_value_dup_boxed (value); + g_assert (self->formats != NULL); break; case PROP_SURFACE: - priv->surface = g_value_dup_object (value); - g_assert (priv->surface != NULL); - if (priv->device) - g_assert (gdk_surface_get_display (priv->surface) == gdk_device_get_display (priv->device)); + self->surface = g_value_dup_object (value); + g_assert (self->surface != NULL); + if (self->device) + g_assert (gdk_surface_get_display (self->surface) == gdk_device_get_display (self->device)); break; default: @@ -210,32 +198,31 @@ gdk_drop_get_property (GObject *gobject, GParamSpec *pspec) { GdkDrop *self = GDK_DROP (gobject); - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); switch (prop_id) { case PROP_ACTIONS: - g_value_set_flags (value, priv->actions); + g_value_set_flags (value, self->actions); break; case PROP_DEVICE: - g_value_set_object (value, priv->device); + g_value_set_object (value, self->device); break; case PROP_DISPLAY: - g_value_set_object (value, gdk_device_get_display (priv->device)); + g_value_set_object (value, gdk_device_get_display (self->device)); break; case PROP_DRAG: - g_value_set_object (value, priv->drag); + g_value_set_object (value, self->drag); break; case PROP_FORMATS: - g_value_set_boxed (value, priv->formats); + g_value_set_boxed (value, self->formats); break; case PROP_SURFACE: - g_value_set_object (value, priv->surface); + g_value_set_object (value, self->surface); break; default: @@ -248,10 +235,9 @@ static void gdk_drop_finalize (GObject *object) { GdkDrop *self = GDK_DROP (object); - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); - g_clear_object (&priv->device); - g_clear_object (&priv->drag); + g_clear_object (&self->device); + g_clear_object (&self->drag); G_OBJECT_CLASS (gdk_drop_parent_class)->finalize (object); } @@ -376,11 +362,9 @@ gdk_drop_init (GdkDrop *self) GdkDisplay * gdk_drop_get_display (GdkDrop *self) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); - g_return_val_if_fail (GDK_IS_DROP (self), NULL); - return gdk_device_get_display (priv->device); + return gdk_device_get_display (self->device); } /** @@ -394,11 +378,9 @@ gdk_drop_get_display (GdkDrop *self) GdkDevice * gdk_drop_get_device (GdkDrop *self) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); - g_return_val_if_fail (GDK_IS_DROP (self), NULL); - return priv->device; + return self->device; } /** @@ -413,11 +395,9 @@ gdk_drop_get_device (GdkDrop *self) GdkContentFormats * gdk_drop_get_formats (GdkDrop *self) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); - g_return_val_if_fail (GDK_IS_DROP (self), NULL); - return priv->formats; + return self->formats; } /** @@ -431,11 +411,9 @@ gdk_drop_get_formats (GdkDrop *self) GdkSurface * gdk_drop_get_surface (GdkDrop *self) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); - g_return_val_if_fail (GDK_IS_DROP (self), NULL); - return priv->surface; + return self->surface; } /** @@ -457,26 +435,22 @@ gdk_drop_get_surface (GdkDrop *self) GdkDragAction gdk_drop_get_actions (GdkDrop *self) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); - g_return_val_if_fail (GDK_IS_DROP (self), 0); - return priv->actions; + return self->actions; } void gdk_drop_set_actions (GdkDrop *self, GdkDragAction actions) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); - g_return_if_fail (GDK_IS_DROP (self)); g_return_if_fail ((actions & GDK_ACTION_ASK) == 0); - if (priv->actions == actions) + if (self->actions == actions) return; - priv->actions = actions; + self->actions = actions; g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ACTIONS]); } @@ -495,11 +469,9 @@ gdk_drop_set_actions (GdkDrop *self, GdkDrag * gdk_drop_get_drag (GdkDrop *self) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); - g_return_val_if_fail (GDK_IS_DROP (self), 0); - return priv->drag; + return self->drag; } /** @@ -557,9 +529,7 @@ gdk_drop_read_internal (GdkDrop *self, GAsyncReadyCallback callback, gpointer user_data) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); - - if (priv->drag) + if (self->drag) { gdk_drop_read_local_async (self, formats, @@ -708,7 +678,6 @@ gdk_drop_read_value_internal (GdkDrop *self, GAsyncReadyCallback callback, gpointer user_data) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); GdkContentFormatsBuilder *builder; GdkContentFormats *formats; GValue *value; @@ -721,11 +690,11 @@ gdk_drop_read_value_internal (GdkDrop *self, g_value_init (value, type); g_task_set_task_data (task, value, free_value); - if (priv->drag) + if (self->drag) { GError *error = NULL; - if (gdk_content_provider_get_value (priv->drag->content, value, &error)) + if (gdk_content_provider_get_value (self->drag->content, value, &error)) { g_task_return_pointer (task, value, NULL); g_object_unref (task); @@ -906,14 +875,13 @@ gdk_drop_emit_enter_event (GdkDrop *self, gboolean dont_queue, guint32 time) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); GdkEvent *event; event = gdk_event_new (GDK_DRAG_ENTER); - event->any.surface = g_object_ref (priv->surface); + event->any.surface = g_object_ref (self->surface); event->dnd.drop = g_object_ref (self); event->dnd.time = time; - gdk_event_set_device (event, priv->device); + gdk_event_set_device (event, self->device); gdk_drop_do_emit_event (event, dont_queue); } @@ -925,16 +893,15 @@ gdk_drop_emit_motion_event (GdkDrop *self, double y_root, guint32 time) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); GdkEvent *event; event = gdk_event_new (GDK_DRAG_MOTION); - event->any.surface = g_object_ref (priv->surface); + event->any.surface = g_object_ref (self->surface); event->dnd.drop = g_object_ref (self); event->dnd.time = time; event->dnd.x_root = x_root; event->dnd.y_root = y_root; - gdk_event_set_device (event, priv->device); + gdk_event_set_device (event, self->device); gdk_drop_do_emit_event (event, dont_queue); } @@ -944,14 +911,13 @@ gdk_drop_emit_leave_event (GdkDrop *self, gboolean dont_queue, guint32 time) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); GdkEvent *event; event = gdk_event_new (GDK_DRAG_LEAVE); - event->any.surface = g_object_ref (priv->surface); + event->any.surface = g_object_ref (self->surface); event->dnd.drop = g_object_ref (self); event->dnd.time = time; - gdk_event_set_device (event, priv->device); + gdk_event_set_device (event, self->device); gdk_drop_do_emit_event (event, dont_queue); } @@ -963,16 +929,15 @@ gdk_drop_emit_drop_event (GdkDrop *self, double y_root, guint32 time) { - GdkDropPrivate *priv = gdk_drop_get_instance_private (self); GdkEvent *event; event = gdk_event_new (GDK_DROP_START); - event->any.surface = g_object_ref (priv->surface); + event->any.surface = g_object_ref (self->surface); event->dnd.drop = g_object_ref (self); event->dnd.time = time; event->dnd.x_root = x_root; event->dnd.y_root = y_root; - gdk_event_set_device (event, priv->device); + gdk_event_set_device (event, self->device); gdk_drop_do_emit_event (event, dont_queue); } diff --git a/gdk/gdkdropprivate.h b/gdk/gdkdropprivate.h index 86a1fdbf8a..6d04923985 100644 --- a/gdk/gdkdropprivate.h +++ b/gdk/gdkdropprivate.h @@ -34,6 +34,12 @@ typedef struct _GdkDropClass GdkDropClass; struct _GdkDrop { GObject parent_instance; + + GdkDevice *device; + GdkDrag *drag; + GdkContentFormats *formats; + GdkSurface *surface; + GdkDragAction actions; }; struct _GdkDropClass { diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c index 97201fd1a4..546d600ff8 100644 --- a/gdk/wayland/gdkdevice-wayland.c +++ b/gdk/wayland/gdkdevice-wayland.c @@ -250,9 +250,6 @@ struct _GdkWaylandSeat GdkDrag *drag; GdkDrop *drop; - /* Source/dest for non-local dnd */ - GdkSurface *foreign_dnd_surface; - /* Some tracking on gesture events */ guint gesture_n_fingers; gdouble gesture_scale; @@ -4562,12 +4559,6 @@ static const struct wl_surface_listener pointer_surface_listener = { pointer_surface_leave }; -static GdkSurface * -create_foreign_dnd_surface (GdkDisplay *display) -{ - return gdk_surface_new_popup (display, &(GdkRectangle) { 0, 0, 1, 1 }); -} - static void gdk_wayland_pointer_data_finalize (GdkWaylandPointerData *pointer) { @@ -4602,7 +4593,6 @@ gdk_wayland_seat_finalize (GObject *object) g_clear_object (&seat->clipboard); g_clear_object (&seat->primary_clipboard); g_hash_table_destroy (seat->touches); - gdk_surface_destroy (seat->foreign_dnd_surface); zwp_tablet_seat_v2_destroy (seat->wp_tablet_seat); stop_key_repeat (seat); @@ -4944,7 +4934,6 @@ _gdk_wayland_display_create_seat (GdkWaylandDisplay *display_wayland, seat->keymap = _gdk_wayland_keymap_new (display); seat->display = display; seat->touches = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) g_free); - seat->foreign_dnd_surface = create_foreign_dnd_surface (display); seat->wl_seat = wl_seat; wl_seat_add_listener (seat->wl_seat, &seat_listener, seat); diff --git a/gdk/wayland/gdkdnd-wayland.c b/gdk/wayland/gdkdrag-wayland.c similarity index 94% rename from gdk/wayland/gdkdnd-wayland.c rename to gdk/wayland/gdkdrag-wayland.c index 4288693766..6ab99d77ba 100644 --- a/gdk/wayland/gdkdnd-wayland.c +++ b/gdk/wayland/gdkdrag-wayland.c @@ -51,7 +51,6 @@ struct _GdkWaylandDrag struct wl_surface *dnd_wl_surface; struct wl_data_source *data_source; struct wl_data_offer *offer; - GdkDragAction selected_action; uint32_t serial; gint hot_x; gint hot_y; @@ -105,12 +104,6 @@ gdk_to_wl_actions (GdkDragAction action) return dnd_actions; } -static void -gdk_wayland_drag_drag_abort (GdkDrag *drag, - guint32 time) -{ -} - static void gdk_wayland_drag_drag_drop (GdkDrag *drag, guint32 time) @@ -125,7 +118,7 @@ gdk_wayland_drag_init (GdkWaylandDrag *drag_wayland) drag = GDK_DRAG (drag_wayland); drags = g_list_prepend (drags, drag); - drag->action = GDK_ACTION_COPY; + gdk_drag_set_selected_action (drag, GDK_ACTION_COPY); } static GdkSurface * @@ -161,17 +154,8 @@ gdk_wayland_drag_set_cursor (GdkDrag *drag, { GdkDevice *device = gdk_drag_get_device (drag); - gdk_wayland_seat_set_global_cursor (gdk_device_get_seat (device), cursor); -} - -static void -gdk_wayland_drag_action_changed (GdkDrag *drag, - GdkDragAction action) -{ - GdkCursor *cursor; - - cursor = gdk_drag_get_cursor (drag, action); - gdk_drag_set_cursor (drag, cursor); + if (device != NULL) + gdk_wayland_seat_set_global_cursor (gdk_device_get_seat (device), cursor); } static void @@ -212,13 +196,11 @@ gdk_wayland_drag_class_init (GdkWaylandDragClass *klass) object_class->finalize = gdk_wayland_drag_finalize; - drag_class->drag_abort = gdk_wayland_drag_drag_abort; drag_class->drag_drop = gdk_wayland_drag_drag_drop; drag_class->get_drag_surface = gdk_wayland_drag_get_drag_surface; drag_class->set_hotspot = gdk_wayland_drag_set_hotspot; drag_class->drop_done = gdk_wayland_drag_drop_done; drag_class->set_cursor = gdk_wayland_drag_set_cursor; - drag_class->action_changed = gdk_wayland_drag_action_changed; drag_class->drop_performed = gdk_wayland_drag_drop_performed; drag_class->cancel = gdk_wayland_drag_cancel; } @@ -346,8 +328,7 @@ data_source_action (void *data, g_message ("data source action, source = %p action=%x", source, action)); - drag->action = _wl_to_gdk_actions (action); - g_signal_emit_by_name (drag, "action-changed", drag->action); + gdk_drag_set_selected_action (drag, _wl_to_gdk_actions (action)); } static const struct wl_data_source_listener data_source_listener = { @@ -392,6 +373,7 @@ _gdk_wayland_surface_drag_begin (GdkSurface *surface, GdkDrag *drag; GdkSeat *seat; GdkWaylandDisplay *display_wayland; + GdkCursor *cursor; display_wayland = GDK_WAYLAND_DISPLAY (gdk_device_get_display (device)); seat = gdk_device_get_seat (device); @@ -423,6 +405,9 @@ _gdk_wayland_surface_drag_begin (GdkSurface *surface, drag_wayland->dnd_wl_surface, _gdk_wayland_display_get_serial (display_wayland)); + cursor = gdk_drag_get_cursor (drag, gdk_drag_get_selected_action (drag)); + gdk_drag_set_cursor (drag, cursor); + gdk_seat_ungrab (seat); return drag; diff --git a/gdk/wayland/meson.build b/gdk/wayland/meson.build index 085224d239..0d0cf80851 100644 --- a/gdk/wayland/meson.build +++ b/gdk/wayland/meson.build @@ -5,7 +5,7 @@ gdk_wayland_sources = files([ 'gdkcursor-wayland.c', 'gdkdevice-wayland.c', 'gdkdisplay-wayland.c', - 'gdkdnd-wayland.c', + 'gdkdrag-wayland.c', 'gdkdrop-wayland.c', 'gdkeventsource.c', 'gdkglcontext-wayland.c', diff --git a/gdk/win32/gdkdrag-win32.c b/gdk/win32/gdkdrag-win32.c index 347e0f6f19..82a653df1a 100644 --- a/gdk/win32/gdkdrag-win32.c +++ b/gdk/win32/gdkdrag-win32.c @@ -806,7 +806,7 @@ gdk_drag_new (GdkDisplay *display, else drag_win32->scale = _gdk_win32_display_get_monitor_scale_factor (win32_display, NULL, NULL, NULL); - gdk_drag_set_actions (drag, actions, actions); + gdk_drag_set_actions (drag, actions); drag_win32->protocol = protocol; return drag; @@ -1072,7 +1072,7 @@ maybe_emit_action_changed (GdkWin32Drag *drag_win32, if (actions != drag_win32->current_action) { drag_win32->current_action = actions; - g_signal_emit_by_name (GDK_DRAG (drag_win32), "action-changed", actions); + gdk_drag_set_selected_action (GDK_DRAG (drag_win32), actions); } } @@ -1088,7 +1088,6 @@ _gdk_win32_local_drag_give_feedback (GdkDrag *drag, GDK_NOTE (DND, g_print ("_gdk_win32_local_drag_give_feedback: 0x%p\n", drag)); - drag->action = actions; maybe_emit_action_changed (drag_win32, actions); } @@ -1107,8 +1106,7 @@ give_feedback (gpointer user_data) GDK_NOTE (DND, g_print ("gdk_dnd_handle_drag_status: 0x%p\n", drag)); - drag->action = action_for_drop_effect (feedback->received_drop_effect); - maybe_emit_action_changed (drag_win32, drag->action); + maybe_emit_action_changed (drag_win32, action_for_drop_effect (feedback->received_drop_effect)); } free_queue_item (&feedback->base); @@ -1923,13 +1921,12 @@ gdk_win32_local_drag_motion (GdkDrag *drag, actions = gdk_drag_get_actions (drag); GDK_NOTE (DND, g_print ("gdk_win32_local_drag_motion: @ %+d:%+d possible=%s\n" - " dest=%p (current %p) drop=%p drag=%p:{actions=%s,suggested=%s,action=%s}\n", + " dest=%p (current %p) drop=%p drag=%p:{actions=%s,action=%s}\n", x_root, y_root, _gdk_win32_drag_action_to_string (possible_actions), dest_window, drag_win32->dest_window, drop, drag, _gdk_win32_drag_action_to_string (actions), - _gdk_win32_drag_action_to_string (gdk_drag_get_suggested_action (drag)), - _gdk_win32_drag_action_to_string (drag->action))); + _gdk_win32_drag_action_to_string (gdk_drag_get_selected_action (drag)))); if (drag_win32->dest_window != dest_window) { @@ -1970,12 +1967,11 @@ gdk_win32_local_drag_motion (GdkDrag *drag, } GDK_NOTE (DND, g_print (" returning %s\n" - " drag=%p:{actions=%s,suggested=%s,action=%s}\n", + " drag=%p:{actions=%s,action=%s}\n", (drop != NULL && drag_win32->drag_status == GDK_DRAG_STATUS_DRAG) ? "TRUE" : "FALSE", drag, _gdk_win32_drag_action_to_string (gdk_drag_get_actions (drag)), - _gdk_win32_drag_action_to_string (gdk_drag_get_suggested_action (drag)), - _gdk_win32_drag_action_to_string (drag->action))); + _gdk_win32_drag_action_to_string (gdk_drag_get_selected_action (drag)))); return (drop != NULL && drag_win32->drag_status == GDK_DRAG_STATUS_DRAG); } @@ -2032,31 +2028,6 @@ gdk_win32_drag_drop (GdkDrag *drag, } } -static void -gdk_win32_drag_abort (GdkDrag *drag, - guint32 time_) -{ - GdkWin32Drag *drag_win32 = GDK_WIN32_DRAG (drag); - GdkWin32Clipdrop *clipdrop = _gdk_win32_clipdrop_get (); - - g_assert (_win32_main_thread == NULL || - _win32_main_thread == g_thread_self ()); - - g_return_if_fail (drag != NULL); - - GDK_NOTE (DND, g_print ("gdk_win32_drag_abort\n")); - - if (drag_win32->protocol == GDK_DRAG_PROTO_OLE2) - { - gpointer ddd = g_hash_table_lookup (clipdrop->active_source_drags, drag); - - drag_win32->util_data.state = GDK_WIN32_DND_NONE; - - if (ddd) - send_source_state_update (clipdrop, drag_win32, ddd); - } -} - static void gdk_win32_drag_set_cursor (GdkDrag *drag, GdkCursor *cursor) @@ -2558,16 +2529,6 @@ gdk_win32_drag_handle_event (GdkDrag *drag, return FALSE; } -void -gdk_win32_drag_action_changed (GdkDrag *drag, - GdkDragAction action) -{ - GdkCursor *cursor; - - cursor = gdk_drag_get_cursor (drag, action); - gdk_drag_set_cursor (drag, cursor); -} - static GdkSurface * gdk_win32_drag_get_drag_surface (GdkDrag *drag) { @@ -2603,7 +2564,6 @@ gdk_win32_drag_class_init (GdkWin32DragClass *klass) object_class->finalize = gdk_win32_drag_finalize; - drag_class->drag_abort = gdk_win32_drag_abort; drag_class->drag_drop = gdk_win32_drag_drop; drag_class->get_drag_surface = gdk_win32_drag_get_drag_surface; @@ -2613,5 +2573,4 @@ gdk_win32_drag_class_init (GdkWin32DragClass *klass) drag_class->cancel = gdk_win32_drag_cancel; drag_class->drop_performed = gdk_win32_drag_drop_performed; drag_class->handle_event = gdk_win32_drag_handle_event; - drag_class->action_changed = gdk_win32_drag_action_changed; } diff --git a/gdk/x11/gdkdnd-x11.c b/gdk/x11/gdkdnd-x11.c index 383cc09e47..81b8db655c 100644 --- a/gdk/x11/gdkdnd-x11.c +++ b/gdk/x11/gdkdnd-x11.c @@ -170,8 +170,6 @@ static void gdk_surface_cache_unref (GdkSurfaceCache *cache); gboolean gdk_x11_drag_handle_event (GdkDrag *drag, const GdkEvent *event); -void gdk_x11_drag_action_changed (GdkDrag *drag, - GdkDragAction action); static GList *drags; static GSList *window_caches; @@ -198,8 +196,6 @@ static gboolean gdk_x11_drag_drag_motion (GdkDrag *drag, GdkDragAction suggested_action, GdkDragAction possible_actions, guint32 time); -static void gdk_x11_drag_drag_abort (GdkDrag *drag, - guint32 time_); static void gdk_x11_drag_drag_drop (GdkDrag *drag, guint32 time_); static GdkSurface * gdk_x11_drag_get_drag_surface (GdkDrag *drag); @@ -223,7 +219,6 @@ gdk_x11_drag_class_init (GdkX11DragClass *klass) object_class->finalize = gdk_x11_drag_finalize; - drag_class->drag_abort = gdk_x11_drag_drag_abort; drag_class->drag_drop = gdk_x11_drag_drag_drop; drag_class->get_drag_surface = gdk_x11_drag_get_drag_surface; drag_class->set_hotspot = gdk_x11_drag_set_hotspot; @@ -232,7 +227,6 @@ gdk_x11_drag_class_init (GdkX11DragClass *klass) drag_class->cancel = gdk_x11_drag_cancel; drag_class->drop_performed = gdk_x11_drag_drop_performed; drag_class->handle_event = gdk_x11_drag_handle_event; - drag_class->action_changed = gdk_x11_drag_action_changed; } static void @@ -882,13 +876,8 @@ gdk_x11_drag_handle_status (GdkDisplay *display, action = 0; } - drag->action = xdnd_action_from_atom (display, action); - - if (drag->action != drag_x11->current_action) - { - drag_x11->current_action = drag->action; - g_signal_emit_by_name (drag, "action-changed", drag->action); - } + gdk_drag_set_selected_action (drag, xdnd_action_from_atom (display, action)); + drag_x11->current_action = action; } } @@ -1010,12 +999,8 @@ send_client_message_async_cb (Window window, window == drag_x11->proxy_xid) { drag_x11->proxy_xid = None; - drag->action = 0; - if (drag->action != drag_x11->current_action) - { - drag_x11->current_action = 0; - g_signal_emit_by_name (drag, "action-changed", 0); - } + gdk_drag_set_selected_action (drag, 0); + drag_x11->current_action = 0; drag_x11->drag_status = GDK_DRAG_STATUS_DRAG; } @@ -1489,7 +1474,7 @@ gdk_x11_drag_drag_motion (GdkDrag *drag, if (drag_x11->drag_surface) move_drag_surface (drag, x_root, y_root); - gdk_drag_set_actions (drag, possible_actions, suggested_action); + gdk_drag_set_actions (drag, possible_actions); if (protocol == GDK_DRAG_PROTO_XDND && drag_x11->version == 0) { @@ -1558,17 +1543,13 @@ gdk_x11_drag_drag_motion (GdkDrag *drag, { drag_x11->proxy_xid = None; drag_x11->drop_xid = None; - drag->action = 0; + gdk_drag_set_selected_action (drag, 0); } /* Push a status event, to let the client know that * the drag changed */ - if (drag->action != drag_x11->current_action) - { - drag_x11->current_action = drag->action; - g_signal_emit_by_name (drag, "action-changed", drag->action); - } + drag_x11->current_action = gdk_drag_get_selected_action (drag); } /* Send a drag-motion event */ @@ -1597,15 +1578,11 @@ gdk_x11_drag_drag_motion (GdkDrag *drag, */ if (gdk_content_formats_contain_mime_type (formats, "application/x-rootwindow-drop") || gdk_content_formats_contain_mime_type (formats, "application/x-rootwin-drop")) - drag->action = gdk_drag_get_suggested_action (drag); + gdk_drag_set_selected_action (drag, suggested_action); else - drag->action = 0; + gdk_drag_set_selected_action (drag, 0); - if (drag->action != drag_x11->current_action) - { - drag_x11->current_action = drag->action; - g_signal_emit_by_name (drag, "action-changed", drag->action); - } + drag_x11->current_action = gdk_drag_get_selected_action (drag); } break; case GDK_DRAG_PROTO_NONE: @@ -1622,13 +1599,6 @@ gdk_x11_drag_drag_motion (GdkDrag *drag, return FALSE; } -static void -gdk_x11_drag_drag_abort (GdkDrag *drag, - guint32 time) -{ - gdk_drag_do_leave (GDK_X11_DRAG (drag), time); -} - static void gdk_x11_drag_drag_drop (GdkDrag *drag, guint32 time) @@ -2267,19 +2237,20 @@ gdk_drag_update (GdkDrag *drag, guint32 evtime) { GdkX11Drag *x11_drag = GDK_X11_DRAG (drag); - GdkDragAction action, possible_actions; + GdkDragAction suggested_action; + GdkDragAction possible_actions; GdkDragProtocol protocol; Window proxy; gdk_drag_get_current_actions (mods, GDK_BUTTON_PRIMARY, x11_drag->actions, - &action, &possible_actions); + &suggested_action, &possible_actions); proxy = gdk_x11_drag_find_surface (drag, - x11_drag->drag_surface, - x_root, y_root, &protocol); + x11_drag->drag_surface, + x_root, y_root, &protocol); gdk_x11_drag_drag_motion (drag, proxy, protocol, x_root, y_root, - action, possible_actions, evtime); + suggested_action, possible_actions, evtime); } static gboolean @@ -2448,13 +2419,3 @@ gdk_x11_drag_handle_event (GdkDrag *drag, return FALSE; } - -void -gdk_x11_drag_action_changed (GdkDrag *drag, - GdkDragAction action) -{ - GdkCursor *cursor; - - cursor = gdk_drag_get_cursor (drag, action); - gdk_drag_set_cursor (drag, cursor); -} diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c index 9273969028..643b86e5b9 100644 --- a/gtk/gtkcalendar.c +++ b/gtk/gtkcalendar.c @@ -2675,10 +2675,10 @@ gtk_calendar_drag_update (GtkGestureDrag *gesture, targets = gdk_content_formats_new (NULL, 0); targets = gtk_content_formats_add_text_targets (targets); - drag = gtk_drag_begin_with_coordinates (widget, - gtk_gesture_get_device (GTK_GESTURE (gesture)), - targets, GDK_ACTION_COPY, - start_x, start_y); + drag = gtk_drag_begin (widget, + gtk_gesture_get_device (GTK_GESTURE (gesture)), + targets, GDK_ACTION_COPY, + start_x, start_y); priv->in_drag = 0; gdk_content_formats_unref (targets); diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index f00a213da7..25cc9e659d 100644 --- a/gtk/gtkdnd.c +++ b/gtk/gtkdnd.c @@ -961,17 +961,13 @@ gtk_drag_begin_internal (GtkWidget *widget, } /** - * gtk_drag_begin_with_coordinates: (method) + * gtk_drag_begin: (method) * @widget: the source widget - * @device: (nullable): the device that starts the drag or %NULL to use the default - * pointer. - * @targets: The targets (data formats) in which the - * source can provide the data + * @device: (nullable): the device that starts the drag or %NULL to use the default pointer + * @targets: The targets (data formats) in which the source can provide the data * @actions: A bitmask of the allowed drag actions for this drag - * @x: The initial x coordinate to start dragging from, in the coordinate space - * of @widget. - * @y: The initial y coordinate to start dragging from, in the coordinate space - * of @widget. + * @x: The initial x coordinate to start dragging from, in the coordinate space of @widget. + * @y: The initial y coordinate to start dragging from, in the coordinate space of @widget. * * Initiates a drag on the source side. The function only needs to be used * when the application is starting drags itself, and is not needed when @@ -980,12 +976,12 @@ gtk_drag_begin_internal (GtkWidget *widget, * Returns: (transfer none): the context for this drag */ GdkDrag * -gtk_drag_begin_with_coordinates (GtkWidget *widget, - GdkDevice *device, - GdkContentFormats *targets, - GdkDragAction actions, - gint x, - gint y) +gtk_drag_begin (GtkWidget *widget, + GdkDevice *device, + GdkContentFormats *targets, + GdkDragAction actions, + gint x, + gint y) { g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); g_return_val_if_fail (device == NULL || GDK_IS_DEVICE (device), NULL); @@ -1411,14 +1407,14 @@ gtk_drag_check_threshold (GtkWidget *widget, /** * gtk_drag_cancel: - * @drag: a drag context, as e.g. returned by gtk_drag_begin_with_coordinates() + * @drag: a drag context, as e.g. returned by gtk_drag_begin() * * Cancels an ongoing drag operation on the source side. * * If you want to be able to cancel a drag operation in this way, * you need to keep a pointer to the drag context, either from an - * explicit call to gtk_drag_begin_with_coordinates(), or by - * connecting to #GtkWidget::drag-begin. + * explicit call to gtk_drag_begin(), or by connecting to + * #GtkWidget::drag-begin. * * If @context does not refer to an ongoing drag operation, this * function does nothing. diff --git a/gtk/gtkdnd.h b/gtk/gtkdnd.h index 2db8978c24..2c81f9d689 100644 --- a/gtk/gtkdnd.h +++ b/gtk/gtkdnd.h @@ -55,12 +55,12 @@ void gtk_drag_unhighlight (GtkWidget *widget); /* Source side */ GDK_AVAILABLE_IN_ALL -GdkDrag *gtk_drag_begin_with_coordinates (GtkWidget *widget, - GdkDevice *device, - GdkContentFormats *targets, - GdkDragAction actions, - gint x, - gint y); +GdkDrag *gtk_drag_begin (GtkWidget *widget, + GdkDevice *device, + GdkContentFormats *targets, + GdkDragAction actions, + gint x, + gint y); GDK_AVAILABLE_IN_ALL void gtk_drag_cancel (GdkDrag *drag); diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 8ad735129e..bbed89d601 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -3029,11 +3029,11 @@ icon_drag_update_cb (GtkGestureDrag *gesture, x, y)) { icon_info->in_drag = TRUE; - gtk_drag_begin_with_coordinates (GTK_WIDGET (entry), - gtk_gesture_get_device (GTK_GESTURE (gesture)), - icon_info->target_list, - icon_info->actions, - start_x, start_y); + gtk_drag_begin (GTK_WIDGET (entry), + gtk_gesture_get_device (GTK_GESTURE (gesture)), + icon_info->target_list, + icon_info->actions, + start_x, start_y); } } @@ -3893,11 +3893,11 @@ gtk_entry_drag_gesture_update (GtkGestureDrag *gesture, gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges); - gtk_drag_begin_with_coordinates (widget, - gdk_event_get_device ((GdkEvent*) event), - target_list, actions, - priv->drag_start_x + ranges[0], - priv->drag_start_y); + gtk_drag_begin (widget, + gdk_event_get_device ((GdkEvent*) event), + target_list, actions, + priv->drag_start_x + ranges[0], + priv->drag_start_y); g_free (ranges); priv->in_drag = FALSE; diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c index 680ddb61de..160bd6b2c8 100644 --- a/gtk/gtkiconview.c +++ b/gtk/gtkiconview.c @@ -6064,12 +6064,12 @@ gtk_icon_view_maybe_begin_drag (GtkIconView *icon_view, retval = TRUE; - drag = gtk_drag_begin_with_coordinates (widget, - device, - gtk_drag_source_get_target_list (widget), - icon_view->priv->source_actions, - icon_view->priv->press_start_x, - icon_view->priv->press_start_y); + drag = gtk_drag_begin (widget, + device, + gtk_drag_source_get_target_list (widget), + icon_view->priv->source_actions, + icon_view->priv->press_start_x, + icon_view->priv->press_start_y); set_source_row (drag, model, path); diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 86661a8d36..967e4f46ab 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -4722,12 +4722,12 @@ gtk_label_drag_gesture_update (GtkGestureDrag *gesture, g_signal_connect (widget, "drag-begin", G_CALLBACK (drag_begin_cb), NULL); - gtk_drag_begin_with_coordinates (widget, - gtk_gesture_get_device (GTK_GESTURE (gesture)), - target_list, - GDK_ACTION_COPY, - info->drag_start_x, - info->drag_start_y); + gtk_drag_begin (widget, + gtk_gesture_get_device (GTK_GESTURE (gesture)), + target_list, + GDK_ACTION_COPY, + info->drag_start_x, + info->drag_start_y); info->in_drag = FALSE; diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index c371de0128..6ea21028b1 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -2654,10 +2654,10 @@ gtk_notebook_motion (GtkEventController *controller, { priv->detached_tab = priv->cur_page; - gtk_drag_begin_with_coordinates (widget, - gtk_get_current_event_device (), - priv->source_targets, GDK_ACTION_MOVE, - priv->drag_begin_x, priv->drag_begin_y); + gtk_drag_begin (widget, + gtk_get_current_event_device (), + priv->source_targets, GDK_ACTION_MOVE, + priv->drag_begin_x, priv->drag_begin_y); return; } diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index 5ec8408ee9..090d1d0aa7 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -3793,10 +3793,10 @@ on_row_dragged (GtkGestureDrag *gesture, sidebar->dragging_over = TRUE; - gtk_drag_begin_with_coordinates (GTK_WIDGET (sidebar), - gtk_gesture_get_device (GTK_GESTURE (gesture)), - sidebar->source_targets, GDK_ACTION_MOVE, - drag_x, drag_y); + gtk_drag_begin (GTK_WIDGET (sidebar), + gtk_gesture_get_device (GTK_GESTURE (gesture)), + sidebar->source_targets, GDK_ACTION_MOVE, + drag_x, drag_y); } g_object_unref (sidebar); diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 1c6aa8f2db..e7440badb0 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -7623,11 +7623,11 @@ gtk_text_view_start_selection_dnd (GtkTextView *text_view, g_signal_connect (text_view, "drag-begin", G_CALLBACK (drag_begin_cb), NULL); - gtk_drag_begin_with_coordinates (GTK_WIDGET (text_view), - gdk_event_get_device (event), - formats, - GDK_ACTION_COPY | GDK_ACTION_MOVE, - x, y); + gtk_drag_begin (GTK_WIDGET (text_view), + gdk_event_get_device (event), + formats, + GDK_ACTION_COPY | GDK_ACTION_MOVE, + x, y); } static void diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 785332448a..f9ccd551c4 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -7385,11 +7385,11 @@ gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view) gtk_gesture_set_state (GTK_GESTURE (tree_view->priv->drag_gesture), GTK_EVENT_SEQUENCE_CLAIMED); - drag = gtk_drag_begin_with_coordinates (widget, - gtk_gesture_get_device (GTK_GESTURE (tree_view->priv->drag_gesture)), - gtk_drag_source_get_target_list (widget), - di->source_actions, - start_x, start_y); + drag = gtk_drag_begin (widget, + gtk_gesture_get_device (GTK_GESTURE (tree_view->priv->drag_gesture)), + gtk_drag_source_get_target_list (widget), + di->source_actions, + start_x, start_y); set_source_row (drag, model, path);