widget: Make GtkWidgetClass::drag_leave() take a GdkDrop
authorBenjamin Otte <otte@redhat.com>
Tue, 15 May 2018 22:59:01 +0000 (00:59 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 18 Jun 2018 21:49:20 +0000 (23:49 +0200)
Drag Contexts are on their way out!

15 files changed:
gtk/gtkcalendar.c
gtk/gtkentry.c
gtk/gtkexpander.c
gtk/gtkfilechooserwidget.c
gtk/gtkiconview.c
gtk/gtklistbox.c
gtk/gtknotebook.c
gtk/gtkplacessidebar.c
gtk/gtkplacessidebarprivate.h
gtk/gtkstackswitcher.c
gtk/gtktextview.c
gtk/gtktreeview.c
gtk/gtkwidget.c
gtk/gtkwidget.h
tests/testtoolbar.c

index 7d01a1e55f405bc9c9874c25893ff9df94cdc034..2eed2039501229c5fefaa57df69a5138d9d700da 100644 (file)
@@ -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
index f6a05f3d2709924fe4d7d9c6f5dcbd2f67e95d6a..3b548d3370d4a8449f850e91edb665f138094657 100644 (file)
@@ -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);
index 91aba25726b7e2093b4d6eca210db0c0ab41fdc4..8ab06558a1aaaea52a4062d545a639c725e11afb 100644 (file)
@@ -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);
index 9ec52a631aa9b606a94a303dfabb65d40e109479..b42a5b524044228a70e34970cfff403eb71967de 100644 (file)
@@ -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
index f9ef4712004d089fe20f8c2636882999db0ab010..a2773480dcd880d87b523acad0adea23f2d14bac 100644 (file)
@@ -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;
 
index 2c4e4a23044803ef7dbd48c2e4640f170486e85f..b0506fa37c2de94e365a89f190a77faf430315ae 100644 (file)
@@ -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));
 }
index 4953f33e4418dc680864f945ec2feb917ee178ff..5ceec449b102bcb00c25d97144ea96cbd406384d 100644 (file)
@@ -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);
 
index 0d298cdfb23cfc47d322d90d238fe78de9accc4b..298b0bbcb897c9a5289783eee00f186efa096982 100644 (file)
@@ -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
     {
index cf806d883df7931c4717dc4436a304dc3c9880e7..4c08558b5eab1f751902a6818ba12c502bfba4ab 100644 (file)
@@ -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);
index 62435ad831a6864dcf4900cd7129f8614ed4df0f..7d70c969069a0fb80869a282343bcf4be6e9d152 100644 (file)
@@ -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);
 
index 07f76b3926e33e42353b40e7209023aa878ff7e4..7bb41afb3a3c1e825c37d541782d5d5183ab6943 100644 (file)
@@ -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;
index 43a43523cb4de12824d70a245ad7166e9adf7ffa..b58882a7987b92552b017c9d4449f8cdf1c62fae 100644 (file)
@@ -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);
 
index 7dbed089fbea4e55684a148dd5db1145fb1a778b..c09c361e5e7dc89896cb54fad59c4daedbf4a79f 100644 (file)
@@ -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:
index 219c1ef597e218fecec09835dbfeebd145cf9a3f..e7ba30c0de30bf1021e628d0a7bbb0756838114b 100644 (file)
@@ -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,
index c370e5550cdc29baf301603f15c61c8b064fe085..daf4de875c93edec54615eee71e08b58436b5061 100644 (file)
@@ -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)
     {