Widget.dragDestSet

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 (#GtkWidget::drag-motion, #GtkWidget::drag-drop, ...). They all exist for convenience. When passing #GTK_DEST_DEFAULT_ALL for instance it is sufficient to connect to the widget’s #GtkWidget::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 #GtkWidget::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.global.dragStatus] in the context of #GtkWidget::drag-motion, and invokations of [gtk.global.dragFinish] in #GtkWidget::drag-data-received. Especially the later is dramatic, when your own #GtkWidget::drag-motion handler calls [gtk.widget.Widget.dragGetData] to inspect the dragged data.

There’s no way to set a default action here, you can use the #GtkWidget::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);
}

Parameters

flagswhich types of default drag behavior to use
targetsa pointer to an array of #GtkTargetEntrys indicating the drop types that this widget will accept, or null. Later you can access the list with [gtk.widget.Widget.dragDestGetTargetList] and [gtk.widget.Widget.dragDestFindTarget].
actionsa bitmask of possible actions for a drop onto this widget.