summaryrefslogtreecommitdiffstats
path: root/src/virt-viewer-session.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2012-11-23 00:53:13 +0100
committerMarc-André Lureau <marcandre.lureau@gmail.com>2012-11-27 20:08:01 +0100
commit79bdf3b177c4be30e1abe1c5a3fd99f6a1028af8 (patch)
tree6a7396f788b96f43eff0fbf13f1bff298e7a09b2 /src/virt-viewer-session.c
parenta0bbb6878d3f5f398478dc3792c08807a4b49474 (diff)
downloadvirt-viewer-79bdf3b177c4be30e1abe1c5a3fd99f6a1028af8.tar.gz
virt-viewer-79bdf3b177c4be30e1abe1c5a3fd99f6a1028af8.tar.xz
virt-viewer-79bdf3b177c4be30e1abe1c5a3fd99f6a1028af8.zip
Add VirtViewerSession:file property
If VirtViewerSession:file is set, it should be used to define the connection parameters. Also correct the mime type used in this case. The mime type is needed to identify the kind of resources we are adding to the recent list. The recent list can then be filtered and various application handling that type may attempt to access that resource.
Diffstat (limited to 'src/virt-viewer-session.c')
-rw-r--r--src/virt-viewer-session.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c
index 7fd719a..16c878a 100644
--- a/src/virt-viewer-session.c
+++ b/src/virt-viewer-session.c
@@ -38,6 +38,7 @@ struct _VirtViewerSessionPrivate
VirtViewerApp *app;
gboolean auto_usbredir;
gchar *uri;
+ VirtViewerFile *file;
};
G_DEFINE_ABSTRACT_TYPE(VirtViewerSession, virt_viewer_session, G_TYPE_OBJECT)
@@ -47,6 +48,7 @@ enum {
PROP_APP,
PROP_AUTO_USBREDIR,
+ PROP_FILE
};
static void
@@ -62,6 +64,7 @@ virt_viewer_session_finalize(GObject *obj)
g_list_free(session->priv->displays);
g_free(session->priv->uri);
+ g_clear_object(&session->priv->file);
G_OBJECT_CLASS(virt_viewer_session_parent_class)->finalize(obj);
}
@@ -83,6 +86,10 @@ virt_viewer_session_set_property(GObject *object,
self->priv->app = g_value_get_object(value);
break;
+ case PROP_FILE:
+ virt_viewer_session_set_file(self, g_value_get_object(value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -106,6 +113,10 @@ virt_viewer_session_get_property(GObject *object,
g_value_set_object(value, self->priv->app);
break;
+ case PROP_FILE:
+ g_value_set_object(value, self->priv->file);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -141,6 +152,16 @@ virt_viewer_session_class_init(VirtViewerSessionClass *class)
G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property(object_class,
+ PROP_FILE,
+ g_param_spec_object("file",
+ "VirtViewerFile",
+ "VirtViewerFile",
+ VIRT_VIEWER_TYPE_FILE,
+ 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,
@@ -373,6 +394,9 @@ const gchar* virt_viewer_session_mime_type(VirtViewerSession *self)
g_return_val_if_fail(VIRT_VIEWER_IS_SESSION(self), FALSE);
+ if (self->priv->file)
+ return "application/x-virt-viewer";
+
klass = VIRT_VIEWER_SESSION_GET_CLASS(self);
g_return_val_if_fail(klass->mime_type != NULL, FALSE);
@@ -475,6 +499,21 @@ gchar* virt_viewer_session_get_uri(VirtViewerSession *self)
return g_strdup(self->priv->uri);
}
+void virt_viewer_session_set_file(VirtViewerSession *self, VirtViewerFile *file)
+{
+ g_return_if_fail(VIRT_VIEWER_IS_SESSION(self));
+
+ g_clear_object(&self->priv->file);
+ if (file)
+ self->priv->file = g_object_ref(file);
+}
+
+VirtViewerFile* virt_viewer_session_get_file(VirtViewerSession *self)
+{
+ g_return_val_if_fail(VIRT_VIEWER_IS_SESSION(self), NULL);
+
+ return self->priv->file;
+}
/*
* Local variables: