[Spice-devel] [PATCH spice-gtk 2/2] spicy: toggle SpiceSession::video-sync-on-audio-latency
Victor Toso
victortoso at redhat.com
Thu Aug 3 12:30:56 UTC 2017
From: Victor Toso <me at victortoso.com>
So we can work on fixing mmtime that is not set/update correctly by
spice-server.
Signed-off-by: Victor Toso <victortoso at redhat.com>
---
tools/spicy.c | 43 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 42 insertions(+), 1 deletion(-)
diff --git a/tools/spicy.c b/tools/spicy.c
index 40cd6b3..963d4c4 100644
--- a/tools/spicy.c
+++ b/tools/spicy.c
@@ -123,6 +123,7 @@ static void usb_connect_failed(GObject *object,
GError *error,
gpointer data);
static gboolean is_gtk_session_property(const gchar *property);
+static gboolean is_session_property(const gchar *property);
static void del_window(spice_connection *conn, SpiceWindow *win);
/* options */
@@ -431,6 +432,8 @@ static void menu_cb_bool_prop(GtkToggleAction *action, gpointer data)
if (is_gtk_session_property(name)) {
object = win->conn->gtk_session;
+ } else if (is_session_property(name)) {
+ object = win->conn->session;
} else {
object = win->spice;
}
@@ -447,7 +450,7 @@ static void menu_cb_conn_bool_prop_changed(GObject *gobject,
gboolean state;
toggle = gtk_action_group_get_action(win->ag, property);
- g_object_get(win->conn->gtk_session, property, &state, NULL);
+ g_object_get(gobject, property, &state, NULL);
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(toggle), state);
}
@@ -657,6 +660,8 @@ static void restore_configuration(SpiceWindow *win)
if (is_gtk_session_property(keys[i])) {
object = win->conn->gtk_session;
+ } else if (is_session_property(keys[i])) {
+ object = win->conn->session;
} else {
object = win->spice;
}
@@ -806,6 +811,10 @@ static const char *spice_gtk_session_properties[] = {
"sync-modifiers",
};
+static const char *spice_session_properties[] = {
+ "video-sync-on-audio-latency",
+};
+
static const GtkToggleActionEntry tentries[] = {
{
.name = "grab-keyboard",
@@ -832,6 +841,10 @@ static const GtkToggleActionEntry tentries[] = {
.label = "Sync modifiers",
.callback = G_CALLBACK(menu_cb_bool_prop),
},{
+ .name = "video-sync-on-audio-latency",
+ .label = "Sync video on audio latency",
+ .callback = G_CALLBACK(menu_cb_bool_prop),
+ },{
.name = "auto-clipboard",
.label = "Automatic clipboard sharing between host and guest",
.callback = G_CALLBACK(menu_cb_bool_prop),
@@ -939,6 +952,7 @@ static char ui_xml[] =
" <menuitem action='scaling'/>\n"
" <menuitem action='disable-inputs'/>\n"
" <menuitem action='sync-modifiers'/>\n"
+" <menuitem action='video-sync-on-audio-latency'/>\n"
" <menuitem action='auto-clipboard'/>\n"
" <menuitem action='auto-usbredir'/>\n"
" <menu action='CompressionMenu'>\n"
@@ -988,6 +1002,18 @@ static gboolean is_gtk_session_property(const gchar *property)
return FALSE;
}
+static gboolean is_session_property(const gchar *property)
+{
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS(spice_session_properties); i++) {
+ if (!strcmp(spice_session_properties[i], property)) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
static void recent_item_activated_cb(GtkRecentChooser *chooser, gpointer data)
{
GtkRecentInfo *info;
@@ -1187,6 +1213,21 @@ static SpiceWindow *create_spice_window(spice_connection *conn, SpiceChannel *ch
win, 0);
}
+ for (i = 0; i < G_N_ELEMENTS(spice_session_properties); i++) {
+ char notify[64];
+
+ toggle = gtk_action_group_get_action(win->ag, spice_session_properties[i]);
+ g_object_get(win->conn->session, spice_session_properties[i],
+ &state, NULL);
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(toggle), state);
+
+ snprintf(notify, sizeof(notify), "notify::%s",
+ spice_session_properties[i]);
+ spice_g_signal_connect_object(win->conn->session, notify,
+ G_CALLBACK(menu_cb_conn_bool_prop_changed),
+ win, 0);
+ }
+
update_edit_menu_window(win);
toggle = gtk_action_group_get_action(win->ag, "Toolbar");
--
2.13.0
More information about the Spice-devel
mailing list