[Spice-devel] [PATCH spice-gtk 6/7] spicy: Stop using SpiceDisplay's deprecated clipboard methods
Hans de Goede
hdegoede at redhat.com
Mon Oct 10 05:34:43 PDT 2011
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
gtk/spicy.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 60 insertions(+), 17 deletions(-)
diff --git a/gtk/spicy.c b/gtk/spicy.c
index 533d7f7..3034dbb 100644
--- a/gtk/spicy.c
+++ b/gtk/spicy.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
/*
- Copyright (C) 2010 Red Hat, Inc.
+ Copyright (C) 2010-2011 Red Hat, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -33,6 +33,7 @@
#endif
#include "spice-widget.h"
+#include "spice-gtk-session.h"
#include "spice-audio.h"
#include "spice-common.h"
#include "spice-cmdline.h"
@@ -74,6 +75,7 @@ struct spice_window {
struct spice_connection {
SpiceSession *session;
+ SpiceGtkSession *gtk_session;
spice_window *wins[4];
SpiceAudio *audio;
char *mouse_state;
@@ -100,6 +102,7 @@ static void auto_connect_failed(SpiceUsbDeviceManager *manager,
SpiceUsbDevice *device,
GError *error,
gpointer data);
+static gboolean is_gtk_session_property(const gchar *property);
/* ------------------------------------------------------------------ */
@@ -317,14 +320,14 @@ static void menu_cb_copy(GtkAction *action, void *data)
{
struct spice_window *win = data;
- spice_display_copy_to_guest(SPICE_DISPLAY(win->spice));
+ spice_gtk_session_copy_to_guest(win->conn->gtk_session);
}
static void menu_cb_paste(GtkAction *action, void *data)
{
struct spice_window *win = data;
- spice_display_paste_from_guest(SPICE_DISPLAY(win->spice));
+ spice_gtk_session_paste_from_guest(win->conn->gtk_session);
}
static void window_set_fullscreen(struct spice_window *win, gboolean fs)
@@ -419,17 +422,24 @@ static void menu_cb_bool_prop(GtkToggleAction *action, gpointer data)
struct spice_window *win = data;
gboolean state = gtk_toggle_action_get_active(action);
const char *name;
+ gpointer object;
name = gtk_action_get_name(GTK_ACTION(action));
SPICE_DEBUG("%s: %s = %s", __FUNCTION__, name, state ? _("yes") : _("no"));
g_key_file_set_boolean(keyfile, "general", name, state);
- g_object_set(G_OBJECT(win->spice), name, state, NULL);
+
+ if (is_gtk_session_property(name)) {
+ object = win->conn->gtk_session;
+ } else {
+ object = win->spice;
+ }
+ g_object_set(object, name, state, NULL);
}
-static void menu_cb_bool_prop_changed(GObject *gobject,
- GParamSpec *pspec,
- gpointer user_data)
+static void menu_cb_conn_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);
@@ -437,7 +447,7 @@ static void menu_cb_bool_prop_changed(GObject *gobject,
gboolean state;
toggle = gtk_action_group_get_action(win->ag, property);
- g_object_get(win->spice, property, &state, NULL);
+ g_object_get(win->conn->gtk_session, property, &state, NULL);
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(toggle), state);
}
@@ -564,6 +574,7 @@ static void restore_configuration(struct spice_window *win)
gchar **keys = NULL;
gsize nkeys, i;
GError *error = NULL;
+ gpointer object;
keys = g_key_file_get_keys(keyfile, "general", &nkeys, &error);
if (error != NULL) {
@@ -585,7 +596,13 @@ static void restore_configuration(struct spice_window *win)
g_clear_error(&error);
continue;
}
- g_object_set(G_OBJECT(win->spice), keys[i], state, NULL);
+
+ if (is_gtk_session_property(keys[i])) {
+ object = win->conn->gtk_session;
+ } else {
+ object = win->spice;
+ }
+ g_object_set(object, keys[i], state, NULL);
}
g_strfreev(keys);
@@ -699,17 +716,20 @@ static const GtkActionEntry entries[] = {
}
};
-static const char *spice_properties[] = {
+static const char *spice_display_properties[] = {
"grab-keyboard",
"grab-mouse",
"resize-guest",
"scaling",
- "auto-clipboard",
#ifdef USE_USBREDIR
"auto-usbredir",
#endif
};
+static const char *spice_gtk_session_properties[] = {
+ "auto-clipboard",
+};
+
static const GtkToggleActionEntry tentries[] = {
{
.name = "grab-keyboard",
@@ -797,6 +817,18 @@ static char ui_xml[] =
" </toolbar>\n"
"</ui>\n";
+static gboolean is_gtk_session_property(const gchar *property)
+{
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS(spice_gtk_session_properties); i++) {
+ if (!strcmp(spice_gtk_session_properties[i], property)) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
#ifndef WIN32
static void recent_item_activated_cb(GtkRecentChooser *chooser, gpointer data)
{
@@ -1146,16 +1178,26 @@ static spice_window *create_spice_window(spice_connection *conn, int id, SpiceCh
restore_configuration(win);
/* init toggle actions */
- for (i = 0; i < G_N_ELEMENTS(spice_properties); i++) {
+ for (i = 0; i < G_N_ELEMENTS(spice_display_properties); i++) {
+ toggle = gtk_action_group_get_action(win->ag,
+ spice_display_properties[i]);
+ g_object_get(win->spice, spice_display_properties[i], &state, NULL);
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(toggle), state);
+ }
+
+ for (i = 0; i < G_N_ELEMENTS(spice_gtk_session_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);
+ toggle = gtk_action_group_get_action(win->ag,
+ spice_gtk_session_properties[i]);
+ g_object_get(win->conn->gtk_session, spice_gtk_session_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);
+ snprintf(notify, sizeof(notify), "notify::%s",
+ spice_gtk_session_properties[i]);
+ g_signal_connect(win->conn->gtk_session, notify,
+ G_CALLBACK(menu_cb_conn_bool_prop_changed), win);
}
toggle = gtk_action_group_get_action(win->ag, "Toolbar");
@@ -1466,6 +1508,7 @@ static spice_connection *connection_new(void)
conn = g_new0(spice_connection, 1);
conn->session = spice_session_new();
+ conn->gtk_session = spice_gtk_session_get(conn->session);
g_signal_connect(conn->session, "channel-new",
G_CALLBACK(channel_new), conn);
g_signal_connect(conn->session, "channel-destroy",
--
1.7.6.4
More information about the Spice-devel
mailing list