drop: Add gdk_drop_get_drag()
authorBenjamin Otte <otte@redhat.com>
Wed, 16 May 2018 02:49:58 +0000 (04:49 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 18 Jun 2018 21:49:20 +0000 (23:49 +0200)
For now, it'll always return NULL. We'll fix that later.

gdk/gdkdrop.c
gdk/gdkdrop.h

index b9c21c07763b5ae772a8fac07b03152615771139..46ff8bc19600125e02268ae4560500328324f050 100644 (file)
@@ -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
index 762c6891bf7159a2427efdb76a3b21d542667ec8..6ae088932e72dbd28e52514d23517cc6844f8de0 100644 (file)
@@ -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,