From b983b6bf297cdb63d11b2e5e5113ebbf4e8fa486 Mon Sep 17 00:00:00 2001 From: Eduardo Lima (Etrunko) Date: Nov 14 2017 17:27:07 +0000 Subject: remote-viewer: Pass guri to remote_viewer_session_connected When connecting to a VM via oVirt instance, the original uri can not be retrieved using virt_viewer_session_get_uri(). Consequently, it was never saved, even though the connection succeeds and the actual callback for "session-connected" signal, which saves the URI, is invoked. To solve this problem, we always pass a copy of the guri as user-data parameter for the callback, and if the call to virt_viewer_session_get_uri() returns NULL, the parameter is used instead. Resolves: https://bugzilla.redhat.com/1459792 Signed-off-by: Eduardo Lima (Etrunko) Acked-by: Victor Toso --- diff --git a/src/remote-viewer.c b/src/remote-viewer.c index fb5376c..786b26b 100644 --- a/src/remote-viewer.c +++ b/src/remote-viewer.c @@ -85,10 +85,6 @@ static void spice_foreign_menu_updated(RemoteViewer *self); static void foreign_menu_title_changed(SpiceCtrlForeignMenu *menu, GParamSpec *pspec, RemoteViewer *self); #endif -static gboolean -remote_viewer_initial_connect(RemoteViewer *self, const gchar *type, - VirtViewerFile *vvfile, GError **error); - static void remote_viewer_dispose (GObject *object) { @@ -1064,8 +1060,7 @@ remote_viewer_recent_add(gchar *uri, const gchar *mime_type) .mime_type = (char*)mime_type, }; - if (uri == NULL) - return; + g_return_if_fail(uri != NULL); recent = gtk_recent_manager_get_default(); meta.display_name = uri; @@ -1075,17 +1070,21 @@ remote_viewer_recent_add(gchar *uri, const gchar *mime_type) static void remote_viewer_session_connected(VirtViewerSession *session, - VirtViewerApp *self G_GNUC_UNUSED) + gchar *guri) { gchar *uri = virt_viewer_session_get_uri(session); const gchar *mime = virt_viewer_session_mime_type(session); + if (uri == NULL) + uri = g_strdup(guri); + remote_viewer_recent_add(uri, mime); g_free(uri); + g_free(guri); } static gboolean -remote_viewer_initial_connect(RemoteViewer *self, const gchar *type, +remote_viewer_initial_connect(RemoteViewer *self, const gchar *type, const gchar *guri, VirtViewerFile *vvfile, GError **error) { VirtViewerApp *app = VIRT_VIEWER_APP(self); @@ -1093,8 +1092,9 @@ remote_viewer_initial_connect(RemoteViewer *self, const gchar *type, if (!virt_viewer_app_create_session(app, type, error)) return FALSE; + g_signal_connect(virt_viewer_app_get_session(app), "session-connected", - G_CALLBACK(remote_viewer_session_connected), app); + G_CALLBACK(remote_viewer_session_connected), g_strdup(guri)); virt_viewer_session_set_file(virt_viewer_app_get_session(app), vvfile); #ifdef HAVE_OVIRT @@ -1200,12 +1200,11 @@ retry_dialog: } else #endif { - if (!remote_viewer_initial_connect(self, type, vvfile, &error)) + if (!remote_viewer_initial_connect(self, type, guri, vvfile, &error)) goto cleanup; } } - ret = VIRT_VIEWER_APP_CLASS(remote_viewer_parent_class)->start(app, &error); cleanup: