summaryrefslogtreecommitdiffstats
path: root/src/virt-viewer-session.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2012-01-27 14:51:34 +0100
committerDaniel P. Berrange <berrange@redhat.com>2012-01-31 13:20:26 +0000
commitdfb26d59b059887df72af73e7893eb5fc6c3f138 (patch)
tree6c875b08a2591935c93da490f553f9de6aac808d /src/virt-viewer-session.c
parent2dcd3fa6178dd84ec8b7d6adb0b8da81cec2d2b4 (diff)
downloadvirt-viewer-dfb26d59b059887df72af73e7893eb5fc6c3f138.tar.gz
virt-viewer-dfb26d59b059887df72af73e7893eb5fc6c3f138.tar.xz
virt-viewer-dfb26d59b059887df72af73e7893eb5fc6c3f138.zip
Enable spice auto-usbredir
Diffstat (limited to 'src/virt-viewer-session.c')
-rw-r--r--src/virt-viewer-session.c89
1 files changed, 82 insertions, 7 deletions
diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c
index c794c0b..1017d98 100644
--- a/src/virt-viewer-session.c
+++ b/src/virt-viewer-session.c
@@ -35,10 +35,18 @@
struct _VirtViewerSessionPrivate
{
GList *displays;
+
+ gboolean auto_usbredir;
};
G_DEFINE_ABSTRACT_TYPE(VirtViewerSession, virt_viewer_session, G_TYPE_OBJECT)
+enum {
+ PROP_0,
+
+ PROP_AUTO_USBREDIR,
+};
+
static void
virt_viewer_session_finalize(GObject *obj)
{
@@ -55,12 +63,60 @@ virt_viewer_session_finalize(GObject *obj)
}
static void
+virt_viewer_session_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ VirtViewerSession *self = VIRT_VIEWER_SESSION(object);
+
+ switch (prop_id) {
+ case PROP_AUTO_USBREDIR:
+ virt_viewer_session_set_auto_usbredir(self, g_value_get_boolean(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+virt_viewer_session_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ VirtViewerSession *self = VIRT_VIEWER_SESSION(object);
+
+ switch (prop_id) {
+ case PROP_AUTO_USBREDIR:
+ g_value_set_boolean(value, virt_viewer_session_get_auto_usbredir(self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
virt_viewer_session_class_init(VirtViewerSessionClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS(class);
+ object_class->set_property = virt_viewer_session_set_property;
+ object_class->get_property = virt_viewer_session_get_property;
object_class->finalize = virt_viewer_session_finalize;
+ g_object_class_install_property(object_class,
+ PROP_AUTO_USBREDIR,
+ g_param_spec_boolean("auto-usbredir",
+ "USB redirection",
+ "USB redirection",
+ TRUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
g_signal_new("session-connected",
G_OBJECT_CLASS_TYPE(object_class),
G_SIGNAL_RUN_FIRST,
@@ -241,24 +297,24 @@ gboolean virt_viewer_session_open_fd(VirtViewerSession *session, int fd)
gboolean virt_viewer_session_open_host(VirtViewerSession *session, char *host, char *port)
{
- VirtViewerSessionClass *klass;
+ VirtViewerSessionClass *klass;
g_return_val_if_fail(VIRT_VIEWER_IS_SESSION(session), FALSE);
klass = VIRT_VIEWER_SESSION_GET_CLASS(session);
- return klass->open_host(session, host, port);
+ return klass->open_host(session, host, port);
}
gboolean virt_viewer_session_open_uri(VirtViewerSession *session, gchar *uri)
{
- VirtViewerSessionClass *klass;
+ VirtViewerSessionClass *klass;
- g_return_val_if_fail(VIRT_VIEWER_IS_SESSION(session), FALSE);
+ g_return_val_if_fail(VIRT_VIEWER_IS_SESSION(session), FALSE);
- klass = VIRT_VIEWER_SESSION_GET_CLASS(session);
- g_return_val_if_fail(klass->open_uri != NULL, FALSE);
+ klass = VIRT_VIEWER_SESSION_GET_CLASS(session);
+ g_return_val_if_fail(klass->open_uri != NULL, FALSE);
- return klass->open_uri(session, uri);
+ return klass->open_uri(session, uri);
}
gboolean virt_viewer_session_channel_open_fd(VirtViewerSession *session,
@@ -269,10 +325,29 @@ gboolean virt_viewer_session_channel_open_fd(VirtViewerSession *session,
return VIRT_VIEWER_SESSION_GET_CLASS(session)->channel_open_fd(session, channel, fd);
}
+void virt_viewer_session_set_auto_usbredir(VirtViewerSession *self, gboolean auto_usbredir)
+{
+ g_return_if_fail(VIRT_VIEWER_IS_SESSION(self));
+
+ if (self->priv->auto_usbredir == auto_usbredir)
+ return;
+
+ self->priv->auto_usbredir = auto_usbredir;
+ g_object_notify(G_OBJECT(self), "auto-usbredir");
+}
+
+gboolean virt_viewer_session_get_auto_usbredir(VirtViewerSession *self)
+{
+ g_return_val_if_fail(VIRT_VIEWER_IS_SESSION(self), FALSE);
+
+ return self->priv->auto_usbredir;
+}
+
/*
* Local variables:
* c-indent-level: 8
* c-basic-offset: 8
+ * indent-tabs-mode: t
* tab-width: 8
* End:
*/