Fix gtk2 build

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.
This commit is contained in:
Jonathon Jongsma 2014-03-31 17:12:16 -05:00
parent 125ee741ae
commit d098eee198
3 changed files with 30 additions and 14 deletions

View File

@ -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;

View File

@ -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)",

View File

@ -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