diff --git a/SOURCES/0065-Update-timer-to-refresh-ovirt-foreign-menu.patch b/SOURCES/0065-Update-timer-to-refresh-ovirt-foreign-menu.patch new file mode 100644 index 0000000..0b8c920 --- /dev/null +++ b/SOURCES/0065-Update-timer-to-refresh-ovirt-foreign-menu.patch @@ -0,0 +1,30 @@ +From 396d5ffa3291b0171fecb70df82b2faa3724b54f Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Wed, 29 Jun 2016 16:40:36 -0300 +Subject: [PATCH] Update timer to refresh ovirt foreign menu + +This is a temporary solution, as discussed in the bug. We will adjust +the timer to refresh the ISO list from 15 seconds to 5 minutes (300 +seconds), while reworking in the UI to replace the menu with a dialog, +which seems a saner way to display the list. + +Resolves: rhbz#1347726 + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/ovirt-foreign-menu.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index 9b6d3b8..4907d20 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -791,7 +791,7 @@ static void iso_list_fetched_cb(GObject *source_object, + ovirt_foreign_menu_set_files(OVIRT_FOREIGN_MENU(user_data), files); + g_list_free(files); + +- g_timeout_add_seconds(15, ovirt_foreign_menu_refresh_iso_list, user_data); ++ g_timeout_add_seconds(300, ovirt_foreign_menu_refresh_iso_list, user_data); + } + + diff --git a/SOURCES/0066-ovirt-Don-t-try-to-use-ovirt-if-jsessionid-is-not-se.patch b/SOURCES/0066-ovirt-Don-t-try-to-use-ovirt-if-jsessionid-is-not-se.patch new file mode 100644 index 0000000..b40a2d5 --- /dev/null +++ b/SOURCES/0066-ovirt-Don-t-try-to-use-ovirt-if-jsessionid-is-not-se.patch @@ -0,0 +1,33 @@ +From c5dffcf9ffc9d7b96bcd984ba4da258cba6f3438 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Fri, 3 Apr 2015 17:52:55 +0200 +Subject: [PATCH] ovirt: Don't try to use [ovirt] if jsessionid is not set + +If jsessionid is not set in the .vv file and we try to use anyway the +REST API, an authentication dialog will be shown by remote-viewer, which +is very unwelcome. If we don't have a jsessionid set, we know we won't +be able to silently login to the REST API, so don't try to set a foreign +menu when it's not set. + +(cherry picked from commit bc77b4776c6b23f5ecf3ba896173430b2715296d) +--- + src/ovirt-foreign-menu.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index 4907d20..f9447c8 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -839,8 +839,11 @@ OvirtForeignMenu *ovirt_foreign_menu_new_from_file(VirtViewerFile *file) + ca_str = virt_viewer_file_get_ovirt_ca(file); + admin = virt_viewer_file_get_ovirt_admin(file); + +- if ((url == NULL) || (vm_guid == NULL)) ++ if ((url == NULL) || (vm_guid == NULL) || (jsessionid == NULL)) { ++ g_debug("ignoring [ovirt] section content as URL, VM GUID or jsessionid" ++ " are missing from the .vv file"); + goto end; ++ } + + proxy = ovirt_proxy_new(url); + if (proxy == NULL) diff --git a/SOURCES/0067-ovirt-Error-reporting-improvements-on-invalid-VM-nam.patch b/SOURCES/0067-ovirt-Error-reporting-improvements-on-invalid-VM-nam.patch new file mode 100644 index 0000000..fdd323b --- /dev/null +++ b/SOURCES/0067-ovirt-Error-reporting-improvements-on-invalid-VM-nam.patch @@ -0,0 +1,23 @@ +From 4a514745c71e292e49549b6e668d75d242fac3c0 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Thu, 7 Aug 2014 12:30:15 +0200 +Subject: [PATCH] ovirt: Error reporting improvements on invalid VM name + +(cherry picked from commit 7a7143245a0f1b853e61e040c59fc3f49f5e44ae) +--- + src/remote-viewer.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 32793e5..ab44f81 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -867,7 +867,7 @@ create_ovirt_session(VirtViewerApp *app, const char *uri, GError **err) + vms = ovirt_api_get_vms(api); + ovirt_collection_fetch(vms, proxy, &error); + if (error != NULL) { +- g_debug("failed to lookup %s: %s", vm_name, error->message); ++ g_debug("failed to fetch oVirt 'vms' collection: %s", error->message); + goto error; + } + if (vm_name == NULL || diff --git a/SOURCES/0068-ovirt-Fix-OvirtApi-memory-handling.patch b/SOURCES/0068-ovirt-Fix-OvirtApi-memory-handling.patch new file mode 100644 index 0000000..03d0c4b --- /dev/null +++ b/SOURCES/0068-ovirt-Fix-OvirtApi-memory-handling.patch @@ -0,0 +1,47 @@ +From 0b93c0f2ab1cdba1775516910d1b4971c213dfcc Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Tue, 28 Jul 2015 14:08:39 +0200 +Subject: [PATCH] ovirt: Fix OvirtApi memory handling + +The oVirt integration code in remote-viewer assumes that +the caller owns a reference on the OvirtApi instance returned +by ovirt_proxy_fetch_api{,finish}. +This is incorrect as these 2 API calls have always been documented as +being (transfer none). This was working so far because libgovirt was +leaking an OvirtApi reference. This bug is fixed upstream, so we now get +a warning on remote-viewer exit about trying to unref an invalid object. + +This commit fixes that by taking the ref we expect in OvirtForeignMenu, +and by not releasing a ref we do not own in remote-viewer.c + +(cherry picked from commit 9aa7aec9a934ee9d3d505217aa64383bef3d2f05) +--- + src/ovirt-foreign-menu.c | 1 + + src/remote-viewer.c | 2 -- + 2 files changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index f9447c8..b170054 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -755,6 +755,7 @@ static void api_fetched_cb(GObject *source_object, + return; + } + g_return_if_fail(OVIRT_IS_API(menu->priv->api)); ++ g_object_ref(menu->priv->api); + + ovirt_foreign_menu_next_async_step(menu, STATE_API); + } +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index ab44f81..2d40640 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -979,8 +979,6 @@ error: + g_object_unref(display); + if (vm != NULL) + g_object_unref(vm); +- if (api != NULL) +- g_object_unref(api); + if (proxy != NULL) + g_object_unref(proxy); + diff --git a/SOURCES/0069-vv-file-Add-support-for-sso-token-field-in-ovirt.patch b/SOURCES/0069-vv-file-Add-support-for-sso-token-field-in-ovirt.patch new file mode 100644 index 0000000..6553901 --- /dev/null +++ b/SOURCES/0069-vv-file-Add-support-for-sso-token-field-in-ovirt.patch @@ -0,0 +1,103 @@ +From 9853b12057f3e1ae4038a624864543f022e53299 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Fri, 15 Jan 2016 16:31:04 +0100 +Subject: [PATCH] vv-file: Add support for 'sso-token' field in [ovirt] + +This is the new way of authenticating with remote oVirt instance +starting with oVirt 4.0. + +(cherry picked from commit c904b1c63a2bf23ec06c6b9719b2d0ec43f19cb1) +--- + src/virt-viewer-file.c | 30 +++++++++++++++++++++++++++++- + src/virt-viewer-file.h | 2 ++ + 2 files changed, 31 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-file.c b/src/virt-viewer-file.c +index 2f1eb2b..9ff2a05 100644 +--- a/src/virt-viewer-file.c ++++ b/src/virt-viewer-file.c +@@ -77,7 +77,11 @@ + * - host: string containing the URL of the oVirt engine + * - vm-guid: string containing the guid of the oVirt VM we are connecting to + * - jsessionid: string containing an authentication cookie to be used to +- * connect to the oVirt engine without being asked for credentials ++ * connect to the oVirt engine without being asked for credentials with oVirt ++ * 3.6 ++ * - sso-token: string containing an authentication cookie to be used to ++ * connect to the oVirt engine without being asked for credentials with oVirt ++ * 4.0 and newer + * - ca: string PEM data (use \n to separate the lines) + * - admin: boolean (0 or 1) indicating whether the VM is visible in the user or + * admin portal +@@ -130,6 +134,7 @@ enum { + PROP_OVIRT_HOST, + PROP_OVIRT_VM_GUID, + PROP_OVIRT_JSESSIONID, ++ PROP_OVIRT_SSO_TOKEN, + PROP_OVIRT_CA, + }; + +@@ -746,6 +751,19 @@ virt_viewer_file_set_ovirt_jsessionid(VirtViewerFile* self, const gchar* value) + } + + gchar* ++virt_viewer_file_get_ovirt_sso_token(VirtViewerFile* self) ++{ ++ return virt_viewer_file_get_string(self, OVIRT_GROUP, "sso-token"); ++} ++ ++void ++virt_viewer_file_set_ovirt_sso_token(VirtViewerFile* self, const gchar* value) ++{ ++ virt_viewer_file_set_string(self, OVIRT_GROUP, "sso-token", value); ++ g_object_notify(G_OBJECT(self), "ovirt-sso-token"); ++} ++ ++gchar* + virt_viewer_file_get_ovirt_ca(VirtViewerFile* self) + { + return virt_viewer_file_get_string(self, OVIRT_GROUP, "ca"); +@@ -995,6 +1013,9 @@ virt_viewer_file_set_property(GObject* object, guint property_id, + case PROP_OVIRT_JSESSIONID: + virt_viewer_file_set_ovirt_jsessionid(self, g_value_get_string(value)); + break; ++ case PROP_OVIRT_SSO_TOKEN: ++ virt_viewer_file_set_ovirt_sso_token(self, g_value_get_string(value)); ++ break; + case PROP_OVIRT_CA: + virt_viewer_file_set_ovirt_ca(self, g_value_get_string(value)); + break; +@@ -1104,6 +1125,9 @@ virt_viewer_file_get_property(GObject* object, guint property_id, + case PROP_OVIRT_JSESSIONID: + g_value_take_string(value, virt_viewer_file_get_ovirt_jsessionid(self)); + break; ++ case PROP_OVIRT_SSO_TOKEN: ++ g_value_take_string(value, virt_viewer_file_get_ovirt_sso_token(self)); ++ break; + case PROP_OVIRT_CA: + g_value_take_string(value, virt_viewer_file_get_ovirt_ca(self)); + break; +@@ -1266,6 +1290,10 @@ virt_viewer_file_class_init(VirtViewerFileClass* klass) + g_param_spec_string("ovirt-jsessionid", "ovirt-jsessionid", "ovirt-jsessionid", NULL, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); + ++ g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_OVIRT_SSO_TOKEN, ++ g_param_spec_string("ovirt-sso-token", "ovirt-sso-token", "ovirt-sso-token", NULL, ++ G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); ++ + g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_OVIRT_CA, + g_param_spec_string("ovirt-ca", "ovirt-ca", "ovirt-ca", NULL, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); +diff --git a/src/virt-viewer-file.h b/src/virt-viewer-file.h +index 0eb7966..9016379 100644 +--- a/src/virt-viewer-file.h ++++ b/src/virt-viewer-file.h +@@ -120,6 +120,8 @@ gchar* virt_viewer_file_get_ovirt_vm_guid(VirtViewerFile* self); + void virt_viewer_file_set_ovirt_vm_guid(VirtViewerFile* self, const gchar* value); + gchar* virt_viewer_file_get_ovirt_jsessionid(VirtViewerFile* self); + void virt_viewer_file_set_ovirt_jsessionid(VirtViewerFile* self, const gchar* value); ++gchar* virt_viewer_file_get_ovirt_sso_token(VirtViewerFile* self); ++void virt_viewer_file_set_ovirt_sso_token(VirtViewerFile* self, const gchar* value); + gchar* virt_viewer_file_get_ovirt_ca(VirtViewerFile* self); + void virt_viewer_file_set_ovirt_ca(VirtViewerFile* self, const gchar* value); + diff --git a/SOURCES/0070-ovirt-Use-sso-token-when-set-in-.vv-file.patch b/SOURCES/0070-ovirt-Use-sso-token-when-set-in-.vv-file.patch new file mode 100644 index 0000000..7751be2 --- /dev/null +++ b/SOURCES/0070-ovirt-Use-sso-token-when-set-in-.vv-file.patch @@ -0,0 +1,102 @@ +From 193ab5abdd2807d94e49c7333afc740cf2496e99 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Fri, 15 Jan 2016 16:35:52 +0100 +Subject: [PATCH] ovirt: Use sso-token when set in .vv file + +Starting with oVirt 4.0, this replaces the jsessionid field for +automatic authentication with oVirt instances for REST communication. + +(cherry picked from commit 4f3733294028d9b1f7c7135eb299436509845bb4) +--- + man/remote-viewer.pod | 11 +++++++++-- + src/ovirt-foreign-menu.c | 25 ++++++++++++++++++++++--- + 2 files changed, 31 insertions(+), 5 deletions(-) + +diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod +index 1358f1b..6b69aa3 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -309,8 +309,15 @@ GUID of the oVirt virtual machine to connect to. + + =item C (string) + +-Value to set the 'jsessionid' cookie to. Setting this authentication cookie to a valid value +-will allow to interact with the oVirt REST API without being asked for credentials. ++Value to set the 'jsessionid' cookie to. With oVirt 3.6, setting this ++authentication cookie to a valid value will allow to interact with the oVirt ++REST API without being asked for credentials. ++ ++=item C (string) ++ ++Value to set the 'Authorization' header to. With oVirt 4.0 or newer, setting ++this authentication header to a valid value will allow to interact with the ++oVirt REST API without being asked for credentials. + + =item C (string) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index b170054..2f96ad8 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -830,6 +830,7 @@ OvirtForeignMenu *ovirt_foreign_menu_new_from_file(VirtViewerFile *file) + gboolean admin; + char *ca_str = NULL; + char *jsessionid = NULL; ++ char *sso_token = NULL; + char *url = NULL; + char *vm_guid = NULL; + GByteArray *ca = NULL; +@@ -837,15 +838,22 @@ OvirtForeignMenu *ovirt_foreign_menu_new_from_file(VirtViewerFile *file) + url = virt_viewer_file_get_ovirt_host(file); + vm_guid = virt_viewer_file_get_ovirt_vm_guid(file); + jsessionid = virt_viewer_file_get_ovirt_jsessionid(file); ++ sso_token = virt_viewer_file_get_ovirt_sso_token(file); + ca_str = virt_viewer_file_get_ovirt_ca(file); + admin = virt_viewer_file_get_ovirt_admin(file); + +- if ((url == NULL) || (vm_guid == NULL) || (jsessionid == NULL)) { +- g_debug("ignoring [ovirt] section content as URL, VM GUID or jsessionid" ++ if ((url == NULL) || (vm_guid == NULL)) { ++ g_debug("ignoring [ovirt] section content as URL, VM GUID" + " are missing from the .vv file"); + goto end; + } + ++ if ((jsessionid == NULL) && (sso_token == NULL)) { ++ g_debug("ignoring [ovirt] section content as jsessionid and sso-token" ++ " are both missing from the .vv file"); ++ goto end; ++ } ++ + proxy = ovirt_proxy_new(url); + if (proxy == NULL) + goto end; +@@ -857,9 +865,19 @@ OvirtForeignMenu *ovirt_foreign_menu_new_from_file(VirtViewerFile *file) + + g_object_set(G_OBJECT(proxy), + "admin", admin, +- "session-id", jsessionid, + "ca-cert", ca, + NULL); ++ if (jsessionid != NULL) { ++ g_object_set(G_OBJECT(proxy), ++ "session-id", jsessionid, ++ NULL); ++ } ++ if (sso_token != NULL) { ++ g_object_set(G_OBJECT(proxy), ++ "sso-token", sso_token, ++ NULL); ++ } ++ + menu = g_object_new(OVIRT_TYPE_FOREIGN_MENU, + "proxy", proxy, + "vm-guid", vm_guid, +@@ -869,6 +887,7 @@ end: + g_free(url); + g_free(vm_guid); + g_free(jsessionid); ++ g_free(sso_token); + g_free(ca_str); + if (ca != NULL) { + g_byte_array_unref(ca); diff --git a/SOURCES/0071-Fix-crash-when-disabling-last-enabled-display.patch b/SOURCES/0071-Fix-crash-when-disabling-last-enabled-display.patch new file mode 100644 index 0000000..a5bab81 --- /dev/null +++ b/SOURCES/0071-Fix-crash-when-disabling-last-enabled-display.patch @@ -0,0 +1,73 @@ +From e68bf9f2cf70a627f86ce75b782b36098b82bdec Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= +Date: Fri, 3 Apr 2015 00:51:40 +0200 +Subject: [PATCH] Fix crash when disabling last enabled display + +Using virt_viewer_signal_connect_object() instead of g_signal_connect() +ensures that menu_display_visible_toggled_cb() won't be executed after +the display object be disposed. + +Backtrace for the crash: + + #0 0x00007ffff070592b in g_type_check_instance_is_a (type_instance=0x8851f0, iface_type=) at gtype.c:4016 + #1 0x000000000041ee06 in virt_viewer_display_get_session (self=0x8851f0) at ../../src/virt-viewer-display.c:702 + #2 0x0000000000417be7 in menu_display_visible_toggled_cb (checkmenuitem=0x93f790 [GtkCheckMenuItem], display=0x8851f0) at ../../src/virt-viewer-app.c:2187 + #6 0x00007ffff06fe29f in (instance=instance@entry=0x93f790, signal_id=, detail=detail@entry=0) at gsignal.c:3361 + #3 0x00007ffff06e3b9f in g_closure_invoke (closure=0x93faa0, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fffffffc230, invocation_hint=invocation_hint@entry=0x7fffffffc1b0) at gclosure.c:768 + #4 0x00007ffff06f54c9 in signal_emit_unlocked_R (node=node@entry=0x6d73e0, detail=detail@entry=0, instance=instance@entry=0x93f790, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffc230) at gsignal.c:3549 + #5 0x00007ffff06fded0 in g_signal_emit_valist (instance=, signal_id=, detail=, var_args=var_args@entry=0x7fffffffc3f0) at gsignal.c:3305 + #7 0x00007ffff5eb6158 in gtk_check_menu_item_activate (check_menu_item=0x93f790 [GtkCheckMenuItem]) at gtkcheckmenuitem.c:299 + #8 0x00007ffff5eb6158 in gtk_check_menu_item_activate (menu_item=0x93f790 [GtkCheckMenuItem]) at gtkcheckmenuitem.c:419 + #12 0x00007ffff06fe29f in (instance=, signal_id=, detail=) at gsignal.c:3361 + #9 0x00007ffff06e3b9f in g_closure_invoke (closure=closure@entry=0x6d5aa0, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fffffffc6b0, invocation_hint=invocation_hint@entry=0x7fffffffc630) at gclosure.c:768 + #10 0x00007ffff06f51bd in signal_emit_unlocked_R (node=node@entry=0x6d5ba0, detail=detail@entry=0, instance=instance@entry=0x93f790, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffc6b0) at gsignal.c:3479 + #11 0x00007ffff06fded0 in g_signal_emit_valist (instance=, signal_id=, detail=, var_args=var_args@entry=0x7fffffffc870) at gsignal.c:3305 + #13 0x0000000000417c5e in menu_display_visible_toggled_cb (checkmenuitem=0x93f790 [GtkCheckMenuItem], display=0x8851f0) at ../../src/virt-viewer-app.c:2200 + #17 0x00007ffff06fe29f in (instance=instance@entry=0x93f790, signal_id=, detail=detail@entry=0) at gsignal.c:3361 + #14 0x00007ffff06e3c45 in g_closure_invoke (closure=0x93faa0, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fffffffcb50, invocation_hint=invocation_hint@entry=0x7fffffffcad0) at gclosure.c:768 + #15 0x00007ffff06f54c9 in signal_emit_unlocked_R (node=node@entry=0x6d73e0, detail=detail@entry=0, instance=instance@entry=0x93f790, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffcb50) at gsignal.c:3549 + #16 0x00007ffff06fded0 in g_signal_emit_valist (instance=, signal_id=, detail=, var_args=var_args@entry=0x7fffffffcd10) at gsignal.c:3305 + #18 0x00007ffff5eb6158 in gtk_check_menu_item_activate (check_menu_item=0x93f790 [GtkCheckMenuItem]) at gtkcheckmenuitem.c:299 + #19 0x00007ffff5eb6158 in gtk_check_menu_item_activate (menu_item=0x93f790 [GtkCheckMenuItem]) at gtkcheckmenuitem.c:419 + #23 0x00007ffff06fe29f in (instance=instance@entry=0x93f790, signal_id=, detail=detail@entry=0) at gsignal.c:3361 + #20 0x00007ffff06e3c45 in g_closure_invoke (closure=closure@entry=0x6d5aa0, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fffffffcfd0, invocation_hint=invocation_hint@entry=0x7fffffffcf50) at gclosure.c:768 + #21 0x00007ffff06f51bd in signal_emit_unlocked_R (node=node@entry=0x6d5ba0, detail=detail@entry=0, instance=instance@entry=0x93f790, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffcfd0) at gsignal.c:3479 + #22 0x00007ffff06fded0 in g_signal_emit_valist (instance=, signal_id=, detail=, var_args=var_args@entry=0x7fffffffd190) at gsignal.c:3305 + #24 0x00007ffff608648e in IA__gtk_widget_activate (widget=widget@entry=0x93f790 [GtkCheckMenuItem]) at gtkwidget.c:5048 + #25 0x00007ffff5f6cacd in IA__gtk_menu_shell_activate_item (menu_shell=0x70ece0 [GtkMenu], menu_item=0x93f790 [GtkCheckMenuItem], force_deactivate=) at gtkmenushell.c:1303 + #26 0x00007ffff5f6ce96 in gtk_menu_shell_button_release (widget=0x70ece0 [GtkMenu], event=) at gtkmenushell.c:730 + #31 0x00007ffff06fe29f in (instance=instance@entry=0x70ece0, signal_id=, detail=detail@entry=0) at gsignal.c:3361 + #27 0x00007ffff5f578ad in _gtk_marshal_BOOLEAN__BOXED (closure=0x6c7180, return_value=0x7fffffffd4e0, n_param_values=, param_values=0x7fffffffd540, invocation_hint=, marshal_data=) at gtkmarshalers.c:86 + #28 0x00007ffff06e3c45 in g_closure_invoke (closure=closure@entry=0x6c7180, return_value=return_value@entry=0x7fffffffd4e0, n_param_values=2, param_values=param_values@entry=0x7fffffffd540, invocation_hint=invocation_hint@entry=0x7fffffffd4c0) at gclosure.c:768 + #29 0x00007ffff06f5cef in signal_emit_unlocked_R (node=node@entry=0x6c73f0, detail=detail@entry=0, instance=instance@entry=0x70ece0, emission_return=emission_return@entry=0x7fffffffd660, instance_and_params=instance_and_params@entry=0x7fffffffd540) at gsignal.c:3587 + #30 0x00007ffff06fdac2 in g_signal_emit_valist (instance=, signal_id=, detail=, var_args=var_args@entry=0x7fffffffd710) at gsignal.c:3315 + #32 0x00007ffff608790c in gtk_widget_event_internal (widget=widget@entry=0x70ece0 [GtkMenu], event=event@entry=0x944f90) at gtkwidget.c:5017 + #33 0x00007ffff6087be7 in IA__gtk_widget_event (widget=widget@entry=0x70ece0 [GtkMenu], event=event@entry=0x944f90) at gtkwidget.c:4814 + #34 0x00007ffff5f55b94 in IA__gtk_propagate_event (widget=0x70ece0 [GtkMenu], event=0x944f90) at gtkmain.c:2501 + #35 0x00007ffff5f55f5b in IA__gtk_main_do_event (event=0x944f90) at gtkmain.c:1696 + #36 0x00007ffff5bae7dc in gdk_event_dispatch (source=, callback=, user_data=) at gdkevents-x11.c:2425 + #37 0x00007ffff03e40ba in g_main_context_dispatch (context=0x693d50) at gmain.c:3122 + #38 0x00007ffff03e40ba in g_main_context_dispatch (context=context@entry=0x693d50) at gmain.c:3737 + #39 0x00007ffff03e4450 in g_main_context_iterate (context=0x693d50, block=block@entry=1, dispatch=dispatch@entry=1, self=) at gmain.c:3808 + #40 0x00007ffff03e4772 in g_main_loop_run (loop=0x748980) at gmain.c:4002 + +(cherry picked from commit 26c2eccd96995231bbe82ee7d1164b704072b1f1) +--- + src/virt-viewer-app.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 297c6f6..d58734e 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -2280,8 +2280,8 @@ window_update_menu_displays_cb(gpointer value, + } + gtk_widget_set_sensitive(item, sensitive); + +- g_signal_connect(G_OBJECT(item), +- "toggled", G_CALLBACK(menu_display_visible_toggled_cb), display); ++ virt_viewer_signal_connect_object(G_OBJECT(item), "toggled", ++ G_CALLBACK(menu_display_visible_toggled_cb), display, 0); + gtk_menu_shell_append(submenu, item); + tmp = tmp->next; + } diff --git a/SPECS/virt-viewer.spec b/SPECS/virt-viewer.spec index 40a0b97..77a5832 100644 --- a/SPECS/virt-viewer.spec +++ b/SPECS/virt-viewer.spec @@ -27,7 +27,7 @@ Name: virt-viewer Version: 2.0 -Release: 6%{?dist}%{?extra_release} +Release: 6%{?dist}.2%{?extra_release} Summary: Virtual Machine Viewer Group: Applications/System License: GPLv2+ @@ -97,6 +97,13 @@ Patch61: 0061-Exit-normally-when-canceling-dialog.patch Patch62: 0062-Clear-GError-in-cleanup-section.patch Patch63: 0063-Report-errors-in-one-place.patch Patch64: 0064-virt-viewer-Clean-up-if-no-vm-was-chosen.patch +Patch65: 0065-Update-timer-to-refresh-ovirt-foreign-menu.patch +Patch66: 0066-ovirt-Don-t-try-to-use-ovirt-if-jsessionid-is-not-se.patch +Patch67: 0067-ovirt-Error-reporting-improvements-on-invalid-VM-nam.patch +Patch68: 0068-ovirt-Fix-OvirtApi-memory-handling.patch +Patch69: 0069-vv-file-Add-support-for-sso-token-field-in-ovirt.patch +Patch70: 0070-ovirt-Use-sso-token-when-set-in-.vv-file.patch +Patch71: 0071-Fix-crash-when-disabling-last-enabled-display.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires: openssh-clients @@ -216,6 +223,13 @@ the display, and libvirt for looking up VNC/SPICE server details. %patch62 -p1 %patch63 -p1 %patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 +%patch69 -p1 +%patch70 -p1 +%patch71 -p1 %build %if 0%{?enable_autotools} @@ -294,6 +308,16 @@ update-desktop-database -q %{_datadir}/applications %{_mandir}/man1/remote-viewer.1* %changelog +* Mon Jul 11 2016 Pavel Grunt - 2.0-6.2 +- Adjust timer to refresh ovirt foreign menu + Resolves: rhbz#1353627 +- Fix crash when disabling the last display + Resolves: rhbz#1354283 + +* Tue Jun 14 2016 Victor Toso - 2.0-6.1 +- Utilize SSO to authenticate against oVirt engine for foreign menu support + Resolves: rhbz#1344635 + * Sun Aug 09 2015 Fabiano FidĂȘncio - 2.0-6 - Error message continously popping out when stopping libvirtd Resolves: rhbz#1246022