From ecd40fa2659f039fc979b4488bedf186f3290358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Wed, 25 Nov 2020 15:06:09 +0100 Subject: wayland: Layout drag icon from GdkSurface::layout --- gtk/gtkdragicon.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'gtk/gtkdragicon.c') diff --git a/gtk/gtkdragicon.c b/gtk/gtkdragicon.c index e239090011..dfcb029cc9 100644 --- a/gtk/gtkdragicon.c +++ b/gtk/gtkdragicon.c @@ -155,14 +155,7 @@ gtk_drag_icon_native_check_resize (GtkNative *native) if (!_gtk_widget_get_alloc_needed (widget)) gtk_widget_ensure_allocate (widget); else if (gtk_widget_get_visible (widget)) - { - gtk_drag_icon_move_resize (icon); - if (icon->surface) - gtk_widget_allocate (widget, - gdk_surface_get_width (icon->surface), - gdk_surface_get_height (icon->surface), - -1, NULL); - } + gtk_drag_icon_move_resize (icon); } static void @@ -174,6 +167,15 @@ gtk_drag_icon_native_init (GtkNativeInterface *iface) iface->check_resize = gtk_drag_icon_native_check_resize; } +static void +surface_layout (GdkSurface *surface, + int width, + int height, + GtkWidget *widget) +{ + gtk_widget_allocate (widget, width, height, -1, NULL); +} + static gboolean surface_render (GdkSurface *surface, cairo_region_t *region, @@ -192,6 +194,7 @@ gtk_drag_icon_realize (GtkWidget *widget) gdk_surface_set_widget (icon->surface, widget); + g_signal_connect (icon->surface, "layout", G_CALLBACK (surface_layout), widget); g_signal_connect (icon->surface, "render", G_CALLBACK (surface_render), widget); GTK_WIDGET_CLASS (gtk_drag_icon_parent_class)->realize (widget); @@ -211,6 +214,7 @@ gtk_drag_icon_unrealize (GtkWidget *widget) if (icon->surface) { + g_signal_handlers_disconnect_by_func (icon->surface, surface_layout, widget); g_signal_handlers_disconnect_by_func (icon->surface, surface_render, widget); gdk_surface_set_widget (icon->surface, NULL); } -- cgit v1.2.1