droptarget: Provide a unique action for gdk_drop_finish
authorMat <mail@mathias.is>
Sun, 17 Jul 2022 16:11:34 +0000 (19:11 +0300)
committerMat <mail@mathias.is>
Sun, 17 Jul 2022 19:59:59 +0000 (22:59 +0300)
gdk_drop_finish() requires a unique drop action. Reuse the existing
make_action_unique() function to get one.

Fixes #5051

gtk/gtkdroptarget.c

index f3240b34e933753d9d6b25c3591337aa765d3b61..ab606d9414ecba769b150cbd8d0abbaed8213e76 100644 (file)
@@ -208,6 +208,21 @@ gtk_drop_target_end_drop (GtkDropTarget *self)
   g_object_thaw_notify (G_OBJECT (self));
 }
 
+static GdkDragAction
+make_action_unique (GdkDragAction actions)
+{
+  if (actions & GDK_ACTION_COPY)
+    return GDK_ACTION_COPY;
+
+  if (actions & GDK_ACTION_MOVE)
+    return GDK_ACTION_MOVE;
+
+  if (actions & GDK_ACTION_LINK)
+    return GDK_ACTION_LINK;
+
+  return 0;
+}
+
 static void
 gtk_drop_target_do_drop (GtkDropTarget *self)
 {
@@ -219,7 +234,7 @@ gtk_drop_target_do_drop (GtkDropTarget *self)
   g_signal_emit (self, signals[DROP], 0, &self->value, self->coords.x, self->coords.y, &success);
 
   if (success)
-    gdk_drop_finish (self->drop, gdk_drop_get_actions (self->drop));
+    gdk_drop_finish (self->drop, make_action_unique (self->actions & gdk_drop_get_actions (self->drop)));
   else
     gdk_drop_finish (self->drop, 0);
 
@@ -348,21 +363,6 @@ gtk_drop_target_accept (GtkDropTarget *self,
   return gdk_content_formats_match_gtype (self->formats, gdk_drop_get_formats (drop)) != G_TYPE_INVALID;
 }
 
-static GdkDragAction
-make_action_unique (GdkDragAction actions)
-{
-  if (actions & GDK_ACTION_COPY)
-    return GDK_ACTION_COPY;
-
-  if (actions & GDK_ACTION_MOVE)
-    return GDK_ACTION_MOVE;
-
-  if (actions & GDK_ACTION_LINK)
-    return GDK_ACTION_LINK;
-
-  return 0;
-}
-
 static GdkDragAction
 gtk_drop_target_enter (GtkDropTarget  *self,
                        double          x,