From 314eaf7d10cf391ccceca7321cda6ab661a012fa Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 16 May 2018 00:59:01 +0200 Subject: [PATCH] widget: Make GtkWidgetClass::drag_leave() take a GdkDrop Drag Contexts are on their way out! --- gtk/gtkcalendar.c | 9 +++---- gtk/gtkentry.c | 8 +++--- gtk/gtkexpander.c | 8 +++--- gtk/gtkfilechooserwidget.c | 8 +++--- gtk/gtkiconview.c | 8 +++--- gtk/gtklistbox.c | 8 +++--- gtk/gtknotebook.c | 8 +++--- gtk/gtkplacessidebar.c | 50 +++++++++++++++++------------------ gtk/gtkplacessidebarprivate.h | 2 +- gtk/gtkstackswitcher.c | 5 ++-- gtk/gtktextview.c | 8 +++--- gtk/gtktreeview.c | 8 +++--- gtk/gtkwidget.c | 7 +++-- gtk/gtkwidget.h | 3 +-- tests/testtoolbar.c | 7 +++-- 15 files changed, 63 insertions(+), 84 deletions(-) diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c index 7d01a1e55f..2eed203950 100644 --- a/gtk/gtkcalendar.c +++ b/gtk/gtkcalendar.c @@ -321,8 +321,7 @@ static gboolean gtk_calendar_drag_motion (GtkWidget *widget, gint y, guint time); static void gtk_calendar_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time); + GdkDrop *drop); static gboolean gtk_calendar_drag_drop (GtkWidget *widget, GdkDragContext *context, gint x, @@ -2943,15 +2942,13 @@ get_status_pending (GdkDragContext *context) } static void -gtk_calendar_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time) +gtk_calendar_drag_leave (GtkWidget *widget, + GdkDrop *drop) { GtkCalendarPrivate *priv = GTK_CALENDAR (widget)->priv; priv->drag_highlight = 0; gtk_drag_unhighlight (widget); - } static gboolean diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index f6a05f3d27..3b548d3370 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -447,8 +447,7 @@ static gboolean gtk_entry_drag_motion (GtkWidget *widget, gint y, guint time); static void gtk_entry_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time); + GdkDrop *drop); static void gtk_entry_drag_data_received (GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, @@ -8591,9 +8590,8 @@ gtk_entry_drag_end (GtkWidget *widget, } static void -gtk_entry_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time) +gtk_entry_drag_leave (GtkWidget *widget, + GdkDrop *drop) { GtkEntry *entry = GTK_ENTRY (widget); GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry); diff --git a/gtk/gtkexpander.c b/gtk/gtkexpander.c index 91aba25726..8ab06558a1 100644 --- a/gtk/gtkexpander.c +++ b/gtk/gtkexpander.c @@ -184,8 +184,7 @@ static gboolean gtk_expander_drag_motion (GtkWidget *widget, gint y, guint time); static void gtk_expander_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time); + GdkDrop *drop); static void gtk_expander_add (GtkContainer *container, GtkWidget *widget); @@ -546,9 +545,8 @@ gtk_expander_drag_motion (GtkWidget *widget, } static void -gtk_expander_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time) +gtk_expander_drag_leave (GtkWidget *widget, + GdkDrop *drop) { GtkExpander *expander = GTK_EXPANDER (widget); GtkExpanderPrivate *priv = gtk_expander_get_instance_private (expander); diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 9ec52a631a..b42a5b5240 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -1992,12 +1992,12 @@ file_list_drag_drop_cb (GtkWidget *widget, static void file_list_drag_begin_cb (GtkWidget *widget, - GdkDragContext *context, + GdkDrop *drop, GtkFileChooserWidget *impl) { gtk_places_sidebar_set_drop_targets_visible (GTK_PLACES_SIDEBAR (impl->priv->places_sidebar), TRUE, - context); + drop); } /* Disable the normal tree drag motion handler, it makes it look like you're @@ -2016,7 +2016,7 @@ file_list_drag_motion_cb (GtkWidget *widget, static void file_list_drag_end_cb (GtkWidget *widget, - GdkDragContext *context, + GdkDrop *drop, gpointer user_data) { GtkFileChooserWidget *impl; @@ -2024,7 +2024,7 @@ file_list_drag_end_cb (GtkWidget *widget, impl = GTK_FILE_CHOOSER_WIDGET (user_data); gtk_places_sidebar_set_drop_targets_visible (GTK_PLACES_SIDEBAR (impl->priv->places_sidebar), FALSE, - context); + drop); } /* Sensitizes the "Copy file’s location" and other context menu items if there is actually diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c index f9ef471200..a2773480dc 100644 --- a/gtk/gtkiconview.c +++ b/gtk/gtkiconview.c @@ -289,8 +289,7 @@ static void gtk_icon_view_drag_data_delete (GtkWidget *widget, /* Target side drag signals */ static void gtk_icon_view_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time); + GdkDrop *drop); static gboolean gtk_icon_view_drag_motion (GtkWidget *widget, GdkDragContext *context, gint x, @@ -6218,9 +6217,8 @@ gtk_icon_view_drag_data_delete (GtkWidget *widget, /* Target side drag signals */ static void -gtk_icon_view_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time) +gtk_icon_view_drag_leave (GtkWidget *widget, + GdkDrop *drop) { GtkIconView *icon_view; diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c index 2c4e4a2304..b0506fa37c 100644 --- a/gtk/gtklistbox.c +++ b/gtk/gtklistbox.c @@ -230,8 +230,7 @@ static void gtk_list_box_size_allocate (GtkWidget const GtkAllocation *allocation, int baseline); static void gtk_list_box_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time_); + GdkDrop *drop); static void gtk_list_box_activate_cursor_row (GtkListBox *box); static void gtk_list_box_toggle_cursor_row (GtkListBox *box); static void gtk_list_box_move_cursor (GtkListBox *box, @@ -2721,9 +2720,8 @@ gtk_list_box_drag_highlight_row (GtkListBox *box, } static void -gtk_list_box_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time_) +gtk_list_box_drag_leave (GtkWidget *widget, + GdkDrop *drop) { gtk_list_box_drag_unhighlight_row (GTK_LIST_BOX (widget)); } diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index 4953f33e44..5ceec449b1 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -397,8 +397,7 @@ static gboolean gtk_notebook_drag_motion (GtkWidget *widget, gint y, guint time); static void gtk_notebook_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time); + GdkDrop *drop); static gboolean gtk_notebook_drag_drop (GtkWidget *widget, GdkDragContext *context, gint x, @@ -3109,9 +3108,8 @@ gtk_notebook_drag_motion (GtkWidget *widget, } static void -gtk_notebook_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time) +gtk_notebook_drag_leave (GtkWidget *widget, + GdkDrop *drop) { GtkNotebook *notebook = GTK_NOTEBOOK (widget); diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index 0d298cdfb2..298b0bbcb8 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -377,14 +377,14 @@ emit_unmount_operation (GtkPlacesSidebar *sidebar, static GdkDragAction emit_drag_action_requested (GtkPlacesSidebar *sidebar, - GdkDragContext *context, + GdkDrop *drop, GFile *dest_file, GList *source_file_list) { GdkDragAction ret_action = 0; g_signal_emit (sidebar, places_sidebar_signals[DRAG_ACTION_REQUESTED], 0, - context, dest_file, source_file_list, &ret_action); + drop, dest_file, source_file_list, &ret_action); return ret_action; } @@ -1512,7 +1512,7 @@ update_places (GtkPlacesSidebar *sidebar) static gboolean check_valid_drop_target (GtkPlacesSidebar *sidebar, GtkSidebarRow *row, - GdkDragContext *context) + GdkDrop *drop) { GtkPlacesSidebarPlaceType place_type; GtkPlacesSidebarSectionType section_type; @@ -1568,12 +1568,12 @@ check_valid_drop_target (GtkPlacesSidebar *sidebar, else { /* Dragging a file */ - if (context) + if (drop) { if (uri != NULL) { dest_file = g_file_new_for_uri (uri); - drag_action = emit_drag_action_requested (sidebar, context, dest_file, sidebar->drag_list); + drag_action = emit_drag_action_requested (sidebar, drop, dest_file, sidebar->drag_list); valid = drag_action > 0; g_object_unref (dest_file); @@ -1585,8 +1585,8 @@ check_valid_drop_target (GtkPlacesSidebar *sidebar, } else { - /* We cannot discern if it is valid or not because there is not drag - * context available to ask the client. + /* We cannot discern if it is valid or not because there is not drop + * available to ask the client. * Simply make insensitive the drop targets we know are not valid for * files, that are the ones remaining. */ @@ -1601,7 +1601,7 @@ check_valid_drop_target (GtkPlacesSidebar *sidebar, static void update_possible_drop_targets (GtkPlacesSidebar *sidebar, gboolean dragging, - GdkDragContext *context) + GdkDrop *drop) { GList *rows; GList *l; @@ -1611,7 +1611,7 @@ update_possible_drop_targets (GtkPlacesSidebar *sidebar, for (l = rows; l != NULL; l = l->next) { - sensitive = !dragging || check_valid_drop_target (sidebar, GTK_SIDEBAR_ROW (l->data), context); + sensitive = !dragging || check_valid_drop_target (sidebar, GTK_SIDEBAR_ROW (l->data), drop); gtk_widget_set_sensitive (GTK_WIDGET (l->data), sensitive); } @@ -1651,7 +1651,7 @@ free_drag_data (GtkPlacesSidebar *sidebar) static void start_drop_feedback (GtkPlacesSidebar *sidebar, GtkSidebarRow *row, - GdkDragContext *context) + GdkDrop *drop) { if (sidebar->drag_data_info != DND_GTK_SIDEBAR_ROW) { @@ -1661,7 +1661,7 @@ start_drop_feedback (GtkPlacesSidebar *sidebar, sidebar->drop_state = DROP_STATE_NEW_BOOKMARK_ARMED; } - update_possible_drop_targets (sidebar, TRUE, context); + update_possible_drop_targets (sidebar, TRUE, drop); } static void @@ -1770,6 +1770,7 @@ drag_motion_callback (GtkWidget *widget, guint time, gpointer user_data) { + GdkDrop *drop = GDK_DROP (context); gint action; GtkListBoxRow *row; GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); @@ -1790,7 +1791,7 @@ drag_motion_callback (GtkWidget *widget, goto out; /* Nothing to do if the target is not valid drop destination */ - if (!check_valid_drop_target (sidebar, GTK_SIDEBAR_ROW (row), context)) + if (!check_valid_drop_target (sidebar, GTK_SIDEBAR_ROW (row), drop)) goto out; if (sidebar->drag_data_received && @@ -1877,7 +1878,7 @@ drag_motion_callback (GtkWidget *widget, { GFile *dest_file = g_file_new_for_uri (drop_target_uri); - action = emit_drag_action_requested (sidebar, context, dest_file, sidebar->drag_list); + action = emit_drag_action_requested (sidebar, drop, dest_file, sidebar->drag_list); g_object_unref (dest_file); } @@ -1888,7 +1889,7 @@ drag_motion_callback (GtkWidget *widget, } out: - start_drop_feedback (sidebar, GTK_SIDEBAR_ROW (row), context); + start_drop_feedback (sidebar, GTK_SIDEBAR_ROW (row), drop); g_signal_stop_emission_by_name (sidebar->list_box, "drag-motion"); @@ -2038,7 +2039,7 @@ drag_data_received_callback (GtkWidget *list_box, success = FALSE; - if (!check_valid_drop_target (sidebar, GTK_SIDEBAR_ROW (target_row), context)) + if (!check_valid_drop_target (sidebar, GTK_SIDEBAR_ROW (target_row), GDK_DROP (context))) goto out; if (sidebar->drag_data_info == DND_GTK_SIDEBAR_ROW) @@ -2126,16 +2127,15 @@ drag_end_callback (GtkWidget *widget, * we build new drag data in drag_data_received. */ static void -drag_leave_callback (GtkWidget *widget, - GdkDragContext *context, - guint time, - gpointer user_data) +drag_leave_callback (GtkWidget *widget, + GdkDrop *drop, + gpointer user_data) { GtkPlacesSidebar *sidebar = GTK_PLACES_SIDEBAR (user_data); if (sidebar->drop_state != DROP_STATE_NEW_BOOKMARK_ARMED_PERMANENT) { - update_possible_drop_targets (sidebar, FALSE, context); + update_possible_drop_targets (sidebar, FALSE, drop); gtk_sidebar_row_hide (GTK_SIDEBAR_ROW (sidebar->new_bookmark_row), FALSE); sidebar->drop_state = DROP_STATE_NORMAL; } @@ -4486,7 +4486,7 @@ gtk_places_sidebar_class_init (GtkPlacesSidebarClass *class) /* * GtkPlacesSidebar::drag-action-requested: * @sidebar: the object which received the signal. - * @context: (type Gdk.DragContext): #GdkDragContext with information about the drag operation + * @drop: (type Gdk.Drop): #GdkDrop with information about the drag operation * @dest_file: (type Gio.File): #GFile with the tentative location that is being hovered for a drop * @source_file_list: (type GLib.List) (element-type GFile) (transfer none): * List of #GFile that are being dragged @@ -4513,7 +4513,7 @@ gtk_places_sidebar_class_init (GtkPlacesSidebarClass *class) NULL, NULL, _gtk_marshal_INT__OBJECT_OBJECT_POINTER, G_TYPE_INT, 3, - GDK_TYPE_DRAG_CONTEXT, + GDK_TYPE_DROP, G_TYPE_OBJECT, G_TYPE_POINTER /* GList of GFile */ ); @@ -5316,7 +5316,7 @@ gtk_places_sidebar_get_nth_bookmark (GtkPlacesSidebar *sidebar, * gtk_places_sidebar_set_drop_targets_visible: * @sidebar: a places sidebar. * @visible: whether to show the valid targets or not. - * @context: drag context used to ask the source about the action that wants to + * @drop: #GdkDrop used to ask the source about the action that wants to * perform, so hints are more accurate. * * Make the GtkPlacesSidebar show drop targets, so it can show the available @@ -5332,12 +5332,12 @@ gtk_places_sidebar_get_nth_bookmark (GtkPlacesSidebar *sidebar, void gtk_places_sidebar_set_drop_targets_visible (GtkPlacesSidebar *sidebar, gboolean visible, - GdkDragContext *context) + GdkDrop *drop) { if (visible) { sidebar->drop_state = DROP_STATE_NEW_BOOKMARK_ARMED_PERMANENT; - start_drop_feedback (sidebar, NULL, context); + start_drop_feedback (sidebar, NULL, drop); } else { diff --git a/gtk/gtkplacessidebarprivate.h b/gtk/gtkplacessidebarprivate.h index cf806d883d..4c08558b5e 100644 --- a/gtk/gtkplacessidebarprivate.h +++ b/gtk/gtkplacessidebarprivate.h @@ -103,7 +103,7 @@ GFile * gtk_places_sidebar_get_nth_bookmark (GtkPlacesSideb gint n); void gtk_places_sidebar_set_drop_targets_visible (GtkPlacesSidebar *sidebar, gboolean visible, - GdkDragContext *context); + GdkDrop *drop); gboolean gtk_places_sidebar_get_show_trash (GtkPlacesSidebar *sidebar); void gtk_places_sidebar_set_show_trash (GtkPlacesSidebar *sidebar, gboolean show_trash); diff --git a/gtk/gtkstackswitcher.c b/gtk/gtkstackswitcher.c index 62435ad831..7d70c96906 100644 --- a/gtk/gtkstackswitcher.c +++ b/gtk/gtkstackswitcher.c @@ -335,9 +335,8 @@ gtk_stack_switcher_drag_motion (GtkWidget *widget, } static void -gtk_stack_switcher_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time) +gtk_stack_switcher_drag_leave (GtkWidget *widget, + GdkDrop *drop) { GtkStackSwitcher *self = GTK_STACK_SWITCHER (widget); diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 07f76b3926..7bb41afb3a 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -429,8 +429,7 @@ static void gtk_text_view_drag_data_delete (GtkWidget *widget, /* Target side drag signals */ static void gtk_text_view_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time); + GdkDrop *drop); static gboolean gtk_text_view_drag_motion (GtkWidget *widget, GdkDragContext *context, gint x, @@ -7698,9 +7697,8 @@ gtk_text_view_drag_data_delete (GtkWidget *widget, } static void -gtk_text_view_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time) +gtk_text_view_drag_leave (GtkWidget *widget, + GdkDrop *drop) { GtkTextView *text_view; GtkTextViewPrivate *priv; diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 43a43523cb..b58882a798 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -630,8 +630,7 @@ static void gtk_tree_view_drag_data_delete (GtkWidget *widget, /* Target side drag signals */ static void gtk_tree_view_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time); + GdkDrop *drop); static gboolean gtk_tree_view_drag_motion (GtkWidget *widget, GdkDragContext *context, gint x, @@ -7535,9 +7534,8 @@ gtk_tree_view_drag_data_delete (GtkWidget *widget, } static void -gtk_tree_view_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time) +gtk_tree_view_drag_leave (GtkWidget *widget, + GdkDrop *drop) { GtkTreeView *tree_view = GTK_TREE_VIEW (widget); diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 7dbed089fb..c09c361e5e 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -1736,10 +1736,9 @@ gtk_widget_class_init (GtkWidgetClass *klass) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GtkWidgetClass, drag_leave), NULL, NULL, - _gtk_marshal_VOID__OBJECT_UINT, - G_TYPE_NONE, 2, - GDK_TYPE_DRAG_CONTEXT, - G_TYPE_UINT); + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, + GDK_TYPE_DROP); /** * GtkWidget::drag-begin: diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h index 219c1ef597..e7ba30c0de 100644 --- a/gtk/gtkwidget.h +++ b/gtk/gtkwidget.h @@ -306,8 +306,7 @@ struct _GtkWidgetClass /* Target side drag signals */ void (* drag_leave) (GtkWidget *widget, - GdkDragContext *context, - guint time_); + GdkDrop *drop); gboolean (* drag_motion) (GtkWidget *widget, GdkDragContext *context, gint x, diff --git a/tests/testtoolbar.c b/tests/testtoolbar.c index c370e5550c..daf4de875c 100644 --- a/tests/testtoolbar.c +++ b/tests/testtoolbar.c @@ -400,10 +400,9 @@ toolbar_drag_motion (GtkToolbar *toolbar, } static void -toolbar_drag_leave (GtkToolbar *toolbar, - GdkDragContext *context, - guint time, - gpointer null) +toolbar_drag_leave (GtkToolbar *toolbar, + GdkDrop *drop, + gpointer null) { if (drag_item) { -- 2.30.2