diff options
author | Jonas Ådahl <jadahl@gmail.com> | 2020-11-25 15:06:09 +0100 |
---|---|---|
committer | Jonas Ådahl <jadahl@gmail.com> | 2020-12-07 09:46:39 +0100 |
commit | ecd40fa2659f039fc979b4488bedf186f3290358 (patch) | |
tree | 054906a88267e19c881fa302bdbce9fd26c88ca9 /gtk/gtkdragicon.c | |
parent | 3b140a05a441d89482896fe88f381a2c5088e41d (diff) | |
download | gtk+-ecd40fa2659f039fc979b4488bedf186f3290358.tar.gz |
wayland: Layout drag icon from GdkSurface::layout
Diffstat (limited to 'gtk/gtkdragicon.c')
-rw-r--r-- | gtk/gtkdragicon.c | 20 |
1 files changed, 12 insertions, 8 deletions
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); } |