From: Benjamin Otte Date: Tue, 22 May 2018 13:32:27 +0000 (+0200) Subject: dnd: Add gdk_event_get_drop() X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~22^2~114 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d02b185a876386b7e28c68d9ab7e9bbac1e423ae;p=gtk4.git dnd: Add gdk_event_get_drop() And remove gdk_event_get_drag_context(). All GTK code now only uses GdkDrop for dropping. --- diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt index ffe1fc0b5b..a9d746607b 100644 --- a/docs/reference/gdk/gdk4-sections.txt +++ b/docs/reference/gdk/gdk4-sections.txt @@ -652,7 +652,7 @@ gdk_event_get_scancode gdk_event_get_pointer_emulated gdk_event_get_crossing_detail gdk_event_get_crossing_mode -gdk_event_get_drag_context +gdk_event_get_drop gdk_event_get_focus_in gdk_event_get_grab_surface gdk_event_get_motion_history diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c index ac3d400fdf..aec0782d8c 100644 --- a/gdk/gdkevents.c +++ b/gdk/gdkevents.c @@ -29,6 +29,7 @@ #include "gdkinternals.h" #include "gdkdisplayprivate.h" #include "gdkdndprivate.h" +#include "gdkdropprivate.h" #include "gdk-private.h" #include @@ -2058,17 +2059,15 @@ gdk_event_is_sent (const GdkEvent *event) } /** - * gdk_event_get_drag_context: + * gdk_event_get_drop: * @event: a #GdkEvent - * @context: (out) (transfer none): return location for the drag context * - * Gets the drag context from a DND event. + * Gets the #GdkDrop from a DND event. * - * Returns: %TRUE on success, otherwise %FALSE + * Returns: (transfer none) (nullable): the drop **/ -gboolean -gdk_event_get_drag_context (const GdkEvent *event, - GdkDragContext **context) +GdkDrop * +gdk_event_get_drop (const GdkEvent *event) { if (!event) return FALSE; @@ -2078,11 +2077,10 @@ gdk_event_get_drag_context (const GdkEvent *event, event->any.type == GDK_DRAG_MOTION || event->any.type == GDK_DROP_START) { - *context = event->dnd.context; - return TRUE; + return GDK_DROP (event->dnd.context); } - return FALSE; + return NULL; } /** diff --git a/gdk/gdkevents.h b/gdk/gdkevents.h index 4f21e3b0f4..a43e7b4394 100644 --- a/gdk/gdkevents.h +++ b/gdk/gdkevents.h @@ -513,8 +513,7 @@ GDK_AVAILABLE_IN_ALL gboolean gdk_event_is_sent (const GdkEvent *event); GDK_AVAILABLE_IN_ALL -gboolean gdk_event_get_drag_context (const GdkEvent *event, - GdkDragContext **context); +GdkDrop * gdk_event_get_drop (const GdkEvent *event); GDK_AVAILABLE_IN_ALL gboolean gdk_event_get_crossing_mode (const GdkEvent *event, diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index 15aaa39bb3..190549111d 100644 --- a/gtk/gtkdnd.c +++ b/gtk/gtkdnd.c @@ -79,42 +79,42 @@ struct _GtkDragSourceInfo struct _GtkDragDestInfo { GtkWidget *widget; /* Widget in which drag is in */ - GdkDragContext *context; /* Drag context */ + GdkDrop *drop; /* drop */ }; #define DROP_ABORT_TIME 300000 typedef gboolean (* GtkDragDestCallback) (GtkWidget *widget, - GdkDragContext *context, + GdkDrop *drop, gint x, gint y, guint32 time); /* Forward declarations */ -static gboolean gtk_drag_find_widget (GtkWidget *widget, - GdkDragContext *context, +static gboolean gtk_drop_find_widget (GtkWidget *widget, + GdkDrop *drop, GtkDragDestInfo *info, gint x, gint y, guint32 time, GtkDragDestCallback callback); static void gtk_drag_dest_leave (GtkWidget *widget, - GdkDragContext *context, + GdkDrop *drop, guint time); static gboolean gtk_drag_dest_motion (GtkWidget *widget, - GdkDragContext *context, + GdkDrop *drop, gint x, gint y, guint time); static gboolean gtk_drag_dest_drop (GtkWidget *widget, - GdkDragContext *context, + GdkDrop *drop, gint x, gint y, guint time); static void gtk_drag_dest_set_widget (GtkDragDestInfo *info, GtkWidget *widget); -static GtkDragDestInfo * gtk_drag_get_dest_info (GdkDragContext *context, +static GtkDragDestInfo * gtk_drag_get_dest_info (GdkDrop *drop, gboolean create); static GtkDragSourceInfo *gtk_drag_get_source_info (GdkDragContext *context, gboolean create); @@ -385,7 +385,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel, GdkEvent *event) { GtkDragDestInfo *info; - GdkDragContext *context; + GdkDrop *drop; guint32 time; GdkEventType event_type; @@ -393,10 +393,10 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel, g_return_if_fail (event != NULL); event_type = gdk_event_get_event_type (event); - gdk_event_get_drag_context (event, &context); + drop = gdk_event_get_drop (event); time = gdk_event_get_time (event); - info = gtk_drag_get_dest_info (context, TRUE); + info = gtk_drag_get_dest_info (drop, TRUE); /* Find the widget for the event */ switch ((guint) event_type) @@ -407,7 +407,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel, case GDK_DRAG_LEAVE: if (info->widget) { - gtk_drag_dest_leave (info->widget, context, time); + gtk_drag_dest_leave (info->widget, drop, time); gtk_drag_dest_set_widget (info, NULL); } break; @@ -427,7 +427,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel, */ if (info->widget) { - gtk_drag_dest_leave (info->widget, context, time); + gtk_drag_dest_leave (info->widget, drop, time); gtk_drag_dest_set_widget (info, NULL); } } @@ -437,8 +437,8 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel, gdk_surface_get_position (surface, &tx, &ty); gdk_event_get_root_coords (event, &x_root, &y_root); - found = gtk_drag_find_widget (toplevel, - context, + found = gtk_drop_find_widget (toplevel, + drop, info, x_root - tx, y_root - ty, @@ -449,14 +449,14 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel, if (info->widget && !found) { - gtk_drag_dest_leave (info->widget, context, time); + gtk_drag_dest_leave (info->widget, drop, time); gtk_drag_dest_set_widget (info, NULL); } /* Send a reply. */ if (!found) - gdk_drag_status (context, 0, time); + gdk_drop_status (drop, 0); } break; @@ -466,8 +466,8 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel, } static gboolean -gtk_drag_find_widget (GtkWidget *widget, - GdkDragContext *context, +gtk_drop_find_widget (GtkWidget *widget, + GdkDrop *drop, GtkDragDestInfo *info, gint x, gint y, @@ -517,13 +517,13 @@ gtk_drag_find_widget (GtkWidget *widget, */ if (g_object_get_data (G_OBJECT (widget), "gtk-drag-dest")) { - found = callback (widget, context, x, y, time); + found = callback (widget, drop, x, y, time); /* If so, send a "drag-leave" to the last widget */ if (found && info->widget != widget) { if (info->widget) - gtk_drag_dest_leave (info->widget, context, time); + gtk_drag_dest_leave (info->widget, drop, time); gtk_drag_dest_set_widget (info, widget); } @@ -586,20 +586,20 @@ gtk_drag_dest_info_destroy (gpointer data) } static GtkDragDestInfo * -gtk_drag_get_dest_info (GdkDragContext *context, - gboolean create) +gtk_drag_get_dest_info (GdkDrop *drop, + gboolean create) { GtkDragDestInfo *info; static GQuark info_quark = 0; if (!info_quark) info_quark = g_quark_from_static_string ("gtk-dest-info"); - info = g_object_get_qdata (G_OBJECT (context), info_quark); + info = g_object_get_qdata (G_OBJECT (drop), info_quark); if (!info && create) { info = g_slice_new0 (GtkDragDestInfo); - info->context = context; - g_object_set_qdata_full (G_OBJECT (context), info_quark, + info->drop = drop; + g_object_set_qdata_full (G_OBJECT (drop), info_quark, info, gtk_drag_dest_info_destroy); } @@ -638,7 +638,7 @@ gtk_drag_clear_source_info (GdkDragContext *context) */ static void gtk_drag_dest_leave (GtkWidget *widget, - GdkDragContext *context, + GdkDrop *drop, guint time) { GtkDragDestSite *site; @@ -651,20 +651,19 @@ gtk_drag_dest_leave (GtkWidget *widget, if (!(site->flags & GTK_DEST_DEFAULT_MOTION) || site->have_drag || site->track_motion) - g_signal_emit_by_name (widget, "drag-leave", context, time); + g_signal_emit_by_name (widget, "drag-leave", drop, time); site->have_drag = FALSE; } static gboolean -gtk_drag_dest_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time) +gtk_drag_dest_motion (GtkWidget *widget, + GdkDrop *drop, + gint x, + gint y, + guint time) { GtkDragDestSite *site; - GdkDragAction action = 0; gboolean retval; site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest"); @@ -672,24 +671,14 @@ gtk_drag_dest_motion (GtkWidget *widget, if (site->track_motion || site->flags & GTK_DEST_DEFAULT_MOTION) { - if (gdk_drag_context_get_suggested_action (context) & site->actions) - action = gdk_drag_context_get_suggested_action (context); - else - { - gint i; - - for (i = 0; i < 8; i++) - { - if ((site->actions & (1 << i)) && - (gdk_drag_context_get_actions (context) & (1 << i))) - { - action = (1 << i); - break; - } - } - } + GdkDragAction actions; + + actions = gdk_drop_get_actions (drop); + + if ((actions & site->actions) == 0) + actions = 0; - if (action && gtk_drag_dest_find_target (widget, GDK_DROP (context), NULL)) + if (actions && gtk_drag_dest_find_target (widget, drop, NULL)) { if (!site->have_drag) { @@ -698,28 +687,28 @@ gtk_drag_dest_motion (GtkWidget *widget, gtk_drag_highlight (widget); } - gdk_drag_status (context, action, time); + gdk_drop_status (drop, site->actions); } else { - gdk_drag_status (context, 0, time); + gdk_drop_status (drop, 0); if (!site->track_motion) return TRUE; } } g_signal_emit_by_name (widget, "drag-motion", - context, x, y, &retval); + drop, x, y, &retval); return (site->flags & GTK_DEST_DEFAULT_MOTION) ? TRUE : retval; } static gboolean -gtk_drag_dest_drop (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time) +gtk_drag_dest_drop (GtkWidget *widget, + GdkDrop *drop, + gint x, + gint y, + guint time) { GtkDragDestSite *site; GtkDragDestInfo *info; @@ -728,24 +717,24 @@ gtk_drag_dest_drop (GtkWidget *widget, site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest"); g_return_val_if_fail (site != NULL, FALSE); - info = gtk_drag_get_dest_info (context, FALSE); + info = gtk_drag_get_dest_info (drop, FALSE); g_return_val_if_fail (info != NULL, FALSE); if (site->flags & GTK_DEST_DEFAULT_DROP) { - GdkAtom target = gtk_drag_dest_find_target (widget, GDK_DROP (context), NULL); + GdkAtom target = gtk_drag_dest_find_target (widget, drop, NULL); if (target == NULL) { - gdk_drag_finish (context, FALSE, time); + gdk_drop_finish (drop, 0); return TRUE; } else - gtk_drag_get_data (widget, GDK_DROP (context), target); + gtk_drag_get_data (widget, drop, target); } g_signal_emit_by_name (widget, "drag-drop", - context, x, y, &retval); + drop, x, y, &retval); return (site->flags & GTK_DEST_DEFAULT_DROP) ? TRUE : retval; }