From: Ivan Molodetskikh Date: Sun, 5 Mar 2023 18:20:31 +0000 (-0800) Subject: dragicon: Handle compute-size X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~549^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e041646bfca044f79b0d498a4df59dde4dc66c50;p=gtk4.git dragicon: Handle compute-size Compute our size when requested by the backend. This makes GtkDragIcons actually recompute their size when it changes, instead of getting stuck with the first size and potentially underallocating. --- diff --git a/gtk/gtkdragicon.c b/gtk/gtkdragicon.c index 3d684ecfbc..4035725e25 100644 --- a/gtk/gtkdragicon.c +++ b/gtk/gtkdragicon.c @@ -28,6 +28,7 @@ #include "gtkcssnumbervalueprivate.h" #include "gdk/gdksurfaceprivate.h" +#include "gdk/gdkdragsurfacesize.h" /* for the drag icons */ #include "gtkcolorswatchprivate.h" @@ -183,6 +184,16 @@ surface_render (GdkSurface *surface, return TRUE; } +static void +surface_compute_size (GdkDragSurface *surface, + GdkDragSurfaceSize *size, + GtkWidget *widget) +{ + GtkRequisition nat_size; + gtk_widget_get_preferred_size (widget, NULL, &nat_size); + gdk_drag_surface_size_set_size (size, nat_size.width, nat_size.height); +} + static void gtk_drag_icon_realize (GtkWidget *widget) { @@ -193,6 +204,7 @@ gtk_drag_icon_realize (GtkWidget *widget) gdk_surface_set_widget (icon->surface, widget); g_signal_connect (icon->surface, "render", G_CALLBACK (surface_render), widget); + g_signal_connect (icon->surface, "compute-size", G_CALLBACK (surface_compute_size), widget); GTK_WIDGET_CLASS (gtk_drag_icon_parent_class)->realize (widget); @@ -216,6 +228,7 @@ gtk_drag_icon_unrealize (GtkWidget *widget) if (icon->surface) { g_signal_handlers_disconnect_by_func (icon->surface, surface_render, widget); + g_signal_handlers_disconnect_by_func (icon->surface, surface_compute_size, widget); gdk_surface_set_widget (icon->surface, NULL); } }