[gtk/dnd-gestures-2: 45/57] dnd: Some internal restructuring
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/dnd-gestures-2: 45/57] dnd: Some internal restructuring
- Date: Mon, 6 Jan 2020 05:44:10 +0000 (UTC)
commit a07481384b91da5d8bc36862a98b9d9078c0cd0a
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Jan 5 20:39:32 2020 -0500
dnd: Some internal restructuring
Nudge the code towards being like event controllers.
gtk/gtkdnd.c | 56 ++++++++++++++++++++++----------------------------------
1 file changed, 22 insertions(+), 34 deletions(-)
---
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c
index 5c1a1d475c..302ad9ed4c 100644
--- a/gtk/gtkdnd.c
+++ b/gtk/gtkdnd.c
@@ -77,9 +77,8 @@ typedef gboolean (* GtkDragDestCallback) (GtkWidget *widget,
gint y);
/* Forward declarations */
-static gboolean gtk_drop_find_widget (GtkWidget *widget,
+static GtkWidget *gtk_drop_find_widget (GtkWidget *widget,
GdkDrop *drop,
- GtkDragDestInfo *info,
gint x,
gint y,
GtkDragDestCallback callback);
@@ -142,7 +141,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
case GDK_DROP_START:
{
double x, y;
- gboolean found;
+ GtkWidget *widget;
if (event_type == GDK_DROP_START)
{
@@ -158,24 +157,23 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
gdk_event_get_coords (event, &x, &y);
- found = gtk_drop_find_widget (toplevel,
- drop,
- info,
- x,
- y,
- (event_type == GDK_DRAG_MOTION) ?
- gtk_drag_dest_motion :
- gtk_drag_dest_drop);
+ widget = gtk_drop_find_widget (toplevel,
+ drop,
+ x,
+ y,
+ (event_type == GDK_DRAG_MOTION) ?
+ gtk_drag_dest_motion :
+ gtk_drag_dest_drop);
- if (info->widget && !found)
+ if (info->widget && info->widget != widget)
{
gtk_drag_dest_leave (info->widget, drop);
gtk_drag_dest_set_widget (info, NULL);
}
-
- /* Send a reply.
- */
- if (!found)
+
+ if (widget)
+ gtk_drag_dest_set_widget (info, widget);
+ else
gdk_drop_status (drop, 0);
}
break;
@@ -185,10 +183,9 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
}
}
-static gboolean
+static GtkWidget *
gtk_drop_find_widget (GtkWidget *event_widget,
GdkDrop *drop,
- GtkDragDestInfo *info,
gint x,
gint y,
GtkDragDestCallback callback)
@@ -197,12 +194,12 @@ gtk_drop_find_widget (GtkWidget *event_widget,
if (!gtk_widget_get_mapped (event_widget) ||
!gtk_widget_get_sensitive (event_widget))
- return FALSE;
+ return NULL;
widget = gtk_widget_pick (event_widget, x, y, GTK_PICK_DEFAULT);
if (!widget)
- return FALSE;
+ return NULL;
gtk_widget_translate_coordinates (event_widget, widget, x, y, &x, &y);
@@ -213,7 +210,7 @@ gtk_drop_find_widget (GtkWidget *event_widget,
gboolean found = FALSE;
if (!gtk_widget_get_mapped (widget))
- return FALSE;
+ return NULL;
if (gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_INSENSITIVE)
{
@@ -238,15 +235,6 @@ gtk_drop_find_widget (GtkWidget *event_widget,
if (g_object_get_data (G_OBJECT (widget), "gtk-drag-dest"))
{
found = callback (widget, drop, x, y);
-
- /* If so, send a "drag-leave" to the last widget */
- if (found && info->widget != widget)
- {
- if (info->widget)
- gtk_drag_dest_leave (info->widget, drop);
-
- gtk_drag_dest_set_widget (info, widget);
- }
}
if (!found)
@@ -266,20 +254,20 @@ gtk_drop_find_widget (GtkWidget *event_widget,
g_list_free_full (hierarchy, g_object_unref);
if (found)
- return TRUE;
+ return widget;
if (parent)
g_object_remove_weak_pointer (G_OBJECT (parent), (gpointer *) &parent);
else
- return FALSE;
+ return NULL;
if (!gtk_widget_translate_coordinates (widget, parent, x, y, &x, &y))
- return FALSE;
+ return NULL;
widget = parent;
}
- return FALSE;
+ return NULL;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]