gtkDragDestSet(object, flags, targets, actions)objectflagstargetsGtkTargetEntrys
indicating the drop types that this widget will accept, or NULL.
Later you can access the list with gtkDragDestGetTargetList
and gtkDragDestFindTarget. [  allow-none  ][  array   length=n_targets]actionswidget.flags have an effect similar
to installing default handlers for the widget's drag-and-drop signals
("drag-motion", "drag-drop", ...). They all exist
for convenience. When passing GTK_DEST_DEFAULT_ALL for instance it is
sufficient to connect to the widget's "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 "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 gdkDragStatus in the context of "drag-motion",
and invokations of gtkDragFinish in "drag-data-received".
Especially the later is dramatic, when your own "drag-motion"
handler calls gtkDragGetData to inspect the dragged data.
  
There's no way to set a default action here, you can use the
"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);
}