gtkdnd: Traverse across insensitive widgets

The current widget lookup code bails out on insensitive widgets, there's
however legit cases where we want DnD handled by a parent of the insensitive
widget, so just keep going upwards in that case.

We also use now the widget state flags, because get_sensitive() doesn't
propagate across hierarchies, so we could conceivably find a drop site
inside an insensitive widget.

https://bugzilla.gnome.org/show_bug.cgi?id=751793
This commit is contained in:
Carlos Garnacho 2015-07-01 18:46:30 +02:00
parent 7f57f63eba
commit 3f8982a0cd

View File

@ -1881,10 +1881,15 @@ gtk_drag_find_widget (GtkWidget *widget,
GList *hierarchy = NULL; GList *hierarchy = NULL;
gboolean found = FALSE; gboolean found = FALSE;
if (!gtk_widget_get_mapped (widget) || if (!gtk_widget_get_mapped (widget))
!gtk_widget_get_sensitive (widget))
return FALSE; return FALSE;
if (gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_INSENSITIVE)
{
widget = gtk_widget_get_parent (widget);
continue;
}
/* need to reference the entire hierarchy temporarily in case the /* need to reference the entire hierarchy temporarily in case the
* ::drag-motion/::drag-drop callbacks change the widget hierarchy. * ::drag-motion/::drag-drop callbacks change the widget hierarchy.
*/ */