From a862ca41c5645cb399ea3b439ba58e01cae32162 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 16 May 2018 04:49:58 +0200 Subject: [PATCH] drop: Add gdk_drop_get_drag() For now, it'll always return NULL. We'll fix that later. --- gdk/gdkdrop.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ gdk/gdkdrop.h | 2 ++ 2 files changed, 49 insertions(+) diff --git a/gdk/gdkdrop.c b/gdk/gdkdrop.c index b9c21c0776..46ff8bc196 100644 --- a/gdk/gdkdrop.c +++ b/gdk/gdkdrop.c @@ -34,6 +34,7 @@ typedef struct _GdkDropPrivate GdkDropPrivate; struct _GdkDropPrivate { GdkDevice *device; + GdkDragContext *drag; GdkContentFormats *formats; GdkDragAction actions; }; @@ -43,6 +44,7 @@ enum { PROP_ACTIONS, PROP_DEVICE, PROP_DISPLAY, + PROP_DRAG, PROP_FORMATS, N_PROPERTIES }; @@ -118,6 +120,10 @@ gdk_drop_set_property (GObject *gobject, g_assert (priv->device != NULL); break; + case PROP_DRAG: + priv->drag = g_value_dup_object (value); + break; + case PROP_FORMATS: priv->formats = g_value_dup_boxed (value); #ifdef DROP_SUBCLASS @@ -154,6 +160,10 @@ gdk_drop_get_property (GObject *gobject, g_value_set_object (value, gdk_device_get_display (priv->device)); break; + case PROP_DRAG: + g_value_set_object (value, priv->drag); + break; + case PROP_FORMATS: g_value_set_boxed (value, priv->formats); break; @@ -171,6 +181,7 @@ gdk_drop_finalize (GObject *object) GdkDropPrivate *priv = gdk_drop_get_instance_private (self); g_clear_object (&priv->device); + g_clear_object (&priv->drag); G_OBJECT_CLASS (gdk_drop_parent_class)->finalize (object); } @@ -231,6 +242,21 @@ gdk_drop_class_init (GdkDropClass *klass) G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + /** + * GdkDrop:drag: + * + * The #GdkDrag that initiated this drop + */ + properties[PROP_DRAG] = + g_param_spec_object ("drag", + "Drag", + "The drag that initiated this drop", + GDK_TYPE_DRAG_CONTEXT, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS | + G_PARAM_EXPLICIT_NOTIFY); + /** * GdkDrop:formats: * @@ -351,6 +377,27 @@ gdk_drop_set_actions (GdkDrop *self, g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ACTIONS]); } +/** + * gdk_drop_get_drag: + * @self: a #GdkDrop + * + * If this is an in-app drag-and-drop operation, returns the #GdkDrag + * that corresponds to this drop. + * + * If it is not, %NULL is returned. + * + * Returns: (transfer none) (nullable): the corresponding #GdkDrag + **/ +GdkDragContext * +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; +} + /** * gdk_drop_status: * @self: a #GdkDrop diff --git a/gdk/gdkdrop.h b/gdk/gdkdrop.h index 762c6891bf..6ae088932e 100644 --- a/gdk/gdkdrop.h +++ b/gdk/gdkdrop.h @@ -47,6 +47,8 @@ GDK_AVAILABLE_IN_ALL GdkContentFormats * gdk_drop_get_formats (GdkDrop *self); GDK_AVAILABLE_IN_ALL GdkDragAction gdk_drop_get_actions (GdkDrop *self); +GDK_AVAILABLE_IN_ALL +GdkDragContext * gdk_drop_get_drag (GdkDrop *self); GDK_AVAILABLE_IN_ALL void gdk_drop_status (GdkDrop *self, -- 2.30.2