GdkDrop *drop; /* drop */
};
-typedef gboolean (* GtkDragDestCallback) (GtkWidget *widget,
- GdkEvent *event);
-
/* Forward declarations */
static GtkWidget *gtk_drop_find_widget (GtkWidget *widget,
- GdkEvent *event,
- GtkDragDestCallback callback);
+ GdkEvent *event);
static void gtk_drag_dest_leave (GtkWidget *widget,
GdkDrop *drop);
-static gboolean gtk_drag_dest_motion (GtkWidget *widget,
- GdkEvent *event);
-static gboolean gtk_drag_dest_drop (GtkWidget *widget,
+static gboolean gtk_drop_target_handle_event (GtkDropTarget *dest,
GdkEvent *event);
static void gtk_drag_dest_set_widget (GtkDragDestInfo *info,
GtkWidget *widget);
}
}
- widget = gtk_drop_find_widget (toplevel,
- event,
- (event_type == GDK_DRAG_MOTION) ?
- gtk_drag_dest_motion :
- gtk_drag_dest_drop);
+ widget = gtk_drop_find_widget (toplevel, event);
if (info->widget && info->widget != widget)
{
}
static GtkWidget *
-gtk_drop_find_widget (GtkWidget *event_widget,
- GdkEvent *event,
- GtkDragDestCallback callback)
+gtk_drop_find_widget (GtkWidget *event_widget,
+ GdkEvent *event)
{
GtkWidget *widget;
double x, y;
while (widget)
{
+ GtkDropTarget *dest;
GtkWidget *parent;
GList *hierarchy = NULL;
gboolean found = FALSE;
* emit "drag-motion" to check if we are actually in a drop
* site.
*/
- if (g_object_get_data (G_OBJECT (widget), "gtk-drag-dest"))
+ dest = gtk_drop_target_get (widget);
+ if (dest)
{
gdk_event_set_coords (event, wx, wy);
- found = callback (widget, event);
+ found = gtk_drop_target_handle_event (dest, event);
gdk_event_set_coords (event, x, y);
}
}
static gboolean
-gtk_drag_dest_motion (GtkWidget *widget,
- GdkEvent *event)
+gtk_drop_target_handle_event (GtkDropTarget *dest,
+ GdkEvent *event)
{
- GtkDropTarget *dest;
GdkDrop *drop;
double x, y;
- dest = gtk_drop_target_get (widget);
drop = gdk_event_get_drop (event);
gdk_event_get_coords (event, &x, &y);
- return gtk_drop_target_emit_drag_motion (dest, drop, x, y);
-}
-
-static gboolean
-gtk_drag_dest_drop (GtkWidget *widget,
- GdkEvent *event)
-{
- GtkDropTarget *dest;
- GdkDrop *drop;
- double x, y;
-
- dest = gtk_drop_target_get (widget);
- drop = gdk_event_get_drop (event);
- gdk_event_get_coords (event, &x, &y);
+ switch ((int)gdk_event_get_event_type (event))
+ {
+ case GDK_DRAG_MOTION:
+ return gtk_drop_target_emit_drag_motion (dest, drop, x, y);
+ case GDK_DROP_START:
+ return gtk_drop_target_emit_drag_drop (dest, drop, x, y);
+ default:
+ break;
+ }
- return gtk_drop_target_emit_drag_drop (dest, drop, x, y);
+ return FALSE;
}