[virt-tools-list] [PATCH virt-viewer] Fix gtk2 build

Christophe Fergeau cfergeau at redhat.com
Tue Apr 8 14:52:01 UTC 2014


Hey,

On Mon, Mar 31, 2014 at 05:17:06PM -0500, Jonathon Jongsma wrote:
> Previous commit accidentally broke gtk2 build by using
> gtk_widget_get_preferred_size().  We can't simply use gtk_widget_size_request()
> for the gtk2 build since this will generally return 50x50 whenever we're not in
> the middle of a resize, so we need to add a compatibility function.

ACK.

Christophe

> ---
>  src/virt-viewer-display-spice.c |  2 +-
>  src/virt-viewer-display.c       | 41 ++++++++++++++++++++++++++++-------------
>  src/virt-viewer-display.h       |  1 +
>  3 files changed, 30 insertions(+), 14 deletions(-)
> 
> diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c
> index 76dfb47..2ce42cf 100644
> --- a/src/virt-viewer-display-spice.c
> +++ b/src/virt-viewer-display-spice.c
> @@ -204,7 +204,7 @@ virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self,
>           * resizes the window to the size it already wants to be (based on desktop
>           * size and zoom level), just return early
>           */
> -        gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, &preferred);
> +        virt_viewer_display_get_preferred_size(VIRT_VIEWER_DISPLAY(self), &preferred);
>          if (preferred.width == allocation->width
>              && preferred.height == allocation->height) {
>              return;
> diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c
> index 6c078a5..f298bb0 100644
> --- a/src/virt-viewer-display.c
> +++ b/src/virt-viewer-display.c
> @@ -377,6 +377,31 @@ virt_viewer_display_grab_focus(GtkWidget *widget)
>      gtk_widget_grab_focus(gtk_bin_get_child(bin));
>  }
>  
> +/* Compatibility function to allow gtk2 to emulate gtk3 behavior. We can't use
> + * the size request since it simply returns the minimum size whenever dirty is
> + * false */
> +void virt_viewer_display_get_preferred_size(VirtViewerDisplay *self,
> +                                            GtkRequisition *requisition)
> +{
> +#if GTK_CHECK_VERSION(3, 0, 0)
> +    gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, requisition);
> +#else
> +    VirtViewerDisplayPrivate *priv = self->priv;
> +    int border_width = gtk_container_get_border_width(GTK_CONTAINER(self));
> +
> +    requisition->width = border_width * 2;
> +    requisition->height = border_width * 2;
> +
> +    if (priv->zoom) {
> +        requisition->width += round(priv->desktopWidth * priv->zoom_level / 100.0);
> +        requisition->height += round(priv->desktopHeight * priv->zoom_level / 100.0);
> +    } else {
> +        requisition->width += priv->desktopWidth;
> +        requisition->height += priv->desktopHeight;
> +    }
> +#endif
> +}
> +
>  
>  #if !GTK_CHECK_VERSION(3, 0, 0)
>  static gboolean
> @@ -396,22 +421,12 @@ virt_viewer_display_size_request(GtkWidget *widget,
>  {
>      VirtViewerDisplay *display = VIRT_VIEWER_DISPLAY(widget);
>      VirtViewerDisplayPrivate *priv = display->priv;
> -    int border_width = gtk_container_get_border_width(GTK_CONTAINER(widget));
> -
> -    requisition->width = border_width * 2;
> -    requisition->height = border_width * 2;
>  
>      if (priv->dirty) {
> -        if (priv->zoom) {
> -            requisition->width += round(priv->desktopWidth * priv->zoom_level / 100.0);
> -            requisition->height += round(priv->desktopHeight * priv->zoom_level / 100.0);
> -        } else {
> -            requisition->width += priv->desktopWidth;
> -            requisition->height += priv->desktopHeight;
> -        }
> +        virt_viewer_display_get_preferred_size(display, requisition);
>      } else {
> -        requisition->width += 50;
> -        requisition->height += 50;
> +        requisition->width = 50;
> +        requisition->height = 50;
>      }
>  
>      DEBUG_LOG("Display size request %dx%d (desktop %dx%d)",
> diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h
> index fe88d98..70ce772 100644
> --- a/src/virt-viewer-display.h
> +++ b/src/virt-viewer-display.h
> @@ -126,6 +126,7 @@ gboolean virt_viewer_display_get_enabled(VirtViewerDisplay *display);
>  gboolean virt_viewer_display_get_selectable(VirtViewerDisplay *display);
>  void virt_viewer_display_queue_resize(VirtViewerDisplay *display);
>  void virt_viewer_display_get_preferred_monitor_geometry(VirtViewerDisplay *self, GdkRectangle* preferred);
> +void virt_viewer_display_get_preferred_size(VirtViewerDisplay *self, GtkRequisition* requisistion);
>  
>  G_END_DECLS
>  
> -- 
> 1.9.0
> 
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/virt-tools-list/attachments/20140408/ad29567b/attachment.sig>


More information about the virt-tools-list mailing list