On Sat, Jul 23, 2016 at 1:14 AM, Fabiano Fidêncio <fidencio@xxxxxxxxxx> wrote: > On Sat, Jul 23, 2016 at 12:05 AM, Jonathon Jongsma <jjongsma@xxxxxxxxxx> wrote: >> 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(). > > Acked-by: Fabiano Fidêncio <fidencio@xxxxxxxxxx> And this patch must be pushed to the 4.0-maint branch as well. > >> --- >> 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 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list