[PATCH v2 5/7] Add VirtViewerSession:file property

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.
---
 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 527f5be..540d9de 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 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:
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

_______________________________________________
virt-tools-list mailing list
virt-tools-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/virt-tools-list


[Index of Archives]     [Linux Virtualization]     [KVM Development]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux