mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 14:31:10 +00:00
x11: Keep a ref on GdkDrag objects
It is expected that backends keep a ref on the GdkDrag objects that they create as long as the drag is ongoing.
This commit is contained in:
parent
833b564946
commit
f93d0f8fb5
@ -900,16 +900,12 @@ gdk_x11_drag_handle_finished (GdkDisplay *display,
|
|||||||
|
|
||||||
if (drag)
|
if (drag)
|
||||||
{
|
{
|
||||||
g_object_ref (drag);
|
|
||||||
|
|
||||||
drag_x11 = GDK_X11_DRAG (drag);
|
drag_x11 = GDK_X11_DRAG (drag);
|
||||||
if (drag_x11->version == 5)
|
if (drag_x11->version == 5)
|
||||||
drag_x11->drop_failed = xevent->xclient.data.l[1] == 0;
|
drag_x11->drop_failed = xevent->xclient.data.l[1] == 0;
|
||||||
|
|
||||||
g_signal_emit_by_name (drag, "dnd-finished");
|
g_signal_emit_by_name (drag, "dnd-finished");
|
||||||
gdk_drag_drop_done (drag, !drag_x11->drop_failed);
|
gdk_drag_drop_done (drag, !drag_x11->drop_failed);
|
||||||
|
|
||||||
g_object_unref (drag);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1896,6 +1892,7 @@ gdk_x11_drag_drop_done (GdkDrag *drag,
|
|||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
gdk_surface_hide (x11_drag->drag_surface);
|
gdk_surface_hide (x11_drag->drag_surface);
|
||||||
|
g_object_unref (drag);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1928,6 +1925,7 @@ gdk_x11_drag_drop_done (GdkDrag *drag,
|
|||||||
gdk_drag_anim_timeout, anim,
|
gdk_drag_anim_timeout, anim,
|
||||||
(GDestroyNotify) gdk_drag_anim_destroy);
|
(GDestroyNotify) gdk_drag_anim_destroy);
|
||||||
g_source_set_name_by_id (id, "[gtk] gdk_drag_anim_timeout");
|
g_source_set_name_by_id (id, "[gtk] gdk_drag_anim_timeout");
|
||||||
|
g_object_unref (drag);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -2097,7 +2095,7 @@ _gdk_x11_surface_drag_begin (GdkSurface *surface,
|
|||||||
g_object_unref (drag);
|
g_object_unref (drag);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
move_drag_surface (drag, x_root, y_root);
|
move_drag_surface (drag, x_root, y_root);
|
||||||
|
|
||||||
x11_drag->timestamp = gdk_display_get_last_seen_time (display);
|
x11_drag->timestamp = gdk_display_get_last_seen_time (display);
|
||||||
@ -2113,7 +2111,10 @@ _gdk_x11_surface_drag_begin (GdkSurface *surface,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
g_signal_connect_object (display, "xevent", G_CALLBACK (gdk_x11_drag_xevent), drag, 0);
|
g_signal_connect_object (display, "xevent", G_CALLBACK (gdk_x11_drag_xevent), drag, 0);
|
||||||
|
/* backend holds a ref until gdk_drag_drop_done is called */
|
||||||
|
g_object_ref (drag);
|
||||||
|
|
||||||
return drag;
|
return drag;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user