[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