summaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2012-02-01 16:55:28 +0100
committerMarc-André Lureau <marcandre.lureau@redhat.com>2012-02-01 23:01:40 +0100
commit36026a90e7bcb134822b6b91a90bc5b1c4945123 (patch)
treea45cf29095ab3d747a26a9cf1e14e12f29efd839 /gtk
parent364e34b4a05ebcee881afbfe13a845aa49adf488 (diff)
downloadspice-gtk-36026a90e7bcb134822b6b91a90bc5b1c4945123.tar.gz
spice-gtk-36026a90e7bcb134822b6b91a90bc5b1c4945123.tar.xz
spice-gtk-36026a90e7bcb134822b6b91a90bc5b1c4945123.zip
widget: factor out update_size_request() and scaling_updated()
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.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/spice-widget.c63
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);
}
}