If VirtViewerSession:file is set, it should be used to define the connection parameters. Also correct the mime type used in this case. --- src/remote-viewer-main.c | 1 + src/virt-viewer-session.c | 39 +++++++++++++++++++++++++++++++++++++++ src/virt-viewer-session.h | 3 +++ 3 files changed, 43 insertions(+) diff --git a/src/remote-viewer-main.c b/src/remote-viewer-main.c index 053e146..13cacc3 100644 --- a/src/remote-viewer-main.c +++ b/src/remote-viewer-main.c @@ -136,6 +136,7 @@ static gint connect_dialog(gchar **uri) rfilter = gtk_recent_filter_new(); gtk_recent_filter_add_mime_type(rfilter, "application/x-spice"); gtk_recent_filter_add_mime_type(rfilter, "application/x-vnc"); + gtk_recent_filter_add_mime_type(rfilter, "application/x-virt-viewer"); gtk_recent_chooser_set_filter(GTK_RECENT_CHOOSER(recent), rfilter); gtk_recent_chooser_set_local_only(GTK_RECENT_CHOOSER(recent), FALSE); g_signal_connect(recent, "selection-changed", diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c index 6205e30..ccb13d0 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), NULL); + 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: diff --git a/src/virt-viewer-session.h b/src/virt-viewer-session.h index 30def16..f337937 100644 --- a/src/virt-viewer-session.h +++ b/src/virt-viewer-session.h @@ -27,6 +27,7 @@ #include <gtk/gtk.h> #include "virt-viewer-app.h" +#include "virt-viewer-file.h" #include "virt-viewer-display.h" G_BEGIN_DECLS @@ -124,6 +125,8 @@ void virt_viewer_session_smartcard_insert(VirtViewerSession *self); void virt_viewer_session_smartcard_remove(VirtViewerSession *self); VirtViewerApp* virt_viewer_session_get_app(VirtViewerSession *self); gchar* virt_viewer_session_get_uri(VirtViewerSession *self); +void virt_viewer_session_set_file(VirtViewerSession *self, VirtViewerFile *file); +VirtViewerFile* virt_viewer_session_get_file(VirtViewerSession *self); G_END_DECLS -- 1.7.11.7