[gtk-vnc] src: unset size request if scaling is active



commit 0b0afcad76d208d8c371706123a731e215bff710
Author: Daniel P. Berrangé <dan berrange com>
Date:   Thu Dec 10 18:40:51 2020 +0000

    src: unset size request if scaling is active
    
    If scaling is active at the same time as force size, we want to set the
    new size request, and then unset to let the user continue to resize.
    
    Signed-off-by: Daniel P. Berrangé <berrange redhat com>

 src/vncdisplay.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
---
diff --git a/src/vncdisplay.c b/src/vncdisplay.c
index 8cd8f43..2870fd0 100644
--- a/src/vncdisplay.c
+++ b/src/vncdisplay.c
@@ -1205,6 +1205,12 @@ static void on_framebuffer_update(VncConnection *conn G_GNUC_UNUSED,
                                               vnc_connection_get_height(priv->conn));
 }
 
+static gboolean do_size_request_clear(gpointer opaque)
+{
+    VNC_DEBUG("Clearing previous size request after idle");
+    gtk_widget_set_size_request(GTK_WIDGET(opaque), -1, -1);
+    return FALSE;
+}
 
 static void do_size_request(VncDisplay *obj)
 {
@@ -1213,8 +1219,14 @@ static void do_size_request(VncDisplay *obj)
     if (priv->force_size) {
         int width = vnc_framebuffer_get_width(VNC_FRAMEBUFFER(priv->fb));
         int height = vnc_framebuffer_get_height(VNC_FRAMEBUFFER(priv->fb));
+        VNC_DEBUG("Setting size request %dx%d", width, height);
         gtk_widget_set_size_request(GTK_WIDGET(obj), width, height);
+
+        if (priv->allow_scaling) {
+            g_idle_add(do_size_request_clear, obj);
+        }
     } else {
+        VNC_DEBUG("Clearing previous size request");
         gtk_widget_set_size_request(GTK_WIDGET(obj), -1, -1);
     }
 }
@@ -2985,6 +2997,8 @@ gboolean vnc_display_set_scaling(VncDisplay *obj,
             wh = gdk_window_get_height(gtk_widget_get_window(GTK_WIDGET(obj)));
             gtk_widget_queue_draw_area(GTK_WIDGET(obj), 0, 0, ww, wh);
         }
+
+        do_size_request(obj);
     }
 
     return TRUE;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]