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

Fabiano Fidêncio fidencio at redhat.com
Fri Jul 22 23:14:40 UTC 2016


On Sat, Jul 23, 2016 at 12:05 AM, Jonathon Jongsma <jjongsma at redhat.com> 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 at redhat.com>

> ---
>  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 at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list




More information about the virt-tools-list mailing list