dragdest: Clean up internals
authorMatthias Clasen <mclasen@redhat.com>
Sun, 5 Jan 2020 14:18:47 +0000 (09:18 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 8 Jan 2020 23:48:20 +0000 (18:48 -0500)
Remove the no-longer needed GtkDragDest struct
and just attach the GtkDropTarget directly.

gtk/gtkdnd.c
gtk/gtkdndprivate.h
gtk/gtkdragdest.c
gtk/gtkdragdestprivate.h

index 788e46513d6977b8af92f0781d0052cccfc2a05b..71ae8405b5e8243f134be4a300995a0b824295c1 100644 (file)
@@ -345,23 +345,25 @@ gtk_drag_dest_leave (GtkWidget      *widget,
                      GdkDrop        *drop,
                      guint           time)
 {
-  GtkDragDestSite *site;
+  GtkDropTarget *dest;
   GtkDestDefaults flags;
   gboolean track_motion;
+  gboolean armed;
 
-  site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest");
-  g_return_if_fail (site != NULL);
+  dest = gtk_drop_target_get (widget);
+  g_return_if_fail (dest != NULL);
 
-  flags = gtk_drop_target_get_defaults (site->dest);
-  track_motion = gtk_drop_target_get_track_motion (site->dest);
+  flags = gtk_drop_target_get_defaults (dest);
+  track_motion = gtk_drop_target_get_track_motion (dest);
+  armed = gtk_drop_target_get_armed (dest);
 
-  if ((flags & GTK_DEST_DEFAULT_HIGHLIGHT) && site->have_drag)
+  if ((flags & GTK_DEST_DEFAULT_HIGHLIGHT) && armed)
     gtk_drag_unhighlight (widget);
 
-  if (!(flags & GTK_DEST_DEFAULT_MOTION) || site->have_drag || track_motion)
-    gtk_drop_target_emit_drag_leave (site->dest, drop, time);
+  if (!(flags & GTK_DEST_DEFAULT_MOTION) || armed || track_motion)
+    gtk_drop_target_emit_drag_leave (dest, drop, time);
   
-  site->have_drag = FALSE;
+  gtk_drop_target_set_armed (dest, FALSE);
 }
 
 static gboolean
@@ -371,18 +373,18 @@ gtk_drag_dest_motion (GtkWidget *widget,
                       gint       y,
                       guint      time)
 {
-  GtkDragDestSite *site;
+  GtkDropTarget *dest;
   GdkDragAction dest_actions;
   GtkDestDefaults flags;
   gboolean track_motion;
   gboolean retval;
 
-  site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest");
-  g_return_val_if_fail (site != NULL, FALSE);
+  dest = gtk_drop_target_get (widget);
+  g_return_val_if_fail (dest != NULL, FALSE);
 
-  dest_actions = gtk_drop_target_get_actions (site->dest);
-  flags = gtk_drop_target_get_defaults (site->dest);
-  track_motion = gtk_drop_target_get_track_motion (site->dest);
+  dest_actions = gtk_drop_target_get_actions (dest);
+  flags = gtk_drop_target_get_defaults (dest);
+  track_motion = gtk_drop_target_get_track_motion (dest);
 
   if (track_motion || flags & GTK_DEST_DEFAULT_MOTION)
     {
@@ -394,13 +396,13 @@ gtk_drag_dest_motion (GtkWidget *widget,
       if ((dest_actions & actions) == 0)
         actions = 0;
 
-      target = gtk_drop_target_match (site->dest, drop);
+      target = gtk_drop_target_match (dest, drop);
 
       if (actions && target)
         {
-          if (!site->have_drag)
+          if (!gtk_drop_target_get_armed (dest))
             {
-              site->have_drag = TRUE;
+              gtk_drop_target_set_armed (dest, TRUE);
               if (flags & GTK_DEST_DEFAULT_HIGHLIGHT)
                 gtk_drag_highlight (widget);
             }
@@ -415,7 +417,7 @@ gtk_drag_dest_motion (GtkWidget *widget,
         }
     }
 
-  retval = gtk_drop_target_emit_drag_motion (site->dest, drop, x, y);
+  retval = gtk_drop_target_emit_drag_motion (dest, drop, x, y);
 
   return (flags & GTK_DEST_DEFAULT_MOTION) ? TRUE : retval;
 }
@@ -427,14 +429,14 @@ gtk_drag_dest_drop (GtkWidget *widget,
                     gint       y,
                     guint      time)
 {
-  GtkDragDestSite *site;
+  GtkDropTarget *dest;
   GtkDragDestInfo *info;
 
-  site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest");
-  g_return_val_if_fail (site != NULL, FALSE);
+  dest = gtk_drop_target_get (widget);
+  g_return_val_if_fail (dest != NULL, FALSE);
 
   info = gtk_drag_get_dest_info (drop, FALSE);
   g_return_val_if_fail (info != NULL, FALSE);
 
-  return gtk_drop_target_emit_drag_drop (site->dest, drop, x, y);
+  return gtk_drop_target_emit_drag_drop (dest, drop, x, y);
 }
index 54826d7b0c780563b2c0dd6c1038ace8afe11fa5..ad829e05b7776ee95a8a25e6b7efb6b15cdd8d71 100644 (file)
 #ifndef __GTK_DND_PRIVATE_H__
 #define __GTK_DND_PRIVATE_H__
 
-#include "gtkdragdest.h"
-#include "gtkimagedefinitionprivate.h"
-#include "gtkselection.h"
 #include "gtkwidget.h"
 
-typedef struct _GtkDragDestSite GtkDragDestSite;
-struct _GtkDragDestSite
-{
-  GtkDropTarget     *dest;
-  GtkDestDefaults    flags;
-  guint              have_drag    : 1;
-};
 
 G_BEGIN_DECLS
 
index 5a4728f117f8685baeb37fe0515604e25d7a9a2c..b8d66334a008ff16f7600e21e2a7aee0a266b640 100644 (file)
 #include "gtkselectionprivate.h"
 
 
-static void
-gtk_drag_dest_realized (GtkWidget *widget)
-{
-  GtkNative *native = gtk_widget_get_native (widget);
-
-  gdk_surface_register_dnd (gtk_native_get_surface (native));
-}
-
-static void
-gtk_drag_dest_hierarchy_changed (GtkWidget  *widget,
-                                 GParamSpec *pspec,
-                                 gpointer    data)
-{
-  GtkNative *native = gtk_widget_get_native (widget);
-
-  if (native && gtk_widget_get_realized (GTK_WIDGET (native)))
-    gdk_surface_register_dnd (gtk_native_get_surface (native));
-}
-
-static void
-gtk_drag_dest_site_destroy (gpointer data)
-{
-  GtkDragDestSite *site = data;
-
-  g_clear_object (&site->dest);
-
-  g_slice_free (GtkDragDestSite, site);
-}
-
-static void
-gtk_drag_dest_set_internal (GtkWidget       *widget,
-                            GtkDragDestSite *site)
-{
-  GtkDragDestSite *old_site;
-
-  old_site = g_object_get_data (G_OBJECT (widget), I_("gtk-drag-dest"));
-  if (old_site)
-    {
-      g_signal_handlers_disconnect_by_func (widget, gtk_drag_dest_realized, old_site);
-      g_signal_handlers_disconnect_by_func (widget, gtk_drag_dest_hierarchy_changed, old_site);
-      gtk_drop_target_set_track_motion (site->dest, gtk_drop_target_get_track_motion (old_site->dest));
-    }
-
-  if (gtk_widget_get_realized (widget))
-    gtk_drag_dest_realized (widget);
-
-  g_signal_connect (widget, "realize", G_CALLBACK (gtk_drag_dest_realized), site);
-  g_signal_connect (widget, "notify::root", G_CALLBACK (gtk_drag_dest_hierarchy_changed), site);
-
-  g_object_set_data_full (G_OBJECT (widget), I_("gtk-drag-dest"),
-                          site, gtk_drag_dest_site_destroy);
-}
-
-static void
-gtk_drag_dest_unset (GtkWidget *widget)
-{
-  GtkDragDestSite *old_site;
-
-  g_return_if_fail (GTK_IS_WIDGET (widget));
-
-  old_site = g_object_get_data (G_OBJECT (widget), I_("gtk-drag-dest"));
-  if (old_site)
-    {
-      g_signal_handlers_disconnect_by_func (widget, gtk_drag_dest_realized, old_site);
-      g_signal_handlers_disconnect_by_func (widget, gtk_drag_dest_hierarchy_changed, old_site);
-    }
-
-  g_object_set_data (G_OBJECT (widget), I_("gtk-drag-dest"), NULL);
-}
-
-
 /**
  * SECTION:gtkdroptarget
  * @Short_description: An object to receive DND drops
@@ -131,6 +60,7 @@ struct _GtkDropTarget
 
   GtkWidget *widget;
   GdkDrop *drop;
+  gboolean armed;
 };
 
 struct _GtkDropTargetClass
@@ -573,6 +503,31 @@ gtk_drop_target_get_track_motion (GtkDropTarget *dest)
   return dest->track_motion;
 }
 
+static void
+gtk_drag_dest_realized (GtkWidget *widget)
+{
+  GtkNative *native = gtk_widget_get_native (widget);
+
+  gdk_surface_register_dnd (gtk_native_get_surface (native));
+}
+
+static void
+gtk_drag_dest_hierarchy_changed (GtkWidget  *widget,
+                                 GParamSpec *pspec,
+                                 gpointer    data)
+{
+  GtkNative *native = gtk_widget_get_native (widget);
+
+  if (native && gtk_widget_get_realized (GTK_WIDGET (native)))
+    gdk_surface_register_dnd (gtk_native_get_surface (native));
+}
+
+GtkDropTarget *
+gtk_drop_target_get (GtkWidget *widget)
+{
+  return g_object_get_data (G_OBJECT (widget), I_("gtk-drag-dest"));
+}
+
 /**
  * gtk_drop_target_attach:
  * @dest: (transfer full): a #GtkDropTarget
@@ -587,20 +542,28 @@ void
 gtk_drop_target_attach (GtkDropTarget *dest,
                         GtkWidget     *widget)
 {
-  GtkDragDestSite *site;
+  GtkDropTarget *old_dest;
 
   g_return_if_fail (GTK_IS_DROP_TARGET (dest));
   g_return_if_fail (dest->widget == NULL);
   g_return_if_fail (GTK_IS_WIDGET (widget));
 
-  dest->widget = widget;
+  old_dest = g_object_get_data (G_OBJECT (widget), I_("gtk-drag-dest"));
+  if (old_dest)
+    {
+      g_signal_handlers_disconnect_by_func (widget, gtk_drag_dest_realized, old_dest);
+      g_signal_handlers_disconnect_by_func (widget, gtk_drag_dest_hierarchy_changed, old_dest);
+    }
+
+  if (gtk_widget_get_realized (widget))
+    gtk_drag_dest_realized (widget);
 
-  site = g_slice_new0 (GtkDragDestSite);
+  dest->widget = widget;
 
-  site->dest = dest;
-  site->have_drag = FALSE;
+  g_signal_connect (widget, "realize", G_CALLBACK (gtk_drag_dest_realized), dest);
+  g_signal_connect (widget, "notify::root", G_CALLBACK (gtk_drag_dest_hierarchy_changed), dest);
 
-  gtk_drag_dest_set_internal (widget, site);
+  g_object_set_data_full (G_OBJECT (widget), I_("gtk-drag-dest"), dest, g_object_unref);
 }
 
 /**
@@ -616,7 +579,11 @@ gtk_drop_target_detach (GtkDropTarget *dest)
 
   if (dest->widget)
     {
-      gtk_drag_dest_unset (dest->widget);
+      g_signal_handlers_disconnect_by_func (dest->widget, gtk_drag_dest_realized, dest);
+      g_signal_handlers_disconnect_by_func (dest->widget, gtk_drag_dest_hierarchy_changed, dest);
+
+      g_object_set_data (G_OBJECT (dest->widget), I_("gtk-drag-dest"), NULL);
+
       dest->widget = NULL;
     }
 }
@@ -742,6 +709,19 @@ gtk_drop_target_emit_drag_drop (GtkDropTarget    *dest,
   return result;
 }
 
+void
+gtk_drop_target_set_armed (GtkDropTarget *target,
+                           gboolean       armed)
+{
+  target->armed = armed;
+}
+
+gboolean
+gtk_drop_target_get_armed (GtkDropTarget *target)
+{
+  return target->armed;
+}
+
 /**
  * gtk_drag_highlight: (method)
  * @widget: a widget to highlight
index deb772763f8275d93938d5db5300bfa826b51b92..6341ac579a8b2677488f400b136aa0aa51574839 100644 (file)
@@ -40,6 +40,11 @@ gboolean gtk_drop_target_emit_drag_drop      (GtkDropTarget    *dest,
 
 const char * gtk_drop_target_match           (GtkDropTarget *dest,
                                               GdkDrop       *drop);
+void         gtk_drop_target_set_armed       (GtkDropTarget *dest,
+                                              gboolean       armed);
+gboolean     gtk_drop_target_get_armed       (GtkDropTarget *dest);
+
+GtkDropTarget *gtk_drop_target_get           (GtkWidget *widget);
 
 G_END_DECLS