Gtk.Widget.prototype.drag_dest_set
function drag_dest_set(flags:Gtk.DestDefaults, targets:[Gtk.TargetEntry], actions:Gdk.DragAction):void { // Gjs wrapper for gtk_drag_dest_set() }
Sets a widget as a potential drop destination, and adds default behaviors.
The default behaviors listed in flags have an effect similar to installing default handlers for the widget's drag-and-drop signals (Gtk.drag-motion, Gtk.drag-drop, ...). They all exist for convenience. When passing #GTK_DEST_DEFAULT_ALL for instance it is sufficient to connect to the widget's Gtk.drag-data-received signal to get primitive, but consistent drag-and-drop support.
Things become more complicated when you try to preview the dragged data, as described in the documentation for Gtk.drag-motion. The default behaviors described by flags make some assumptions, that can conflict with your own signal handlers. For instance #GTK_DEST_DEFAULT_DROP causes invokations of Gdk.drag_status in the context of Gtk.drag-motion, and invokations of drag_finish in Gtk.drag-data-received. Especially the later is dramatic, when your own Gtk.drag-motion handler calls Gtk.drag_get_data to inspect the dragged data.
There's no way to set a default action here, you can use the Gtk.drag-motion callback for that. Here's an example which selects the action to use depending on whether the control key is pressed or not: |[ static void drag_motion (GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time) { GdkModifierType mask;
gdk_window_get_pointer (gtk_widget_get_window (widget), NULL, NULL, &mask); if (mask & GDK_CONTROL_MASK) gdk_drag_status (context, GDK_ACTION_COPY, time); else gdk_drag_status (context, GDK_ACTION_MOVE, time); } ]|
- flags
which types of default drag behavior to use
- targets
a pointer to an array of Gtk.TargetEntry<!-- -->s indicating the drop types that this widget will accept, or null. Later you can access the list with Gtk.Widget.prototype.drag_dest_get_target_list and Gtk.Widget.prototype.drag_dest_find_target.
- actions
a bitmask of possible actions for a drop onto this widget.