gdkdnd: Stick to the first gdk_drag_drop_done() result

That way we can let ::cancel callers to override the visual
result of the operation (eg. when detaching notebook tabs on
NO_TARGET).

Also, document gdk_drag_drop_done() so it is mentioned that
this is a one-shot call.

https://bugzilla.gnome.org/show_bug.cgi?id=761954
This commit is contained in:
Carlos Garnacho 2016-02-15 18:56:42 +01:00
parent d26801c923
commit 38d0d0a687
2 changed files with 11 additions and 0 deletions

View File

@ -641,6 +641,10 @@ gdk_drag_context_set_hotspot (GdkDragContext *context,
* be the last call before dropping the reference to the
* @context.
*
* The #GdkDragContext will only take the first gdk_drag_drop_done()
* call as effective, if this function is called multiple times,
* all subsequent calls will be ignored.
*
* Since: 3.20
*/
void
@ -649,6 +653,11 @@ gdk_drag_drop_done (GdkDragContext *context,
{
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
if (context->drop_done)
return;
context->drop_done = TRUE;
if (GDK_DRAG_CONTEXT_GET_CLASS (context)->drop_done)
GDK_DRAG_CONTEXT_GET_CLASS (context)->drop_done (context, success);
}

View File

@ -105,6 +105,8 @@ struct _GdkDragContext {
guint32 start_time;
GdkDevice *device;
guint drop_done : 1; /* Whether gdk_drag_drop_done() was performed */
};
GList * gdk_drag_context_list (void);