macos: Provide the right drag action
authorArjan Molenaar <gaphor@gmail.com>
Mon, 16 Jan 2023 22:15:46 +0000 (23:15 +0100)
committerArjan Molenaar <gaphor@gmail.com>
Mon, 16 Jan 2023 22:21:35 +0000 (23:21 +0100)
We should use the drag action/operation provided by the
drag handlers, not rely on our internal bookkeeping.

gdk/macos/GdkMacosWindow.c
gdk/macos/gdkmacosdrag-private.h
gdk/macos/gdkmacosdrag.c

index 1005d0c83774060615d764cae31bfe247d6706e1..79a25c04d3bdb78b2a069f09428e6d1193641f49 100644 (file)
@@ -715,6 +715,7 @@ typedef NSString *CALayerContentsGravity;
   GdkDrag *drag = _gdk_macos_display_find_drag (GDK_MACOS_DISPLAY (display), sequence_number);
 
   _gdk_macos_event_source_queue_event ([NSApp currentEvent]);
+  gdk_drag_set_selected_action (drag, _gdk_macos_drag_ns_operation_to_action (operation));
 
   if (gdk_drag_get_selected_action (drag) != 0)
     g_signal_emit_by_name (drag, "drop-performed");
index ab46828d5e761dc0fce544ee6f3bd5284c04e28d..64db6ba77089205a6ef49fbdb6b4c9a29540b1ea 100644 (file)
@@ -66,6 +66,7 @@ gboolean        _gdk_macos_drag_begin       (GdkMacosDrag       *self,
                                              GdkContentProvider *content,
                                              GdkMacosWindow     *window);
 NSDragOperation _gdk_macos_drag_operation   (GdkMacosDrag       *self);
+GdkDragAction   _gdk_macos_drag_ns_operation_to_action (NSDragOperation operation);
 void     _gdk_macos_drag_surface_move       (GdkMacosDrag   *self,
                                              int             x_root,
                                              int             y_root);
index b7549e5b9e696252c3048d57b4f3a13d290b532a..c0201df067800e821f6565a605cad804f0370297 100644 (file)
@@ -410,6 +410,18 @@ _gdk_macos_drag_operation (GdkMacosDrag *self)
   return operation;
 }
 
+GdkDragAction
+_gdk_macos_drag_ns_operation_to_action (NSDragOperation operation)
+{
+  if (operation & NSDragOperationCopy)
+    return GDK_ACTION_COPY;
+  if (operation & NSDragOperationMove)
+    return GDK_ACTION_MOVE;
+  if (operation & NSDragOperationLink)
+    return GDK_ACTION_LINK;
+  return 0;
+}
+
 void
 _gdk_macos_drag_surface_move (GdkMacosDrag *self,
                               int           x_root,