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

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

 



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




[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