diff --git a/gdk/gdkdnd.c b/gdk/gdkdnd.c index 8a4559e286..30096302f3 100644 --- a/gdk/gdkdnd.c +++ b/gdk/gdkdnd.c @@ -503,3 +503,27 @@ gdk_drag_context_set_hotspot (GdkDragContext *context, if (GDK_DRAG_CONTEXT_GET_CLASS (context)->set_hotspot) GDK_DRAG_CONTEXT_GET_CLASS (context)->set_hotspot (context, hot_x, hot_y); } + +/** + * gdk_drag_drop_done: + * @context: a #GdkDragContext + * @success: whether the drag was ultimatively successful + * + * Inform GDK if the drop ended successfully. Passing %FALSE + * for @success may trigger a drag cancellation animation. + * + * This function is called by the drag source, and should + * be the last call before dropping the reference to the + * @context. + * + * Since: 3.20 + */ +void +gdk_drag_drop_done (GdkDragContext *context, + gboolean success) +{ + g_return_if_fail (GDK_IS_DRAG_CONTEXT (context)); + + if (GDK_DRAG_CONTEXT_GET_CLASS (context)->drop_done) + GDK_DRAG_CONTEXT_GET_CLASS (context)->drop_done (context, success); +} diff --git a/gdk/gdkdnd.h b/gdk/gdkdnd.h index 12a817fc75..1aa5d07092 100644 --- a/gdk/gdkdnd.h +++ b/gdk/gdkdnd.h @@ -178,6 +178,10 @@ void gdk_drag_abort (GdkDragContext *context, GDK_AVAILABLE_IN_ALL gboolean gdk_drag_drop_succeeded (GdkDragContext *context); +GDK_AVAILABLE_IN_3_20 +void gdk_drag_drop_done (GdkDragContext *context, + gboolean success); + GDK_AVAILABLE_IN_3_20 GdkWindow *gdk_drag_context_get_drag_window (GdkDragContext *context); diff --git a/gdk/gdkdndprivate.h b/gdk/gdkdndprivate.h index e8a163f7c8..fe2a95dfc7 100644 --- a/gdk/gdkdndprivate.h +++ b/gdk/gdkdndprivate.h @@ -66,6 +66,8 @@ struct _GdkDragContextClass { void (*set_hotspot) (GdkDragContext *context, gint hot_x, gint hot_y); + void (*drop_done) (GdkDragContext *context, + gboolean success); }; struct _GdkDragContext {