gtkDragDestSet {RGtk2} | R Documentation

## gtkDragDestSet

### Description

Sets a widget as a potential drop destination, and adds default behaviors.

### Usage

    gtkDragDestSet(object, flags, targets, actions)

### Arguments

``object`` | a `GtkWidget`
``flags`` | which types of default drag behavior to use
``targets`` | a pointer to a list of `GtkTargetEntry`s 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]
``actions`` | a bitmask of possible actions for a drop onto this `widget`.

### Details

The default behaviors listed in `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);
    }

### Author(s)

Derived by RGtkGen from GTK+ documentation

[Package RGtk2 version 2.20.36.3 Index]