dnd: Set the parent DnD wayland surface on gtk_drag_set_icon_window()

This is a better place to call this, both lets us remove all other calls,
and additionally handles the gtk_drag_set_icon_widget() entry point.
This commit is contained in:
Carlos Garnacho 2015-02-19 16:44:18 +01:00
parent 4a7da1e143
commit cc780116a2

View File

@ -3081,6 +3081,7 @@ gtk_drag_set_icon_window (GdkDragContext *context,
gboolean destroy_on_release)
{
GtkDragSourceInfo *info;
GdkDisplay *display;
info = gtk_drag_get_source_info (context, FALSE);
if (info == NULL)
@ -3100,6 +3101,19 @@ gtk_drag_set_icon_window (GdkDragContext *context,
info->hot_y = hot_y;
info->destroy_icon = destroy_on_release;
display = gdk_window_get_display (gdk_drag_context_get_source_window (context));
#ifdef GDK_WINDOWING_WAYLAND
if (GTK_IS_WINDOW (widget) && GDK_IS_WAYLAND_DISPLAY (display))
{
if (gtk_widget_get_realized (widget))
gtk_widget_unrealize (widget);
gtk_window_set_hardcoded_window (GTK_WINDOW (widget),
gdk_wayland_drag_context_get_dnd_window (context));
}
#endif
if (widget && info->icon_helper)
g_clear_object (&info->icon_helper);
@ -3176,12 +3190,6 @@ set_icon_helper (GdkDragContext *context,
gtk_widget_get_style_context (window),
&width, &height);
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (display))
gtk_window_set_hardcoded_window (GTK_WINDOW (window),
gdk_wayland_drag_context_get_dnd_window (context));
#endif
if (!force_window &&
gtk_drag_can_use_rgba_cursor (display, width + 2, height + 2))
{
@ -3403,12 +3411,6 @@ gtk_drag_set_icon_surface (GdkDragContext *context,
gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DND);
set_can_change_screen (window, TRUE);
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gdk_screen_get_display (screen)))
gtk_window_set_hardcoded_window (GTK_WINDOW (window),
gdk_wayland_drag_context_get_dnd_window (context));
#endif
gtk_widget_set_events (window, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
gtk_widget_set_app_paintable (window, TRUE);