From 9ffca9153dcde85f458b872acac69efeb8f0958c Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Wed, 5 Oct 2016 11:44:29 +0200 Subject: [PATCH] Fix virt-viewer window gradually getting bigger and bigger --- ...ing-problem-with-recent-gtk-versions.patch | 48 +++++++++++++++++++ virt-viewer.spec | 8 +++- 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 0001-Fix-resizing-problem-with-recent-gtk-versions.patch diff --git a/0001-Fix-resizing-problem-with-recent-gtk-versions.patch b/0001-Fix-resizing-problem-with-recent-gtk-versions.patch new file mode 100644 index 0000000..612bf7f --- /dev/null +++ b/0001-Fix-resizing-problem-with-recent-gtk-versions.patch @@ -0,0 +1,48 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma +Date: Fri, 22 Jul 2016 16:43:41 -0500 +Subject: [virt-viewer] Fix resizing problem with recent gtk versions + +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 7e6b93f..99fd102 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -411,10 +411,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 diff --git a/virt-viewer.spec b/virt-viewer.spec index a9031d3..58e37a7 100644 --- a/virt-viewer.spec +++ b/virt-viewer.spec @@ -17,12 +17,13 @@ Name: virt-viewer Version: 4.0 -Release: 1%{?dist}%{?extra_release} +Release: 2%{?dist}%{?extra_release} Summary: Virtual Machine Viewer Group: Applications/System License: GPLv2+ URL: http://virt-manager.org/ Source0: http://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz +Patch0: 0001-Fix-resizing-problem-with-recent-gtk-versions.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires: openssh-clients Requires(post): %{_sbindir}/update-alternatives @@ -65,6 +66,7 @@ the display, and libvirt for looking up VNC/SPICE server details. %prep %setup -q +%patch0 -p1 %build @@ -133,6 +135,10 @@ fi %{_mandir}/man1/remote-viewer.1* %changelog +* Wed Oct 05 2016 Christophe Fergeau 4.0-2 +- Add upstream patch fixing virt-viewer window gradually getting bigger and + bigger + * Thu Jun 30 2016 Daniel P. Berrange - 4.0-1 - Update to 4.0 release