[PATCH virt-viewer] Fix resizing problem with recent gtk versions

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

 



When using client-side decorations, as well as in certain other
situations (wayland, and windows in some cases), the window gradually
resizes larger and larger.

This is caused by a change in how gtk interprets the sizes passed to
gtk_window_resize(), particularly when client-side decorations (CSD) are
involved. For example, In the past this size was assumed to include the
size of the CSD, but now it it assumes that the sizes only represent the
size of the window's content, without any decorations. However,
gtk_widget_get_preferred_size() (when called on a GtkWindow*), returns a
size that includes the size of the CSD. So
virt_viewer_window_queue_resize() was essentially growing the window by
the size of the CSD every time it was called.

To work around this issue, we need to calculate the preferred size of
the window's child, not the size of the entire window (including CSD).
Then we add the width of the window's border (just to be safe) and pass
those values to gtk_window_resize().
---
 src/virt-viewer-window.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
index 695bfaf..ca3c4b2 100644
--- a/src/virt-viewer-window.c
+++ b/src/virt-viewer-window.c
@@ -462,10 +462,14 @@ virt_viewer_window_queue_resize(VirtViewerWindow *self)
 {
     VirtViewerWindowPrivate *priv = self->priv;
     GtkRequisition nat;
+    GtkWidget *child;
+    guint border;
 
+    border = gtk_container_get_border_width(GTK_CONTAINER(priv->window));
+    child = gtk_bin_get_child(GTK_BIN(priv->window));
     gtk_window_set_default_size(GTK_WINDOW(priv->window), -1, -1);
-    gtk_widget_get_preferred_size(priv->window, NULL, &nat);
-    gtk_window_resize(GTK_WINDOW(priv->window), nat.width, nat.height);
+    gtk_widget_get_preferred_size(child, NULL, &nat);
+    gtk_window_resize(GTK_WINDOW(priv->window), nat.width + border, nat.height + border);
 }
 
 static void
-- 
2.7.4

_______________________________________________
virt-tools-list mailing list
virt-tools-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/virt-tools-list



[Index of Archives]     [Linux Virtualization]     [KVM Development]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux