[Spice-devel] [PATCH spice-gtk 1/3] widget: factor out update_size_request() and scaling_updated()
Hans de Goede
hdegoede at redhat.com
Fri Feb 3 04:02:17 PST 2012
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);
> }
> }
>
More information about the Spice-devel
mailing list