Looks good Ack series.

Regards,

Hans


On 02/03/2012 11:28 AM, Marc-André Lureau wrote:
Factor out and simplify a little the code to allow easier addition of
zoom-level property.

The "set_display" parameter for recalc_geometry() seems to be useless,
since the code was apparently trying to set the guest to the given
d->width and d->height, but reseting it to the current value, which
cancel the effect.

We should fix the problem of setting the guest resolution at
display-init time in a follow-up patch since it probably never worked
with spice-gtk.
---
  gtk/spice-widget.c |   63 ++++++++++++++++++++++++++++++---------------------
  1 files changed, 37 insertions(+), 26 deletions(-)

diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
index e574274..256363e 100644
--- a/gtk/spice-widget.c
+++ b/gtk/spice-widget.c
@@ -123,7 +123,7 @@ static void try_keyboard_ungrab(SpiceDisplay *display);
  static void update_mouse_grab(SpiceDisplay *display);
  static void try_mouse_grab(SpiceDisplay *display);
  static void try_mouse_ungrab(SpiceDisplay *display);
-static void recalc_geometry(GtkWidget *widget, gboolean set_display);
+static void recalc_geometry(GtkWidget *widget);
  static void disconnect_main(SpiceDisplay *display);
  static void disconnect_cursor(SpiceDisplay *display);
  static void disconnect_display(SpiceDisplay *display);
@@ -175,6 +175,36 @@ static void spice_display_get_property(GObject    *object,
      }
  }

+static void scaling_updated(SpiceDisplay *display)
+{
+    SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
+    GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(display));
+
+    recalc_geometry(GTK_WIDGET(display));
+    if (d->ximage&&  window) { /* if not yet shown */
+        int ww, wh;
+        
gdk_drawable_get_size(gtk_widget_get_window(GTK_WIDGET(display)),&ww,&wh);
+        gtk_widget_queue_draw_area(GTK_WIDGET(display), 0, 0, ww, wh);
+    }
+}
+
+static void update_size_request(SpiceDisplay *display)
+{
+    SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
+    gint reqwidth, reqheight;
+
+    if (d->resize_guest_enable) {
+        reqwidth = 640;
+        reqheight = 480;
+    } else {
+        reqwidth = d->width;
+        reqheight = d->height;
+    }
+
+    gtk_widget_set_size_request(GTK_WIDGET(display), reqwidth, reqheight);
+    recalc_geometry(GTK_WIDGET(display));
+}
+
  static void spice_display_set_property(GObject      *object,
                                         guint         prop_id,
                                         const GValue *value,
@@ -201,23 +231,11 @@ static void spice_display_set_property(GObject      
*object,
          break;
      case PROP_RESIZE_GUEST:
          d->resize_guest_enable = g_value_get_boolean(value);
-        if (d->resize_guest_enable) {
-            gtk_widget_set_size_request(GTK_WIDGET(display), 640, 480);
-            recalc_geometry(GTK_WIDGET(display), TRUE);
-        } else {
-            gtk_widget_set_size_request(GTK_WIDGET(display),
-                                        d->width, d->height);
-        }
+        update_size_request(display);
          break;
      case PROP_SCALING:
          d->allow_scaling = g_value_get_boolean(value);
-        recalc_geometry(GTK_WIDGET(display), FALSE);
-        if (d->ximage&&
-            gtk_widget_get_window(GTK_WIDGET(display))) { /* if not yet shown 
*/
-            int ww, wh;
-            
gdk_drawable_get_size(gtk_widget_get_window(GTK_WIDGET(display)),&ww,&wh);
-            gtk_widget_queue_draw_area(GTK_WIDGET(display), 0, 0, ww, wh);
-        }
+        scaling_updated(display);
          break;
      case PROP_AUTO_CLIPBOARD:
          g_object_set(d->gtk_session, "auto-clipboard",
@@ -733,7 +751,7 @@ static void update_mouse_grab(SpiceDisplay *display)
          try_mouse_ungrab(display);
  }

-static void recalc_geometry(GtkWidget *widget, gboolean set_display)
+static void recalc_geometry(GtkWidget *widget)
  {
      SpiceDisplay *display = SPICE_DISPLAY(widget);
      SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
@@ -750,10 +768,9 @@ static void recalc_geometry(GtkWidget *widget, gboolean 
set_display)
      SPICE_DEBUG("monitors: id %d, guest %dx%d, window %dx%d, offset +%d+%d",
                  d->channel_id, d->width, d->height, d->ww, d->wh, d->mx, 
d->my);

-    if (d->resize_guest_enable&&  set_display) {
+    if (d->resize_guest_enable)
          spice_main_set_display(d->main, d->channel_id,
                                 0, 0, d->ww, d->wh);
-    }
  }

  /* ---------------------------------------------------------------- */
@@ -1277,7 +1294,7 @@ static gboolean configure_event(GtkWidget *widget, 
GdkEventConfigure *conf)
      if (conf->width != d->ww  || conf->height != d->wh) {
          d->ww = conf->width;
          d->wh = conf->height;
-        recalc_geometry(widget, TRUE);
+        recalc_geometry(widget);
      }
      return true;
  }
@@ -1503,7 +1520,6 @@ static void primary_create(SpiceChannel *channel, gint 
format,
  {
      SpiceDisplay *display = data;
      SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display);
-    gboolean set_display = FALSE;

      d->format = format;
      d->stride = stride;
@@ -1511,14 +1527,9 @@ static void primary_create(SpiceChannel *channel, gint 
format,
      d->data_origin = d->data = imgdata;

      if (d->width != width || d->height != height) {
-        if (d->width != 0&&  d->height != 0)
-            set_display = TRUE;
          d->width  = width;
          d->height = height;
-        recalc_geometry(GTK_WIDGET(display), set_display);
-        if (!d->resize_guest_enable) {
-            gtk_widget_set_size_request(GTK_WIDGET(display), width, height);
-        }
+        update_size_request(display);
      }
  }

_______________________________________________
Spice-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to