Signals
| Chapter 17. Drag and Drop |

## Signals

When a drop destination has accepted a dragged item, certain signals will be emitted, depending on what action has been selected. For instance, the user might have held down the Shift key to specify a `move` rather than a `copy`. Remember that the user can only select the actions which you have specified in your calls to `drag_dest_set()` and `drag_source_set()`.

### Copy

The source widget will emit these signals, in this order:

- `drag_begin`: Provides a `Gdk::Drag`.

- `drag_data_get`: Provides a `Gdk::Drag`, and a `Gtk::SelectionData` object, in which you should put the requested data.

- `drag_end`: Provides a `Gdk::Drag`.

The destination widget will emit these signals, in this order:

- `drag_motion`: Provides a `Gdk::Drop` and coordinates. You can call the `status()` method of the `Gdk::Drop` to indicate which action will be accepted.

- `drag_drop`: Provides a `Gdk::Drop` and coordinates. You can call `drag_get_data()`, which triggers the `drag_data_get` signal in the source widget, and then the `drag_data_received` signal in the destination widget.

- `drag_data_received`: Provides a `Gdk::Drop`, and a `Gtk::SelectionData` object which contains the dropped data. You should call the `finish()` or `failed()` method of the `Gdk::Drop` to indicate whether the operation was successful.

### Move

During a `move`, the source widget will also emit this signal:

- `drag_data_delete`: Gives the source the opportunity to delete the original data if that's appropriate.

Methods |  | Example