diff options
author | Richard Hult <richard@imendio.com> | 2006-08-08 21:18:09 +0000 |
---|---|---|
committer | Richard Hult <rhult@src.gnome.org> | 2006-08-08 21:18:09 +0000 |
commit | b0f5ad008ac7ad57c358fea1652da829b24f3dd0 (patch) | |
tree | d6f853b38dcefb79e2616f6d9088c90f5806cfc9 /gtk/gtkdnd-quartz.c | |
parent | 230fcecae8b00c88f66aff14a4ac34b1143fc5bb (diff) | |
download | gtk+-b0f5ad008ac7ad57c358fea1652da829b24f3dd0.tar.gz |
Implement get/set_track_motion.
2006-08-08 Richard Hult <richard@imendio.com>
* gtk/gtkdnd-quartz.c: Implement get/set_track_motion.
Diffstat (limited to 'gtk/gtkdnd-quartz.c')
-rw-r--r-- | gtk/gtkdnd-quartz.c | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/gtk/gtkdnd-quartz.c b/gtk/gtkdnd-quartz.c index 6c0e55e8d3..1f2f72cf47 100644 --- a/gtk/gtkdnd-quartz.c +++ b/gtk/gtkdnd-quartz.c @@ -105,6 +105,7 @@ struct _GtkDragDestSite GtkTargetList *target_list; GdkDragAction actions; guint have_drag : 1; + guint track_motion : 1; }; struct _GtkDragDestInfo @@ -281,6 +282,7 @@ gtk_drag_get_source_info (GdkDragContext *context, gboolean create) { GtkDragSourceInfo *info; + if (!dest_info_quark) dest_info_quark = g_quark_from_static_string ("gtk-source-info"); @@ -462,10 +464,12 @@ gtk_drag_dest_set (GtkWidget *widget, gint n_targets, GdkDragAction actions) { - GtkDragDestSite *site; + GtkDragDestSite *old_site, *site; g_return_if_fail (GTK_IS_WIDGET (widget)); + old_site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest"); + gtk_drag_dest_unset (widget); site = g_new (GtkDragDestSite, 1); @@ -477,6 +481,11 @@ gtk_drag_dest_set (GtkWidget *widget, site->target_list = NULL; site->actions = actions; + if (old_site) + site->track_motion = old_site->track_motion; + else + site->track_motion = FALSE; + if (GTK_WIDGET_REALIZED (widget)) gtk_drag_dest_realized (widget, site); @@ -760,9 +769,9 @@ gtk_drag_dest_leave (GtkWidget *widget, if ((site->flags & GTK_DEST_DEFAULT_HIGHLIGHT) && site->have_drag) gtk_drag_unhighlight (widget); - if (!(site->flags & GTK_DEST_DEFAULT_MOTION) || site->have_drag) - g_signal_emit_by_name (widget, "drag_leave", - context, time); + if (!(site->flags & GTK_DEST_DEFAULT_MOTION) || site->have_drag || + site->track_motion) + g_signal_emit_by_name (widget, "drag_leave", context, time); site->have_drag = FALSE; } @@ -781,7 +790,7 @@ gtk_drag_dest_motion (GtkWidget *widget, site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest"); g_return_val_if_fail (site != NULL, FALSE); - if (site->flags & GTK_DEST_DEFAULT_MOTION) + if (site->track_motion || site->flags & GTK_DEST_DEFAULT_MOTION) { if (context->suggested_action & site->actions) action = context->suggested_action; @@ -800,7 +809,8 @@ gtk_drag_dest_motion (GtkWidget *widget, else { gdk_drag_status (context, 0, time); - return TRUE; + if (!site->track_motion) + return TRUE; } } @@ -853,17 +863,28 @@ void gtk_drag_dest_set_track_motion (GtkWidget *widget, gboolean track_motion) { + GtkDragDestSite *site; + g_return_if_fail (GTK_IS_WIDGET (widget)); - /* FIXME: Implement */ + site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest"); + + g_return_if_fail (site != NULL); + + site->track_motion = track_motion != FALSE; } gboolean gtk_drag_dest_get_track_motion (GtkWidget *widget) { + GtkDragDestSite *site; + g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); - /* FIXME: Implement */ + site = g_object_get_data (G_OBJECT (widget), "gtk-drag-dest"); + + if (site) + return site->track_motion; return FALSE; } |