Since some SpiceDisplay properties are now just a pass through to the equivalent SpiceGtkSession property, we also need to pass on the notify signal for these, so interested users can get notified of them changing.
Use this in spicy to ensure that changes to SpiceGtkSession (and thus per session rather then per window) properties get reflected in all windows for a multimonitor guest. Signed-off-by: Hans de Goede <hdego...@redhat.com> --- gtk/spice-widget.c | 12 ++++++++++++ gtk/spicy.c | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 0 deletions(-) diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c index 5b53caf..06e5113 100644 --- a/gtk/spice-widget.c +++ b/gtk/spice-widget.c @@ -226,6 +226,15 @@ static void spice_display_set_property(GObject *object, } } +static void gtk_session_property_changed(GObject *gobject, + GParamSpec *pspec, + gpointer user_data) +{ + SpiceDisplay *display = user_data; + + g_object_notify(G_OBJECT(display), g_param_spec_get_name(pspec)); +} + static void spice_display_dispose(GObject *obj) { SpiceDisplay *display = SPICE_DISPLAY(obj); @@ -329,6 +338,9 @@ spice_display_constructor(GType gtype, } g_list_free(list); + g_signal_connect(d->gtk_session, "notify::auto-clipboard", + G_CALLBACK(gtk_session_property_changed), display); + return obj; } diff --git a/gtk/spicy.c b/gtk/spicy.c index 77f339c..533d7f7 100644 --- a/gtk/spicy.c +++ b/gtk/spicy.c @@ -427,6 +427,20 @@ static void menu_cb_bool_prop(GtkToggleAction *action, gpointer data) g_object_set(G_OBJECT(win->spice), name, state, NULL); } +static void menu_cb_bool_prop_changed(GObject *gobject, + GParamSpec *pspec, + gpointer user_data) +{ + struct spice_window *win = user_data; + const gchar *property = g_param_spec_get_name(pspec); + GtkAction *toggle; + gboolean state; + + toggle = gtk_action_group_get_action(win->ag, property); + g_object_get(win->spice, property, &state, NULL); + gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(toggle), state); +} + static void menu_cb_toolbar(GtkToggleAction *action, gpointer data) { struct spice_window *win = data; @@ -1133,9 +1147,15 @@ static spice_window *create_spice_window(spice_connection *conn, int id, SpiceCh /* init toggle actions */ for (i = 0; i < G_N_ELEMENTS(spice_properties); i++) { + char notify[64]; + toggle = gtk_action_group_get_action(win->ag, spice_properties[i]); g_object_get(win->spice, spice_properties[i], &state, NULL); gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(toggle), state); + + snprintf(notify, sizeof(notify), "notify::%s", spice_properties[i]); + g_signal_connect(win->spice, notify, + G_CALLBACK(menu_cb_bool_prop_changed), win); } toggle = gtk_action_group_get_action(win->ag, "Toolbar"); -- 1.7.6.4 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel