diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4bfe122 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/virt-viewer-5.0.tar.gz diff --git a/.virt-viewer.metadata b/.virt-viewer.metadata new file mode 100644 index 0000000..e021ce4 --- /dev/null +++ b/.virt-viewer.metadata @@ -0,0 +1 @@ +d7a1c29442cc18ae129705f698f9690c58b32395 SOURCES/virt-viewer-5.0.tar.gz diff --git a/SOURCES/0001-spice-Fix-display-id-in-the-warning-log.patch b/SOURCES/0001-spice-Fix-display-id-in-the-warning-log.patch new file mode 100644 index 0000000..a3e74e7 --- /dev/null +++ b/SOURCES/0001-spice-Fix-display-id-in-the-warning-log.patch @@ -0,0 +1,34 @@ +From 073c98cadd5ee8273e73b3081ab5d7199c2b40b4 Mon Sep 17 00:00:00 2001 +From: Snir Sheriber +Date: Thu, 29 Dec 2016 15:40:43 +0200 +Subject: [PATCH 01/26] spice: Fix display id in the warning log +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The display id in the warning log is now consistent with the display +id in the "view->displays->display x" menu item + +Related: rhbz#1368390 + +Acked-by: Fabiano Fidêncio +--- + src/virt-viewer-session-spice.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index 731f074..c24f94d 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -915,7 +915,7 @@ virt_viewer_session_spice_display_monitors(SpiceChannel *channel, + if (!disabled && fullscreen_mode && self->priv->did_auto_conf && + !display_is_in_fullscreen_mode(self, VIRT_VIEWER_DISPLAY(display))) { + g_warning("display %d should not be enabled, disabling", +- virt_viewer_display_get_nth(VIRT_VIEWER_DISPLAY(display))); ++ virt_viewer_display_get_nth(VIRT_VIEWER_DISPLAY(display)) + 1); + spice_main_set_display_enabled(virt_viewer_session_spice_get_main_channel(self), + virt_viewer_display_get_nth(VIRT_VIEWER_DISPLAY(display)), + FALSE); +-- +2.12.0 + diff --git a/SOURCES/0002-spice-Replace-g_warning-with-g_debug.patch b/SOURCES/0002-spice-Replace-g_warning-with-g_debug.patch new file mode 100644 index 0000000..322801e --- /dev/null +++ b/SOURCES/0002-spice-Replace-g_warning-with-g_debug.patch @@ -0,0 +1,37 @@ +From e588d6f011b9fb327e5f8d6ae9a19b710039417a Mon Sep 17 00:00:00 2001 +From: Snir Sheriber +Date: Sun, 1 Jan 2017 14:23:25 +0200 +Subject: [PATCH 02/26] spice: Replace g_warning with g_debug +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Instead of having a warning message telling the user that they can't +have more displays enabled in fullscreen than the number of physical +displays, let's just have it as a debug message. + +Related: rhbz#1368390 + +Acked-by: Fabiano Fidêncio +--- + src/virt-viewer-session-spice.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index c24f94d..c3fce48 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -914,8 +914,8 @@ virt_viewer_session_spice_display_monitors(SpiceChannel *channel, + + if (!disabled && fullscreen_mode && self->priv->did_auto_conf && + !display_is_in_fullscreen_mode(self, VIRT_VIEWER_DISPLAY(display))) { +- g_warning("display %d should not be enabled, disabling", +- virt_viewer_display_get_nth(VIRT_VIEWER_DISPLAY(display)) + 1); ++ g_debug("display %d should not be enabled, disabling", ++ virt_viewer_display_get_nth(VIRT_VIEWER_DISPLAY(display)) + 1); + spice_main_set_display_enabled(virt_viewer_session_spice_get_main_channel(self), + virt_viewer_display_get_nth(VIRT_VIEWER_DISPLAY(display)), + FALSE); +-- +2.12.0 + diff --git a/SOURCES/0003-Set-guest-name-at-the-same-time-as-uuid.patch b/SOURCES/0003-Set-guest-name-at-the-same-time-as-uuid.patch new file mode 100644 index 0000000..e2ccfa0 --- /dev/null +++ b/SOURCES/0003-Set-guest-name-at-the-same-time-as-uuid.patch @@ -0,0 +1,48 @@ +From 4c253ab87dff0ce65071a36fd1b79b617567f1d8 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Mon, 2 Jan 2017 16:32:31 +0100 +Subject: [PATCH 03/26] Set guest name at the same time as uuid + +Avoid showing the "Unknown" name in the guest detail dialog when +waiting for the domain to be started. + +Acked-by: Jonathon Jongsma +--- + src/virt-viewer.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 3a3b64d..1121146 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -601,8 +601,6 @@ virt_viewer_update_display(VirtViewer *self, virDomainPtr dom, GError **error) + virt_viewer_app_trace(app, "Guest %s is running, determining display", + priv->domkey); + +- g_object_set(app, "guest-name", virDomainGetName(dom), NULL); +- + if (virt_viewer_app_has_session(app)) + return TRUE; + +@@ -801,6 +799,7 @@ virt_viewer_initial_connect(VirtViewerApp *app, GError **error) + VirtViewer *self = VIRT_VIEWER(app); + VirtViewerPrivate *priv = self->priv; + char uuid_string[VIR_UUID_STRING_BUFLEN]; ++ const char *guest_name; + GError *err = NULL; + + g_debug("initial connect"); +@@ -836,6 +835,10 @@ virt_viewer_initial_connect(VirtViewerApp *app, GError **error) + } else { + g_object_set(app, "uuid", uuid_string, NULL); + } ++ guest_name = virDomainGetName(dom); ++ if (guest_name != NULL) { ++ g_object_set(app, "guest-name", guest_name, NULL); ++ } + + virt_viewer_app_show_status(app, _("Checking guest domain status")); + if (virDomainGetInfo(dom, &info) < 0) { +-- +2.12.0 + diff --git a/SOURCES/0004-app-Update-warning-msg-in-virt-viewer-s-window.patch b/SOURCES/0004-app-Update-warning-msg-in-virt-viewer-s-window.patch new file mode 100644 index 0000000..ee50eb3 --- /dev/null +++ b/SOURCES/0004-app-Update-warning-msg-in-virt-viewer-s-window.patch @@ -0,0 +1,29 @@ +From 2dd0d5bffb0f24936d1f646cf94cf22fc8d7b571 Mon Sep 17 00:00:00 2001 +From: Snir Sheriber +Date: Thu, 5 Jan 2017 18:47:59 +0200 +Subject: [PATCH 04/26] app: Update warning msg in virt-viewer's window + +Information about connection issues during display +activation will appear in virt-viewer's window + +Related: rhbz#1386630 +--- + src/virt-viewer-app.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index bf32315..2e7e193 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1239,6 +1239,8 @@ virt_viewer_app_activate(VirtViewerApp *self, GError **error) + ret = VIRT_VIEWER_APP_GET_CLASS(self)->activate(self, error); + + if (ret == FALSE) { ++ if(error != NULL && *error != NULL) ++ virt_viewer_app_show_status(self, (*error)->message); + priv->connected = FALSE; + } else { + virt_viewer_app_show_status(self, _("Connecting to graphic server")); +-- +2.12.0 + diff --git a/SOURCES/0005-remote-viewer-Extend-ifdef-HAVE_OVIRT-block.patch b/SOURCES/0005-remote-viewer-Extend-ifdef-HAVE_OVIRT-block.patch new file mode 100644 index 0000000..a9cc206 --- /dev/null +++ b/SOURCES/0005-remote-viewer-Extend-ifdef-HAVE_OVIRT-block.patch @@ -0,0 +1,41 @@ +From 7a808362a1cad3cf82613038d891415a638b3b04 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 13 Jan 2017 11:59:27 -0200 +Subject: [PATCH 05/26] remote-viewer: Extend #ifdef HAVE_OVIRT block + +The #endif is closing a #ifdef HAVE_OVIRT block, while another one is +opened right next, so there is no need to have those lines. Also, due to +the large amount of source code in between, add a small comment on the +last #endif to identify what it refers to. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/remote-viewer.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 6d29bf2..13c6e7c 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -1005,9 +1005,6 @@ error: + return success; + } + +-#endif +- +-#ifdef HAVE_OVIRT + static OvirtVm * + choose_vm(GtkWindow *main_window, + char **vm_name, +@@ -1047,7 +1044,7 @@ choose_vm(GtkWindow *main_window, + + return vm; + } +-#endif ++#endif /* HAVE_OVIRT */ + + static void + remote_viewer_recent_add(gchar *uri, const gchar *mime_type) +-- +2.12.0 + diff --git a/SOURCES/0006-ovirt-foreign-menu-Set-new-ISO-name-using-GTask-API.patch b/SOURCES/0006-ovirt-foreign-menu-Set-new-ISO-name-using-GTask-API.patch new file mode 100644 index 0000000..5d6e622 --- /dev/null +++ b/SOURCES/0006-ovirt-foreign-menu-Set-new-ISO-name-using-GTask-API.patch @@ -0,0 +1,195 @@ +From e7be486b866af394ca63edf339ec0f465b644137 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 13 Jan 2017 18:02:25 -0200 +Subject: [PATCH 06/26] ovirt-foreign-menu: Set new ISO name using GTask API + +This is done with the new ovirt_foreign_menu_set_current_iso_name_async +function. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/ovirt-foreign-menu.c | 117 ++++++++++++++++++++++++++++++++++------------- + src/ovirt-foreign-menu.h | 10 ++++ + 2 files changed, 96 insertions(+), 31 deletions(-) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index a51f2c9..a422ebb 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -344,38 +344,102 @@ menu_item_set_active_no_signal(GtkMenuItem *menuitem, + } + + +-static void updated_cdrom_cb(GObject *source_object, +- GAsyncResult *result, +- gpointer user_data) ++static void iso_name_set_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) + { + GError *error = NULL; +- OvirtForeignMenu *foreign_menu; ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *foreign_menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); + gboolean updated; + +- foreign_menu = OVIRT_FOREIGN_MENU(user_data); + updated = ovirt_cdrom_update_finish(OVIRT_CDROM(source_object), + result, &error); +- g_debug("Finished updating cdrom content"); + if (updated) { ++ g_debug("Finished updating cdrom content: %s", foreign_menu->priv->next_iso_name); + g_free(foreign_menu->priv->current_iso_name); + foreign_menu->priv->current_iso_name = foreign_menu->priv->next_iso_name; + foreign_menu->priv->next_iso_name = NULL; +- g_object_notify(G_OBJECT(foreign_menu), "file"); ++ g_task_return_boolean(task, TRUE); ++ goto end; ++ } ++ ++ /* Reset old state back as we were not successful in switching to ++ * the new ISO */ ++ g_debug("setting OvirtCdrom:file back to '%s'", ++ foreign_menu->priv->current_iso_name); ++ g_object_set(foreign_menu->priv->cdrom, "file", ++ foreign_menu->priv->current_iso_name, NULL); ++ g_clear_pointer(&foreign_menu->priv->next_iso_name, g_free); ++ ++ if (error != NULL) { ++ g_warning("failed to update cdrom resource: %s", error->message); ++ g_task_return_error(task, error); + } else { +- /* Reset old state back as we were not successful in switching to +- * the new ISO */ +- const char *current_file = foreign_menu->priv->current_iso_name; ++ g_warn_if_reached(); ++ g_task_return_new_error(task, OVIRT_ERROR, OVIRT_ERROR_FAILED, ++ "failed to update cdrom resource"); ++ } + +- if (error != NULL) { +- g_warning("failed to update cdrom resource: %s", error->message); +- g_clear_error(&error); +- } +- g_debug("setting OvirtCdrom:file back to '%s'", +- current_file?current_file:NULL); +- g_object_set(foreign_menu->priv->cdrom, "file", current_file, NULL); ++end: ++ g_object_unref(task); ++} ++ ++ ++void ovirt_foreign_menu_set_current_iso_name_async(OvirtForeignMenu *foreign_menu, ++ const char *name, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ GTask *task; ++ ++ g_return_if_fail(foreign_menu->priv->cdrom != NULL); ++ g_return_if_fail(foreign_menu->priv->next_iso_name == NULL); ++ ++ if (name) { ++ g_debug("Updating VM cdrom image to '%s'", name); ++ foreign_menu->priv->next_iso_name = g_strdup(name); ++ } else { ++ g_debug("Removing current cdrom image"); ++ foreign_menu->priv->next_iso_name = NULL; + } + +- g_clear_pointer(&foreign_menu->priv->next_iso_name, g_free); ++ g_object_set(foreign_menu->priv->cdrom, ++ "file", name, ++ NULL); ++ ++ task = g_task_new(foreign_menu, cancellable, callback, user_data); ++ ovirt_cdrom_update_async(foreign_menu->priv->cdrom, TRUE, ++ foreign_menu->priv->proxy, cancellable, ++ iso_name_set_cb, task); ++} ++ ++ ++gboolean ovirt_foreign_menu_set_current_iso_name_finish(OvirtForeignMenu *foreign_menu, ++ GAsyncResult *result, ++ GError **error) ++{ ++ g_return_val_if_fail(OVIRT_IS_FOREIGN_MENU(foreign_menu), FALSE); ++ return g_task_propagate_boolean(G_TASK(result), error); ++} ++ ++ ++static void ++ovirt_foreign_menu_iso_name_changed(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data G_GNUC_UNUSED) ++{ ++ OvirtForeignMenu *foreign_menu = OVIRT_FOREIGN_MENU(source_object); ++ GError *error = NULL; ++ ++ if (!ovirt_foreign_menu_set_current_iso_name_finish(foreign_menu, result, &error)) { ++ g_warning(error ? error->message : "Failed to change CD"); ++ g_clear_error(&error); ++ return; ++ } ++ ++ g_object_notify(G_OBJECT(foreign_menu), "file"); + } + + +@@ -383,7 +447,7 @@ static void + ovirt_foreign_menu_activate_item_cb(GtkMenuItem *menuitem, gpointer user_data) + { + OvirtForeignMenu *foreign_menu; +- const char *iso_name; ++ const char *iso_name = NULL; + gboolean checked; + + checked = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)); +@@ -403,19 +467,10 @@ ovirt_foreign_menu_activate_item_cb(GtkMenuItem *menuitem, gpointer user_data) + + if (checked) { + iso_name = gtk_menu_item_get_label(menuitem); +- g_debug("Updating VM cdrom image to '%s'", iso_name); +- foreign_menu->priv->next_iso_name = g_strdup(iso_name); +- } else { +- g_debug("Removing current cdrom image"); +- iso_name = NULL; +- foreign_menu->priv->next_iso_name = NULL; + } +- g_object_set(foreign_menu->priv->cdrom, +- "file", iso_name, +- NULL); +- ovirt_cdrom_update_async(foreign_menu->priv->cdrom, TRUE, +- foreign_menu->priv->proxy, NULL, +- updated_cdrom_cb, foreign_menu); ++ ovirt_foreign_menu_set_current_iso_name_async(foreign_menu, iso_name, NULL, ++ ovirt_foreign_menu_iso_name_changed, ++ menuitem); + } + + +diff --git a/src/ovirt-foreign-menu.h b/src/ovirt-foreign-menu.h +index cf18b52..791d0f3 100644 +--- a/src/ovirt-foreign-menu.h ++++ b/src/ovirt-foreign-menu.h +@@ -70,6 +70,16 @@ OvirtForeignMenu* ovirt_foreign_menu_new(OvirtProxy *proxy); + OvirtForeignMenu *ovirt_foreign_menu_new_from_file(VirtViewerFile *self); + void ovirt_foreign_menu_start(OvirtForeignMenu *menu); + ++void ovirt_foreign_menu_set_current_iso_name_async(OvirtForeignMenu *foreign_menu, ++ const char *name, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++gboolean ovirt_foreign_menu_set_current_iso_name_finish(OvirtForeignMenu *foreign_menu, ++ GAsyncResult *result, ++ GError **error); ++ ++ + GtkWidget *ovirt_foreign_menu_get_gtk_menu(OvirtForeignMenu *foreign_menu); + + G_END_DECLS +-- +2.12.0 + diff --git a/SOURCES/0007-ovirt-foreign-menu-Fetch-ISO-names-using-GTask-API.patch b/SOURCES/0007-ovirt-foreign-menu-Fetch-ISO-names-using-GTask-API.patch new file mode 100644 index 0000000..bf80fe0 --- /dev/null +++ b/SOURCES/0007-ovirt-foreign-menu-Fetch-ISO-names-using-GTask-API.patch @@ -0,0 +1,537 @@ +From 4254c8305c1f7d48cf92eeff63434f1618542260 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Tue, 17 Jan 2017 18:14:15 -0200 +Subject: [PATCH 07/26] ovirt-foreign-menu: Fetch ISO names using GTask API + +Similar to the previous commit, the ISO dialog will fetch the result +asynchronously, rather than relying on the "notify::files" signal from +OvirtForeignMenu object. It also enables error to be shown if anything +goes wrong. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/ovirt-foreign-menu.c | 182 ++++++++++++++++++++++++++++------------------- + src/ovirt-foreign-menu.h | 9 ++- + src/remote-viewer.c | 45 ++++++++++-- + 3 files changed, 156 insertions(+), 80 deletions(-) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index a422ebb..8a99665 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -40,13 +40,13 @@ typedef enum { + STATE_ISOS + } OvirtForeignMenuState; + +-static void ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, OvirtForeignMenuState state); +-static void ovirt_foreign_menu_fetch_api_async(OvirtForeignMenu *menu); +-static void ovirt_foreign_menu_fetch_vm_async(OvirtForeignMenu *menu); +-static void ovirt_foreign_menu_fetch_storage_domain_async(OvirtForeignMenu *menu); +-static void ovirt_foreign_menu_fetch_vm_cdrom_async(OvirtForeignMenu *menu); +-static void ovirt_foreign_menu_refresh_cdrom_file_async(OvirtForeignMenu *menu); +-static gboolean ovirt_foreign_menu_refresh_iso_list(gpointer user_data); ++static void ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, GTask *task, OvirtForeignMenuState state); ++static void ovirt_foreign_menu_fetch_api_async(OvirtForeignMenu *menu, GTask *task); ++static void ovirt_foreign_menu_fetch_vm_async(OvirtForeignMenu *menu, GTask *task); ++static void ovirt_foreign_menu_fetch_storage_domain_async(OvirtForeignMenu *menu, GTask *task); ++static void ovirt_foreign_menu_fetch_vm_cdrom_async(OvirtForeignMenu *menu, GTask *task); ++static void ovirt_foreign_menu_refresh_cdrom_file_async(OvirtForeignMenu *menu, GTask *task); ++static void ovirt_foreign_menu_fetch_iso_list_async(OvirtForeignMenu *menu, GTask *task); + + G_DEFINE_TYPE (OvirtForeignMenu, ovirt_foreign_menu, G_TYPE_OBJECT) + +@@ -273,11 +273,9 @@ OvirtForeignMenu* ovirt_foreign_menu_new(OvirtProxy *proxy) + + static void + ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, ++ GTask *task, + OvirtForeignMenuState current_state) + { +- g_return_if_fail(current_state >= STATE_0); +- g_return_if_fail(current_state < STATE_ISOS); +- + /* Each state will check if the member is initialized, falling directly to + * the next one if so. If not, the callback for the asynchronous call will + * be responsible for calling is function again with the next state as +@@ -286,26 +284,26 @@ ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, + switch (current_state + 1) { + case STATE_API: + if (menu->priv->api == NULL) { +- ovirt_foreign_menu_fetch_api_async(menu); ++ ovirt_foreign_menu_fetch_api_async(menu, task); + break; + } + case STATE_VM: + if (menu->priv->vm == NULL) { +- ovirt_foreign_menu_fetch_vm_async(menu); ++ ovirt_foreign_menu_fetch_vm_async(menu, task); + break; + } + case STATE_STORAGE_DOMAIN: + if (menu->priv->files == NULL) { +- ovirt_foreign_menu_fetch_storage_domain_async(menu); ++ ovirt_foreign_menu_fetch_storage_domain_async(menu, task); + break; + } + case STATE_VM_CDROM: + if (menu->priv->cdrom == NULL) { +- ovirt_foreign_menu_fetch_vm_cdrom_async(menu); ++ ovirt_foreign_menu_fetch_vm_cdrom_async(menu, task); + break; + } + case STATE_CDROM_FILE: +- ovirt_foreign_menu_refresh_cdrom_file_async(menu); ++ ovirt_foreign_menu_refresh_cdrom_file_async(menu, task); + break; + case STATE_ISOS: + g_warn_if_fail(menu->priv->api != NULL); +@@ -313,18 +311,35 @@ ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, + g_warn_if_fail(menu->priv->files != NULL); + g_warn_if_fail(menu->priv->cdrom != NULL); + +- ovirt_foreign_menu_refresh_iso_list(menu); ++ ovirt_foreign_menu_fetch_iso_list_async(menu, task); + break; + default: + g_warn_if_reached(); ++ g_task_return_new_error(task, OVIRT_ERROR, OVIRT_ERROR_FAILED, ++ "Invalid state: %d", current_state); ++ g_object_unref(task); + } + } + + + void +-ovirt_foreign_menu_start(OvirtForeignMenu *menu) ++ovirt_foreign_menu_fetch_iso_names_async(OvirtForeignMenu *menu, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data) ++{ ++ GTask *task = g_task_new(menu, cancellable, callback, user_data); ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_0); ++} ++ ++ ++GList * ++ovirt_foreign_menu_fetch_iso_names_finish(OvirtForeignMenu *foreign_menu, ++ GAsyncResult *result, ++ GError **error) + { +- ovirt_foreign_menu_next_async_step(menu, STATE_0); ++ g_return_val_if_fail(OVIRT_IS_FOREIGN_MENU(foreign_menu), NULL); ++ return g_task_propagate_pointer(G_TASK(result), error); + } + + +@@ -545,7 +560,6 @@ static void ovirt_foreign_menu_set_files(OvirtForeignMenu *menu, + + g_list_free_full(menu->priv->iso_names, (GDestroyNotify)g_free); + menu->priv->iso_names = sorted_files; +- g_object_notify(G_OBJECT(menu), "files"); + } + + +@@ -553,14 +567,16 @@ static void cdrom_file_refreshed_cb(GObject *source_object, + GAsyncResult *result, + gpointer user_data) + { ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); + OvirtResource *cdrom = OVIRT_RESOURCE(source_object); +- OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(user_data); + GError *error = NULL; + + ovirt_resource_refresh_finish(cdrom, result, &error); + if (error != NULL) { + g_warning("failed to refresh cdrom content: %s", error->message); +- g_clear_error(&error); ++ g_task_return_error(task, error); ++ g_object_unref(task); + return; + } + +@@ -573,20 +589,24 @@ static void cdrom_file_refreshed_cb(GObject *source_object, + } + g_object_notify(G_OBJECT(menu), "file"); + if (menu->priv->cdrom != NULL) { +- ovirt_foreign_menu_next_async_step(menu, STATE_CDROM_FILE); ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_CDROM_FILE); + } else { + g_debug("Could not find VM cdrom through oVirt REST API"); ++ g_task_return_new_error(task, OVIRT_ERROR, OVIRT_ERROR_FAILED, ++ "Could not find VM cdrom through oVirt REST API"); ++ g_object_unref(task); + } + } + + +-static void ovirt_foreign_menu_refresh_cdrom_file_async(OvirtForeignMenu *menu) ++static void ovirt_foreign_menu_refresh_cdrom_file_async(OvirtForeignMenu *menu, ++ GTask *task) + { + g_return_if_fail(OVIRT_IS_RESOURCE(menu->priv->cdrom)); + + ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->cdrom), +- menu->priv->proxy, NULL, +- cdrom_file_refreshed_cb, menu); ++ menu->priv->proxy, g_task_get_cancellable(task), ++ cdrom_file_refreshed_cb, task); + } + + +@@ -596,7 +616,8 @@ static void cdroms_fetched_cb(GObject *source_object, + { + GHashTable *cdroms; + OvirtCollection *cdrom_collection = OVIRT_COLLECTION(source_object); +- OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(user_data); ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); + GHashTableIter iter; + OvirtCdrom *cdrom; + GError *error = NULL; +@@ -604,7 +625,8 @@ static void cdroms_fetched_cb(GObject *source_object, + ovirt_collection_fetch_finish(cdrom_collection, result, &error); + if (error != NULL) { + g_warning("failed to fetch cdrom collection: %s", error->message); +- g_clear_error(&error); ++ g_task_return_error(task, error); ++ g_object_unref(task); + return; + } + +@@ -626,20 +648,25 @@ static void cdroms_fetched_cb(GObject *source_object, + } + + if (menu->priv->cdrom != NULL) { +- ovirt_foreign_menu_next_async_step(menu, STATE_VM_CDROM); ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_VM_CDROM); + } else { + g_debug("Could not find VM cdrom through oVirt REST API"); ++ g_task_return_new_error(task, OVIRT_ERROR, OVIRT_ERROR_FAILED, ++ "Could not find VM cdrom through oVirt REST API"); ++ g_object_unref(task); + } + } + + +-static void ovirt_foreign_menu_fetch_vm_cdrom_async(OvirtForeignMenu *menu) ++static void ovirt_foreign_menu_fetch_vm_cdrom_async(OvirtForeignMenu *menu, ++ GTask *task) + { + OvirtCollection *cdrom_collection; + + cdrom_collection = ovirt_vm_get_cdroms(menu->priv->vm); +- ovirt_collection_fetch_async(cdrom_collection, menu->priv->proxy, NULL, +- cdroms_fetched_cb, menu); ++ ovirt_collection_fetch_async(cdrom_collection, menu->priv->proxy, ++ g_task_get_cancellable(task), ++ cdroms_fetched_cb, task); + } + + +@@ -648,7 +675,8 @@ static void storage_domains_fetched_cb(GObject *source_object, + gpointer user_data) + { + GError *error = NULL; +- OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(user_data); ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); + OvirtCollection *collection = OVIRT_COLLECTION(source_object); + GHashTableIter iter; + OvirtStorageDomain *domain; +@@ -656,7 +684,8 @@ static void storage_domains_fetched_cb(GObject *source_object, + ovirt_collection_fetch_finish(collection, result, &error); + if (error != NULL) { + g_warning("failed to fetch storage domains: %s", error->message); +- g_clear_error(&error); ++ g_task_return_error(task, error); ++ g_object_unref(task); + return; + } + +@@ -687,21 +716,25 @@ static void storage_domains_fetched_cb(GObject *source_object, + } + + if (menu->priv->files != NULL) { +- ovirt_foreign_menu_next_async_step(menu, STATE_STORAGE_DOMAIN); ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_STORAGE_DOMAIN); + } else { + g_debug("Could not find iso file collection"); ++ g_task_return_new_error(task, OVIRT_ERROR, OVIRT_ERROR_FAILED, ++ "Could not find ISO file collection"); ++ g_object_unref(task); + } + } + + +-static void ovirt_foreign_menu_fetch_storage_domain_async(OvirtForeignMenu *menu) ++static void ovirt_foreign_menu_fetch_storage_domain_async(OvirtForeignMenu *menu, ++ GTask *task) + { +- OvirtCollection *collection; ++ OvirtCollection *collection = ovirt_api_get_storage_domains(menu->priv->api); + + g_debug("Start fetching oVirt REST collection"); +- collection = ovirt_api_get_storage_domains(menu->priv->api); +- ovirt_collection_fetch_async(collection, menu->priv->proxy, NULL, +- storage_domains_fetched_cb, menu); ++ ovirt_collection_fetch_async(collection, menu->priv->proxy, ++ g_task_get_cancellable(task), ++ storage_domains_fetched_cb, task); + } + + +@@ -710,16 +743,17 @@ static void vms_fetched_cb(GObject *source_object, + gpointer user_data) + { + GError *error = NULL; +- OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(user_data); +- OvirtCollection *collection; ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); ++ OvirtCollection *collection = OVIRT_COLLECTION(source_object); + GHashTableIter iter; + OvirtVm *vm; + +- collection = OVIRT_COLLECTION(source_object); + ovirt_collection_fetch_finish(collection, result, &error); + if (error != NULL) { + g_debug("failed to fetch VM list: %s", error->message); +- g_clear_error(&error); ++ g_task_return_error(task, error); ++ g_object_unref(task); + return; + } + +@@ -736,14 +770,18 @@ static void vms_fetched_cb(GObject *source_object, + g_free(guid); + } + if (menu->priv->vm != NULL) { +- ovirt_foreign_menu_next_async_step(menu, STATE_VM); ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_VM); + } else { + g_warning("failed to find a VM with guid \"%s\"", menu->priv->vm_guid); ++ g_task_return_new_error(task, OVIRT_ERROR, OVIRT_ERROR_FAILED, ++ "Could not find a VM with guid \"%s\"", menu->priv->vm_guid); ++ g_object_unref(task); + } + } + + +-static void ovirt_foreign_menu_fetch_vm_async(OvirtForeignMenu *menu) ++static void ovirt_foreign_menu_fetch_vm_async(OvirtForeignMenu *menu, ++ GTask *task) + { + OvirtCollection *vms; + +@@ -753,7 +791,8 @@ static void ovirt_foreign_menu_fetch_vm_async(OvirtForeignMenu *menu) + + vms = ovirt_api_get_vms(menu->priv->api); + ovirt_collection_fetch_async(vms, menu->priv->proxy, +- NULL, vms_fetched_cb, menu); ++ g_task_get_cancellable(task), ++ vms_fetched_cb, task); + } + + +@@ -762,31 +801,35 @@ static void api_fetched_cb(GObject *source_object, + gpointer user_data) + { + GError *error = NULL; +- OvirtProxy *proxy; +- OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(user_data); ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); ++ OvirtProxy *proxy = OVIRT_PROXY(source_object); + +- proxy = OVIRT_PROXY(source_object); + menu->priv->api = ovirt_proxy_fetch_api_finish(proxy, result, &error); + if (error != NULL) { + g_debug("failed to fetch toplevel API object: %s", error->message); +- g_clear_error(&error); ++ g_task_return_error(task, error); ++ g_object_unref(task); + 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); ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_API); + } + + +-static void ovirt_foreign_menu_fetch_api_async(OvirtForeignMenu *menu) ++static void ovirt_foreign_menu_fetch_api_async(OvirtForeignMenu *menu, ++ GTask *task) + { + g_debug("Start fetching oVirt main entry point"); + + g_return_if_fail(OVIRT_IS_FOREIGN_MENU(menu)); + g_return_if_fail(OVIRT_IS_PROXY(menu->priv->proxy)); + +- ovirt_proxy_fetch_api_async(menu->priv->proxy, NULL, api_fetched_cb, menu); ++ ovirt_proxy_fetch_api_async(menu->priv->proxy, ++ g_task_get_cancellable(task), ++ api_fetched_cb, task); + } + + +@@ -794,6 +837,8 @@ static void iso_list_fetched_cb(GObject *source_object, + GAsyncResult *result, + gpointer user_data) + { ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); + OvirtCollection *collection = OVIRT_COLLECTION(source_object); + GError *error = NULL; + GList *files; +@@ -802,42 +847,29 @@ static void iso_list_fetched_cb(GObject *source_object, + if (error != NULL) { + g_warning("failed to fetch files for ISO storage domain: %s", + error->message); +- g_clear_error(&error); ++ g_task_return_error(task, error); ++ g_object_unref(task); + return; + } + + files = g_hash_table_get_values(ovirt_collection_get_resources(collection)); +- ovirt_foreign_menu_set_files(OVIRT_FOREIGN_MENU(user_data), files); ++ ovirt_foreign_menu_set_files(menu, files); + g_list_free(files); +- +- g_timeout_add_seconds(300, ovirt_foreign_menu_refresh_iso_list, user_data); ++ g_task_return_pointer(task, menu->priv->iso_names, NULL); ++ g_object_unref(task); + } + + +-static void ovirt_foreign_menu_fetch_iso_list_async(OvirtForeignMenu *menu) ++static void ovirt_foreign_menu_fetch_iso_list_async(OvirtForeignMenu *menu, ++ GTask *task) + { + if (menu->priv->files == NULL) { + return; + } + + ovirt_collection_fetch_async(menu->priv->files, menu->priv->proxy, +- NULL, iso_list_fetched_cb, menu); +-} +- +- +-static gboolean ovirt_foreign_menu_refresh_iso_list(gpointer user_data) +-{ +- OvirtForeignMenu *menu; +- +- g_debug("Refreshing foreign menu iso list"); +- menu = OVIRT_FOREIGN_MENU(user_data); +- ovirt_foreign_menu_fetch_iso_list_async(menu); +- +- /* ovirt_foreign_menu_fetch_iso_list_async() will schedule a new call to +- * that function through iso_list_fetched_cb() when it has finished +- * fetching the iso list +- */ +- return G_SOURCE_REMOVE; ++ g_task_get_cancellable(task), ++ iso_list_fetched_cb, task); + } + + +diff --git a/src/ovirt-foreign-menu.h b/src/ovirt-foreign-menu.h +index 791d0f3..a864a60 100644 +--- a/src/ovirt-foreign-menu.h ++++ b/src/ovirt-foreign-menu.h +@@ -68,7 +68,14 @@ GType ovirt_foreign_menu_get_type(void); + + OvirtForeignMenu* ovirt_foreign_menu_new(OvirtProxy *proxy); + OvirtForeignMenu *ovirt_foreign_menu_new_from_file(VirtViewerFile *self); +-void ovirt_foreign_menu_start(OvirtForeignMenu *menu); ++ ++void ovirt_foreign_menu_fetch_iso_names_async(OvirtForeignMenu *menu, ++ GCancellable *cancellable, ++ GAsyncReadyCallback callback, ++ gpointer user_data); ++GList *ovirt_foreign_menu_fetch_iso_names_finish(OvirtForeignMenu *foreign_menu, ++ GAsyncResult *result, ++ GError **error); + + void ovirt_foreign_menu_set_current_iso_name_async(OvirtForeignMenu *foreign_menu, + const char *name, +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 13c6e7c..c84a35b 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -72,6 +72,7 @@ static OvirtVm * choose_vm(GtkWindow *main_window, + char **vm_name, + OvirtCollection *vms, + GError **error); ++static gboolean remote_viewer_refresh_ovirt_foreign_menu(gpointer user_data); + #endif + + static gboolean remote_viewer_start(VirtViewerApp *self, GError **error); +@@ -783,6 +784,43 @@ ovirt_foreign_menu_updated(RemoteViewer *self) + } + + static void ++ovirt_foreign_menu_fetch_iso_names_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ OvirtForeignMenu *foreign_menu = OVIRT_FOREIGN_MENU(source_object); ++ RemoteViewer *self = REMOTE_VIEWER(user_data); ++ VirtViewerApp *app = VIRT_VIEWER_APP(user_data); ++ GError *error = NULL; ++ GList *iso_list; ++ ++ iso_list = ovirt_foreign_menu_fetch_iso_names_finish(foreign_menu, result, &error); ++ ++ if (!iso_list) { ++ virt_viewer_app_simple_message_dialog(app, error ? error->message : _("Failed to fetch CD names")); ++ g_clear_error(&error); ++ return; ++ } ++ ++ ovirt_foreign_menu_updated(self); ++ g_timeout_add_seconds(300, remote_viewer_refresh_ovirt_foreign_menu, self); ++} ++ ++static gboolean ++remote_viewer_refresh_ovirt_foreign_menu(gpointer user_data) ++{ ++ VirtViewerApp *app = VIRT_VIEWER_APP(user_data); ++ RemoteViewer *self = REMOTE_VIEWER(user_data); ++ ++ g_debug("Refreshing foreign menu iso list"); ++ ovirt_foreign_menu_fetch_iso_names_async(self->priv->ovirt_foreign_menu, ++ NULL, ++ ovirt_foreign_menu_fetch_iso_names_cb, ++ app); ++ return G_SOURCE_REMOVE; ++} ++ ++static void + ovirt_foreign_menu_changed(OvirtForeignMenu *foreign_menu G_GNUC_UNUSED, + GParamSpec *pspec G_GNUC_UNUSED, + VirtViewerApp *app) +@@ -806,13 +844,12 @@ virt_viewer_app_set_ovirt_foreign_menu(VirtViewerApp *app, + self->priv->ovirt_foreign_menu = foreign_menu; + g_signal_connect(G_OBJECT(foreign_menu), "notify::file", + (GCallback)ovirt_foreign_menu_changed, app); +- g_signal_connect(G_OBJECT(foreign_menu), "notify::files", +- (GCallback)ovirt_foreign_menu_changed, app); ++ + g_signal_connect(G_OBJECT(app), "window-added", + (GCallback)ovirt_foreign_menu_update, NULL); +- ovirt_foreign_menu_start(foreign_menu); +-} + ++ remote_viewer_refresh_ovirt_foreign_menu(self); ++} + + static gboolean + create_ovirt_session(VirtViewerApp *app, const char *uri, GError **err) +-- +2.12.0 + diff --git a/SOURCES/0008-ovirt-foreign-menu-Add-accessors-for-current-iso-and.patch b/SOURCES/0008-ovirt-foreign-menu-Add-accessors-for-current-iso-and.patch new file mode 100644 index 0000000..bb447aa --- /dev/null +++ b/SOURCES/0008-ovirt-foreign-menu-Add-accessors-for-current-iso-and.patch @@ -0,0 +1,62 @@ +From 54f2b8abb553005b10cc65e7267a7de2d095fad5 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Thu, 3 Nov 2016 16:36:35 -0200 +Subject: [PATCH 08/26] ovirt-foreign-menu: Add accessors for current iso and + iso list + +Also, to keep consistency around the codebase, changed the return value +of ovirt_foreign_menu_get_current_iso_name() from char * to gchar *. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/ovirt-foreign-menu.c | 11 +++++++++-- + src/ovirt-foreign-menu.h | 2 ++ + 2 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index 8a99665..ef3ddd9 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -85,10 +85,10 @@ enum { + }; + + +-static char * ++gchar * + ovirt_foreign_menu_get_current_iso_name(OvirtForeignMenu *foreign_menu) + { +- char *name; ++ gchar *name; + + if (foreign_menu->priv->cdrom == NULL) { + return NULL; +@@ -100,6 +100,13 @@ ovirt_foreign_menu_get_current_iso_name(OvirtForeignMenu *foreign_menu) + } + + ++GList* ++ovirt_foreign_menu_get_iso_names(OvirtForeignMenu *foreign_menu) ++{ ++ return foreign_menu->priv->iso_names; ++} ++ ++ + static void + ovirt_foreign_menu_get_property(GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +diff --git a/src/ovirt-foreign-menu.h b/src/ovirt-foreign-menu.h +index a864a60..340201f 100644 +--- a/src/ovirt-foreign-menu.h ++++ b/src/ovirt-foreign-menu.h +@@ -88,6 +88,8 @@ gboolean ovirt_foreign_menu_set_current_iso_name_finish(OvirtForeignMenu *foreig + + + GtkWidget *ovirt_foreign_menu_get_gtk_menu(OvirtForeignMenu *foreign_menu); ++gchar *ovirt_foreign_menu_get_current_iso_name(OvirtForeignMenu *menu); ++GList *ovirt_foreign_menu_get_iso_names(OvirtForeignMenu *menu); + + G_END_DECLS + +-- +2.12.0 + diff --git a/SOURCES/0009-Introduce-ISO-List-dialog.patch b/SOURCES/0009-Introduce-ISO-List-dialog.patch new file mode 100644 index 0000000..5fd5490 --- /dev/null +++ b/SOURCES/0009-Introduce-ISO-List-dialog.patch @@ -0,0 +1,688 @@ +From c2529913c72a00c5228d02a8e18a3991ac8ba00a Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 8 Jul 2016 10:30:51 -0300 +Subject: [PATCH 09/26] Introduce ISO List dialog + +The motivation for this dialog started with rhbz #1310624, where it was +reported that foreign menu was causing too many debug messages to be +printed to the console, because remote viewer had a timeout of 5 seconds +to refresh the ISO list automatically. + +As a workaround, the timeout was adjusted for 5 minutes, but it could +cause more problems, such as inconsistencies between what was shown by +remote viewer and what the server had configured. + +Another issue caused by displaying the ISO files as a menu item was that +if the list was too long, it would take all the available space on the +screen. In the end, a menu item was not the correct choice of UI +component for this use case. + +In order to solve both problems, we now present the ISO list as a +dedicated dialog, where the refresh of ISO list is triggered manually by +the user and the list is contained within the dialog, by displaying de +files in a treeview. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + po/POTFILES.in | 2 + + src/Makefile.am | 3 + + src/remote-viewer-iso-list-dialog.c | 365 +++++++++++++++++++++++++++++ + src/remote-viewer-iso-list-dialog.h | 58 +++++ + src/resources/ui/remote-viewer-iso-list.ui | 158 +++++++++++++ + src/resources/virt-viewer.gresource.xml | 1 + + 6 files changed, 587 insertions(+) + create mode 100644 src/remote-viewer-iso-list-dialog.c + create mode 100644 src/remote-viewer-iso-list-dialog.h + create mode 100644 src/resources/ui/remote-viewer-iso-list.ui + +diff --git a/po/POTFILES.in b/po/POTFILES.in +index 69d9fef..371c242 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -1,9 +1,11 @@ + data/remote-viewer.appdata.xml.in + data/remote-viewer.desktop.in + data/virt-viewer-mime.xml.in ++src/remote-viewer-iso-list-dialog.c + src/remote-viewer-main.c + src/remote-viewer.c + [type: gettext/glade] src/resources/ui/remote-viewer-connect.ui ++[type: gettext/glade] src/resources/ui/remote-viewer-iso-list.ui + [type: gettext/glade] src/resources/ui/virt-viewer-about.ui + src/virt-viewer-app.c + src/virt-viewer-auth.c +diff --git a/src/Makefile.am b/src/Makefile.am +index 272c4ff..9748277 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -13,6 +13,7 @@ noinst_DATA = \ + resources/ui/virt-viewer-vm-connection.ui \ + resources/ui/virt-viewer-preferences.ui \ + resources/ui/remote-viewer-connect.ui \ ++ resources/ui/remote-viewer-iso-list.ui \ + resources/ui/virt-viewer-file-transfer-dialog.ui \ + $(NULL) + +@@ -97,6 +98,8 @@ if HAVE_OVIRT + libvirt_viewer_la_SOURCES += \ + ovirt-foreign-menu.h \ + ovirt-foreign-menu.c \ ++ remote-viewer-iso-list-dialog.c \ ++ remote-viewer-iso-list-dialog.h \ + $(NULL) + endif + +diff --git a/src/remote-viewer-iso-list-dialog.c b/src/remote-viewer-iso-list-dialog.c +new file mode 100644 +index 0000000..f23ddb2 +--- /dev/null ++++ b/src/remote-viewer-iso-list-dialog.c +@@ -0,0 +1,365 @@ ++/* ++ * Virt Viewer: A virtual machine console viewer ++ * ++ * Copyright (C) 2017 Red Hat, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include ++ ++#include ++ ++#include "remote-viewer-iso-list-dialog.h" ++#include "virt-viewer-util.h" ++#include "ovirt-foreign-menu.h" ++ ++static void ovirt_foreign_menu_iso_name_changed(OvirtForeignMenu *foreign_menu, GAsyncResult *result, RemoteViewerISOListDialog *self); ++static void remote_viewer_iso_list_dialog_show_error(RemoteViewerISOListDialog *self, const gchar *message); ++ ++G_DEFINE_TYPE(RemoteViewerISOListDialog, remote_viewer_iso_list_dialog, GTK_TYPE_DIALOG) ++ ++#define DIALOG_PRIVATE(o) \ ++ (G_TYPE_INSTANCE_GET_PRIVATE((o), REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG, RemoteViewerISOListDialogPrivate)) ++ ++struct _RemoteViewerISOListDialogPrivate ++{ ++ GtkListStore *list_store; ++ GtkWidget *status; ++ GtkWidget *spinner; ++ GtkWidget *stack; ++ GtkWidget *tree_view; ++ OvirtForeignMenu *foreign_menu; ++}; ++ ++enum RemoteViewerISOListDialogModel ++{ ++ ISO_IS_ACTIVE = 0, ++ ISO_NAME, ++ FONT_WEIGHT, ++}; ++ ++enum RemoteViewerISOListDialogProperties { ++ PROP_0, ++ PROP_FOREIGN_MENU, ++}; ++ ++ ++void remote_viewer_iso_list_dialog_toggled(GtkCellRendererToggle *cell_renderer, gchar *path, gpointer user_data); ++void remote_viewer_iso_list_dialog_row_activated(GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *col, gpointer user_data); ++ ++static void ++remote_viewer_iso_list_dialog_dispose(GObject *object) ++{ ++ RemoteViewerISOListDialog *self = REMOTE_VIEWER_ISO_LIST_DIALOG(object); ++ RemoteViewerISOListDialogPrivate *priv = self->priv; ++ ++ if (priv->foreign_menu) { ++ g_signal_handlers_disconnect_by_data(priv->foreign_menu, object); ++ g_clear_object(&priv->foreign_menu); ++ } ++ G_OBJECT_CLASS(remote_viewer_iso_list_dialog_parent_class)->dispose(object); ++} ++ ++static void ++remote_viewer_iso_list_dialog_set_property(GObject *object, guint property_id, ++ const GValue *value, GParamSpec *pspec) ++{ ++ RemoteViewerISOListDialog *self = REMOTE_VIEWER_ISO_LIST_DIALOG(object); ++ RemoteViewerISOListDialogPrivate *priv = self->priv; ++ ++ switch (property_id) { ++ case PROP_FOREIGN_MENU: ++ priv->foreign_menu = g_value_dup_object(value); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++ } ++} ++ ++static void ++remote_viewer_iso_list_dialog_class_init(RemoteViewerISOListDialogClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS(klass); ++ ++ g_type_class_add_private(klass, sizeof(RemoteViewerISOListDialogPrivate)); ++ ++ object_class->dispose = remote_viewer_iso_list_dialog_dispose; ++ object_class->set_property = remote_viewer_iso_list_dialog_set_property; ++ ++ g_object_class_install_property(object_class, ++ PROP_FOREIGN_MENU, ++ g_param_spec_object("foreign-menu", ++ "oVirt Foreign Menu", ++ "Object which is used as interface to oVirt", ++ OVIRT_TYPE_FOREIGN_MENU, ++ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); ++} ++ ++static void ++remote_viewer_iso_list_dialog_show_files(RemoteViewerISOListDialog *self) ++{ ++ self->priv = DIALOG_PRIVATE(self); ++ gtk_stack_set_visible_child_full(GTK_STACK(self->priv->stack), "iso-list", ++ GTK_STACK_TRANSITION_TYPE_NONE); ++ gtk_dialog_set_response_sensitive(GTK_DIALOG(self), GTK_RESPONSE_NONE, TRUE); ++} ++ ++static void ++remote_viewer_iso_list_dialog_foreach(char *name, RemoteViewerISOListDialog *self) ++{ ++ RemoteViewerISOListDialogPrivate *priv = self->priv; ++ gchar *current_iso = ovirt_foreign_menu_get_current_iso_name(self->priv->foreign_menu); ++ gboolean active = (g_strcmp0(current_iso, name) == 0); ++ gint weight = active ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL; ++ GtkTreeIter iter; ++ ++ gtk_list_store_append(priv->list_store, &iter); ++ gtk_list_store_set(priv->list_store, &iter, ++ ISO_IS_ACTIVE, active, ++ ISO_NAME, name, ++ FONT_WEIGHT, weight, -1); ++ ++ if (active) { ++ GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->list_store), &iter); ++ gtk_tree_view_set_cursor(GTK_TREE_VIEW(priv->tree_view), path, NULL, FALSE); ++ gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(priv->tree_view), path, NULL, TRUE, 0.5, 0.5); ++ gtk_tree_path_free(path); ++ } ++ ++ g_free(current_iso); ++} ++ ++static void ++fetch_iso_names_cb(OvirtForeignMenu *foreign_menu, ++ GAsyncResult *result, ++ RemoteViewerISOListDialog *self) ++{ ++ RemoteViewerISOListDialogPrivate *priv = self->priv; ++ GError *error = NULL; ++ GList *iso_list; ++ ++ iso_list = ovirt_foreign_menu_fetch_iso_names_finish(foreign_menu, result, &error); ++ ++ if (!iso_list) { ++ const gchar *msg = error ? error->message : _("Failed to fetch CD names"); ++ gchar *markup = g_strdup_printf("%s", msg); ++ ++ gtk_label_set_markup(GTK_LABEL(priv->status), markup); ++ gtk_spinner_stop(GTK_SPINNER(priv->spinner)); ++ remote_viewer_iso_list_dialog_show_error(self, msg); ++ gtk_dialog_set_response_sensitive(GTK_DIALOG(self), GTK_RESPONSE_NONE, TRUE); ++ g_free(markup); ++ g_clear_error(&error); ++ return; ++ } ++ ++ g_list_foreach(iso_list, (GFunc) remote_viewer_iso_list_dialog_foreach, self); ++ remote_viewer_iso_list_dialog_show_files(self); ++} ++ ++ ++static void ++remote_viewer_iso_list_dialog_refresh_iso_list(RemoteViewerISOListDialog *self) ++{ ++ RemoteViewerISOListDialogPrivate *priv = self->priv; ++ ++ gtk_list_store_clear(priv->list_store); ++ ovirt_foreign_menu_fetch_iso_names_async(priv->foreign_menu, NULL, ++ (GAsyncReadyCallback) fetch_iso_names_cb, ++ self); ++} ++ ++static void ++remote_viewer_iso_list_dialog_response(GtkDialog *dialog, ++ gint response_id, ++ gpointer user_data G_GNUC_UNUSED) ++{ ++ RemoteViewerISOListDialog *self = REMOTE_VIEWER_ISO_LIST_DIALOG(dialog); ++ RemoteViewerISOListDialogPrivate *priv = self->priv; ++ ++ if (response_id != GTK_RESPONSE_NONE) ++ return; ++ ++ gtk_spinner_start(GTK_SPINNER(priv->spinner)); ++ gtk_label_set_markup(GTK_LABEL(priv->status), _("Loading...")); ++ gtk_stack_set_visible_child_full(GTK_STACK(priv->stack), "status", ++ GTK_STACK_TRANSITION_TYPE_NONE); ++ gtk_dialog_set_response_sensitive(GTK_DIALOG(self), GTK_RESPONSE_NONE, FALSE); ++ remote_viewer_iso_list_dialog_refresh_iso_list(self); ++} ++ ++void ++remote_viewer_iso_list_dialog_toggled(GtkCellRendererToggle *cell_renderer G_GNUC_UNUSED, ++ gchar *path, ++ gpointer user_data) ++{ ++ RemoteViewerISOListDialog *self = REMOTE_VIEWER_ISO_LIST_DIALOG(user_data); ++ RemoteViewerISOListDialogPrivate *priv = self->priv; ++ GtkTreeModel *model = GTK_TREE_MODEL(priv->list_store); ++ GtkTreePath *tree_path = gtk_tree_path_new_from_string(path); ++ GtkTreeIter iter; ++ gboolean active; ++ gchar *name; ++ ++ gtk_tree_view_set_cursor(GTK_TREE_VIEW(priv->tree_view), tree_path, NULL, FALSE); ++ gtk_tree_model_get_iter(model, &iter, tree_path); ++ gtk_tree_model_get(model, &iter, ++ ISO_IS_ACTIVE, &active, ++ ISO_NAME, &name, -1); ++ ++ gtk_dialog_set_response_sensitive(GTK_DIALOG(self), GTK_RESPONSE_NONE, FALSE); ++ gtk_widget_set_sensitive(priv->tree_view, FALSE); ++ ++ ovirt_foreign_menu_set_current_iso_name_async(priv->foreign_menu, active ? NULL : name, NULL, ++ (GAsyncReadyCallback)ovirt_foreign_menu_iso_name_changed, ++ self); ++ gtk_tree_path_free(tree_path); ++ g_free(name); ++} ++ ++void ++remote_viewer_iso_list_dialog_row_activated(GtkTreeView *view G_GNUC_UNUSED, ++ GtkTreePath *path, ++ GtkTreeViewColumn *col G_GNUC_UNUSED, ++ gpointer user_data) ++{ ++ gchar *path_str = gtk_tree_path_to_string(path); ++ remote_viewer_iso_list_dialog_toggled(NULL, path_str, user_data); ++ g_free(path_str); ++} ++ ++static void ++remote_viewer_iso_list_dialog_init(RemoteViewerISOListDialog *self) ++{ ++ GtkWidget *content = gtk_dialog_get_content_area(GTK_DIALOG(self)); ++ RemoteViewerISOListDialogPrivate *priv = self->priv = DIALOG_PRIVATE(self); ++ GtkBuilder *builder = virt_viewer_util_load_ui("remote-viewer-iso-list.ui"); ++ GtkCellRendererToggle *cell_renderer; ++ ++ gtk_builder_connect_signals(builder, self); ++ ++ priv->status = GTK_WIDGET(gtk_builder_get_object(builder, "status")); ++ priv->spinner = GTK_WIDGET(gtk_builder_get_object(builder, "spinner")); ++ priv->stack = GTK_WIDGET(gtk_builder_get_object(builder, "stack")); ++ gtk_box_pack_start(GTK_BOX(content), priv->stack, TRUE, TRUE, 0); ++ ++ priv->list_store = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore")); ++ priv->tree_view = GTK_WIDGET(gtk_builder_get_object(builder, "view")); ++ cell_renderer = GTK_CELL_RENDERER_TOGGLE(gtk_builder_get_object(builder, "cellrenderertoggle")); ++ gtk_cell_renderer_toggle_set_radio(cell_renderer, TRUE); ++ gtk_cell_renderer_set_padding(GTK_CELL_RENDERER(cell_renderer), 6, 6); ++ ++ g_object_unref(builder); ++ ++ gtk_dialog_add_buttons(GTK_DIALOG(self), ++ _("Refresh"), GTK_RESPONSE_NONE, ++ _("Close"), GTK_RESPONSE_CLOSE, ++ NULL); ++ ++ gtk_dialog_set_default_response(GTK_DIALOG(self), GTK_RESPONSE_CLOSE); ++ gtk_dialog_set_response_sensitive(GTK_DIALOG(self), GTK_RESPONSE_NONE, FALSE); ++ g_signal_connect(self, "response", G_CALLBACK(remote_viewer_iso_list_dialog_response), NULL); ++} ++ ++static void ++remote_viewer_iso_list_dialog_show_error(RemoteViewerISOListDialog *self, ++ const gchar *message) ++{ ++ GtkWidget *dialog; ++ ++ g_warn_if_fail(message != NULL); ++ ++ dialog = gtk_message_dialog_new(GTK_WINDOW(self), ++ GTK_DIALOG_DESTROY_WITH_PARENT, ++ GTK_MESSAGE_ERROR, ++ GTK_BUTTONS_CLOSE, ++ message ? message : _("Unspecified error")); ++ gtk_dialog_run(GTK_DIALOG(dialog)); ++ gtk_widget_destroy(dialog); ++} ++ ++static void ++ovirt_foreign_menu_iso_name_changed(OvirtForeignMenu *foreign_menu, ++ GAsyncResult *result, ++ RemoteViewerISOListDialog *self) ++{ ++ RemoteViewerISOListDialogPrivate *priv = self->priv; ++ GtkTreeModel *model = GTK_TREE_MODEL(priv->list_store); ++ gchar *current_iso; ++ GtkTreeIter iter; ++ gchar *name; ++ gboolean active, match = FALSE; ++ GError *error = NULL; ++ ++ /* In the case of error, don't return early, because it is necessary to ++ * change the ISO back to the original, avoiding a possible inconsistency. ++ */ ++ if (!ovirt_foreign_menu_set_current_iso_name_finish(foreign_menu, result, &error)) { ++ remote_viewer_iso_list_dialog_show_error(self, error ? error->message : _("Failed to change CD")); ++ g_clear_error(&error); ++ } ++ ++ if (!gtk_tree_model_get_iter_first(model, &iter)) ++ return; ++ ++ current_iso = ovirt_foreign_menu_get_current_iso_name(foreign_menu); ++ ++ do { ++ gtk_tree_model_get(model, &iter, ++ ISO_IS_ACTIVE, &active, ++ ISO_NAME, &name, -1); ++ match = (g_strcmp0(current_iso, name) == 0); ++ ++ /* iso is not active anymore */ ++ if (active && !match) { ++ gtk_list_store_set(priv->list_store, &iter, ++ ISO_IS_ACTIVE, FALSE, ++ FONT_WEIGHT, PANGO_WEIGHT_NORMAL, -1); ++ } else if (match) { ++ gtk_list_store_set(priv->list_store, &iter, ++ ISO_IS_ACTIVE, TRUE, ++ FONT_WEIGHT, PANGO_WEIGHT_BOLD, -1); ++ } ++ ++ g_free(name); ++ } while (gtk_tree_model_iter_next(model, &iter)); ++ ++ gtk_dialog_set_response_sensitive(GTK_DIALOG(self), GTK_RESPONSE_NONE, TRUE); ++ gtk_widget_set_sensitive(priv->tree_view, TRUE); ++ g_free(current_iso); ++} ++ ++GtkWidget * ++remote_viewer_iso_list_dialog_new(GtkWindow *parent, GObject *foreign_menu) ++{ ++ GtkWidget *dialog; ++ RemoteViewerISOListDialog *self; ++ ++ g_return_val_if_fail(foreign_menu != NULL, NULL); ++ ++ dialog = g_object_new(REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG, ++ "title", _("Change CD"), ++ "transient-for", parent, ++ "border-width", 18, ++ "default-width", 400, ++ "default-height", 300, ++ "foreign-menu", foreign_menu, ++ NULL); ++ ++ self = REMOTE_VIEWER_ISO_LIST_DIALOG(dialog); ++ remote_viewer_iso_list_dialog_refresh_iso_list(self); ++ return dialog; ++} +diff --git a/src/remote-viewer-iso-list-dialog.h b/src/remote-viewer-iso-list-dialog.h +new file mode 100644 +index 0000000..480777c +--- /dev/null ++++ b/src/remote-viewer-iso-list-dialog.h +@@ -0,0 +1,58 @@ ++/* ++ * Virt Viewer: A virtual machine console viewer ++ * ++ * Copyright (C) 2017 Red Hat, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#ifndef __REMOTE_VIEWER_ISO_LIST_DIALOG_H__ ++#define __REMOTE_VIEWER_ISO_LIST_DIALOG_H__ ++ ++#include ++ ++G_BEGIN_DECLS ++ ++#define REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG remote_viewer_iso_list_dialog_get_type() ++ ++#define REMOTE_VIEWER_ISO_LIST_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG, RemoteViewerISOListDialog)) ++#define REMOTE_VIEWER_ISO_LIST_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG, RemoteViewerISOListDialogClass)) ++#define REMOTE_VIEWER_IS_ISO_LIST_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG)) ++#define REMOTE_VIEWER_IS_ISO_LIST_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG)) ++#define REMOTE_VIEWER_ISO_LIST_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), REMOTE_VIEWER_TYPE_ISO_LIST_DIALOG, RemoteViewerISOListDialogClass)) ++ ++typedef struct _RemoteViewerISOListDialog RemoteViewerISOListDialog; ++typedef struct _RemoteViewerISOListDialogClass RemoteViewerISOListDialogClass; ++typedef struct _RemoteViewerISOListDialogPrivate RemoteViewerISOListDialogPrivate; ++ ++struct _RemoteViewerISOListDialog ++{ ++ GtkDialog parent; ++ ++ RemoteViewerISOListDialogPrivate *priv; ++}; ++ ++struct _RemoteViewerISOListDialogClass ++{ ++ GtkDialogClass parent_class; ++}; ++ ++GType remote_viewer_iso_list_dialog_get_type(void) G_GNUC_CONST; ++ ++GtkWidget *remote_viewer_iso_list_dialog_new(GtkWindow *parent, GObject *foreign_menu); ++ ++G_END_DECLS ++ ++#endif /* __REMOTE_VIEWER_ISO_LIST_DIALOG_H__ */ +diff --git a/src/resources/ui/remote-viewer-iso-list.ui b/src/resources/ui/remote-viewer-iso-list.ui +new file mode 100644 +index 0000000..ab1bdc4 +--- /dev/null ++++ b/src/resources/ui/remote-viewer-iso-list.ui +@@ -0,0 +1,158 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ False ++ ++ ++ True ++ False ++ vertical ++ 6 ++ ++ ++ True ++ False ++ Loading... ++ 1 ++ ++ ++ ++ ++ ++ True ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ True ++ ++ ++ False ++ True ++ 1 ++ ++ ++ ++ ++ True ++ False ++ ++ ++ True ++ True ++ 2 ++ ++ ++ ++ ++ status ++ ++ ++ ++ ++ True ++ False ++ vertical ++ 6 ++ ++ ++ True ++ False ++ Select ISO ++ 0 ++ ++ ++ ++ ++ ++ False ++ True ++ 0 ++ ++ ++ ++ ++ True ++ False ++ 6 ++ ++ ++ True ++ True ++ in ++ ++ ++ True ++ True ++ liststore ++ False ++ True ++ 1 ++ horizontal ++ ++ ++ ++ ++ ++ ++ autosize ++ Selected ++ ++ ++ ++ ++ ++ 0 ++ ++ ++ ++ ++ ++ ++ Name ++ True ++ ++ ++ ++ 1 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ True ++ 1 ++ ++ ++ ++ ++ iso-list ++ 1 ++ ++ ++ ++ +diff --git a/src/resources/virt-viewer.gresource.xml b/src/resources/virt-viewer.gresource.xml +index f9b4a9f..334fa47 100644 +--- a/src/resources/virt-viewer.gresource.xml ++++ b/src/resources/virt-viewer.gresource.xml +@@ -2,6 +2,7 @@ + + + ui/remote-viewer-connect.ui ++ ui/remote-viewer-iso-list.ui + ui/virt-viewer-about.ui + ui/virt-viewer-auth.ui + ui/virt-viewer-guest-details.ui +-- +2.12.0 + diff --git a/SOURCES/0010-Run-ISO-dialog-when-Change-CD-menu-is-activated.patch b/SOURCES/0010-Run-ISO-dialog-when-Change-CD-menu-is-activated.patch new file mode 100644 index 0000000..f95c1d3 --- /dev/null +++ b/SOURCES/0010-Run-ISO-dialog-when-Change-CD-menu-is-activated.patch @@ -0,0 +1,442 @@ +From 00f9ae545ec7b885c666b6066d40f4c336b4643d Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Tue, 19 Jul 2016 14:31:45 -0300 +Subject: [PATCH 10/26] Run ISO dialog when 'Change CD' menu is activated + +Also moves 'Change CD' menu item from the toplevel menu to a subitem +under 'File' toplevel menu. + +In order to avoid object interdependency, it is necessary to make the +ovirt foreign-menu pointer from RemoteViewer, accessible via property, +so it can be passed to the dialog as an opaque GObject. + +Finally, with this commit, we clean up ovirt foreign menu code, which +only deals with data, leaving the UI bits to be handled properly in the +new ISO list dialog. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/ovirt-foreign-menu.c | 99 -------------------------------- + src/remote-viewer.c | 124 ++++++++++++++-------------------------- + src/resources/ui/virt-viewer.ui | 19 +++--- + src/virt-viewer-window.c | 37 ++++++++++++ + 4 files changed, 90 insertions(+), 189 deletions(-) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index ef3ddd9..2939ae5 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -350,22 +350,6 @@ ovirt_foreign_menu_fetch_iso_names_finish(OvirtForeignMenu *foreign_menu, + } + + +-static void +-ovirt_foreign_menu_activate_item_cb(GtkMenuItem *menuitem, gpointer user_data); +- +- +-static void +-menu_item_set_active_no_signal(GtkMenuItem *menuitem, +- gboolean active, +- GCallback callback, +- gpointer user_data) +-{ +- g_signal_handlers_block_by_func(menuitem, callback, user_data); +- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), active); +- g_signal_handlers_unblock_by_func(menuitem, callback, user_data); +-} +- +- + static void iso_name_set_cb(GObject *source_object, + GAsyncResult *result, + gpointer user_data) +@@ -447,88 +431,6 @@ gboolean ovirt_foreign_menu_set_current_iso_name_finish(OvirtForeignMenu *foreig + } + + +-static void +-ovirt_foreign_menu_iso_name_changed(GObject *source_object, +- GAsyncResult *result, +- gpointer user_data G_GNUC_UNUSED) +-{ +- OvirtForeignMenu *foreign_menu = OVIRT_FOREIGN_MENU(source_object); +- GError *error = NULL; +- +- if (!ovirt_foreign_menu_set_current_iso_name_finish(foreign_menu, result, &error)) { +- g_warning(error ? error->message : "Failed to change CD"); +- g_clear_error(&error); +- return; +- } +- +- g_object_notify(G_OBJECT(foreign_menu), "file"); +-} +- +- +-static void +-ovirt_foreign_menu_activate_item_cb(GtkMenuItem *menuitem, gpointer user_data) +-{ +- OvirtForeignMenu *foreign_menu; +- const char *iso_name = NULL; +- gboolean checked; +- +- checked = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)); +- foreign_menu = OVIRT_FOREIGN_MENU(user_data); +- g_return_if_fail(foreign_menu->priv->cdrom != NULL); +- g_return_if_fail(foreign_menu->priv->next_iso_name == NULL); +- +- g_debug("'%s' clicked", gtk_menu_item_get_label(menuitem)); +- +- /* We only want to move the check mark for the currently selected ISO +- * when ovirt_cdrom_update_async() is successful, so for now we move +- * the check mark back to where it was before +- */ +- menu_item_set_active_no_signal(menuitem, !checked, +- (GCallback)ovirt_foreign_menu_activate_item_cb, +- foreign_menu); +- +- if (checked) { +- iso_name = gtk_menu_item_get_label(menuitem); +- } +- ovirt_foreign_menu_set_current_iso_name_async(foreign_menu, iso_name, NULL, +- ovirt_foreign_menu_iso_name_changed, +- menuitem); +-} +- +- +-GtkWidget *ovirt_foreign_menu_get_gtk_menu(OvirtForeignMenu *foreign_menu) +-{ +- GtkWidget *gtk_menu; +- GList *it; +- char *current_iso; +- +- if (foreign_menu->priv->iso_names == NULL) { +- g_debug("ISO list is empty, no menu to show"); +- return NULL; +- } +- g_debug("Creating GtkMenu for foreign menu"); +- current_iso = ovirt_foreign_menu_get_current_iso_name(foreign_menu); +- gtk_menu = gtk_menu_new(); +- for (it = foreign_menu->priv->iso_names; it != NULL; it = it->next) { +- GtkWidget *menuitem; +- +- menuitem = gtk_check_menu_item_new_with_label((char *)it->data); +- if (g_strcmp0((char *)it->data, current_iso) == 0) { +- g_warn_if_fail(g_strcmp0(current_iso, foreign_menu->priv->current_iso_name) == 0); +- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), +- TRUE); +- } +- g_signal_connect(menuitem, "activate", +- G_CALLBACK(ovirt_foreign_menu_activate_item_cb), +- foreign_menu); +- gtk_menu_shell_append(GTK_MENU_SHELL(gtk_menu), menuitem); +- } +- g_free(current_iso); +- +- return gtk_menu; +-} +- +- + static void ovirt_foreign_menu_set_files(OvirtForeignMenu *menu, + const GList *files) + { +@@ -594,7 +496,6 @@ static void cdrom_file_refreshed_cb(GObject *source_object, + "file", &menu->priv->current_iso_name, + NULL); + } +- g_object_notify(G_OBJECT(menu), "file"); + if (menu->priv->cdrom != NULL) { + ovirt_foreign_menu_next_async_step(menu, task, STATE_CDROM_FILE); + } else { +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index c84a35b..d04dbb5 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -67,12 +67,18 @@ G_DEFINE_TYPE (RemoteViewer, remote_viewer, VIRT_VIEWER_TYPE_APP) + #define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), REMOTE_VIEWER_TYPE, RemoteViewerPrivate)) + ++enum RemoteViewerProperties { ++ PROP_0, ++#ifdef HAVE_OVIRT ++ PROP_OVIRT_FOREIGN_MENU, ++#endif ++}; ++ + #ifdef HAVE_OVIRT + static OvirtVm * choose_vm(GtkWindow *main_window, + char **vm_name, + OvirtCollection *vms, + GError **error); +-static gboolean remote_viewer_refresh_ovirt_foreign_menu(gpointer user_data); + #endif + + static gboolean remote_viewer_start(VirtViewerApp *self, GError **error); +@@ -214,6 +220,25 @@ end: + } + + static void ++remote_viewer_get_property(GObject *object, guint property_id, ++ GValue *value, GParamSpec *pspec) ++{ ++ RemoteViewer *self = REMOTE_VIEWER(object); ++ RemoteViewerPrivate *priv = self->priv; ++ ++ switch (property_id) { ++#ifdef HAVE_OVIRT ++ case PROP_OVIRT_FOREIGN_MENU: ++ g_value_set_object(value, priv->ovirt_foreign_menu); ++ break; ++#endif ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++ } ++} ++ ++static void + remote_viewer_class_init (RemoteViewerClass *klass) + { + GObjectClass *object_class = G_OBJECT_CLASS (klass); +@@ -223,6 +248,7 @@ remote_viewer_class_init (RemoteViewerClass *klass) + + g_type_class_add_private (klass, sizeof (RemoteViewerPrivate)); + ++ object_class->get_property = remote_viewer_get_property; + object_class->dispose = remote_viewer_dispose; + + g_app_class->local_command_line = remote_viewer_local_command_line; +@@ -236,6 +262,16 @@ remote_viewer_class_init (RemoteViewerClass *klass) + #else + (void) gtk_app_class; + #endif ++ ++#ifdef HAVE_OVIRT ++ g_object_class_install_property(object_class, ++ PROP_OVIRT_FOREIGN_MENU, ++ g_param_spec_object("ovirt-foreign-menu", ++ "oVirt Foreign Menu", ++ "Object which is used as interface to oVirt", ++ OVIRT_TYPE_FOREIGN_MENU, ++ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); ++#endif + } + + static void +@@ -735,33 +771,11 @@ authenticate_cb(RestProxy *proxy, G_GNUC_UNUSED RestProxyAuth *auth, + static void + ovirt_foreign_menu_update(GtkApplication *gtkapp, GtkWindow *gtkwin, G_GNUC_UNUSED gpointer data) + { +- RemoteViewer *app = REMOTE_VIEWER(gtkapp); ++ RemoteViewer *self = REMOTE_VIEWER(gtkapp); + VirtViewerWindow *win = g_object_get_data(G_OBJECT(gtkwin), "virt-viewer-window"); +- GtkWidget *menu = g_object_get_data(G_OBJECT(win), "foreign-menu"); +- GtkWidget *submenu; +- +- if (app->priv->ovirt_foreign_menu == NULL) { +- /* nothing to do */ +- return; +- } +- +- submenu = ovirt_foreign_menu_get_gtk_menu(app->priv->ovirt_foreign_menu); +- if (submenu == NULL) { +- /* No items to show, no point in showing the menu */ +- if (menu != NULL) +- gtk_widget_set_visible(menu, FALSE); +- g_object_set_data(G_OBJECT(win), "foreign-menu", NULL); +- return; +- } +- +- if (menu == NULL) { +- menu = GTK_WIDGET(gtk_builder_get_object(virt_viewer_window_get_builder(win), "menu-change-cd")); +- g_object_set_data(G_OBJECT(win), "foreign-menu", menu); +- gtk_widget_set_visible(menu, TRUE); +- } +- +- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu); +- gtk_widget_show_all(menu); ++ GtkBuilder *builder = virt_viewer_window_get_builder(win); ++ GtkWidget *menu = GTK_WIDGET(gtk_builder_get_object(builder, "menu-change-cd")); ++ gtk_widget_set_visible(menu, self->priv->ovirt_foreign_menu != NULL); + } + + static void +@@ -784,52 +798,6 @@ ovirt_foreign_menu_updated(RemoteViewer *self) + } + + static void +-ovirt_foreign_menu_fetch_iso_names_cb(GObject *source_object, +- GAsyncResult *result, +- gpointer user_data) +-{ +- OvirtForeignMenu *foreign_menu = OVIRT_FOREIGN_MENU(source_object); +- RemoteViewer *self = REMOTE_VIEWER(user_data); +- VirtViewerApp *app = VIRT_VIEWER_APP(user_data); +- GError *error = NULL; +- GList *iso_list; +- +- iso_list = ovirt_foreign_menu_fetch_iso_names_finish(foreign_menu, result, &error); +- +- if (!iso_list) { +- virt_viewer_app_simple_message_dialog(app, error ? error->message : _("Failed to fetch CD names")); +- g_clear_error(&error); +- return; +- } +- +- ovirt_foreign_menu_updated(self); +- g_timeout_add_seconds(300, remote_viewer_refresh_ovirt_foreign_menu, self); +-} +- +-static gboolean +-remote_viewer_refresh_ovirt_foreign_menu(gpointer user_data) +-{ +- VirtViewerApp *app = VIRT_VIEWER_APP(user_data); +- RemoteViewer *self = REMOTE_VIEWER(user_data); +- +- g_debug("Refreshing foreign menu iso list"); +- ovirt_foreign_menu_fetch_iso_names_async(self->priv->ovirt_foreign_menu, +- NULL, +- ovirt_foreign_menu_fetch_iso_names_cb, +- app); +- return G_SOURCE_REMOVE; +-} +- +-static void +-ovirt_foreign_menu_changed(OvirtForeignMenu *foreign_menu G_GNUC_UNUSED, +- GParamSpec *pspec G_GNUC_UNUSED, +- VirtViewerApp *app) +-{ +- ovirt_foreign_menu_updated(REMOTE_VIEWER(app)); +-} +- +- +-static void + virt_viewer_app_set_ovirt_foreign_menu(VirtViewerApp *app, + OvirtForeignMenu *foreign_menu) + { +@@ -838,17 +806,11 @@ virt_viewer_app_set_ovirt_foreign_menu(VirtViewerApp *app, + g_return_if_fail(OVIRT_IS_FOREIGN_MENU(foreign_menu)); + + self = REMOTE_VIEWER(app); +- if (self->priv->ovirt_foreign_menu != NULL) { +- g_object_unref(G_OBJECT(self->priv->ovirt_foreign_menu)); +- } ++ g_clear_object(&self->priv->ovirt_foreign_menu); + self->priv->ovirt_foreign_menu = foreign_menu; +- g_signal_connect(G_OBJECT(foreign_menu), "notify::file", +- (GCallback)ovirt_foreign_menu_changed, app); +- + g_signal_connect(G_OBJECT(app), "window-added", + (GCallback)ovirt_foreign_menu_update, NULL); +- +- remote_viewer_refresh_ovirt_foreign_menu(self); ++ ovirt_foreign_menu_updated(self); + } + + static gboolean +diff --git a/src/resources/ui/virt-viewer.ui b/src/resources/ui/virt-viewer.ui +index 6e3c5ad..e9609ec 100644 +--- a/src/resources/ui/virt-viewer.ui ++++ b/src/resources/ui/virt-viewer.ui +@@ -1,6 +1,7 @@ + ++ + +- ++ + + + False +@@ -73,6 +74,14 @@ + + + ++ ++ False ++ _Change CD ++ True ++ ++ ++ ++ + + True + False +@@ -247,14 +256,6 @@ + + + +- +- +- False +- False +- _Change CD +- True +- +- + + + False +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 99fd102..8eda12e 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -43,6 +43,8 @@ + #include "virt-viewer-util.h" + #include "virt-viewer-timed-revealer.h" + ++#include "remote-viewer-iso-list-dialog.h" ++ + #define ZOOM_STEP 10 + + /* Signal handlers for main window (move in a VirtViewerMainWindow?) */ +@@ -62,6 +64,7 @@ void virt_viewer_window_menu_file_smartcard_insert(GtkWidget *menu, VirtViewerWi + void virt_viewer_window_menu_file_smartcard_remove(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_view_release_cursor(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_preferences_cb(GtkWidget *menu, VirtViewerWindow *self); ++void virt_viewer_window_menu_change_cd_activate(GtkWidget *menu, VirtViewerWindow *self); + + + /* Internal methods */ +@@ -1056,6 +1059,40 @@ virt_viewer_window_menu_help_about(GtkWidget *menu G_GNUC_UNUSED, + g_object_unref(G_OBJECT(about)); + } + ++static void ++iso_dialog_response(GtkDialog *dialog, ++ gint response_id, ++ gpointer user_data G_GNUC_UNUSED) ++{ ++ if (response_id == GTK_RESPONSE_NONE) ++ return; ++ ++ gtk_widget_destroy(GTK_WIDGET(dialog)); ++} ++ ++void ++virt_viewer_window_menu_change_cd_activate(GtkWidget *menu G_GNUC_UNUSED, ++ VirtViewerWindow *self) ++{ ++ VirtViewerWindowPrivate *priv = self->priv; ++ GtkWidget *dialog; ++ GObject *foreign_menu; ++ ++ g_object_get(G_OBJECT(priv->app), "ovirt-foreign-menu", &foreign_menu, NULL); ++ dialog = remote_viewer_iso_list_dialog_new(GTK_WINDOW(priv->window), foreign_menu); ++ g_object_unref(foreign_menu); ++ ++ if (!dialog) ++ dialog = gtk_message_dialog_new(GTK_WINDOW(priv->window), ++ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, ++ GTK_MESSAGE_ERROR, ++ GTK_BUTTONS_CLOSE, ++ _("Unable to connnect to oVirt")); ++ ++ g_signal_connect(dialog, "response", G_CALLBACK(iso_dialog_response), NULL); ++ gtk_widget_show_all(dialog); ++ gtk_dialog_run(GTK_DIALOG(dialog)); ++} + + static void + virt_viewer_window_toolbar_setup(VirtViewerWindow *self) +-- +2.12.0 + diff --git a/SOURCES/0011-README-Update-links.patch b/SOURCES/0011-README-Update-links.patch new file mode 100644 index 0000000..b46df22 --- /dev/null +++ b/SOURCES/0011-README-Update-links.patch @@ -0,0 +1,44 @@ +From 2d7f5af36b423053f10d91e03245ca42804e27c7 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Thu, 19 Jan 2017 17:36:46 +0100 +Subject: [PATCH 11/26] README: Update links +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Acked-by: Fabiano Fidêncio +--- + README | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/README b/README +index e9fe5b9..ea1c633 100644 +--- a/README ++++ b/README +@@ -14,12 +14,12 @@ the last release that supported GTK2. + Virt Viewer uses the GTK-VNC (>= 0.4.0) widget to provide a + display of the VNC protocol, which is available from + +- http://gtk-vnc.sourceforge.net/ ++ https://wiki.gnome.org/Projects/gtk-vnc + +-Virt Viewer uses the SPICE-GTK (>= 0.30) widget to provide a ++Virt Viewer uses the SPICE-GTK (>= 0.33) widget to provide a + display of the SPICE protocol, which is available from: + +- http://www.spice-space.org/download.html ++ https://www.spice-space.org/download.html + + Use of either SPICE-GTK or GTK-VNC can be disabled at time + of configure, with --without-gtk-vnc or --without-spice-gtk +@@ -37,6 +37,6 @@ found on the Virt Manager website: + + Feedback should be directed to the mailing list at + +- http://virt-manager.org/mailinglist.html ++ http://www.redhat.com/mailman/listinfo/virt-tools-list + + -- End +-- +2.12.0 + diff --git a/SOURCES/0012-README-switch-to-Markdown-syntax.patch b/SOURCES/0012-README-switch-to-Markdown-syntax.patch new file mode 100644 index 0000000..4a3e840 --- /dev/null +++ b/SOURCES/0012-README-switch-to-Markdown-syntax.patch @@ -0,0 +1,49 @@ +From 260b1283dc3b6473b19941d466779244f32ddcf1 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Thu, 19 Jan 2017 17:36:47 +0100 +Subject: [PATCH 12/26] README: switch to Markdown syntax +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +To render nicely on the project git page: + https://pagure.io/virt-viewer + +Acked-by: Fabiano Fidêncio +--- + README => README.md | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + rename README => README.md (92%) + +diff --git a/README b/README.md +similarity index 92% +rename from README +rename to README.md +index ea1c633..ceb01a9 100644 +--- a/README ++++ b/README.md +@@ -1,5 +1,4 @@ +- Virt Viewer +- =========== ++# Virt Viewer + + Virt Viewer provides a graphical viewer for the guest OS + display. At this time is supports guest OS using the VNC +@@ -22,7 +21,7 @@ display of the SPICE protocol, which is available from: + https://www.spice-space.org/download.html + + Use of either SPICE-GTK or GTK-VNC can be disabled at time +-of configure, with --without-gtk-vnc or --without-spice-gtk ++of configure, with `--without-gtk-vnc` or `--without-spice-gtk` + respectively. + + Virt Viewer uses libvirt to lookup information about the +@@ -38,5 +37,3 @@ found on the Virt Manager website: + Feedback should be directed to the mailing list at + + http://www.redhat.com/mailman/listinfo/virt-tools-list +- +--- End +-- +2.12.0 + diff --git a/SOURCES/0013-Update-for-README.md.patch b/SOURCES/0013-Update-for-README.md.patch new file mode 100644 index 0000000..080f7da --- /dev/null +++ b/SOURCES/0013-Update-for-README.md.patch @@ -0,0 +1,58 @@ +From 506484d71bb8d8b8d68b6895364cb183fe2b24ee Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Tue, 7 Feb 2017 16:31:42 +0100 +Subject: [PATCH 13/26] Update for README.md + +It is needed to use the 'foreign' init option otherwise autotools +requires README + +Fix make distcheck and spec file generation + +Acked-by: Christophe Fergeau +--- + Makefile.am | 1 + + configure.ac | 2 +- + virt-viewer.spec.in | 2 +- + 3 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 6c7a3f9..d33367a 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -18,6 +18,7 @@ EXTRA_DIST = \ + build-aux/useless-if-before-free \ + build-aux/vc-list-files \ + AUTHORS.in \ ++ README.md \ + $(NULL) + + DISTCLEAN_FILES = \ +diff --git a/configure.ac b/configure.ac +index 81cb576..3d03687 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5,7 +5,7 @@ AC_CONFIG_MACRO_DIR([m4]) + AC_CONFIG_AUX_DIR([build-aux]) + AC_CONFIG_HEADERS([config.h]) + dnl Make automake keep quiet about wildcards & other GNUmake-isms +-AM_INIT_AUTOMAKE([subdir-objects -Wno-portability]) ++AM_INIT_AUTOMAKE([subdir-objects -Wno-portability foreign]) + AC_CANONICAL_HOST + + # Use the silent-rules feature when possible. +diff --git a/virt-viewer.spec.in b/virt-viewer.spec.in +index 7e972c4..44ef92e 100644 +--- a/virt-viewer.spec.in ++++ b/virt-viewer.spec.in +@@ -119,7 +119,7 @@ fi + + %files -f %{name}.lang + %defattr(-,root,root,-) +-%doc README COPYING AUTHORS ChangeLog NEWS ++%doc README.md COPYING AUTHORS ChangeLog NEWS + %{_bindir}/%{name} + %{_bindir}/remote-viewer + %{_datadir}/icons/hicolor/*/apps/* +-- +2.12.0 + diff --git a/SOURCES/0014-iso-dialog-Do-not-use-string-directly.patch b/SOURCES/0014-iso-dialog-Do-not-use-string-directly.patch new file mode 100644 index 0000000..260afff --- /dev/null +++ b/SOURCES/0014-iso-dialog-Do-not-use-string-directly.patch @@ -0,0 +1,28 @@ +From 4e3186bcf1c872f4b2c2bbb4867a4f3847883408 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Mon, 6 Feb 2017 13:02:30 +0100 +Subject: [PATCH 14/26] iso-dialog: Do not use string directly + +Fixes -Werror=format-security used when creating the rpm + +Acked-by: Eduardo Lima (Etrunko) +--- + src/remote-viewer-iso-list-dialog.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/remote-viewer-iso-list-dialog.c b/src/remote-viewer-iso-list-dialog.c +index f23ddb2..2ab5435 100644 +--- a/src/remote-viewer-iso-list-dialog.c ++++ b/src/remote-viewer-iso-list-dialog.c +@@ -286,7 +286,7 @@ remote_viewer_iso_list_dialog_show_error(RemoteViewerISOListDialog *self, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, +- message ? message : _("Unspecified error")); ++ "%s", message ? message : _("Unspecified error")); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + } +-- +2.12.0 + diff --git a/SOURCES/0015-Do-not-print-password-in-the-debug-log.patch b/SOURCES/0015-Do-not-print-password-in-the-debug-log.patch new file mode 100644 index 0000000..0fd9287 --- /dev/null +++ b/SOURCES/0015-Do-not-print-password-in-the-debug-log.patch @@ -0,0 +1,46 @@ +From 1f89726e848c174d1be4b41edaf0bcdaab0077ef Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Tue, 17 Jan 2017 18:42:51 +0100 +Subject: [PATCH 15/26] Do not print password in the debug log + +Do not show a length since it is sensitive info as well. + +Resolves: rhbz#1410030 + +Acked-by: Christophe Fergeau +--- + src/virt-viewer.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 1121146..1f99552 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -928,6 +928,11 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + } + + for (i = 0 ; i < ncred ; i++) { ++ const char *cred_type_to_str[] = { ++ [VIR_CRED_USERNAME] = "Identity to act as", ++ [VIR_CRED_AUTHNAME] = "Identify to authorize as", ++ [VIR_CRED_PASSPHRASE] = "Passphrase secret", ++ }; + switch (cred[i].type) { + case VIR_CRED_AUTHNAME: + case VIR_CRED_USERNAME: +@@ -936,7 +941,11 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + cred[i].resultlen = strlen(cred[i].result); + else + cred[i].resultlen = 0; +- g_debug("Got '%s' %d %d", cred[i].result, cred[i].resultlen, cred[i].type); ++ g_debug("Got %s '%s' %d", ++ cred_type_to_str[cred[i].type], ++ /* hide password */ ++ (cred[i].type == VIR_CRED_PASSPHRASE) ? "*****" : cred[i].result, ++ cred[i].type); + break; + } + } +-- +2.12.0 + diff --git a/SOURCES/0016-iso-dialog-Avoid-crash-when-closing-dialog-early.patch b/SOURCES/0016-iso-dialog-Avoid-crash-when-closing-dialog-early.patch new file mode 100644 index 0000000..0883e1a --- /dev/null +++ b/SOURCES/0016-iso-dialog-Avoid-crash-when-closing-dialog-early.patch @@ -0,0 +1,142 @@ +From eb6755e1ca400249d54582a7a763b3114e143e23 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Wed, 25 Jan 2017 17:41:20 -0200 +Subject: [PATCH 16/26] iso-dialog: Avoid crash when closing dialog early + +We must take into account that users can close the dialog at anytime, +even during an operation of fetch or set ISO has not been finished. This +will cause the callbacks for those operations to be invoked with an +invalid object, crashing the application. + +To fix this issue we need to pass a GCancellable to the asynchronous +operations, so they can be cancelled if the dialog happens to get closed +before they complete. + +NOTE: This patch triggers a deadlock in libgovirt when the dialog is +closed before the operation completes. Bug reported in +https://bugzilla.gnome.org/show_bug.cgi?id=777808. We will need to bump +libgovirt dependency whenever it has a new release. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/remote-viewer-iso-list-dialog.c | 42 ++++++++++++++++++++++++++++++------- + 1 file changed, 34 insertions(+), 8 deletions(-) + +diff --git a/src/remote-viewer-iso-list-dialog.c b/src/remote-viewer-iso-list-dialog.c +index 2ab5435..745768a 100644 +--- a/src/remote-viewer-iso-list-dialog.c ++++ b/src/remote-viewer-iso-list-dialog.c +@@ -42,6 +42,7 @@ struct _RemoteViewerISOListDialogPrivate + GtkWidget *stack; + GtkWidget *tree_view; + OvirtForeignMenu *foreign_menu; ++ GCancellable *cancellable; + }; + + enum RemoteViewerISOListDialogModel +@@ -66,6 +67,8 @@ remote_viewer_iso_list_dialog_dispose(GObject *object) + RemoteViewerISOListDialog *self = REMOTE_VIEWER_ISO_LIST_DIALOG(object); + RemoteViewerISOListDialogPrivate *priv = self->priv; + ++ g_clear_object(&priv->cancellable); ++ + if (priv->foreign_menu) { + g_signal_handlers_disconnect_by_data(priv->foreign_menu, object); + g_clear_object(&priv->foreign_menu); +@@ -157,17 +160,24 @@ fetch_iso_names_cb(OvirtForeignMenu *foreign_menu, + const gchar *msg = error ? error->message : _("Failed to fetch CD names"); + gchar *markup = g_strdup_printf("%s", msg); + ++ g_debug("Error fetching ISO names: %s", msg); ++ if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ goto end; ++ + gtk_label_set_markup(GTK_LABEL(priv->status), markup); + gtk_spinner_stop(GTK_SPINNER(priv->spinner)); + remote_viewer_iso_list_dialog_show_error(self, msg); + gtk_dialog_set_response_sensitive(GTK_DIALOG(self), GTK_RESPONSE_NONE, TRUE); + g_free(markup); +- g_clear_error(&error); +- return; ++ goto end; + } + ++ g_clear_object(&priv->cancellable); + g_list_foreach(iso_list, (GFunc) remote_viewer_iso_list_dialog_foreach, self); + remote_viewer_iso_list_dialog_show_files(self); ++ ++end: ++ g_clear_error(&error); + } + + +@@ -177,7 +187,10 @@ remote_viewer_iso_list_dialog_refresh_iso_list(RemoteViewerISOListDialog *self) + RemoteViewerISOListDialogPrivate *priv = self->priv; + + gtk_list_store_clear(priv->list_store); +- ovirt_foreign_menu_fetch_iso_names_async(priv->foreign_menu, NULL, ++ ++ priv->cancellable = g_cancellable_new(); ++ ovirt_foreign_menu_fetch_iso_names_async(priv->foreign_menu, ++ priv->cancellable, + (GAsyncReadyCallback) fetch_iso_names_cb, + self); + } +@@ -190,8 +203,10 @@ remote_viewer_iso_list_dialog_response(GtkDialog *dialog, + RemoteViewerISOListDialog *self = REMOTE_VIEWER_ISO_LIST_DIALOG(dialog); + RemoteViewerISOListDialogPrivate *priv = self->priv; + +- if (response_id != GTK_RESPONSE_NONE) ++ if (response_id != GTK_RESPONSE_NONE) { ++ g_cancellable_cancel(priv->cancellable); + return; ++ } + + gtk_spinner_start(GTK_SPINNER(priv->spinner)); + gtk_label_set_markup(GTK_LABEL(priv->status), _("Loading...")); +@@ -223,7 +238,9 @@ remote_viewer_iso_list_dialog_toggled(GtkCellRendererToggle *cell_renderer G_GNU + gtk_dialog_set_response_sensitive(GTK_DIALOG(self), GTK_RESPONSE_NONE, FALSE); + gtk_widget_set_sensitive(priv->tree_view, FALSE); + +- ovirt_foreign_menu_set_current_iso_name_async(priv->foreign_menu, active ? NULL : name, NULL, ++ priv->cancellable = g_cancellable_new(); ++ ovirt_foreign_menu_set_current_iso_name_async(priv->foreign_menu, active ? NULL : name, ++ priv->cancellable, + (GAsyncReadyCallback)ovirt_foreign_menu_iso_name_changed, + self); + gtk_tree_path_free(tree_path); +@@ -308,12 +325,18 @@ ovirt_foreign_menu_iso_name_changed(OvirtForeignMenu *foreign_menu, + * change the ISO back to the original, avoiding a possible inconsistency. + */ + if (!ovirt_foreign_menu_set_current_iso_name_finish(foreign_menu, result, &error)) { +- remote_viewer_iso_list_dialog_show_error(self, error ? error->message : _("Failed to change CD")); +- g_clear_error(&error); ++ const gchar *msg = error ? error->message : _("Failed to change CD"); ++ g_debug("Error changing ISO: %s", msg); ++ ++ if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ goto end; ++ ++ remote_viewer_iso_list_dialog_show_error(self, msg); + } + ++ g_clear_object(&priv->cancellable); + if (!gtk_tree_model_get_iter_first(model, &iter)) +- return; ++ goto end; + + current_iso = ovirt_foreign_menu_get_current_iso_name(foreign_menu); + +@@ -340,6 +363,9 @@ ovirt_foreign_menu_iso_name_changed(OvirtForeignMenu *foreign_menu, + gtk_dialog_set_response_sensitive(GTK_DIALOG(self), GTK_RESPONSE_NONE, TRUE); + gtk_widget_set_sensitive(priv->tree_view, TRUE); + g_free(current_iso); ++ ++end: ++ g_clear_error(&error); + } + + GtkWidget * +-- +2.12.0 + diff --git a/SOURCES/0017-session-spice-Pass-hostname-to-authentication-dialog.patch b/SOURCES/0017-session-spice-Pass-hostname-to-authentication-dialog.patch new file mode 100644 index 0000000..353bcde --- /dev/null +++ b/SOURCES/0017-session-spice-Pass-hostname-to-authentication-dialog.patch @@ -0,0 +1,51 @@ +From af43e091e4eb48ba27dd76f84a84874e96658b3c Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 27 Jan 2017 17:48:11 -0200 +Subject: [PATCH 17/26] session-spice: Pass hostname to authentication dialog + +With this patch the dialog now shows the host we are connecting to. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/virt-viewer-session-spice.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index c3fce48..9b52ec0 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -691,6 +691,7 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel, + case SPICE_CHANNEL_ERROR_AUTH: + { + const GError *error = NULL; ++ gchar *host = NULL; + g_debug("main channel: auth failure (wrong username/password?)"); + + { +@@ -717,11 +718,13 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel, + user = g_strdup(g_get_user_name()); + } + ++ g_object_get(self->priv->session, "host", &host, NULL); + ret = virt_viewer_auth_collect_credentials(self->priv->main_window, + "SPICE", +- NULL, ++ host, + username_required ? &user : NULL, + &password); ++ g_free(host); + if (!ret) { + g_signal_emit_by_name(session, "session-cancelled"); + } else { +@@ -750,7 +753,7 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel, + g_warn_if_fail(proxy != NULL); + + ret = virt_viewer_auth_collect_credentials(self->priv->main_window, +- "proxy", NULL, ++ "proxy", spice_uri_get_hostname(proxy), + &user, &password); + if (!ret) { + g_signal_emit_by_name(session, "session-cancelled"); +-- +2.12.0 + diff --git a/SOURCES/0018-Show-errors-generated-by-connection-dialog.patch b/SOURCES/0018-Show-errors-generated-by-connection-dialog.patch new file mode 100644 index 0000000..0d747a1 --- /dev/null +++ b/SOURCES/0018-Show-errors-generated-by-connection-dialog.patch @@ -0,0 +1,32 @@ +From a1ca605ad8a4fd1aa76fff259080963f342e07c7 Mon Sep 17 00:00:00 2001 +From: Christophe de Dinechin +Date: Thu, 9 Feb 2017 13:00:19 +0100 +Subject: [PATCH 18/26] Show errors generated by connection dialog + +When running 'remote-viewer' without arguments, +and selecting a non-supported protocol, e.g. ssh://foo, +the generated error was silently swallowed by the retry loop. +This was introduced in 06b2c382468876a19600374bd59475e66d488af8. + +Signed-off-by: Christophe de Dinechin +--- + src/remote-viewer.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index d04dbb5..8c31532 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -1195,6 +1195,9 @@ cleanup: + type = NULL; + + if (!ret && priv->open_recent_dialog) { ++ if (error != NULL) { ++ virt_viewer_app_simple_message_dialog(app, _("Unable to connect: %s"), error->message); ++ } + g_clear_error(&error); + goto retry_dialog; + } +-- +2.12.0 + diff --git a/SOURCES/0019-man-Mention-that-ssh-agent-can-be-useful.patch b/SOURCES/0019-man-Mention-that-ssh-agent-can-be-useful.patch new file mode 100644 index 0000000..e764a06 --- /dev/null +++ b/SOURCES/0019-man-Mention-that-ssh-agent-can-be-useful.patch @@ -0,0 +1,37 @@ +From 276012ea375fb760b53f83308774010621dde1f4 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Thu, 1 Dec 2016 17:29:47 +0100 +Subject: [PATCH virt-viewer] man: Mention that ssh-agent can be useful +To: virt-tools-list@redhat.com + +When using a tunneled SPICE connection, the user will get a dozen +authentication prompts if they are not using ssh-agent. + +https://bugzilla.redhat.com/show_bug.cgi?id=1377283 +--- + man/virt-viewer.pod | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index bd953ed..ad3e298 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -179,6 +179,15 @@ To connect to a remote console using TLS + virt-viewer --connect xen://example.org/ demo + + To connect to a remote host using SSH, lookup the guest config and ++then make a tunnelled connection of the console ++ ++ virt-viewer --connect qemu+ssh://root@example.org/system demo ++ ++When using a SSH tunnel to connect to a SPICE console, it's recommended to ++have ssh-agent running to avoid getting multiple authentication prompts. ++ ++ ++To connect to a remote host using SSH, lookup the guest config and + then make a direct non-tunnelled connection of the console + + virt-viewer --direct --connect xen+ssh://root@example.org/ demo +-- +2.12.0 + diff --git a/SOURCES/0020-spice-Remove-unneeded-braces.patch b/SOURCES/0020-spice-Remove-unneeded-braces.patch new file mode 100644 index 0000000..797e8f4 --- /dev/null +++ b/SOURCES/0020-spice-Remove-unneeded-braces.patch @@ -0,0 +1,37 @@ +From 63940b3981b270e324249267118aa06ed3da1b65 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Fri, 17 Feb 2017 13:35:38 +0100 +Subject: [PATCH 20/26] spice: Remove unneeded braces + +Two statements in virt_viewer_session_spice_main_channel_event() are +wrapped in a { } block, but this is unneeded. + +Signed-off-by: Christophe Fergeau +--- + src/virt-viewer-session-spice.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index 9b52ec0..5f326aa 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -694,12 +694,10 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel, + gchar *host = NULL; + g_debug("main channel: auth failure (wrong username/password?)"); + +- { +- error = spice_channel_get_error(channel); +- username_required = g_error_matches(error, +- SPICE_CLIENT_ERROR, +- SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME); +- } ++ error = spice_channel_get_error(channel); ++ username_required = g_error_matches(error, ++ SPICE_CLIENT_ERROR, ++ SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME); + + if (self->priv->pass_try > 0) + g_signal_emit_by_name(session, "session-auth-refused", +-- +2.12.0 + diff --git a/SOURCES/0021-file-transfer-Fix-label-of-the-dialog.patch b/SOURCES/0021-file-transfer-Fix-label-of-the-dialog.patch new file mode 100644 index 0000000..7a49eae --- /dev/null +++ b/SOURCES/0021-file-transfer-Fix-label-of-the-dialog.patch @@ -0,0 +1,31 @@ +From 5d953fc30522de029597a247fdab59452dceabbf Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Thu, 2 Mar 2017 16:00:37 +0100 +Subject: [PATCH 21/26] file-transfer: Fix label of the dialog + +Display correct text and make it translatable + +Resolves: +https://bugs.freedesktop.org/show_bug.cgi?id=99980 + +Acked-by: Jonathon Jongsma +--- + src/resources/ui/virt-viewer-file-transfer-dialog.ui | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/resources/ui/virt-viewer-file-transfer-dialog.ui b/src/resources/ui/virt-viewer-file-transfer-dialog.ui +index 5e761c8..f71e174 100644 +--- a/src/resources/ui/virt-viewer-file-transfer-dialog.ui ++++ b/src/resources/ui/virt-viewer-file-transfer-dialog.ui +@@ -25,7 +25,7 @@ + + + +- gtk-cancel ++ _Cancel + True + True + True +-- +2.12.0 + diff --git a/SOURCES/0022-Fix-build-when-building-without-oVirt.patch b/SOURCES/0022-Fix-build-when-building-without-oVirt.patch new file mode 100644 index 0000000..1b6728a --- /dev/null +++ b/SOURCES/0022-Fix-build-when-building-without-oVirt.patch @@ -0,0 +1,42 @@ +From dae66b04aadfe7ec24b104ebd9bb48f82426205a Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Fri, 3 Mar 2017 15:37:01 +0100 +Subject: [PATCH 22/26] Fix build when building without oVirt + +As remote_viewer_iso_list_dialog_new() is defined on +remote-viewer-iso-list-dialog.h which is only build with oVirt +integration. + + > undefined reference to `remote_viewer_iso_list_dialog_new' + +Note that the callback virt_viewer_window_menu_change_cd_activate() is +only visible if oVirt is built in. + +Signed-off-by: Victor Toso +--- + src/virt-viewer-window.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 8eda12e..9a0932a 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -1074,6 +1074,7 @@ void + virt_viewer_window_menu_change_cd_activate(GtkWidget *menu G_GNUC_UNUSED, + VirtViewerWindow *self) + { ++#if HAVE_OVIRT + VirtViewerWindowPrivate *priv = self->priv; + GtkWidget *dialog; + GObject *foreign_menu; +@@ -1092,6 +1093,7 @@ virt_viewer_window_menu_change_cd_activate(GtkWidget *menu G_GNUC_UNUSED, + g_signal_connect(dialog, "response", G_CALLBACK(iso_dialog_response), NULL); + gtk_widget_show_all(dialog); + gtk_dialog_run(GTK_DIALOG(dialog)); ++#endif + } + + static void +-- +2.12.0 + diff --git a/SOURCES/0023-Avoid-harmless-warnings-due-lack-of-oVirt-on-build.patch b/SOURCES/0023-Avoid-harmless-warnings-due-lack-of-oVirt-on-build.patch new file mode 100644 index 0000000..5cd4e74 --- /dev/null +++ b/SOURCES/0023-Avoid-harmless-warnings-due-lack-of-oVirt-on-build.patch @@ -0,0 +1,58 @@ +From 13689374c286f9ff719b54ce9e24767044118f66 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Fri, 3 Mar 2017 16:01:32 +0100 +Subject: [PATCH 23/26] Avoid harmless warnings due lack of oVirt on build + +> remote-viewer.c: In function 'remote_viewer_get_property': +> remote-viewer.c:227:26: warning: unused variable 'priv' [-Wunused-variable] +> RemoteViewerPrivate *priv = self->priv; +> ^~~~ +> remote-viewer.c:224:36: warning: unused parameter 'value' [-Wunused-parameter] +> GValue *value, GParamSpec *pspec) +> ^~~~~ +> virt-viewer-window.c: In function 'virt_viewer_window_menu_change_cd_activate': +> virt-viewer-window.c:1077:62: warning: unused parameter 'self' [-Wunused-parameter] +> VirtViewerWindow *self) +> ^~~~ + +Signed-off-by: Victor Toso +--- + src/remote-viewer.c | 5 ++++- + src/virt-viewer-window.c | 2 +- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 8c31532..451fb1d 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -221,10 +221,13 @@ end: + + static void + remote_viewer_get_property(GObject *object, guint property_id, +- GValue *value, GParamSpec *pspec) ++ GValue *value G_GNUC_UNUSED, ++ GParamSpec *pspec) + { ++#ifdef HAVE_OVIRT + RemoteViewer *self = REMOTE_VIEWER(object); + RemoteViewerPrivate *priv = self->priv; ++#endif + + switch (property_id) { + #ifdef HAVE_OVIRT +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 9a0932a..2e41edc 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -1072,7 +1072,7 @@ iso_dialog_response(GtkDialog *dialog, + + void + virt_viewer_window_menu_change_cd_activate(GtkWidget *menu G_GNUC_UNUSED, +- VirtViewerWindow *self) ++ VirtViewerWindow *self G_GNUC_UNUSED) + { + #if HAVE_OVIRT + VirtViewerWindowPrivate *priv = self->priv; +-- +2.12.0 + diff --git a/SOURCES/0024-Don-t-define-function-without-oVirt-integration.patch b/SOURCES/0024-Don-t-define-function-without-oVirt-integration.patch new file mode 100644 index 0000000..ebd7046 --- /dev/null +++ b/SOURCES/0024-Don-t-define-function-without-oVirt-integration.patch @@ -0,0 +1,38 @@ +From 48b0a9949e88782388ce73f0c1292c1367aa7e6c Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Fri, 3 Mar 2017 15:37:02 +0100 +Subject: [PATCH 24/26] Don't define function without oVirt integration + +Function is not used without oVirt. + +> virt-viewer-window.c:1063:1: warning: 'iso_dialog_response' defined +> but not used [-Wunused-function] + +Signed-off-by: Victor Toso +--- + src/virt-viewer-window.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 2e41edc..867a7b0 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -1059,6 +1059,7 @@ virt_viewer_window_menu_help_about(GtkWidget *menu G_GNUC_UNUSED, + g_object_unref(G_OBJECT(about)); + } + ++#if HAVE_OVIRT + static void + iso_dialog_response(GtkDialog *dialog, + gint response_id, +@@ -1069,6 +1070,7 @@ iso_dialog_response(GtkDialog *dialog, + + gtk_widget_destroy(GTK_WIDGET(dialog)); + } ++#endif + + void + virt_viewer_window_menu_change_cd_activate(GtkWidget *menu G_GNUC_UNUSED, +-- +2.12.0 + diff --git a/SOURCES/0025-virt-viewer-Allow-more-precise-VM-selection.patch b/SOURCES/0025-virt-viewer-Allow-more-precise-VM-selection.patch new file mode 100644 index 0000000..c514d66 --- /dev/null +++ b/SOURCES/0025-virt-viewer-Allow-more-precise-VM-selection.patch @@ -0,0 +1,174 @@ +From efb365492c540a175243d746e4d18a2c58c2c701 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Fri, 3 Mar 2017 14:08:45 +0100 +Subject: [PATCH 25/26] virt-viewer: Allow more precise VM selection + +Theoretically a VM name can be a valid VM id or uuid. In that case +connecting to the VMs may be problematic since virt-viewer selects +the VM by its id then by uuid if not found then by its name. + +Introduce new command line options to cover this situation: + "--id" to connect to the VM by its id + "--uuid" to connect to the VM by its uuid + "--domain-name" to connect to the VM by its name +The options are mutually exclusive + +Resolves: rhbz#1399077 +--- + man/virt-viewer.pod | 14 ++++++++++ + src/virt-viewer.c | 78 ++++++++++++++++++++++++++++++++++++++++++++--------- + 2 files changed, 80 insertions(+), 12 deletions(-) + +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index 9abf03c..30af8db 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -122,6 +122,20 @@ kiosk-quit option to "on-disconnect" value, virt-viewer will quit + instead. Please note that --reconnect takes precedence over this + option, and will attempt to do a reconnection before it quits. + ++=item --id, --uuid, --domain-name ++ ++Connect to the virtual machine by its id, uuid or name. These options ++are mutual exclusive. For example the following command may sometimes ++connect to a virtual machine with the id 2 or with the name 2 (depending ++on the number of running machines): ++ ++ virt-viewer 2 ++ ++To always connect to the virtual machine with the name "2" use the ++"--domain-name" option: ++ ++ virt-viewer --domain-name 2 ++ + =back + + =head1 CONFIGURATION +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 1f99552..22a952a 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -82,6 +82,45 @@ static gboolean opt_attach = FALSE; + static gboolean opt_waitvm = FALSE; + static gboolean opt_reconnect = FALSE; + ++typedef enum { ++ DOMAIN_SELECTION_ID = (1 << 0), ++ DOMAIN_SELECTION_UUID = (1 << 1), ++ DOMAIN_SELECTION_NAME = (1 << 2), ++ DOMAIN_SELECTION_DEFAULT = DOMAIN_SELECTION_ID | DOMAIN_SELECTION_UUID | DOMAIN_SELECTION_NAME, ++} DomainSelection; ++ ++static const gchar* domain_selection_to_opt[] = { ++ [DOMAIN_SELECTION_ID] = "--id", ++ [DOMAIN_SELECTION_UUID] = "--uuid", ++ [DOMAIN_SELECTION_NAME] = "--domain-name", ++}; ++ ++static DomainSelection domain_selection_type = DOMAIN_SELECTION_DEFAULT; ++ ++static gboolean ++opt_domain_selection_cb(const gchar *option_name, ++ const gchar *value G_GNUC_UNUSED, ++ gpointer data G_GNUC_UNUSED, ++ GError **error) ++{ ++ guint i; ++ if (domain_selection_type != DOMAIN_SELECTION_DEFAULT) { ++ g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, ++ "selection type has been already set"); ++ return FALSE; ++ } ++ ++ for (i = DOMAIN_SELECTION_ID; i <= G_N_ELEMENTS(domain_selection_to_opt); i++) { ++ if (g_strcmp0(option_name, domain_selection_to_opt[i]) == 0) { ++ domain_selection_type = i; ++ return TRUE; ++ } ++ } ++ ++ g_assert_not_reached(); ++ return FALSE; ++} ++ + static void + virt_viewer_add_option_entries(VirtViewerApp *self, GOptionContext *context, GOptionGroup *group) + { +@@ -96,6 +135,12 @@ virt_viewer_add_option_entries(VirtViewerApp *self, GOptionContext *context, GOp + N_("Wait for domain to start"), NULL }, + { "reconnect", 'r', 0, G_OPTION_ARG_NONE, &opt_reconnect, + N_("Reconnect to domain upon restart"), NULL }, ++ { "domain-name", '\0', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, opt_domain_selection_cb, ++ N_("Select the virtual machine only by its name"), NULL }, ++ { "id", '\0', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, opt_domain_selection_cb, ++ N_("Select the virtual machine only by its id"), NULL }, ++ { "uuid", '\0', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, opt_domain_selection_cb, ++ N_("Select the virtual machine only by its uuid"), NULL }, + { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &opt_args, + NULL, "-- DOMAIN-NAME|ID|UUID" }, + { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } +@@ -131,15 +176,16 @@ virt_viewer_local_command_line (GApplication *gapp, + } + + +- if (opt_waitvm) { ++ if (opt_waitvm || domain_selection_type != DOMAIN_SELECTION_DEFAULT) { + if (!self->priv->domkey) { +- g_printerr(_("\nNo DOMAIN-NAME|ID|UUID was specified for '--wait'\n\n")); ++ g_printerr(_("\nNo DOMAIN-NAME|ID|UUID was specified for '%s'\n\n"), ++ opt_waitvm ? "--wait" : domain_selection_to_opt[domain_selection_type]); + ret = TRUE; + *status = 1; + goto end; + } + +- self->priv->waitvm = TRUE; ++ self->priv->waitvm = opt_waitvm; + } + + virt_viewer_app_set_direct(app, opt_direct); +@@ -303,24 +349,32 @@ virt_viewer_lookup_domain(VirtViewer *self) + { + char *end; + VirtViewerPrivate *priv = self->priv; +- int id; + virDomainPtr dom = NULL; +- unsigned char uuid[16]; + + if (priv->domkey == NULL) { + return NULL; + } + +- id = strtol(priv->domkey, &end, 10); +- if (id >= 0 && end && !*end) { +- dom = virDomainLookupByID(priv->conn, id); ++ if (domain_selection_type & DOMAIN_SELECTION_ID) { ++ long int id = strtol(priv->domkey, &end, 10); ++ if (id >= 0 && end && !*end) { ++ dom = virDomainLookupByID(priv->conn, id); ++ } + } +- if (!dom && virt_viewer_parse_uuid(priv->domkey, uuid) == 0) { +- dom = virDomainLookupByUUID(priv->conn, uuid); ++ ++ if (domain_selection_type & DOMAIN_SELECTION_UUID) { ++ unsigned char uuid[16]; ++ if (dom == NULL && virt_viewer_parse_uuid(priv->domkey, uuid) == 0) { ++ dom = virDomainLookupByUUID(priv->conn, uuid); ++ } + } +- if (!dom) { +- dom = virDomainLookupByName(priv->conn, priv->domkey); ++ ++ if (domain_selection_type & DOMAIN_SELECTION_NAME) { ++ if (dom == NULL) { ++ dom = virDomainLookupByName(priv->conn, priv->domkey); ++ } + } ++ + return dom; + } + +-- +2.12.0 + diff --git a/SOURCES/0026-virt-viewer-Adjust-name-id-uuid-comment.patch b/SOURCES/0026-virt-viewer-Adjust-name-id-uuid-comment.patch new file mode 100644 index 0000000..eb4d391 --- /dev/null +++ b/SOURCES/0026-virt-viewer-Adjust-name-id-uuid-comment.patch @@ -0,0 +1,61 @@ +From 77d66094d945e38608f98347bd3c117a90a01913 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Fri, 3 Mar 2017 14:08:46 +0100 +Subject: [PATCH 26/26] virt-viewer: Adjust name-id-uuid comment + +virt-viewer by default chooses the VM by its id, then uuid +and then by name. Adjust the comment to match the implementation. + +Related: rhbz#1399077 +--- + man/virt-viewer.pod | 2 +- + src/virt-viewer.c | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index 30af8db..8463eb4 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -5,7 +5,7 @@ virt-viewer - display the graphical console for a virtual machine + + =head1 SYNOPSIS + +-B [OPTIONS] [DOMAIN-NAME|ID|UUID] ++B [OPTIONS] [ID|UUID|DOMAIN-NAME] + + =head1 DESCRIPTION + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 22a952a..65c0546 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -142,7 +142,7 @@ virt_viewer_add_option_entries(VirtViewerApp *self, GOptionContext *context, GOp + { "uuid", '\0', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, opt_domain_selection_cb, + N_("Select the virtual machine only by its uuid"), NULL }, + { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &opt_args, +- NULL, "-- DOMAIN-NAME|ID|UUID" }, ++ NULL, "-- ID|UUID|DOMAIN-NAME" }, + { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } + }; + +@@ -166,7 +166,7 @@ virt_viewer_local_command_line (GApplication *gapp, + + if (opt_args) { + if (g_strv_length(opt_args) != 1) { +- g_printerr(_("\nUsage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n\n"), PACKAGE); ++ g_printerr(_("\nUsage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n\n"), PACKAGE); + ret = TRUE; + *status = 1; + goto end; +@@ -178,7 +178,7 @@ virt_viewer_local_command_line (GApplication *gapp, + + if (opt_waitvm || domain_selection_type != DOMAIN_SELECTION_DEFAULT) { + if (!self->priv->domkey) { +- g_printerr(_("\nNo DOMAIN-NAME|ID|UUID was specified for '%s'\n\n"), ++ g_printerr(_("\nNo ID|UUID|DOMAIN-NAME was specified for '%s'\n\n"), + opt_waitvm ? "--wait" : domain_selection_to_opt[domain_selection_type]); + ret = TRUE; + *status = 1; +-- +2.12.0 + diff --git a/SOURCES/0027-Comment-out-folder-sharing-menus.patch b/SOURCES/0027-Comment-out-folder-sharing-menus.patch new file mode 100644 index 0000000..31f1f0b --- /dev/null +++ b/SOURCES/0027-Comment-out-folder-sharing-menus.patch @@ -0,0 +1,91 @@ +From c972841191070e1cabb646e30f06a174ffecf5ec Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Mon, 27 Feb 2017 13:47:39 +0100 +Subject: [PATCH virt-viewer] Comment out folder sharing menus +To: virt-tools-list@redhat.com + +Folder sharing requires phodav which is not available in el7 +Do not display menu items related to it. + +Related: rhbz#1413982 +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/resources/ui/virt-viewer.ui | 9 --------- + src/virt-viewer-window.c | 13 ------------- + 2 files changed, 22 deletions(-) + +diff --git a/src/resources/ui/virt-viewer.ui b/src/resources/ui/virt-viewer.ui +index e9609ec..a1070c8 100644 +--- a/src/resources/ui/virt-viewer.ui ++++ b/src/resources/ui/virt-viewer.ui +@@ -82,15 +82,6 @@ + + + +- +- True +- False +- _Preferences +- True +- +- +- +- + + True + False +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 867a7b0..5997a37 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -63,7 +63,6 @@ void virt_viewer_window_menu_file_usb_device_selection(GtkWidget *menu, VirtView + void virt_viewer_window_menu_file_smartcard_insert(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_file_smartcard_remove(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_view_release_cursor(GtkWidget *menu, VirtViewerWindow *self); +-void virt_viewer_window_menu_preferences_cb(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_change_cd_activate(GtkWidget *menu, VirtViewerWindow *self); + + +@@ -316,7 +315,6 @@ virt_viewer_window_init (VirtViewerWindow *self) + gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-send")), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-view-zoom")), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-file-screenshot")), FALSE); +- gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-preferences")), FALSE); + + gtk_builder_connect_signals(priv->builder, self); + +@@ -967,13 +965,6 @@ virt_viewer_window_menu_file_smartcard_remove(GtkWidget *menu G_GNUC_UNUSED, + } + + G_MODULE_EXPORT void +-virt_viewer_window_menu_preferences_cb(GtkWidget *menu G_GNUC_UNUSED, +- VirtViewerWindow *self) +-{ +- virt_viewer_app_show_preferences(self->priv->app, self->priv->window); +-} +- +-G_MODULE_EXPORT void + virt_viewer_window_menu_view_release_cursor(GtkWidget *menu G_GNUC_UNUSED, + VirtViewerWindow *self) + { +@@ -1282,9 +1273,6 @@ virt_viewer_window_set_menus_sensitive(VirtViewerWindow *self, gboolean sensitiv + + priv = self->priv; + +- menu = GTK_WIDGET(gtk_builder_get_object(priv->builder, "menu-preferences")); +- gtk_widget_set_sensitive(menu, sensitive); +- + menu = GTK_WIDGET(gtk_builder_get_object(priv->builder, "menu-file-screenshot")); + gtk_widget_set_sensitive(menu, sensitive); + +@@ -1373,7 +1361,6 @@ virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *displa + if (virt_viewer_display_get_enabled(display)) + virt_viewer_window_desktop_resize(display, self); + +- gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-preferences")), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-view-zoom")), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-send")), TRUE); + gtk_widget_set_sensitive(self->priv->toolbar_send_key, TRUE); +-- +2.12.0 + diff --git a/SOURCES/0028-virt-viewer-Fix-comparison-in-domain-selection.patch b/SOURCES/0028-virt-viewer-Fix-comparison-in-domain-selection.patch new file mode 100644 index 0000000..79245dc --- /dev/null +++ b/SOURCES/0028-virt-viewer-Fix-comparison-in-domain-selection.patch @@ -0,0 +1,29 @@ +From c5faae7a80448605d85e958aede3a38e5ba800b6 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Wed, 15 Mar 2017 18:10:44 +0100 +Subject: [PATCH virt-viewer] virt-viewer: Fix comparison in domain selection +To: virt-tools-list@redhat.com + +Related: rhbz#1399077 + +Acked-by: Eduardo Lima (Etrunko) +--- + src/virt-viewer.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 65c0546..b50db16 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -110,7 +110,7 @@ opt_domain_selection_cb(const gchar *option_name, + return FALSE; + } + +- for (i = DOMAIN_SELECTION_ID; i <= G_N_ELEMENTS(domain_selection_to_opt); i++) { ++ for (i = DOMAIN_SELECTION_ID; i < G_N_ELEMENTS(domain_selection_to_opt); i++) { + if (g_strcmp0(option_name, domain_selection_to_opt[i]) == 0) { + domain_selection_type = i; + return TRUE; +-- +2.12.0 + diff --git a/SOURCES/0029-vnc-Set-display-as-enabled-on-init.patch b/SOURCES/0029-vnc-Set-display-as-enabled-on-init.patch new file mode 100644 index 0000000..df47647 --- /dev/null +++ b/SOURCES/0029-vnc-Set-display-as-enabled-on-init.patch @@ -0,0 +1,47 @@ +From eb99fca90471cdedf2799be1cd98960e75c51ac0 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Wed, 29 Mar 2017 12:36:58 +0200 +Subject: [PATCH virt-viewer 29/32] vnc: Set display as enabled on init +To: virt-tools-list@redhat.com + +Since 9c77a78af2ef85f3fcdce21b42d89566a9f7ee17 the vnc display has +stopped setting the show hint and started to ignore the initial zoom +setting. Let's handle it in a similar way as the spice display and set +the hint when the display is initialized and unset it on disconnect. + +Resolves: rhbz#1436991 + +Acked-by: Eduardo Lima (Etrunko) +(cherry picked from commit 47c7f4c064d6fe782717b4cb692447f52434c879) +--- + src/virt-viewer-display-vnc.c | 1 + + src/virt-viewer-session-vnc.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/src/virt-viewer-display-vnc.c b/src/virt-viewer-display-vnc.c +index cb45c23..c200ac2 100644 +--- a/src/virt-viewer-display-vnc.c ++++ b/src/virt-viewer-display-vnc.c +@@ -134,6 +134,7 @@ virt_viewer_display_vnc_initialized(VncDisplay *vnc G_GNUC_UNUSED, + g_object_set(app, "uuid", _("VNC does not provide GUID"), NULL); + } + ++ virt_viewer_display_set_enabled(display, TRUE); + virt_viewer_display_set_show_hint(display, + VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, TRUE); + +diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c +index 231f22f..26fb405 100644 +--- a/src/virt-viewer-session-vnc.c ++++ b/src/virt-viewer-session-vnc.c +@@ -122,6 +122,7 @@ virt_viewer_session_vnc_disconnected(VncDisplay *vnc G_GNUC_UNUSED, + display = virt_viewer_display_vnc_new(session, session->priv->vnc); + g_debug("Disconnected"); + g_signal_emit_by_name(session, "session-disconnected", NULL); ++ virt_viewer_display_set_enabled(VIRT_VIEWER_DISPLAY(display), FALSE); + virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(display), + VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, FALSE); + } +-- +2.12.2 + diff --git a/SOURCES/0030-window-Allow-to-control-zoom-using-keypad.patch b/SOURCES/0030-window-Allow-to-control-zoom-using-keypad.patch new file mode 100644 index 0000000..fee9428 --- /dev/null +++ b/SOURCES/0030-window-Allow-to-control-zoom-using-keypad.patch @@ -0,0 +1,133 @@ +From 400c937247380756ab6fa56593edc07dc5c092fc Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Tue, 9 May 2017 13:53:13 +0200 +Subject: [PATCH virt-viewer 30/32] window: Allow to control zoom using keypad +To: virt-tools-list@redhat.com + +Support for more than one key combo for accelerator is available +since GTK 3.12 through GAction. It is currently not possible to +use mnemonics also for numpad keys, for more info see: + https://bugzilla.gnome.org/show_bug.cgi?id=699823 + +Resolves: rhbz#1337575 + +Reviewed-by: Victor Toso +(cherry picked from commit 701d57742fad8edf40ae53bfcd41f81235fc5d90) +--- + configure.ac | 4 ++-- + src/virt-viewer-window.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 58 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 3d03687..395659b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -17,8 +17,8 @@ GLIB2_REQUIRED="2.38" + GLIB2_ENCODED_VERSION="GLIB_VERSION_2_38" + + # Keep these two definitions in agreement. +-GTK_REQUIRED="3.10" +-GTK_ENCODED_VERSION="GDK_VERSION_3_10" ++GTK_REQUIRED="3.12" ++GTK_ENCODED_VERSION="GDK_VERSION_3_12" + + LIBXML2_REQUIRED="2.6.0" + LIBVIRT_REQUIRED="0.10.0" +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 867a7b0..f5448c6 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -693,6 +693,45 @@ virt_viewer_window_get_keycombo_menu(VirtViewerWindow *self) + return menu; + } + ++static void ++action_zoom_in(G_GNUC_UNUSED GSimpleAction *action, ++ G_GNUC_UNUSED GVariant *state, ++ gpointer user_data) ++{ ++ virt_viewer_window_menu_view_zoom_in(NULL, VIRT_VIEWER_WINDOW(user_data)); ++} ++ ++static void ++action_zoom_out(G_GNUC_UNUSED GSimpleAction *action, ++ G_GNUC_UNUSED GVariant *state, ++ gpointer user_data) ++{ ++ virt_viewer_window_menu_view_zoom_out(NULL, VIRT_VIEWER_WINDOW(user_data)); ++} ++ ++static void ++action_zoom_reset(G_GNUC_UNUSED GSimpleAction *action, ++ G_GNUC_UNUSED GVariant *state, ++ gpointer user_data) ++{ ++ virt_viewer_window_menu_view_zoom_reset(NULL, VIRT_VIEWER_WINDOW(user_data)); ++} ++ ++/* Keep keypad_action_entries and keypad_action_accels in sync */ ++static const GActionEntry keypad_action_entries[] = { ++ { .name = "zoom-in", .activate = action_zoom_in }, ++ { .name = "zoom-out", .activate = action_zoom_out }, ++ { .name = "zoom-reset", .activate = action_zoom_reset }, ++}; ++ ++static const gchar *const keypad_action_accels[][2] = { ++ /* numpad keys are not handled automatically by gtk, see bgo#699823 */ ++ {"KP_Add", NULL}, ++ {"KP_Subtract", NULL}, ++ {"KP_0", NULL}, ++}; ++G_STATIC_ASSERT(G_N_ELEMENTS(keypad_action_entries) == G_N_ELEMENTS(keypad_action_accels)); ++ + void + virt_viewer_window_disable_modifiers(VirtViewerWindow *self) + { +@@ -700,6 +739,7 @@ virt_viewer_window_disable_modifiers(VirtViewerWindow *self) + VirtViewerWindowPrivate *priv = self->priv; + GValue empty; + GSList *accels; ++ guint i; + + if (!priv->accel_enabled) + return; +@@ -726,6 +766,10 @@ virt_viewer_window_disable_modifiers(VirtViewerWindow *self) + "gtk-enable-mnemonics", FALSE, + NULL); + ++ for (i = 0; i < G_N_ELEMENTS(keypad_action_entries); i++) { ++ g_action_map_remove_action(G_ACTION_MAP(priv->window), keypad_action_entries[i].name); ++ } ++ + priv->accel_enabled = FALSE; + } + +@@ -735,6 +779,7 @@ virt_viewer_window_enable_modifiers(VirtViewerWindow *self) + GtkSettings *settings = gtk_settings_get_default(); + VirtViewerWindowPrivate *priv = self->priv; + GSList *accels; ++ guint i; + + if (priv->accel_enabled) + return; +@@ -755,6 +800,17 @@ virt_viewer_window_enable_modifiers(VirtViewerWindow *self) + "gtk-enable-mnemonics", priv->enable_mnemonics_save, + NULL); + ++ g_action_map_add_action_entries(G_ACTION_MAP(priv->window), ++ keypad_action_entries, G_N_ELEMENTS(keypad_action_entries), ++ self); ++ for (i = 0; i < G_N_ELEMENTS(keypad_action_entries); i++) { ++ gchar *detailed_name = g_strdup_printf("win.%s", keypad_action_entries[i].name); ++ gtk_application_set_accels_for_action(GTK_APPLICATION(priv->app), ++ detailed_name, ++ keypad_action_accels[i]); ++ g_free(detailed_name); ++ } ++ + priv->accel_enabled = TRUE; + } + +-- +2.12.2 + diff --git a/SOURCES/0031-virt-viewer-Support-newer-libvirt-xml-format.patch b/SOURCES/0031-virt-viewer-Support-newer-libvirt-xml-format.patch new file mode 100644 index 0000000..656d4f4 --- /dev/null +++ b/SOURCES/0031-virt-viewer-Support-newer-libvirt-xml-format.patch @@ -0,0 +1,52 @@ +From 2b271402aaeee7d7948493362bc6d152a7422856 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Fri, 7 Apr 2017 12:05:17 +0200 +Subject: [PATCH virt-viewer 31/32] virt-viewer: Support newer libvirt xml + format +To: virt-tools-list@redhat.com + +Since libvirt 0.9.4 there is a new listen element which can be used +to specify address instead of using the attributes of graphics element. + +Also add support for listen type socket - available for Qemu since +libvirt 2.0.0 + +Resolves: rhbz#1411765 + +Acked-by: Jonathon Jongsma +(cherry picked from commit effa832ca5bd51b1f450f630e1fe3cd7deacb887) +--- + src/virt-viewer.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 65c0546..fe10229 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -565,11 +565,21 @@ virt_viewer_extract_connect_info(VirtViewer *self, + } + + if (gport || gtlsport) { +- xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@listen)", type); ++ xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/listen/@address)", type); + ghost = virt_viewer_extract_xpath_string(xmldesc, xpath); ++ if (ghost == NULL) { /* try old xml format - listen attribute in the graphics node */ ++ g_free(xpath); ++ xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@listen)", type); ++ ghost = virt_viewer_extract_xpath_string(xmldesc, xpath); ++ } + } else { +- xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@socket)", type); ++ xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/listen/@socket)", type); + unixsock = virt_viewer_extract_xpath_string(xmldesc, xpath); ++ if (unixsock == NULL) { /* try old xml format - socket attribute in the graphics node */ ++ g_free(xpath); ++ xpath = g_strdup_printf("string(/domain/devices/graphics[@type='%s']/@socket)", type); ++ unixsock = virt_viewer_extract_xpath_string(xmldesc, xpath); ++ } + } + + if (ghost && gport) { +-- +2.12.2 + diff --git a/SOURCES/0032-app-Allow-to-connect-to-channel-using-unix-socket.patch b/SOURCES/0032-app-Allow-to-connect-to-channel-using-unix-socket.patch new file mode 100644 index 0000000..1bad687 --- /dev/null +++ b/SOURCES/0032-app-Allow-to-connect-to-channel-using-unix-socket.patch @@ -0,0 +1,74 @@ +From b22ebc15e9b2d08663e3105ca12c8cc5de3971ab Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Fri, 7 Apr 2017 12:05:18 +0200 +Subject: [PATCH virt-viewer 32/32] app: Allow to connect to channel using unix + socket +To: virt-tools-list@redhat.com + +Only method for connecting to channel opened later was ssh, however +this method failes when unix socket is used: + + + + + +Related: rhbz#1335832, rhbz#1411765 + +Acked-by: Jonathon Jongsma +(cherry picked from commit fe538a9296925c919d4b80698147e4a1b56ba7fd) +--- + src/virt-viewer-app.c | 29 +++++++++++++++++++++++------ + 1 file changed, 23 insertions(+), 6 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 2e7e193..2b74a9f 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1129,6 +1129,7 @@ virt_viewer_app_channel_open(VirtViewerSession *session, + { + VirtViewerAppPrivate *priv; + int fd = -1; ++ gchar *error_message = NULL; + + g_return_if_fail(self != NULL); + +@@ -1141,14 +1142,30 @@ virt_viewer_app_channel_open(VirtViewerSession *session, + if (priv->transport && g_ascii_strcasecmp(priv->transport, "ssh") == 0 && + !priv->direct && fd == -1) { + if ((fd = virt_viewer_app_open_tunnel_ssh(priv->host, priv->port, priv->user, +- priv->ghost, priv->gport, NULL)) < 0) +- virt_viewer_app_simple_message_dialog(self, _("Connect to ssh failed.")); +- } else if (fd == -1) { +- virt_viewer_app_simple_message_dialog(self, _("Can't connect to channel, SSH only supported.")); ++ priv->ghost, priv->gport, priv->unixsock)) < 0) { ++ error_message = g_strdup(_("Connect to ssh failed.")); ++ g_debug("channel open ssh tunnel: %s", error_message); ++ } ++ } ++ if (fd < 0 && priv->unixsock) { ++ GError *error = NULL; ++ if ((fd = virt_viewer_app_open_unix_sock(priv->unixsock, &error)) < 0) { ++ g_free(error_message); ++ error_message = g_strdup(error->message); ++ g_debug("channel open unix socket: %s", error_message); ++ } ++ g_clear_error(&error); ++ } ++ ++ if (fd < 0) { ++ virt_viewer_app_simple_message_dialog(self, _("Can't connect to channel: %s"), ++ (error_message != NULL) ? error_message : ++ _("only SSH or unix socket connection supported.")); ++ g_free(error_message); ++ return; + } + +- if (fd >= 0) +- virt_viewer_session_channel_open_fd(session, channel, fd); ++ virt_viewer_session_channel_open_fd(session, channel, fd); + } + #else + static void +-- +2.12.2 + diff --git a/SOURCES/0033-virt-viewer-Ensure-to-not-close-during-migration.patch b/SOURCES/0033-virt-viewer-Ensure-to-not-close-during-migration.patch new file mode 100644 index 0000000..2e63020 --- /dev/null +++ b/SOURCES/0033-virt-viewer-Ensure-to-not-close-during-migration.patch @@ -0,0 +1,53 @@ +From 8ebff59a59bc89c4533240348d7c231d9a07f886 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Thu, 18 May 2017 11:59:18 +0200 +Subject: [PATCH virt-viewer 33/35] virt-viewer: Ensure to not close during + migration +To: virt-tools-list@redhat.com + +Take a look at the shutdown event detail before killing +the connection. Otherwise it breaks the SPICE seamless migration +feature. + +Regression since commit a62827d28c6b69e90102e4c1c8043cbddad8929a + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1442929 +Signed-off-by: Pavel Grunt +Acked-by: Daniel P. Berrange +(cherry picked from commit 209c80375b152dc02f903a3ac72272872b4e5270) +--- + src/virt-viewer.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index fe10229..875f86e 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -52,6 +52,10 @@ + #include "virt-viewer-auth.h" + #include "virt-viewer-util.h" + ++#ifdef HAVE_SPICE_GTK ++#include "virt-viewer-session-spice.h" ++#endif ++ + struct _VirtViewerPrivate { + char *uri; + virConnectPtr conn; +@@ -737,6 +741,13 @@ virt_viewer_domain_event(virConnectPtr conn G_GNUC_UNUSED, + switch (event) { + case VIR_DOMAIN_EVENT_STOPPED: + session = virt_viewer_app_get_session(app); ++#ifdef HAVE_SPICE_GTK ++ /* do not disconnect due to migration */ ++ if (detail == VIR_DOMAIN_EVENT_STOPPED_MIGRATED && ++ VIRT_VIEWER_IS_SESSION_SPICE(session)) { ++ break; ++ } ++#endif + if (session != NULL) + virt_viewer_session_close(session); + break; +-- +2.13.0 + diff --git a/SOURCES/0034-Make-the-progress-bar-smooth-during-file-transfer.patch b/SOURCES/0034-Make-the-progress-bar-smooth-during-file-transfer.patch new file mode 100644 index 0000000..df7d9d8 --- /dev/null +++ b/SOURCES/0034-Make-the-progress-bar-smooth-during-file-transfer.patch @@ -0,0 +1,138 @@ +From 39267703f6953a8e471f2d4f89a4a7f58efe77e1 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Thu, 11 May 2017 16:16:56 +0200 +Subject: [PATCH virt-viewer 34/35] Make the progress bar smooth during + file-transfer +To: virt-tools-list@redhat.com + +When the transfer of a file finishes we stop considering that file's +size in the progress bar which makes it move back due the new +'transfer size' and 'transferred bytes' - for all the other files. + +This patch aims to keep the progress smooth when a file is finished +using the notify::total-bytes from SpiceFileTransferTask to be aware +of all file's sizes. + +Note that as we have only one progress bar for all files being +transferred, it is expected that it will go back when a new +file-transfer operation starts (e.g we drag-and-drop new files while +we are already transferring other files). + +As requested, this patch also updates the string message to include the +amount of files that will be transferred in case we have more then one +file. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1449572 +Signed-off-by: Victor Toso +--- + src/virt-viewer-file-transfer-dialog.c | 44 ++++++++++++++++++++++++++++------ + 1 file changed, 37 insertions(+), 7 deletions(-) + +diff --git a/src/virt-viewer-file-transfer-dialog.c b/src/virt-viewer-file-transfer-dialog.c +index 07d25a7..dcf99a3 100644 +--- a/src/virt-viewer-file-transfer-dialog.c ++++ b/src/virt-viewer-file-transfer-dialog.c +@@ -30,6 +30,9 @@ struct _VirtViewerFileTransferDialogPrivate + GSList *failed; + guint timer_show_src; + guint timer_hide_src; ++ guint num_files; ++ guint64 total_transfer_size; ++ guint64 completed_transfer_size; + GtkWidget *transfer_summary; + GtkWidget *progressbar; + }; +@@ -85,6 +88,9 @@ dialog_response(GtkDialog *dialog, + for (slist = self->priv->file_transfers; slist != NULL; slist = g_slist_next(slist)) { + spice_file_transfer_task_cancel(SPICE_FILE_TRANSFER_TASK(slist->data)); + } ++ self->priv->num_files = 0; ++ self->priv->total_transfer_size = 0; ++ self->priv->completed_transfer_size = 0; + break; + case GTK_RESPONSE_DELETE_EVENT: + /* silently ignore */ +@@ -128,23 +134,29 @@ virt_viewer_file_transfer_dialog_new(GtkWindow *parent) + static void update_global_progress(VirtViewerFileTransferDialog *self) + { + GSList *slist; +- guint64 total = 0, transferred = 0; ++ guint64 transferred = 0; + gchar *message = NULL; + guint n_files = 0; + gdouble fraction = 1.0; + + for (slist = self->priv->file_transfers; slist != NULL; slist = g_slist_next(slist)) { + SpiceFileTransferTask *task = slist->data; +- total += spice_file_transfer_task_get_total_bytes(task); + transferred += spice_file_transfer_task_get_transferred_bytes(task); + n_files++; + } + +- if (n_files > 0) +- fraction = (gdouble)transferred / total; +- message = g_strdup_printf(ngettext("Transferring %d file...", +- "Transferring %d files...", n_files), +- n_files); ++ if (n_files > 0) { ++ transferred += self->priv->completed_transfer_size; ++ fraction = (gdouble)transferred / self->priv->total_transfer_size; ++ } ++ ++ if (self->priv->num_files == 1) { ++ message = g_strdup(_("Transferring 1 file...")); ++ } else { ++ message = g_strdup_printf(ngettext("Transferring %d file of %d...", ++ "Transferring %d files of %d...", n_files), ++ n_files, self->priv->num_files); ++ } + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(self->priv->progressbar), fraction); + gtk_label_set_text(GTK_LABEL(self->priv->transfer_summary), message); + g_free(message); +@@ -159,6 +171,19 @@ static void task_progress_notify(GObject *object G_GNUC_UNUSED, + update_global_progress(self); + } + ++static void task_total_bytes_notify(GObject *object, ++ GParamSpec *pspec G_GNUC_UNUSED, ++ gpointer user_data) ++{ ++ VirtViewerFileTransferDialog *self = VIRT_VIEWER_FILE_TRANSFER_DIALOG(user_data); ++ SpiceFileTransferTask *task = SPICE_FILE_TRANSFER_TASK(object); ++ ++ self->priv->total_transfer_size += spice_file_transfer_task_get_total_bytes(task); ++ self->priv->num_files++; ++ update_global_progress(self); ++} ++ ++ + static void + error_dialog_response(GtkDialog *dialog, + gint response_id G_GNUC_UNUSED, +@@ -222,11 +247,15 @@ static void task_finished(SpiceFileTransferTask *task, + } + + self->priv->file_transfers = g_slist_remove(self->priv->file_transfers, task); ++ self->priv->completed_transfer_size += spice_file_transfer_task_get_total_bytes(task); + g_object_unref(task); + update_global_progress(self); + + /* if this is the last transfer, close the dialog */ + if (self->priv->file_transfers == NULL) { ++ self->priv->num_files = 0; ++ self->priv->total_transfer_size = 0; ++ self->priv->completed_transfer_size = 0; + /* cancel any pending 'show' operations if all tasks complete before + * the dialog can be shown */ + if (self->priv->timer_show_src) { +@@ -274,6 +303,7 @@ void virt_viewer_file_transfer_dialog_add_task(VirtViewerFileTransferDialog *sel + { + self->priv->file_transfers = g_slist_prepend(self->priv->file_transfers, g_object_ref(task)); + g_signal_connect(task, "notify::progress", G_CALLBACK(task_progress_notify), self); ++ g_signal_connect(task, "notify::total-bytes", G_CALLBACK(task_total_bytes_notify), self); + g_signal_connect(task, "finished", G_CALLBACK(task_finished), self); + + show_transfer_dialog(self); +-- +2.13.0 + diff --git a/SOURCES/0036-Update-translation-from-internal-zanata.patch b/SOURCES/0036-Update-translation-from-internal-zanata.patch new file mode 100644 index 0000000..564d6e4 --- /dev/null +++ b/SOURCES/0036-Update-translation-from-internal-zanata.patch @@ -0,0 +1,10146 @@ +From bb4cb0817fee0a6e5ef6aae876ed7e7f6e6b887e Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Thu, 18 May 2017 16:16:59 +0200 +Subject: [PATCH virt-viewer] Update translation from internal zanata +To: virt-tools-list@redhat.com + +Only Japanese is fully translated atm + +Resolves: rhzb#1378279 +--- + po/de.po | 468 ++++++++++++++++++++++++++++------------------------ + po/es.po | 483 ++++++++++++++++++++++++++++++------------------------ + po/fr.po | 491 ++++++++++++++++++++++++++++++------------------------- + po/it.po | 488 +++++++++++++++++++++++++++++------------------------- + po/ja.po | 493 +++++++++++++++++++++++++++++++------------------------ + po/ko.po | 445 ++++++++++++++++++++++++++++--------------------- + po/pt_BR.po | 536 ++++++++++++++++++++++++++++++++---------------------------- + po/ru.po | 471 +++++++++++++++++++++++++++++----------------------- + po/zh_CN.po | 423 ++++++++++++++++++++++++++--------------------- + po/zh_TW.po | 471 +++++++++++++++++++++++++++++----------------------- + 10 files changed, 2645 insertions(+), 2124 deletions(-) + +diff --git a/po/de.po b/po/de.po +index 081aaa5..1c972cd 100644 +--- a/po/de.po ++++ b/po/de.po +@@ -1,33 +1,27 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: + # Automatically generated, 2010 +-# Fabian Affolter , 2012,2014 ++# Fabian Affolter , 2012 + # hpeters , 2010 +-# hpeters , 2010,2012 + # hpeters , 2012 +-# noxin , 2013 +-# Rainer Gromansperg , 2013 +-# Rainer Gromansperg , 2013 + # Roman Spirgi , 2012 +-# noxin , 2013 +-# Roman Spirgi , 2015. #zanata +-# jasna , 2016. #zanata ++# rgromans , 2013. #zanata ++# hpeters , 2016. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2016-02-03 12:37-0500\n" +-"Last-Translator: jasna \n" +-"Language-Team: German (http://www.transifex.com/projects/p/virt-viewer/" +-"language/de/)\n" +-"Language: de\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"PO-Revision-Date: 2016-10-19 09:59+0000\n" ++"Last-Translator: hpeters \n" ++"Language-Team: German \n" ++"Language: de\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Zanata 3.9.6\n" + +@@ -51,133 +45,165 @@ msgstr "" + + #: ../data/remote-viewer.desktop.in.h:2 + msgid "Access remote desktops" +-msgstr "Zugriff auf Remote-Desktops" ++msgstr "Auf externe Desktops zugreifen" + + #: ../data/virt-viewer-mime.xml.in.h:1 + msgid "Virt-Viewer connection file" + msgstr "Virt-Viewer Verbindungsdatei" + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" +-msgstr "Titel des Window setzen" ++msgstr "Fenstertitel festlegen" + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "Verbindung öffnen unter Verwendung der Spice-Kontroller-Kommunikation" + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" + msgstr "Remote-Viewer Client" + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "Initiieren der Verbindung fehlgeschlagen" + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "Anzeige vom Kontroller deaktiviert" + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "Kontroller-Verbindung fehlgeschlagen: %s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" +-msgstr "Parsen von ovirt uri fehlgeschlagen" ++msgstr "Analysieren der ovirt-URI fehlgeschlagen" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" +-msgstr "Authentifizierung abgebrochen" ++msgstr "Authentifikation abgebrochen" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "oVirt VM %s läuft nicht" + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "oVirt VM %s hat keine Anzeige" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" +-msgstr "oVirt VM %s hat keine Host-Informationen" ++msgstr "" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "oVirt VM %s hat unbekannten Anzeigentyp: %d" ++msgstr "oVirt VM %s hat einen unbekannten Anzeigetyp: %d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." +-msgstr "Einrichten der Spice-Sitzung ..." ++msgstr "Einrichten der Spice-Sitzung …" + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" +-msgstr "Es wurde keine Verbindung gewählt" ++msgstr "Keine Verbindung gewählt" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " +-msgstr "Ungültige Datei %s: " ++msgstr "Ungültige Datei %s:" + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" + msgstr "Verbindungstyp konnte nicht von URI ermittelt werden" + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " +-msgstr "Konnte oVirt-Sitzung nicht öffnen: " ++msgstr "oVirt-Sitzung konnte nicht geöffnet werden:" + +-#. ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" ++msgstr "" ++ ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" + msgstr "Verbindungsdetails" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "" ++msgstr "Verbindungs_adresse" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +-msgstr "Zum Beispiel spice://foo.example.org:5900" ++msgstr "Zum Beispiel: spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "Neueste Verbindungen" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" + msgstr "" + +@@ -186,6 +212,23 @@ msgstr "" + msgid "C_onnect" + msgstr "" + ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "Name" ++ + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" + msgstr "" +@@ -195,8 +238,8 @@ msgid "" + "Copyright (C) 2007-2012 Daniel P. Berrange\n" + "Copyright (C) 2007-2014 Red Hat, Inc." + msgstr "" +-"Copyright (C) 2007-2012 Daniel P. Berrange\n" +-"Copyright (C) 2007-2014 Red Hat, Inc." ++"Copyright (C) 2007 – 2012 Daniel P. Berrange\n" ++"Copyright (C) 2007 – 2014 Red Hat, Inc." + + #: ../src/resources/ui/virt-viewer-about.ui.h:4 + msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" +@@ -244,153 +287,156 @@ msgstr "Das Fedora Übersetzungs-Team" + + #: ../src/virt-viewer-app.c:459 + msgid "Do you want to close the session?" +-msgstr "Möchten Sie die Sitzung beenden?" ++msgstr "Wollen Sie die Sitzung beenden?" + + #: ../src/virt-viewer-app.c:461 + msgid "Do not ask me again" +-msgstr "Nicht noch einmal nachfragen" ++msgstr "Nicht mehr nachfragen" + + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "Adresse ist zu lang für Unix socket_path: %s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "Erstellung von Unix-Socket fehlgeschlagen: %s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "Verbindung mit Unix-Socket fehlgeschlagen: %s" + + #: ../src/virt-viewer-app.c:955 + #, c-format + msgid "Waiting for display %d..." +-msgstr "Warten auf Anzeige %d ..." ++msgstr "Warten auf Anzeige %d …" + + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" + msgstr "Nicht unterstützter Grafiktyp »%s«" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "Verbindung über SSH ist fehlgeschlagen." + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." + msgstr "" +-"Zu dem Kanal konnte nicht verbunden werden, es wird nur SSH unterstützt" + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "Verbindung zu dem Kanal wird nicht unterstützt." + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "Anzeige kann nur durch libvirt mit --attach zugeordnet werden" ++msgstr "Anzeige kann nur per libvirt angeschlossen werden mittels --attach" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "Verbinden mit Grafikserver" + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" +-msgstr "Gast-Domain wurde beendet" ++msgstr "Gast-Domain wurde abgeschaltet" + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "Verbunden mit Grafikserver" + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Verbindung zum Grafik-Server %s konnte nicht hergestellt werden" + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" +-msgstr "Authentifikation beim Remote-Desktop-Server an %s: %s fehlgeschlagen\n" ++msgstr "" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "Authentifikation beim Remote-Desktop-Server fehlgeschlagen: %s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" + msgstr "USB-Weiterleitungsfehler: %s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "Zoom-Level muss zwischen %d-%d sein\n" ++msgstr "Zoom-Level muss zwischen %d und %d sein\n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "" ++msgstr "_%d anzeigen" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" + msgstr "Ungültiger kiosk-quit Parameter: %s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "Versionsinformationen anzeigen" + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" + msgstr "Zoomlevel des Fensters in Prozent" + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" +-"Im Vollbildmodus öffnen (Die Auflösung des Gast-Systems entsprechend " +-"angepasst an)." ++"Im Vollbildmodus öffnen (passt die Auflösung des Gast-Systems dem Client an)." ++"" + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" +-msgstr "eigene angepasste Hotkeys" ++msgstr "Tastenkombinationen anpassen" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" +-msgstr "Kiosk Modus ermöglichen" ++msgstr "Kiosk-Modus aktivieren" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "Beenden bei bestimmter Bedingung im Kiosk-Modus" ++msgstr "Bei angegebener Bedingung im Kiosk-Modus beenden" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "Ausführliche Informationen anzeigen" + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "Debugging-Informationen anzeigen" + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" + "\n" + "%s\n" + "\n" +@@ -403,15 +449,15 @@ msgstr "" + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "Authentifikation ist für die %s Verbindung erforderlich:\n" ++msgstr "Authentifikation ist erforderlich für die %s Verbindung:\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" + msgstr "Authentifikation erforderlich" +@@ -422,7 +468,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "Label" + +@@ -440,19 +486,20 @@ msgstr "Passwort anzeigen" + + #: ../src/virt-viewer-display-vnc.c:134 + msgid "VNC does not provide GUID" +-msgstr "VNC bietet keine GUID" ++msgstr "VNC stellt keine GUID bereit" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." + msgstr[0] "" ++msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -461,21 +508,21 @@ msgstr "" + msgid "Virt Viewer" + msgstr "Virt-Viewer" + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" + msgstr "Ungültiges Passwort" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" +-msgstr "USB-Gerät zur Weiterleitung wählen" ++msgstr "USB-Geräte zur Weiterleitung wählen" + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" + msgstr "" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Nicht unterstützter Authentifikationsstyp %d" +@@ -486,97 +533,101 @@ msgstr "Keine virtuelle Maschine gefunden" + + #: ../src/virt-viewer-vm-connection.c:93 + msgid "No virtual machine was chosen" +-msgstr "Es wurde keine virtuelle Maschine ausgewählt" ++msgstr "Keine virtuelle Maschine ausgewählt" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" + msgstr "Strg+Alt+_Entf" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Strg+Alt+_Rücktaste" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Strg+Alt+F_1" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Strg+Alt+F_2" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Strg+Alt+F_3" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Strg+Alt+F_4" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Strg+Alt+F_5" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Strg+Alt+F_6" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Strg+Alt+F_7" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Strg+Alt+F_8" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Strg+Alt+F_9" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Strg+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Strg+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Strg+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" + msgstr "" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "Screenshot" + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" + msgstr "Unbekannt" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" ++msgstr "" ++ ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "Verbindung trennen" + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "USB-Geräteauswahl" + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "Tastenkombination senden" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "Vollbildmodus verlassen" + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Strg+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Drücken Sie %s, um den Mauszeiger freizugeben)" +@@ -584,14 +635,14 @@ msgstr "(Drücken Sie %s, um den Mauszeiger freizugeben)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -601,142 +652,148 @@ msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" + msgstr "" +-"Es wird mindestens %s in der Version %s benötigt, um eine Verbindung " +-"aufzubauen, siehe %s für Details" ++"Zumindest %s Version %s ist erforderlich, um diese Verbindung einzurichten. " ++"Siehe %s für Details." + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" + msgstr "" +-"Es wird mindestens %s in der Version %s benötigt, um eine Verbindung " +-"aufzubauen" ++"Zumindest %s Version %s ist erforderlich, um diese Verbindung einzurichten" + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "Direkte Verbindung ohne automatische Tunnel" + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" +-msgstr "Mit lokaler Anzeige verbinden mittels libvirt" ++msgstr "Mit lokaler Anzeige mittels libvirt verbinden" + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "Verbinden mit Hypervisor" + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "Warten auf Start der Domain" + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "Nach Neustart erneut mit Domain verbinden" + +-#: ../src/virt-viewer.c:105 ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" ++msgstr "" ++ ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "" ++ ++#: ../src/virt-viewer.c:154 + msgid "Virtual machine graphical console" + msgstr "Grafische Konsole der virtuellen Maschine" + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" +-"\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" + msgstr "" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" + msgstr "" +-"\n" +-"Es wurde keine DOMAIN-NAME|ID|UUID für »--wait« festgelegt\n" +-"\n" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" +-msgstr "Warten auf Neustart der Domain" ++msgstr "Warten auf Neustart der Gast-Domain" + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "Grafiktyp für den Gast %s konnte nicht ermittelt werden " + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "Host für den Gast %s konnte nicht ermittelt werden" + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "Gast »%s« ist nicht erreichbar" ++msgstr "Gastname »%s« ist nicht erreichbar" + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" + msgstr "Virtuelle Maschine %s läuft nicht" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" +-msgstr "Auf den Start von libvirt wird gewartet" ++msgstr "Warten auf Start von libvirt" + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "Suchen der Gast-Domain" + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "Warten auf Erstellung der Gast-Domain" + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "Prüfen des Gast-Domain-Status" + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" + msgstr "Gast-Status konnte nicht abgerufen werden" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "Warten auf Start der Gast-Domain" + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "Verbindung zu libvirt mit URI: %s nicht möglich." ++msgstr "Verbindung zu libvirt mit URI %s konnte nicht hergestellt werden" + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[keine]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." +-msgstr "Authentifizierung fehlgeschlagen." ++msgstr "Authentifikation fehlgeschlagen." + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " + msgstr "Verbindung fehlgeschlagen:" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" + msgstr "_Datei" + + #: ../src/resources/ui/virt-viewer.ui.h:2 + msgid "_Screenshot" +-msgstr "" ++msgstr "_Screenshot" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "" ++msgstr "_USB-Geräteauswahl" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +@@ -747,8 +804,8 @@ msgid "Smartcard removal" + msgstr "Smartcard-Entfernung" + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "" ++msgid "_Change CD" ++msgstr "_CD wechseln" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +@@ -760,7 +817,7 @@ msgstr "_Ansicht" + + #: ../src/resources/ui/virt-viewer.ui.h:9 + msgid "_Full screen" +-msgstr "" ++msgstr "_Vollbild" + + #: ../src/resources/ui/virt-viewer.ui.h:10 + msgid "_Zoom" +@@ -780,7 +837,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "" ++msgstr "_Anzeigen" + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +@@ -788,7 +845,7 @@ msgstr "Cursor freigeben" + + #: ../src/resources/ui/virt-viewer.ui.h:16 + msgid "_Send key" +-msgstr "_Taste senden" ++msgstr "_Schlüssel senden" + + #: ../src/resources/ui/virt-viewer.ui.h:17 + msgid "_Help" +@@ -796,19 +853,15 @@ msgstr "_Hilfe" + + #: ../src/resources/ui/virt-viewer.ui.h:18 + msgid "_Guest Details" +-msgstr "_Gast Details" ++msgstr "_Gast-Details" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" + msgstr "" + +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "_CD wechseln" +- + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +-msgstr "Gast Details" ++msgstr "Gast-Details" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:3 + msgid "Name:" +@@ -822,30 +875,27 @@ msgstr "GUID:" + msgid "Choose a virtual machine" + msgstr "Wählen Sie eine virtuelle Maschine" + +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "Name" +- + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" + msgstr "Verfügbare virtuelle Maschinen" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "Präferenzen" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +-msgstr "Ordnerfreigabe" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:3 + msgid "Share folder" +-msgstr "Ordner freigeben" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "Schreibgeschützt" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "Spice" ++msgstr "" ++ +diff --git a/po/es.po b/po/es.po +index 63c797b..17d7fbf 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -1,33 +1,28 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: +-# Adolfo Jayme Barrientos , 2012 +-# vareli , 2013-2014 ++# Adolfo Jayme , 2012 ++# vareli , 2013 + # vareli , 2013 +-# Gerardo Rosales , 2014 + # Gladys Guerrero , 2012 + # Gladys Guerrero , 2012-2013 +-# Luis Bazán , 2013 + # Manuel Eduardo Ospina Sarmiento , 2010 + # Manuel Ospina , 2010 +-# Abdel G. Martínez L. , 2015. #zanata +-# Gladys Guerrero Lozano , 2016. #zanata +-# William Moreno Reyes , 2016. #zanata ++# gguerrer , 2016. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2016-09-03 01:43-0400\n" +-"Last-Translator: William Moreno Reyes \n" +-"Language-Team: Spanish (http://www.transifex.com/projects/p/virt-viewer/" +-"language/es/)\n" +-"Language: es\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"PO-Revision-Date: 2016-10-20 01:23+0000\n" ++"Last-Translator: gguerrer \n" ++"Language-Team: Spanish \n" ++"Language: es\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Zanata 3.9.6\n" + +@@ -38,7 +33,7 @@ msgstr "Visor remoto" + + #: ../data/remote-viewer.appdata.xml.in.h:2 + msgid "Remotely access virtual machines" +-msgstr "Acceder remotamente a maquinas virtuales" ++msgstr "" + + #: ../data/remote-viewer.appdata.xml.in.h:3 + msgid "" +@@ -57,117 +52,147 @@ msgstr "Acceso a escritorios remotos" + msgid "Virt-Viewer connection file" + msgstr "Fichero de conexión Virt-Viewer" + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" + msgstr "Fijar el título de ventana" + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "Abra la conexión mediante el controlador de comunicación Spice " + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" + msgstr "Cliente de visor remoto" + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" + msgstr "" +-"\n" +-"Error: No se pueden manejar múltiples URIs\n" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "No se pudo inicializar la conexión" + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "Pantalla desactivada por el controlador" + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "No se pudo conectar al controlador: %s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" +-msgstr "fallo en análisis uri de ovirt" ++msgstr "Falló al intentar analizar uri ovirt" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" +-msgstr "La autenticación fue cancelada" ++msgstr "Se canceló la autenticación" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" +-msgstr "la MV oVirt %s no está ejecutándose" ++msgstr "La máquina virtual oVirt %s no se está ejecutando" + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" +-msgstr "la MV oVirt %s no tiene monitor" ++msgstr "La máquina virtual oVirt %s no tiene pantalla" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" +-msgstr "oVirt VM %s no tiene información de host" ++msgstr "" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "la MV oVirt %s tiene un tipo de monitor desconocido: %d" ++msgstr "" ++"La máquina virtual oVirt %s tiene un tipo de pantalla desconocido: %d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." + msgstr "Configurando sesión de Spice…" + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" + msgstr "No se seleccionó ninguna conexión" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " +-msgstr "Archivo no válido %s: " ++msgstr "Archivo inválido %s:" + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" + msgstr "No se puede determinar el tipo de conexión de la URI" + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " +-msgstr "No se pudo abrir la sesión oVirt" ++msgstr "No se pudo abrir la sesión oVirt:" + +-#. ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" ++msgstr "" ++ ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" +-msgstr "Detalles de conexión" ++msgstr "Información de conexión" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "" ++msgstr "_Dirección de Conexión" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +@@ -175,11 +200,12 @@ msgstr "Por ejemplo, spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "Conexiones recientes" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" + msgstr "" + +@@ -188,6 +214,23 @@ msgstr "" + msgid "C_onnect" + msgstr "" + ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "Nombre" ++ + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" + msgstr "" +@@ -233,7 +276,7 @@ msgstr "" + "Este programa se distribuye con la esperanza de que será útil, pero SIN " + "NINGUNA GARANTÍA, incluso sin la garantía implícita de comerciabilidad o " + "IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Ver la GNU General Public License " +-"para más detalles. \n" ++"para más detalles. ⏎ \n" + "\n" + "Debe de haber recibido una copia de la Licencia Pública General de GNU junto " + "con este programa, si no, escriba a la Free Software Foundation, Inc., 59 " +@@ -241,7 +284,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-about.ui.h:20 + msgid "The Fedora Translation Team" +-msgstr "El Equipo de Traducción de Fedora" ++msgstr "El equipo de traducción de Fedora" + + #: ../src/virt-viewer-app.c:459 + msgid "Do you want to close the session?" +@@ -254,148 +297,152 @@ msgstr "No me pregunte otra vez" + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "La dirección es demasiado larga para unix socket_path: %s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "La creación del socket Unix ha fallado: %s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "La conexión a socket Unix ha fallado: %s" + + #: ../src/virt-viewer-app.c:955 + #, c-format + msgid "Waiting for display %d..." +-msgstr "Esperando el monitor %d…" ++msgstr "Esperando la pantalla %d…" + + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" +-msgstr "Tipo de gráfico sin soporte '%s'" ++msgstr "Tipo gráfico no tiene soporte '%s'" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "Falló la conexión a ssh." + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." +-msgstr "No se puede conectar al canal, solo se permite SSH." ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." ++msgstr "" + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "La conexión al canal no está soportada." + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "La pantalla solo puede ser unida a través de libvirt con --attach" ++msgstr "" ++"La pantalla únicamente puede conectarse a través de libvirt with --attach" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "Conectando al servidor gráfico" + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" + msgstr "Dominio de huéspedes se ha apagado" + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "Conectado al servidor gráfico" + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "No se pudo conectar al servidor gráfico %s" + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" +-msgstr "No se pudo autenticar con el servidor de escritorio remoto en %s: %s\n" ++msgstr "" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "No se puede autenticar con el servidor del escritorio remoto: %s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" + msgstr "Error de redirección USB: %s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "Nivel de enfoque debe estar dentro de %d-%d\n" ++msgstr "El nivel de amplificación debe estar entre %d-%d \n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "" ++msgstr "Mostrar _%d" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "Argumento kiosk-quit no válido: %s" ++msgstr "Argumento kiosk-quit es inválido: %s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "Mostrar información de versión" + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" +-msgstr "Nivel de enfoque de ventana, en porcentaje" ++msgstr "Aumentar acercamiento de ventana, en porcentaje" + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" +-"Abrir en modo pantalla completa (ajusta la resolución del invitado para que " +-"encaje con el cliente)" ++"Abierto en modo de pantalla completa (ajusta la resolución del huésped para " ++"adaptarse a la del cliente)." + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" + msgstr "Personalizar teclas calientes" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" +-msgstr "Activar el modo kiosco" ++msgstr "Activar el modo kiosk" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "Abandonar sobre condición dada en modo kiosco" ++msgstr "Salir según la condición determinada en modo kiosk" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "Mostrar información detallada" + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "Mostrar información de depuración" + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" + "\n" + "%s\n" + "\n" +-msgstr "" +-"Autenticación es requerida para la conexión %s para:\n" ++msgstr "Se requiere autenticación para la conexión %s a:\n" + "\n" + "%s\n" + "\n" +@@ -403,18 +450,21 @@ msgstr "" + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "Autenticación es requerida para la conexión %s:\n" ++msgstr "Se requiere autenticación para la conexión %s:\n" ++"\n" ++"\n" ++"\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" +-msgstr "Autenticación requerida" ++msgstr "Se necesita autenticación" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +@@ -422,7 +472,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "etiqueta" + +@@ -442,17 +492,18 @@ msgstr "Mostrar contraseña" + msgid "VNC does not provide GUID" + msgstr "VNC no proporciona GUID" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." + msgstr[0] "" ++msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -461,122 +512,126 @@ msgstr "" + msgid "Virt Viewer" + msgstr "Virt Viewer" + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" + msgstr "Contraseña inválida" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" + msgstr "Seleccione los dispositivos USB para redirigir" + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" + msgstr "" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Tipo de autenticación no compatible %d" + + #: ../src/virt-viewer-vm-connection.c:64 + msgid "No virtual machine found" +-msgstr "Máquina virtual no encontrada" ++msgstr "No se encontró ninguna maquina virtual" + + #: ../src/virt-viewer-vm-connection.c:93 + msgid "No virtual machine was chosen" +-msgstr "No se ha elegido ninguna máquina virtual" ++msgstr "No se seleccionó ninguna maquina virtual" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Supr" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Retroceso" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" + msgstr "" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "Captura de pantalla" + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" + msgstr "Desconocido" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" ++msgstr "" ++ ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "Desconectar" + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "Selección de dispositivos USB" + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "Enviar combinación de teclas" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "Salir de pantalla completa" + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Presione %s para liberar el puntero)" +@@ -584,14 +639,14 @@ msgstr "(Presione %s para liberar el puntero)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -601,152 +656,159 @@ msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" + msgstr "" +-"Por lo menos %s versión %s se requiere para establecer esta conexión, " +-"consulte %s para más información" ++"Por lo menos %s versión %s se requiere para configurar esta conexión, " ++"consulte %s para más información." + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "Al menos la %s versión %s es requerida para configurar esta conexión" ++msgstr "Por lo menos %s versión %s se requiere para configurar esta conexión" + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "Conexión directa sin túneles automáticos" + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" + msgstr "Añadir a la pantalla local mediante libvirt" + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "Conectar al hipervisor" + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "Esperando a que inicie el dominio" + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "Reconéctese al dominio tras el reinicio" + +-#: ../src/virt-viewer.c:105 ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" ++msgstr "" ++ ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "" ++ ++#: ../src/virt-viewer.c:154 + msgid "Virtual machine graphical console" + msgstr "Consola gráfica de la máquina virtual" + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" +-"\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" + msgstr "" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" + msgstr "" +-"\n" +-"No se ha especificado ningún DOMAIN-NAME|ID|UUID para '--wait'\n" +-"\n" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" + msgstr "Esperando a que el dominio de huéspedes reinicie" + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "No se puede determinar el tipo de gráficos para el huésped %s" + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "No se puede determinar el anfitrión para el huésped %s" + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "Huésped '%s' no está alcanzable" ++msgstr "No se puede conectar al nombre de huésped '%s' " + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" +-msgstr "Máquina virtual %s no está en ejecución" ++msgstr "La máquina virtual %s no se está ejecutando" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" + msgstr "Esperando a libvirt para inicio" + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "Buscando dominio de huéspedes" + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "Esperando a que el dominio de huéspedes sea creado" + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "Comprobando el estatus del dominio de huéspedes" + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" +-msgstr "No es posible obtener estado de huésped" ++msgstr "No se puede obtener estado de huésped" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "Esperando a que dominio de huéspedes inicie" + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "No puede conectarse a libvirt con URI: %s." ++msgstr "No se puede conectar a libvirt con URI: %s" + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[ninguno]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." +-msgstr "Fallo de autenticación." ++msgstr "Falló la autenticación." + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " + msgstr "Falló al conectarse a:" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" +-msgstr "_Fichero" ++msgstr "_Archivo" + + #: ../src/resources/ui/virt-viewer.ui.h:2 + msgid "_Screenshot" +-msgstr "" ++msgstr "_Instantánea" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "" ++msgstr "Selección de dispositivo _USB" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +-msgstr "Inserción de smartcard" ++msgstr "Inserción de Smartcard" + + #: ../src/resources/ui/virt-viewer.ui.h:5 + msgid "Smartcard removal" +-msgstr "Retiro de smartcard" ++msgstr "Retiro de Smartcard" + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "" ++msgid "_Change CD" ++msgstr "_Cambiar CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +@@ -758,11 +820,11 @@ msgstr "_Ver" + + #: ../src/resources/ui/virt-viewer.ui.h:9 + msgid "_Full screen" +-msgstr "" ++msgstr "_Pantalla completa" + + #: ../src/resources/ui/virt-viewer.ui.h:10 + msgid "_Zoom" +-msgstr "_Enfoque" ++msgstr "_Zoom" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +@@ -778,11 +840,11 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "" ++msgstr "_ Pantallas" + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +-msgstr "Liberar cursor" ++msgstr "Libere el cursor" + + #: ../src/resources/ui/virt-viewer.ui.h:16 + msgid "_Send key" +@@ -790,23 +852,19 @@ msgstr "_Enviar llave" + + #: ../src/resources/ui/virt-viewer.ui.h:17 + msgid "_Help" +-msgstr "_Ayuda" ++msgstr "Ay_uda" + + #: ../src/resources/ui/virt-viewer.ui.h:18 + msgid "_Guest Details" +-msgstr "_Detalles de Huésped" ++msgstr "_Información de huésped" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" + msgstr "" + +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "_Cambiar CD" +- + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +-msgstr "Detalles de Huésped" ++msgstr "Información de huésped" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:3 + msgid "Name:" +@@ -818,11 +876,7 @@ msgstr "GUID:" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:1 + msgid "Choose a virtual machine" +-msgstr "Elija una máquina virtual" +- +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "Nombre" ++msgstr "Elegir una máquina virtual" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" +@@ -830,20 +884,21 @@ msgstr "Máquinas virtuales disponibles" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "Preferencias" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +-msgstr "Compartición de carpeta" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:3 + msgid "Share folder" +-msgstr "Compartir capr" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "Sólo lectura" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "Spice" ++msgstr "" ++ +diff --git a/po/fr.po b/po/fr.po +index 54e1ac9..a3e6e9e 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -1,28 +1,25 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: + # Boris BARNIER , 2010 + # Christophe Fergeau , 2013 +-# Gé Baylard , 2014 + # Jérôme Fenal , 2012-2013 + # Sam Friedmann , 2010,2012 +-# Jean-Baptiste Holcroft , 2016. #zanata +-# Sam Friedmann , 2016. #zanata ++# Corina Roe , 2016. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2016-07-15 05:00-0400\n" +-"Last-Translator: Jean-Baptiste Holcroft \n" +-"Language-Team: French (http://www.transifex.com/projects/p/virt-viewer/" +-"language/fr/)\n" +-"Language: fr\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"PO-Revision-Date: 2016-10-12 01:08+0000\n" ++"Last-Translator: Corina Roe \n" ++"Language-Team: French \n" ++"Language: fr\n" + "Plural-Forms: nplurals=2; plural=(n > 1);\n" + "X-Generator: Zanata 3.9.6\n" + +@@ -33,7 +30,7 @@ msgstr "Afficheur distant" + + #: ../data/remote-viewer.appdata.xml.in.h:2 + msgid "Remotely access virtual machines" +-msgstr "Accéder à distance aux machines virtuelles" ++msgstr "" + + #: ../data/remote-viewer.appdata.xml.in.h:3 + msgid "" +@@ -52,123 +49,147 @@ msgstr "Accéder à des bureaux distants" + msgid "Virt-Viewer connection file" + msgstr "Fichier de connexion Virt-Viewer" + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" + msgstr "Définir le titre de la fenêtre" + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "" + "Ouvrir la connexion à l'aide d'une communication avec le contrôleur de Spice" + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" +-msgstr "Client Remote viewer" ++msgstr "Client de l'afficheur distant" + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" + msgstr "" +-"\n" +-"Erreur : impossible de gérer plusieurs URI\n" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" +-"\n" +-"Erreur : arguments surnuméraires spécifiés lors de l'utilisation du " +-"contrôleur Spice\n" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" +-"Lancer '%s --help' pour voir la liste complète des options de ligne de " +-"commande disponibles.\n" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "Impossible d'initier la connexion" + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "Affichage désactivé par le contrôleur" + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "Échec de la connexion du contrôleur : %s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" +-msgstr "impossible d'analyser l'uri ovirt" ++msgstr "impossible d'analyser uri ovirt" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" +-msgstr "L'authentification a été annulée" ++msgstr "L'authenfication a été annulée" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" +-msgstr "oVirt VM %s n'est pas en cours d'exécution" ++msgstr "VM oVirt %s n'est pas lancée" + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" +-msgstr "oVirt VM %s ne possède pas d'affichage" ++msgstr "VM oVirt %s n'a aucun affichage" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" +-msgstr "oVirt VM %s ne possède pas d'informations sur l'hôte" ++msgstr "" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "Le type d'affichage d'oVirt VM %s est inconnu : %d" ++msgstr "VM oVirt %s n'a aucun type d'affichage : %d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." + msgstr "Mise en place d'une session Spice..." + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" +-msgstr "Aucune connexion choisie" ++msgstr "Aucune connexion n'a été sélectionnée" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " +-msgstr "Fichier invalide %s  :" ++msgstr "Fichier invalide: %s" + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" + msgstr "Impossible de déterminer le type de la connexion à partir de l'URI" + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " +-msgstr "Impossible d'ouvrir une session oVirt : " ++msgstr "Impossible de créer une session oVirt :" ++ ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" ++msgstr "" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" + msgstr "Détails de la connexion" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "_Adresse de la connexion" ++msgstr "Adresse_Connexion" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +@@ -176,22 +197,40 @@ msgstr "Par exemple, spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "Connexions récentes" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "A_nnuler" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "C_onnecter" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "Nom" + + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" +-msgstr "À propos de Virt-Viewer" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-about.ui.h:2 + msgid "" +@@ -254,17 +293,17 @@ msgstr "Ne plus demander" + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "L'adresse est trop longue pour le chemin_socket unix : %s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "La création du socket unix a échoué : %s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "La connexion au socket unix a échoué : %s" + + #: ../src/virt-viewer-app.c:955 + #, c-format +@@ -274,133 +313,133 @@ msgstr "En attente de l'affichage %d..." + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" +-msgstr "Type d'affichage « %s » non pris en charge" ++msgstr "Type de graphique « %s » non pris en charge" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "Échec de la connexion ssh." + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." + msgstr "" +-"Impossible d'établir la connexion au canal, seul SSH est pris en charge." + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "La connexion au canal n'est pas prise en charge." + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "" +-"L'affichage peut uniquement être attaché à travers libvirt avec --attach" ++msgstr "L'affichage ne peut être attaché à libvirt qu'avec --attach" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "Connexion au serveur d'affichage" + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" + msgstr "Le domaine invité est fermé" + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "Connecté au serveur d'affichage" + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Impossible d'établir la connexion au serveur d'affichage %s" + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" +-"Impossible d'authentifier la connexion avec le serveur de bureau distantsur " +-"%s : %s\n" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "" +-"Impossible d'authentifier la connexion avec le serveur de bureau distant : %s" ++"Impossible d'authentifier la connexion avec le serveur de bureau distant : " ++"%s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" + msgstr "Erreur de redirection USB : %s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "Le niveau de zoom doit être dans la plage %d-%d\n" ++msgstr "Le niveau du zoom doit se trouver entre %d-%d\n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" +-msgstr "%s\n" ++msgstr "" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" +-msgstr "%s version %s" ++msgstr "" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "Afficher _%d" ++msgstr "Affichage _%d" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "Argument kiosk-quit invalide : %s" ++msgstr "Argument kiosk-quit non valide : %s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "Afficher les informations de version" + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" + msgstr "Niveau de zoom de la fenêtre, en pourcentage" + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" +-"Ouvre en mode plein écran (ajuste la résolution de l'invité à celle du " +-"client)" ++"Ouvrir en mode plein écran (ajuste la résolution de l'invité pour s'adapter " ++"à celle du client)." + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" + msgstr "Personnaliser les raccourcis clavier" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" +-msgstr "Activer le mode kiosque" ++msgstr "Activer le mode kiosk" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "Quitter sur une condition définie dans le mode kiosque" ++msgstr "Quitter en accordance aux conditions données en mode kiosk" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "Afficher les informations détaillées" + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "Afficher les informations de débogage" + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" + "\n" + "%s\n" + "\n" +-msgstr "" +-"L'authentification est requise pour la connexion %s à :\n" ++msgstr "Authentification requise pour la connexion %s à :\n" + "\n" + "%s\n" + "\n" +@@ -408,28 +447,26 @@ msgstr "" + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "" +-"L'authentification est requise pour la connexion %s :\n" +-"\n" ++msgstr "Authentification nécessaire pour la connexion %s :\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" + msgstr "Authentification requise" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "_OK" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "étiquette" + +@@ -449,17 +486,18 @@ msgstr "Afficher le mot de passe" + msgid "VNC does not provide GUID" + msgstr "VNC ne fournit pas de GUID" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" +-msgstr "Transferts de fichier" ++msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." + msgstr[0] "" ++msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -468,21 +506,21 @@ msgstr "" + msgid "Virt Viewer" + msgstr "Virt Viewer" + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" +-msgstr "Mot de passe invalide" ++msgstr "Mot de passe incorrect" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" + msgstr "Sélectionnez les périphériques USB à rediriger" + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "_Fermer" ++msgstr "" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Le type d'authentification %d n'est pas pris en charge" +@@ -493,97 +531,101 @@ msgstr "Aucune machine virtuelle trouvée" + + #: ../src/virt-viewer-vm-connection.c:93 + msgid "No virtual machine was chosen" +-msgstr "Aucune machine virtuelle choisie" ++msgstr "Aucune machine virtuelle sélectionnée" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Suppr" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Effacer" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" +-msgstr "Enregi_strer" ++msgstr "" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "Capture d'écran" + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" + msgstr "Inconnu" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" ++msgstr "" ++ ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "Déconnexion" + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "Sélection du périphérique USB" + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "Envoyer la combinaison de touches" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "Quitter le plein écran" + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Appuyer sur %s pour libérer la souris)" +@@ -591,14 +633,14 @@ msgstr "(Appuyer sur %s pour libérer la souris)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -608,131 +650,137 @@ msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" + msgstr "" +-"La configuration de cette connexion requiert au minimum %s version %s, " +-"veuillez consulter %s pour plus de détails" ++"%s version %s au moins est nécessaire pour définir cette connexion, voir %s " ++"pour plus de détails" + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "La configuration de cette connexion requiert au minimum %s version %s" ++msgstr "" ++"La configuration de cette connexion nécessite au minimum %s version %s" + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "Connexion directe sans tunnels automatiques" + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" + msgstr "S'attacher à l'affichage local à l'aide de libvirt" + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "Se connecter à l'hyperviseur" + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "En attente de démarrage du domaine" + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "Se reconnecter au domaine lors des redémarrages" + +-#: ../src/virt-viewer.c:105 ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" ++msgstr "" ++ ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "" ++ ++#: ../src/virt-viewer.c:154 + msgid "Virtual machine graphical console" + msgstr "Console graphique de la machine virtuelle" + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" +-"\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" + msgstr "" +-"\n" +-"Utilisation : %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" + msgstr "" +-"\n" +-"Aucun DOMAIN-NAME|ID|UUID n'a été spécifié pour « --wait »\n" +-"\n" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" + msgstr "En attente du redémarrage du domaine invité" + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "Impossible de déterminer le type d'affichage de l'invité %s" + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "Impossible de déterminer l'hôte de l'invité %s" + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "L'invité « %s » n'est pas joignable" ++msgstr "Invité « %s » non joignable" + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" +-msgstr "La machine virtuelle %s n'est pas en cours d'exécution" ++msgstr "La machine virtuelle « %s » n'est pas en cours d'exécution" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" + msgstr "En attente du démarrage de libvirt" + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "Recherche du domaine invité" + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "En attente de la création du domaine invité" + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "Vérification du statut du domaine invité" + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" +-msgstr "Impossible d'obtenir l'état de l'invité" ++msgstr "Impossible d'otenir l'état de l'invité" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "En attente du démarrage du domaine invité" + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "Impossible d'établir la connexion à libvirt avec l'URI : %s" ++msgstr "Impossible de se connecter à libvirt avec URI %s." + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[aucun]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." +-msgstr "Échec de l'authentification." ++msgstr "L'authentification a échoué" + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " +-msgstr "Échec de connexion :" ++msgstr "Échec de connexion :" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" + msgstr "_Fichier" +@@ -743,7 +791,7 @@ msgstr "_Capture d'écran" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "Sélection du périphérique _USB" ++msgstr "_Sélection du périphérique USB" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +@@ -754,12 +802,12 @@ msgid "Smartcard removal" + msgstr "Suppression d'une Smartcard" + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "_Préférences" ++msgid "_Change CD" ++msgstr "_Changer CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "_Quitter" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -775,19 +823,19 @@ msgstr "_Zoom" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "Agrand_ir" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "Rétréci_r" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "Taille _normale" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "Affichages" ++msgstr "_Affichages" + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +@@ -803,19 +851,15 @@ msgstr "_Aide" + + #: ../src/resources/ui/virt-viewer.ui.h:18 + msgid "_Guest Details" +-msgstr "_Détails de l'invité" ++msgstr "Infos_Invité" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "_À propos" +- +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "_Changer le CD" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +-msgstr "Détails de l'invité" ++msgstr "Infos Invité" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:3 + msgid "Name:" +@@ -827,11 +871,7 @@ msgstr "GUID :" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:1 + msgid "Choose a virtual machine" +-msgstr "Choisissez une machine virtuelle" +- +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "Nom" ++msgstr "Sélectionner une machine virtuelle" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" +@@ -839,20 +879,21 @@ msgstr "Machines virtuelles disponibles" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "Préférences" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +-msgstr "Partage de dossier" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:3 + msgid "Share folder" +-msgstr "Partager le dossier" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "Lecture seule" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "Spice" ++msgstr "" ++ +diff --git a/po/it.po b/po/it.po +index 1cb22ae..fe0a9d7 100644 +--- a/po/it.po ++++ b/po/it.po +@@ -1,30 +1,27 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: +-# Francesco D'Aluisio , 2013 + # Francesco Tombolini , 2010 + # fvalen , 2013 + # fvalen , 2012 + # Gianluca Sforna , 2010 + # Guido Grazioli , 2013 + # Silvio Pierro , 2012 +-# Francesco Valente , 2016. #zanata +-# Frediano Ziglio , 2016. #zanata ++# tchuang , 2016. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2016-09-07 08:52-0400\n" +-"Last-Translator: Frediano Ziglio \n" +-"Language-Team: Italian (http://www.transifex.com/projects/p/virt-viewer/" +-"language/it/)\n" +-"Language: it\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"PO-Revision-Date: 2016-10-19 01:53+0000\n" ++"Last-Translator: Copied by Zanata \n" ++"Language-Team: Italian \n" ++"Language: it\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: Zanata 3.9.6\n" + +@@ -35,7 +32,7 @@ msgstr "Visualizzatore remoto" + + #: ../data/remote-viewer.appdata.xml.in.h:2 + msgid "Remotely access virtual machines" +-msgstr "Accede a macchine virtuali da remoto" ++msgstr "" + + #: ../data/remote-viewer.appdata.xml.in.h:3 + msgid "" +@@ -45,11 +42,6 @@ msgid "" + "can connect directly to both local and remotely hosted guest OS, optionally " + "using SSL/TLS encryption." + msgstr "" +-"Remote Viewer fornisce un visualizzatore grafico per schermi guest. Per " +-"adesso supporta guest che usano i protocolli VNC o SPICE. Maggiori " +-"protocolli potrebbero essere supportati in base alle esigenze utente. Il " +-"visualizzatore può connettersi direttamente sia a guest locali che remoti, " +-"potendo usare la crittografia SSL/TLS." + + #: ../data/remote-viewer.desktop.in.h:2 + msgid "Access remote desktops" +@@ -59,142 +51,187 @@ msgstr "Accedi desktop remoti" + msgid "Virt-Viewer connection file" + msgstr "File di connessione Virt-Viewer" + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" + msgstr "Imposta il titolo della finestra" + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "Apri collegamento usando una comunicazione SPICE" + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" + msgstr "Client visualizzatore remoto" + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" + msgstr "" +-"\n" +-"Errore: non posso gestire URI multipli\n" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" +-"Eseguire '%s --help' per vedere la lista di opzioni linea di comando " +-"disponibili\n" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "Inizializzazione connessione fallita" + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "Schermo disabilitato dal controller" + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "Connessione controller fallita: %s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" +-msgstr "impossibile analizzare ovirt uri" ++msgstr "impossibile analizzare uri ovirt" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" +-msgstr "L'autenticazione è stata cancellata" ++msgstr "L'autenticazione è stata annullata" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" +-msgstr "oVirt VM %s non è in esecuzione" ++msgstr "La virtual machine oVirt %s non è in esecuzione" + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" +-msgstr "oVirt VM %s non ha alcun display" ++msgstr "La virtual machine oVirt %s non dispone di display" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" +-msgstr "oVirt VM %s non ha informazioni sull'host" ++msgstr "" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "oVirt VM %s presenta un tipo di display sconosciuto: %d" ++msgstr "La virtual machine oVirt %s ha un tipo di display sconosciuto: %d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." + msgstr "Impostazione sessione Spice in corso..." + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" +-msgstr "Nessuna connessione selezionata" ++msgstr "Non sono state selezionate connessioni" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " +-msgstr "File %s non valido" ++msgstr "%s file non valido: " + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" + msgstr "Impossibile determinare il tipo di connessione dall'URI" + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " +-msgstr "impossibile aprire la sessione oVirt:" ++msgstr "Impossibile aprire la sessione oVirt: " ++ ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" ++msgstr "" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" + msgstr "Dettagli connessione" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "Indirizzo connessione" ++msgstr "_Indirizzo di connessione" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +-msgstr "Per esempio, spice://foo.example.org:5900" ++msgstr "Ad esempio, spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "Connessioni recenti" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "_Cancella" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "C_onnetti" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "Nome" + + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" +-msgstr "Informazioni su Virt-Viewer" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-about.ui.h:2 + msgid "" +@@ -257,17 +294,17 @@ msgstr "Non chiedermelo più" + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "Indirizzo troppo lungo per percorso_socket unix: %s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "Creazione socket unix non riuscita: %s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "Connessione a socket unix non riuscita: %s" + + #: ../src/virt-viewer-app.c:955 + #, c-format +@@ -277,131 +314,131 @@ msgstr "In attesa del display %d..." + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" +-msgstr "Tipo di grafico '%s' non supportato" ++msgstr "Tipo grafico non supportato: \"%s\"" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "Connessione a ssh fallita." + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." +-msgstr "Impossibile connettersi al canale, è supportato solo SSH." ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." ++msgstr "" + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "Connessione al canale non supportata." + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "Il display può essere assegnato solo usando libvirt con --attach" ++msgstr "È possibile collegare un display solo tramite libvirt con --attach" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "Connessione al server grafico in corso" + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" + msgstr "Il dominio del guest si è arrestato" + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "Connesso al server grafico" + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Impossibile connettersi al server grafico %s" + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" +-"Impossibile eseguire l'autenticazione con il server desktop remoto su %s: " +-"%s\n" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "" + "Impossibile eseguire l'autenticazione con il server desktop remoto su: %s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" + msgstr "Errore di reindirizzamento USB: %s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "Livello di Zoom deve essere tra %d-%d\n" ++msgstr "Il livello di zoom deve essere tra %d e %d\n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" +-msgstr "%s\n" ++msgstr "" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" +-msgstr "%s versione %s" ++msgstr "" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "Schermo _%d" ++msgstr "Visualizza _%d" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "Argomento kiosk-quit invalido: %s" ++msgstr "Argomento kiosk-quit non valido: %s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "Mostra informazioni sulla versione" + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" + msgstr "Livello di zoom della finestra, in percentuale" + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" +-"Apri in modalità schermo intero (modificare la risoluzione del guest per " +-"adattarla al client)" ++"Apri in modalità schermo intero (adatta la risoluzione del guest al client)" + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" + msgstr "Personalizza i tasti di scelta rapida" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" +-msgstr "Abilita modalità Kiosk" ++msgstr "Abilità modalità tutto schermo" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "Esci dalla modalità kiosk in una data condizione" ++msgstr "Esci con determinate condizioni in modalità tutto schermo" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "Mostra informazioni dettagliate" + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "Mostra le informazioni di debug" + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" + "\n" + "%s\n" + "\n" +-msgstr "" +-"Autenticazione necessaria per la connessione %s a:\n" ++msgstr "Autenticazione richiesta per la connessione %s a:\n" + "\n" + "%s\n" + "\n" +@@ -409,26 +446,26 @@ msgstr "" + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "Autenticazione necessaria per la connessione %s:\n" ++msgstr "Autenticazione richiesta per la connessione %s:\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" + msgstr "Autenticazione necessaria" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "_OK" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "etichetta" + +@@ -446,42 +483,43 @@ msgstr "Mostra password" + + #: ../src/virt-viewer-display-vnc.c:134 + msgid "VNC does not provide GUID" +-msgstr "VNC non fornisce il GUID" ++msgstr "VNC non fornisce GUID" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" +-msgstr "Trasferimenti file" ++msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." + msgstr[0] "" ++msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" + + #: ../src/virt-viewer-main.c:38 + msgid "Virt Viewer" +-msgstr "Virt Viewer" ++msgstr "Virt-Viewer" + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" +-msgstr "Passoword non valida" ++msgstr "Password non valida" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" + msgstr "Seleziona i dispositivi USB per il reindirizzamento" + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "_Chiudi" ++msgstr "" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Tipo di autenticazione %d non supportata" +@@ -494,95 +532,99 @@ msgstr "Nessuna macchina virtuale trovata" + msgid "No virtual machine was chosen" + msgstr "Nessuna macchina virtuale selezionata" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" +-msgstr "Ctrl+Alt+_Del" ++msgstr "Ctrl+Alt+_Canc" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" +-msgstr "_Salva" ++msgstr "" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "Schermata" + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" + msgstr "Sconosciuto" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" ++msgstr "" ++ ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "Scollega" + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "Selezione dispositivo USB" + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "Invia combinazione di tasti" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "Lascia a schermo intero" + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Premere %s per rilasciare il puntatore)" +@@ -590,14 +632,14 @@ msgstr "(Premere %s per rilasciare il puntatore)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -607,142 +649,147 @@ msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" + msgstr "" +-"Per impostare questa connessione è necessario almeno %s versione %s, per " +-"informazioni consultare %s" ++"%s versione %s è requisito minimo per configurare questa connessione, vedere " ++"%s per i dettagli" + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" + msgstr "%s versione %s è requisito minimo per configurare questa connessione" + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "Connessione diretta con nessun tunnel automatico" + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" + msgstr "Allega al display locale usando libvirt" + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "Connetti con l'hypervisor" + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "Attendi l'avvio del dominio" + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "Riconnetti con il dominio previo riavvio" + +-#: ../src/virt-viewer.c:105 ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" ++msgstr "" ++ ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "" ++ ++#: ../src/virt-viewer.c:154 + msgid "Virtual machine graphical console" +-msgstr "Console grafica della macchina virtuale" ++msgstr "Console grafica macchina virtuale" + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" +-"\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" + msgstr "" +-"\n" +-"Uso: %s [OPZIONI] [NOME-DOMINIO|ID|UUID]\n" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" + msgstr "" +-"\n" +-"Non è stato specificato alcun DOMAIN-NAME|ID|UUID per '--wait'\n" +-"\n" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" + msgstr "In attesa del riavvio del dominio guest" + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "Impossibile determinare il tipo grafico per il guest %s" + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "Impossibile determinare l'host per il guest %s" + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "Il guest '%s' non è raggiungibile" ++msgstr "Guest \"%s\" non raggiungibile" + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" + msgstr "La macchina virtuale %s non è in esecuzione" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" + msgstr "In attesa dell'avvio di libvirt" + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "Ricerca dominio guest in corso" + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "In attesa di creazione del dominio guest" + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "Controllo stato del dominio guest in corso" + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" + msgstr "Impossibile ottenere lo stato del guest" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "In attesa dell'avvio del dominio guest" + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "Impossibile connettersi a libvirt con URI: %s." ++msgstr "Impossibile connettersi a libvirt con l'URI: %s." + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[nessuno]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." +-msgstr "Autenticazione fallita." ++msgstr "Autenticazione non riuscita." + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " +-msgstr "Impossibile collegarsi:" ++msgstr "Impossibile connettersi: " + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" + msgstr "_File" + + #: ../src/resources/ui/virt-viewer.ui.h:2 + msgid "_Screenshot" +-msgstr "Cattura _schermata" ++msgstr "_Screenshot" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "Seleziona dispositivo _USB" ++msgstr "Selezione dispositivo _USB" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +@@ -753,12 +800,12 @@ msgid "Smartcard removal" + msgstr "Rimozione Smartcard" + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "_Preferenze" ++msgid "_Change CD" ++msgstr "_Cambia CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "_Esci" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -766,7 +813,7 @@ msgstr "_Visualizza" + + #: ../src/resources/ui/virt-viewer.ui.h:9 + msgid "_Full screen" +-msgstr "Schermo intero" ++msgstr "Schermo _intero" + + #: ../src/resources/ui/virt-viewer.ui.h:10 + msgid "_Zoom" +@@ -782,11 +829,11 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "Dimensione _normale" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "_Schermi" ++msgstr "_Visualizzazioni" + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +@@ -802,19 +849,15 @@ msgstr "_Aiuto" + + #: ../src/resources/ui/virt-viewer.ui.h:18 + msgid "_Guest Details" +-msgstr "Dettagli del _Guest" ++msgstr "_Dettagli guest" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "Informazioni" +- +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "_Cambia CD" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +-msgstr "Dettagli del guest" ++msgstr "Dettagli guest" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:3 + msgid "Name:" +@@ -826,32 +869,29 @@ msgstr "GUID:" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:1 + msgid "Choose a virtual machine" +-msgstr "Seleziona una macchina virtuale" +- +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "Nome" ++msgstr "Selezionare una macchina virtuale" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" +-msgstr "Macchina virtuale disponibile" ++msgstr "Macchine virtuali disponibili" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "Preferenze" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +-msgstr "Condivisione cartella" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:3 + msgid "Share folder" +-msgstr "Condividi cartella" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "Sola-lettura" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "Spice" ++msgstr "" ++ +diff --git a/po/ja.po b/po/ja.po +index de6d261..066ca67 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -1,26 +1,26 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: +-# Hajime Taira , 2012-2014 ++# Hajime Taira , 2012 + # Kiyoto Hashida , 2010 +-# noriko , 2014 + # Tomoyuki KATO , 2012-2013 +-# Hajime Taira , 2015. #zanata ++# asasaki , 2016. #zanata ++# jito , 2016. #zanata ++# kmoriguc , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2015-12-08 10:06-0500\n" +-"Last-Translator: Hajime Taira \n" +-"Language-Team: Japanese (http://www.transifex.com/projects/p/virt-viewer/" +-"language/ja/)\n" +-"Language: ja\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"PO-Revision-Date: 2017-05-15 01:23+0000\n" ++"Last-Translator: kmoriguc \n" ++"Language-Team: Japanese \n" ++"Language: ja\n" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Zanata 3.9.6\n" + +@@ -31,7 +31,7 @@ msgstr "リモートビューアー" + + #: ../data/remote-viewer.appdata.xml.in.h:2 + msgid "Remotely access virtual machines" +-msgstr "" ++msgstr "リモートで仮想マシンにアクセスする" + + #: ../data/remote-viewer.appdata.xml.in.h:3 + msgid "" +@@ -41,6 +41,9 @@ msgid "" + "can connect directly to both local and remotely hosted guest OS, optionally " + "using SSL/TLS encryption." + msgstr "" ++"リモートビューアーは、ゲスト OS の画面にグラフィカルビューアーを提供します。現時点では、VNC または SPICE プロトコルを使用したゲスト OS " ++"に対応しています。ユーザーからの需要によっては、今後サポート対象のプロトコルが拡大する可能性もあります。ビューアーはローカルおよびリモートでホストされているゲスト " ++"OS に直接接続することが可能で、オプションで SSL/TLS 暗号化を使用します。" + + #: ../data/remote-viewer.desktop.in.h:2 + msgid "Access remote desktops" +@@ -50,115 +53,150 @@ msgstr "リモートデスクトップにアクセスする" + msgid "Virt-Viewer connection file" + msgstr "Virt-Viewer 接続ファイル" + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "CD 名 の取得に失敗しました" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "読込中..." ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "リフレッシュ" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "閉じる" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "原因不明のエラー" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "CD の変更に失敗しました" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "CD の変更" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" + msgstr "ウィンドウタイトルの設定" + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "Spice コントローラー通信を使用して接続を開く" + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" + msgstr "リモートビューアークライアント" + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" +-msgstr "" ++msgstr "\n" ++"エラー: 複数の URI を処理できません\n" ++"\n" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" +-msgstr "" ++msgstr "\n" ++"エラー: Spice コントローラーを使用している間に余分な引数が指定されました\n" ++"\n" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" +-msgstr "" ++msgstr "利用可能なコマンドラインオプションを一覧表示するには '%s --help' を実行してください\n" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "接続の初期化に失敗しました" + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "ディスプレイがコントローラーにより無効化されました" + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "コントローラーの接続に失敗しました: %s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" +-msgstr "oVirt URI の構文解析に失敗しました" ++msgstr "ovirt uri の構文解析に失敗しました" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "認証が取り消されました" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" +-msgstr "oVirt上の仮想マシン %s は稼働していません" ++msgstr "oVirt VM %s が実行されていません" + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" +-msgstr "oVirt上の仮想マシン %s にはディスプレイがありません" ++msgstr "oVirt VM %s にはディスプレイがありません" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" +-msgstr "oVirt 上の仮想マシン %s はホストの情報がありません" ++msgstr "oVirt VM %s にはホストの情報がありません" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "oVirt上の仮想マシン %s は不明なディスプレイタイプ: %d を搭載しています" ++msgstr "oVirt VM %s のディスプレイの種類は不明です: %d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." + msgstr "Spice セッションのセットアップ中..." + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" + msgstr "接続が選択されていません" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " +-msgstr "無効なファイル %s:" ++msgstr "無効なファイル %s: " + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" + msgstr "URI から接続の種類を決定できません" + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " +-msgstr "oVirt セッションを開けません:" ++msgstr "oVirt セッションを開けませんでした: " ++ ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" ++msgstr "接続できません: %s" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" + msgstr "接続の詳細" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "" ++msgstr "接続アドレス(_A)" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +@@ -169,19 +207,37 @@ msgid "Recent connections" + msgstr "最近の接続" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "キャンセル(_C)" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "接続(_O)" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "読み込み中..." ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "ISO の選択" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "選択済み" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "名前" + + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" +-msgstr "" ++msgstr "Virt-Viewer について" + + #: ../src/resources/ui/virt-viewer-about.ui.h:2 + msgid "" +@@ -193,9 +249,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-about.ui.h:4 + msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" +-msgstr "" +-"GTK-VNC, SPICE-GTK および libvirt でビルドされたリモートデスクトップクライア" +-"ント" ++msgstr "GTK-VNC, SPICE-GTK および libvirt でビルドされたリモートデスクトップクライアント" + + #: ../src/resources/ui/virt-viewer-about.ui.h:5 + msgid "virt-manager.org" +@@ -246,17 +300,17 @@ msgstr "二度と確認しない" + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "unix socket_path に対してアドレスが長すぎます: %s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "unix ソケットの作成に失敗しました: %s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "unix ソケットへの接続に失敗しました: %s" + + #: ../src/virt-viewer-app.c:955 + #, c-format +@@ -266,128 +320,129 @@ msgstr "ディスプレイ %d を待機中..." + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" +-msgstr "サポートされないグラフィックス形式 '%s' です" ++msgstr "サポートされないグラフィック形式 '%s'" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "SSH への接続に失敗しました。" + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." +-msgstr "チャンネルに接続できません、SSH のみがサポートされます。" ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "チャネルに接続できません: %s" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." ++msgstr "サポートされるのは、SSH または unix ソケット接続のみです。" + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "サポートされないチャネルに接続します。" + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "ディスプレイは libvirt にて --attach を指定する場合にのみ付与できます" ++msgstr "-attach で libvirt から接続できるのはディスプレイのみです" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "グラフィックサーバーに接続中" + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" + msgstr "仮想マシンがシャットダウンしました" + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "グラフィックサーバーに接続" + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "グラフィックサーバー %s に接続できません" + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" +-msgstr "%s 上のリモートデスクトップサーバーの認証で失敗しました: %s\n" ++msgstr "%s のリモートデスクトップサーバーで認証に失敗しました: %s\n" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" +-msgstr "リモートデスクトップサーバーの認証で失敗しました: %s" ++msgstr "リモートデスクトップサーバーでの認証に失敗しました: %s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" + msgstr "USB リダイレクトエラー: %s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "ズームレベルは %d-%d の範囲内でなければいけません\n" ++msgstr "ズームレベルは %d-%d の範囲内でなければいけません\n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" +-msgstr "" ++msgstr "%s\n" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" +-msgstr "" ++msgstr "%s バージョン %s" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "" ++msgstr "ディスプレイ_%d" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "無効な kiosk-quit の引数: %s" ++msgstr "無効な kiosk-quit 引数: %s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "バージョン情報を表示します" + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" + msgstr "ウィンドウのズームレベル(パーセント単位)" + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" +-msgstr "" +-"フルスクリーンモードで開きます (クライアントに適するよう、仮想マシンを自動調" +-"整します)" ++msgstr "フルスクリーンモードで開きます (クライアントに合わせてゲストの解像度を調整します)。" + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" + msgstr "ホットキーのカスタマイズ" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" +-msgstr "Kiosk モードを有効化" ++msgstr "キオスクモードを有効にする" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "Kiosk モードを与えられた条件で終了します" ++msgstr "キオスクモードで指定条件について終了する" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "詳細情報を表示します" + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "デバッグ情報を表示します" + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" + "\n" + "%s\n" + "\n" +-msgstr "" +-"%s 接続のために認証が必要です:\n" ++msgstr "%s 接続には認証が必要:\n" + "\n" + "%s\n" + "\n" +@@ -395,26 +450,26 @@ msgstr "" + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "%s 接続のために認証が必要です:\n" ++msgstr "%s 接続には認証が必要:\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" + msgstr "認証が必要です" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "OK(_O)" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "ラベル" + +@@ -428,46 +483,46 @@ msgstr "ユーザー名:" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:7 + msgid "Show password" +-msgstr "パスワードの表示" ++msgstr "パスワードを表示する" + + #: ../src/virt-viewer-display-vnc.c:134 + msgid "VNC does not provide GUID" + msgstr "VNC が GUID を提供していません" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" +-msgstr "" ++msgstr "ファイルの転送" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." +-msgstr[0] "" ++msgstr[0] "%d 個のファイルを転送しています…" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" +-msgstr "" ++msgstr "エラーにより以下のファイルの転送に失敗しました:%s" + + #: ../src/virt-viewer-main.c:38 + msgid "Virt Viewer" + msgstr "仮想マシンビューアー" + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" + msgstr "無効なパスワード" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" + msgstr "リダイレクトする USB デバイスを選択" + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "閉じる(_C)" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "サポートしていない認証の種類 %d" +@@ -478,97 +533,101 @@ msgstr "仮想マシンが見つかりません" + + #: ../src/virt-viewer-vm-connection.c:93 + msgid "No virtual machine was chosen" +-msgstr "仮想マシンが何も選択されていません" ++msgstr "仮想マシンが選択されていません" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+Del(_D)" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+Backspace(_B)" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F1(_1)" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F2(_2)" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F3(_3)" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F4(_4)" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F5(_5)" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F6(_6)" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F7(_7)" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F8(_8)" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F9(_9)" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F10(_0)" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" +-msgstr "" ++msgstr "保存(_S)" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "スクリーンショット" + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" + msgstr "不明" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" ++msgstr "oVirt に接続できません" ++ ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "切断" + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "USB デバイスの選択" + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "組み合わせキーの送信" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "フルスクリーンの解除" + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(ポインターを開放するには %s を押します)" +@@ -576,14 +635,14 @@ msgstr "(ポインターを開放するには %s を押します)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -592,141 +651,150 @@ msgstr " " + msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" +-msgstr "" +-"この接続を確立するために少なくとも %s バージョン %s が必要です。詳しくは %s " +-"をご確認下さい。" ++msgstr "少なくとも %s バージョン %s がこの接続をセットアップするために必要です。詳細は、%s を参照してください。" + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "この接続を確立するために少なくとも %s バージョン %s が必要です。" ++msgstr "少なくとも %s バージョン %s がこのセッションをセットアップするために必要です" + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "自動的にトンネリングせず直接接続する" + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" + msgstr "libvirt を使用してローカルディスプレイに接続" + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "ハイパーバイザーに接続" + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "仮想マシンの起動を待つ" + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "再起動時に仮想マシンに再接続" + +-#: ../src/virt-viewer.c:105 ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "仮想マシンを名前で選択" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" ++msgstr "仮想マシンを id で選択" ++ ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "仮想マシンを uuid で選択" ++ ++#: ../src/virt-viewer.c:154 + msgid "Virtual machine graphical console" +-msgstr "仮想マシングラフィカルコンソール" ++msgstr "仮想マシンのグラフィカルコンソール" + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgstr "\n" ++"使用法: %s [オプション] [ID|UUID|ドメイン名]\n" + "\n" +-msgstr "" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" +-msgstr "" +-"\n" +-"'--wait' に対して ドメイン名|ID|UUID が指定されていません\n" ++msgstr "\n" ++"ID|UUID|DOMAIN-NAME が '%s' に指定されていません\n" + "\n" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" + msgstr "仮想マシンが再起動するのを待機中" + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "仮想マシン %s のグラフィックの種類を決定できません" + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "仮想マシン %s のホストを決定できません" + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "ゲスト '%s' が応答しません" ++msgstr "ゲスト '%s' に到達できません" + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" +-msgstr "仮想マシン %s は稼働していません" ++msgstr "仮想マシン %s は実行されていません" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" + msgstr "libvirt の起動を待つ" + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "仮想マシンを検索中" + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "仮想マシンが作成されるのを待機中" + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "仮想マシンの状態を確認中" + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" +-msgstr "ゲストの状態を取得できませんでした" ++msgstr "ゲストの状態を取得できません" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "仮想マシンが開始するのを待機中" + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "libvirt URI に接続できません: %s" ++msgstr "URI %s で libvirt に接続できません。" + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[なし]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." + msgstr "認証に失敗しました。" + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " + msgstr "接続に失敗しました:" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" + msgstr "ファイル(_F)" + + #: ../src/resources/ui/virt-viewer.ui.h:2 + msgid "_Screenshot" +-msgstr "" ++msgstr "スクリーンショット(_S)" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "" ++msgstr "USB デバイスの選択(_U)" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +@@ -737,12 +805,12 @@ msgid "Smartcard removal" + msgstr "スマートカードの抜き取り" + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "" ++msgid "_Change CD" ++msgstr "CD の変更(_C)" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "終了(_Q)" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -750,7 +818,7 @@ msgstr "表示(_V)" + + #: ../src/resources/ui/virt-viewer.ui.h:9 + msgid "_Full screen" +-msgstr "" ++msgstr "フルスクリーン(_F)" + + #: ../src/resources/ui/virt-viewer.ui.h:10 + msgid "_Zoom" +@@ -758,19 +826,19 @@ msgstr "ズーム(_Z)" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "拡大(_I)" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "縮小(_O)" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "通常のサイズ(_N)" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "" ++msgstr "ディスプレイ(_D)" + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +@@ -786,19 +854,15 @@ msgstr "ヘルプ(_H)" + + #: ../src/resources/ui/virt-viewer.ui.h:18 + msgid "_Guest Details" +-msgstr "仮想マシンの詳細(_G)" ++msgstr "ゲストの詳細(_G)" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" +- +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "CDの変更(_C)" ++msgstr "情報(_A)" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +-msgstr "仮想マシンの詳細" ++msgstr "ゲストの詳細" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:3 + msgid "Name:" +@@ -812,25 +876,21 @@ msgstr "GUID:" + msgid "Choose a virtual machine" + msgstr "仮想マシンの選択" + +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "名前" +- + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" + msgstr "利用可能な仮想マシン" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "個人設定" ++msgstr "設定" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +-msgstr "フォルダー共有" ++msgstr "フォルダーの共有" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:3 + msgid "Share folder" +-msgstr "共有フォルダー" ++msgstr "フォルダーを共有" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +@@ -839,3 +899,4 @@ msgstr "読み込み専用" + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "Spice" ++ +diff --git a/po/ko.po b/po/ko.po +index c41111b..892ea46 100644 +--- a/po/ko.po ++++ b/po/ko.po +@@ -1,26 +1,28 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: + # Automatically generated, 2010 + # eukim , 2013 + # eukim , 2012 + # eukim , 2012 + # Hyunsok Oh , 2010 ++# eukim , 2013. #zanata ++# eukim , 2016. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2015-02-20 08:09-0500\n" +-"Last-Translator: Copied by Zanata \n" +-"Language-Team: Korean (http://www.transifex.com/projects/p/virt-viewer/" +-"language/ko/)\n" +-"Language: ko\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"PO-Revision-Date: 2016-10-17 02:37+0000\n" ++"Last-Translator: eukim \n" ++"Language-Team: Korean (http://www.transifex.com/projects/p/fedora/language/" ++"ko/)\n" ++"Language: ko\n" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Zanata 3.9.6\n" + +@@ -50,127 +52,159 @@ msgstr "원격 데스크톱 액세스 " + msgid "Virt-Viewer connection file" + msgstr "Virt-Viewer 연결 파일 " + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" + msgstr "창 제목 설정 " + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "Spice 컨트롤러 통신을 사용하여 연결을 오픈합니다 " + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" +-msgstr "" ++msgstr "원격 뷰어 클라이언트 " + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "연결 초기화 실패 " + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "컨트롤러에 의해 디스플레이가 비활성화됨 " + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "컨트롤러 연결에 실패함: %s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" +-msgstr "" ++msgstr "ovirt uri 구문 분석에 실패했습니다" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" +-msgstr "" ++msgstr "인증이 취소되었습니다" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" +-msgstr "" ++msgstr "oVirt VM %s이/가 실행되고 있지 않습니다" + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" +-msgstr "" ++msgstr "oVirt VM %s에 디스플레이가 없습니다" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "" ++msgstr "oVirt VM %s에 알 수 없는 디스플레이 유형이 있습니다: %d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." + msgstr "Spice 세션 설정 중..." + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" +-msgstr "" ++msgstr "연결이 선택되어 있지 않습니다" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " +-msgstr "" ++msgstr "잘못된 파일 %s:" + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" + msgstr "URI에서 연결 유형을 지정할 수 없음 " + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " ++msgstr "oVirt 세션을 열 수 없습니다:" ++ ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" + msgstr "" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" + msgstr "상세 연결 정보" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "" ++msgstr "연결 주소 (_A) " + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +-msgstr "" ++msgstr "예: spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" + msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" + msgstr "" + +@@ -179,6 +213,23 @@ msgstr "" + msgid "C_onnect" + msgstr "" + ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "이름" ++ + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" + msgstr "" +@@ -188,6 +239,8 @@ msgid "" + "Copyright (C) 2007-2012 Daniel P. Berrange\n" + "Copyright (C) 2007-2014 Red Hat, Inc." + msgstr "" ++"Copyright (C) 2007-2012 Daniel P. Berrange\n" ++"Copyright (C) 2007-2014 Red Hat, Inc." + + #: ../src/resources/ui/virt-viewer-about.ui.h:4 + msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" +@@ -242,17 +295,17 @@ msgstr "다시 묻지 않습니다 " + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "unix socket_path 주소가 너무 깁니다: %s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "unix 소켓 생성에 실패했습니다: %s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "unix 소켓 연결에 실패했습니다: %s" + + #: ../src/virt-viewer-app.c:955 + #, c-format +@@ -262,138 +315,145 @@ msgstr "디스플레이 %d를 기다리는 중..." + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" +-msgstr "" ++msgstr "지원되지 않는 그래픽 유형 '%s'" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "ssh 연결을 실패했습니다. " + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." +-msgstr "채널에 연결할 수 없습니다, SSH만 지원됩니다. " ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." ++msgstr "" + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "지원되지 않는 채널에 연결합니다. " + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "" ++msgstr "디스플레이는 --attach로 libvirt를 통해 연결될 수 있습니다" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "그래픽 서버에 연결 중 " + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" + msgstr "게스트 도메인이 종료되었습니다 " + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "그래픽 서버에 연결 " + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "그래픽 서버 %s에 연결할 수 없음 " + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "원격 데스크탑 서버로 인증할 수 없음: %s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" + msgstr "USB 리디렉션 오류: %s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "" ++msgstr "줌 레벨은 %d-%d 범위 내에 있어야 합니다\n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "" ++msgstr "디스플레이 _%d" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "" ++msgstr "잘못된 kiosk-quit 인수: %s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "버전 정보 보기 " + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" + msgstr "윈도우의 줌 레벨 (백분율) " + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" +-msgstr "" ++msgstr "전체 화면 모드로 엽니다 (클라이언트에 맞게 게스트 해상도를 조정합니다)." + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" + msgstr "핫키 사용자 정의 " + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" +-msgstr "" ++msgstr "kiosk 모드 활성화" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "" ++msgstr "kiosk 모드에서 지정된 조건을 종료" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" +-msgstr "" ++msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "상세 정보 보기 " + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "디버그 정보 보기 " + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" ++"\n" ++"%s\n" ++"\n" ++msgstr "%s 연결에 인증이 필요합니다:\n" + "\n" + "%s\n" + "\n" +-msgstr "" + + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "" ++msgstr "%s 연결에 인증이 필요합니다:\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" + msgstr "인증이 필요함 " +@@ -404,7 +464,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "레이블 " + +@@ -418,23 +478,23 @@ msgstr "사용자 이름 " + + #: ../src/resources/ui/virt-viewer-auth.ui.h:7 + msgid "Show password" +-msgstr "" ++msgstr "암호 표시 " + + #: ../src/virt-viewer-display-vnc.c:134 + msgid "VNC does not provide GUID" +-msgstr "" ++msgstr "VNC는 GUID를 제공하지 않습니다" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." + msgstr[0] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -443,122 +503,126 @@ msgstr "" + msgid "Virt Viewer" + msgstr "가상 머신 뷰어 " + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" +-msgstr "" ++msgstr "잘못된 암호" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" + msgstr "리디렉션을 위한 USB 장치 선택 " + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" + msgstr "" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "지원되지 않는 인증 유형 %d" + + #: ../src/virt-viewer-vm-connection.c:64 + msgid "No virtual machine found" +-msgstr "" ++msgstr "가상 머신을 찾을 수 없습니다" + + #: ../src/virt-viewer-vm-connection.c:93 + msgid "No virtual machine was chosen" +-msgstr "" ++msgstr "가상 머신이 선택되어 있지 않습니다" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+Del(_D) " + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+Backspace(_B)" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" + msgstr "" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "스크린샷 " + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" ++msgstr "알 수 없음" ++ ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "연결 해제 " + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "USB 장치 선택 " + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "조합 키 전송" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "전체 화면 해제 " + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(포인터를 개방하려면 %s를 누르십시오)" +@@ -566,14 +630,14 @@ msgstr "(포인터를 개방하려면 %s를 누르십시오)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -582,136 +646,146 @@ msgstr " " + msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" +-msgstr "" ++msgstr "이 연결을 설정하기 위해 최소한 %s 버전 %s이 필요합니다. 자세한 내용은 %s에서 참조하십시오" + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "" ++msgstr "이 연결을 설정하기 위해 최소한 %s 버전 %s이 필요합니다" + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "자동으로 터널링하지 않고 직접 연결 " + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" + msgstr "libvirt를 사용하여 로컬 디스플레이에 연결 " + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "하이퍼바이저에 연결 " + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "도메인 시작을 기다립니다 " + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "다시 시작시 도메인에 다시 연결 " + +-#: ../src/virt-viewer.c:105 +-msgid "Virtual machine graphical console" ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" + msgstr "" + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "" ++ ++#: ../src/virt-viewer.c:154 ++msgid "Virtual machine graphical console" ++msgstr "가상 머신 그래픽 콘솔" ++ ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" +-"\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" + msgstr "" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" + msgstr "" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" + msgstr "다시 시작할 게스트 도메인을 기다리는 중 " + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "게스트 %s의 그래픽 유형을 지정할 수 없음 " + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "게스트 %s의 호스트를 지정할 수 없음 " + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "" ++msgstr "게스트 '%s'에 연결할 수 없습니다" + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" +-msgstr "" ++msgstr "가상 머신 %s이/가 실행되지 않습니다" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" + msgstr "libvirt 시작을 기다리는 중 " + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "게스트 도메인 검색 중 " + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "게스트 도메인이 생성되기를 기다리는 중 " + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "게스트 도메인 상태 확인 중 " + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" +-msgstr "" ++msgstr "게스트 상태를 가져올 수 없습니다" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "시작할 게스트 도메인을 기다리는 중 " + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "" ++msgstr "URI %s에서 libvirt에 연결할 수 없습니다." + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[없음]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." +-msgstr "" ++msgstr "인증 실패." + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " +-msgstr "" ++msgstr "연결 실패:" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" + msgstr "파일(_F)" + + #: ../src/resources/ui/virt-viewer.ui.h:2 + msgid "_Screenshot" +-msgstr "" ++msgstr "스크린샷 (_S)" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "" ++msgstr "USB 장치 선택 (_U)" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +@@ -722,8 +796,8 @@ msgid "Smartcard removal" + msgstr "스마트카드 제거 " + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "" ++msgid "_Change CD" ++msgstr "CD 변경 (_C)" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +@@ -735,7 +809,7 @@ msgstr "보기(_V)" + + #: ../src/resources/ui/virt-viewer.ui.h:9 + msgid "_Full screen" +-msgstr "" ++msgstr "전체 화면(_F)" + + #: ../src/resources/ui/virt-viewer.ui.h:10 + msgid "_Zoom" +@@ -755,7 +829,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "" ++msgstr "디스플레이 (_D)" + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +@@ -771,39 +845,31 @@ msgstr "도움말(_H) " + + #: ../src/resources/ui/virt-viewer.ui.h:18 + msgid "_Guest Details" +-msgstr "" ++msgstr "게스트 정보 (_G)" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" + msgstr "" + +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "" +- + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +-msgstr "" ++msgstr "게스트 정보" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:3 + msgid "Name:" +-msgstr "" ++msgstr "이름:" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:4 + msgid "GUID:" +-msgstr "" ++msgstr "GUID:" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:1 + msgid "Choose a virtual machine" +-msgstr "" +- +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "" ++msgstr "가상 머신 선택" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" +-msgstr "" ++msgstr "사용 가능한 가상 머신" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +@@ -824,3 +890,4 @@ msgstr "" + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "" ++ +diff --git a/po/pt_BR.po b/po/pt_BR.po +index 9e155c2..21745aa 100644 +--- a/po/pt_BR.po ++++ b/po/pt_BR.po +@@ -1,27 +1,24 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: + # Glaucia Freitas , 2012 +-# Glaucia Freitas , 2012-2013 +-# Marcelo Barbosa , 2013 +-# Paulo Sergio Klaus , 2014 +-# Daniel Lara , 2016. #zanata +-# Frederico Henrique Gonçalves Lima , 2016. #zanata ++# Glaucia Freitas , 2013 ++# gcintra , 2013. #zanata ++# adallape , 2016. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2016-07-26 09:34-0400\n" +-"Last-Translator: Daniel Lara \n" +-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/virt-" +-"viewer/language/pt_BR/)\n" +-"Language: pt-BR\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"PO-Revision-Date: 2016-10-17 01:16+0000\n" ++"Last-Translator: adallape \n" ++"Language-Team: Portuguese (Brazil) \n" ++"Language: pt-BR\n" + "Plural-Forms: nplurals=2; plural=(n > 1);\n" + "X-Generator: Zanata 3.9.6\n" + +@@ -32,7 +29,7 @@ msgstr "Visualizador remoto" + + #: ../data/remote-viewer.appdata.xml.in.h:2 + msgid "Remotely access virtual machines" +-msgstr "Acessar remotamente máquinas virtuais" ++msgstr "" + + #: ../data/remote-viewer.appdata.xml.in.h:3 + msgid "" +@@ -42,136 +39,155 @@ msgid "" + "can connect directly to both local and remotely hosted guest OS, optionally " + "using SSL/TLS encryption." + msgstr "" +-"Visualizador remoto fornece um visualizador gráfico para a exibição sistema " +-"operacional convidado. Neste momento ele suporta sistema operacional " +-"convidado utilizando os protocolos de VNC ou especiarias. Mais protocolos " +-"podem ser suportados no futuro conforme a demanda do usuário. O espectador " +-"pode se conectar diretamente ao local e remotamente hospedado sistema " +-"operacional convidado, opcionalmente usando criptografia SSL / TLS." + + #: ../data/remote-viewer.desktop.in.h:2 + msgid "Access remote desktops" +-msgstr "Acesso remoto computadores" ++msgstr "Acesse áreas de trabalho remotas" + + #: ../data/virt-viewer-mime.xml.in.h:1 + msgid "Virt-Viewer connection file" +-msgstr "Virt-Viewer arquivo conexão" ++msgstr "Arquivo de conexão do Virt-Viewer" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "" + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" +-msgstr "Setando título da janela" ++msgstr "Definir título de janela" + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "Abrir conexão usando a comunicação do controlador Spice" + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" +-msgstr "Visualizador remoto" ++msgstr "Cliente de visualizador remoto" + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" + msgstr "" +-"\n" +-"Erro: não é possível manipular múltiplas URIs\n" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" +-"\n" +-"Erro: argumentos extras passados ao usar o controlador Spice\n" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" +-"Execute '%s --help' para ver uma lista completa das opções de linha de " +-"comando disponíveis\n" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "Falha ao iniciar a conexão " + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "Exibir desabilitado pelo controlador" + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "Conexão de controlador falhou:%s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" +-msgstr "falha ao analisar o uri do ovirt" ++msgstr "Falhou ao analisar uri ovirt" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" +-msgstr "Autenticação cancelada" ++msgstr "A autenticação foi cancelada" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" +-msgstr "A MV %s no oVirt não está em execução" ++msgstr "A máquina virtual oVirt %s não está executando " + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" +-msgstr "A MV %s no oVirt não possui exibição" ++msgstr "A máquina virtual oVirt %s não possui display" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" +-msgstr "A MV %s no oVirt não possui informações sobre o host " ++msgstr "" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "A MV %s no oVirt possui um tipo de exibição desconhecido: %d" ++msgstr "A máquina virtual oVirt %s tem um tipo de display desconhecido: %d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." + msgstr "Configurando uma sessão Spice" + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" +-msgstr "Nenhuma conexão selecionada" ++msgstr "Nenhuma conexão foi selecionada" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " + msgstr "Arquivo inválido %s: " + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" + msgstr "Não foi possíve determinar o tipo de conexão a partir do URI" + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " +-msgstr "não foi possível abrir a sessão do oVirt:" ++msgstr "Não foi possível abrir a sessão oVirt: " + +-#. ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" ++msgstr "" ++ ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" + msgstr "Detalhes da conexão" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "Endereço _Conexão" ++msgstr "En_dereço de conexão " + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +@@ -179,22 +195,40 @@ msgstr "Por exemplo, spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "Conexões recentes" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "_Cancelar" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "C_onectar" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "Nome" + + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" +-msgstr "Sobre Virt-Viewer" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-about.ui.h:2 + msgid "" +@@ -230,18 +264,21 @@ msgid "" + "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + msgstr "" + "Este programa é um software livre; você pode redistribuí-lo e/ou modificá-lo " +-"sob os termos do GNU - General Public License como publicado pela Fundação " +-"de Software Livre; tanto a versão 2 da Licensa quanto (na sua opinião) " +-"qualquer versão posterior a esta.\n" ++"sob \n" ++"os termos do GNU - General Public License como publicado pela Fundação de " ++"Software Livre; \n" ++"tanto a versão 2 da Licensa quanto \n" ++"(na sua opinião) qualquer versão posterior a esta.\n" + "\n" + "Este programa é distribuído esperando que seja útiil, \n" +-"mas SEM NENHUMA GARANTIA; sem até mesmo a garantia implicada de " +-"MERCANTIBILIDADE ou SERVIÇO PARA UM PROPÓSITO ESPECÍFICO. Seja GNU - " +-"General Public License para mais detalhes. \n" ++"mas SEM NENHUMA GARANTIA; sem até mesmo a garantia \n" ++"implicada de MERCANTIBILIDADE ou SERVIÇO PARA UM PROPÓSITO ESPECÍFICO. \n" ++"Seja GNU - General Public License para mais detalhes. \n" + "\n" +-"Você deve ter recebido uma cópia do GNU - General Public License junto com " +-"este programa; Caso não o tenha recebido, escreva para a Fundação de " +-"Software Livre, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ++"Você deve ter recebido uma cópia do GNU - General Public License \n" ++"junto com este programa; Caso não o tenha recebido, \n" ++"escreva para a Fundação de Software Livre, Inc. 59 Temple Place, Suite 330, " ++"Boston, MA 02111-1307 USA\n" + + #: ../src/resources/ui/virt-viewer-about.ui.h:20 + msgid "The Fedora Translation Team" +@@ -249,26 +286,26 @@ msgstr "A equipe de Tradução do Fedora " + + #: ../src/virt-viewer-app.c:459 + msgid "Do you want to close the session?" +-msgstr "Você quer fechar a sessão?" ++msgstr "Você deseja fechar a sessão?" + + #: ../src/virt-viewer-app.c:461 + msgid "Do not ask me again" +-msgstr "Não me pergunte novamente" ++msgstr "Não perguntar novamente." + + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "Endereço é muito longo para unix socket_path: %s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "A criação de socket unix falhou: %s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "A conexão ao socket unix falhou: %s" + + #: ../src/virt-viewer-app.c:955 + #, c-format +@@ -278,156 +315,158 @@ msgstr "Esperando pelo display %d..." + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" +-msgstr "Tipo de gráfico '%s' sem suporte" ++msgstr "Tipo de gráfico não suportado '%s'" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "Falha ao conectar com o ssh." + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." +-msgstr "Não foi possível conectar o canal, SSH somente suportado." ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." ++msgstr "" + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "A conexão com o canal não é suportada." + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "A exibição pode ser anexada somente através do libvirt com --attach" ++msgstr "O display só pode ser anexado através de libvirt with --attach" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "Conectando ao servidor de gráfico" + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" + msgstr "Domínio de convidado precisa ser fechado" + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "Conectado ao servidor de gráfico" + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Incapaz de conectar ao servidor de gráfico %s" + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" +-"Não é possível fazer a autenticação com o servidor da área de trabalho " +-"remota em %s: %s\n" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "Incapaz de autenticar com o servidor remoto: %s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" + msgstr "Erro de redirecionamento do USB:%s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "Zoom nível deve ser dentro de %d-%d\n" ++msgstr "O nível de amplificação deve estar entre %d-%d\n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" +-msgstr "%s\n" ++msgstr "" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" +-msgstr "%s versão %s" ++msgstr "" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "Display _%d" ++msgstr "Exibir_ %d" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "Inválido kiosk-quit argumento: %s" ++msgstr "Argumento kiosk-quit inválido: %s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "Exibir informações de versão" + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" + msgstr "Nível de zoom da janela, em porcentagem" + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" +-"Abra no modo tela cheia (ajusta a resolução do convidado para caber no " +-"cliente)" ++"Abrir em modo de tela cheia (ajuste a resolução do hóspede para ser " ++"compatível com o cliente)" + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" +-msgstr "Personalize teclas de atalho " ++msgstr "Padronizar hotkeys" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" +-msgstr "Ativar kiosk modo" ++msgstr "Ativar modo de quiosque" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "Sair em determinada condição em kiosk modo " ++msgstr "Sair da condição determinada no modo de quiosque " + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "Exibir informações de verbose" + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "Exibir informações de depuração" + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" + "\n" + "%s\n" + "\n" +-msgstr "" +-"Autenticação necessária para a conexão de %s com:\n" ++msgstr "É necessária autenticação para a conexão %s a:\n" + "\n" + "%s\n" ++"\n" + + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "Autenticação necessária para a conexão de %s:\n" ++msgstr "É necessária autenticação para a conexão %s:\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" + msgstr "Autenticação requerida" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "_OK" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "rótulo" + +@@ -445,19 +484,20 @@ msgstr "Exibir senha" + + #: ../src/virt-viewer-display-vnc.c:134 + msgid "VNC does not provide GUID" +-msgstr "O VNC não fornece o GUID" ++msgstr "VNC não fornece GUID" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" +-msgstr "Transferências de Arquivos" ++msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." + msgstr[0] "" ++msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -466,122 +506,126 @@ msgstr "" + msgid "Virt Viewer" + msgstr "Visualizador do Virt" + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" + msgstr "Senha inválida" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" + msgstr "Selecionar os dispositivos do USB para redirecionamento" + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "_Fechar" ++msgstr "" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Autenticação não suportada tipo %d" + + #: ../src/virt-viewer-vm-connection.c:64 + msgid "No virtual machine found" +-msgstr "Nenhuma máquina virtual foi encontrada" ++msgstr "Máquina virtual não encontrada" + + #: ../src/virt-viewer-vm-connection.c:93 + msgid "No virtual machine was chosen" +-msgstr "Nenhuma máquina virtual foi selecionada" ++msgstr "Não foi selecionada uma máquina virtual" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Del" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" +-msgstr "_Salvar" ++msgstr "" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "Screenshot" + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" + msgstr "Desconhecido" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" ++msgstr "" ++ ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "Desconectar" + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "Seleção de dispositivo de USB" + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "Enviar combinação de teclas" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "Deixar tela cheia" + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Pressione %s para liberar o ponteiro)" +@@ -589,14 +633,14 @@ msgstr "(Pressione %s para liberar o ponteiro)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -606,142 +650,147 @@ msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" + msgstr "" +-"É necessário pelo menos %s versão %s para configurar esta conexão, consulte " +-"%s para mais detalhes" ++"Ao menos a %s versão %s é requerida para definir esta conexão, veja %s para " ++"detalhes" + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "Pelo menos %s versão %s é necessária para configurar esta conexão" ++msgstr "Ao menos a %s versão %s é requerida para definir esta conexão" + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "Conexão direta com os túneis automáticos" + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" + msgstr "Anexar ao display local usando o libvirt" + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "Conectar ao hypervisor" + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "Esperar pelo domínio para iniciar" + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "Reconectar ao domínio no reinício" + +-#: ../src/virt-viewer.c:105 ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" ++msgstr "" ++ ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "" ++ ++#: ../src/virt-viewer.c:154 + msgid "Virtual machine graphical console" + msgstr "Console gráfico da máquina virtual " + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" +-"\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" + msgstr "" +-"\n" +-"Uso: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" + msgstr "" +-"\n" +-"Nenhum DOMAIN-NAME|ID|UUID foi especificado para '--wait'\n" +-"\n" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" + msgstr "Esperando pelo domínio do convidado para reiniciar" + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "Não é possível determinar o tipo de gráfico para o convidado %s" + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "Não foi possível determinar o host para os convidados %s" + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "O convidado '%s' não pode ser acessado" ++msgstr "O convidado '%s' não pode ser conectado. " + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" +-msgstr "A máquina virtual %s não está em execução" ++msgstr "A máquina virtual %s não está executando" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" +-msgstr "Aguardando libvirt para iniciar" ++msgstr "Esperando o libvirt iniciar" + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "Encontrando o domínio do convidado" + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "Esperando pelo domínio do convidado a ser criado" + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "Verificando o status do domínio do convidado" + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" +-msgstr "Não é possível obter o estado do convidado " ++msgstr "Não foi possível obter estado do convidado" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "Esperando pelo domínio do convidado para iniciar" + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "Não é possível conectar-se ao libvirt com o URI: %s." ++msgstr "Não foi possível conectar-se a libvirt com URI: %s." + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[nenhum]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." +-msgstr "falha na autenticação." ++msgstr "A autenticação falhou." + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " +-msgstr "Falha ao conectar-se: " ++msgstr "Falhou ao conectar:" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" + msgstr "_Arquivo" + + #: ../src/resources/ui/virt-viewer.ui.h:2 + msgid "_Screenshot" +-msgstr "_Screenshot" ++msgstr "_Captura de tela" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "_seleção do dispositivo USB" ++msgstr "Seleção de dispositivo _USB" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +@@ -752,12 +801,12 @@ msgid "Smartcard removal" + msgstr "Remoção do Smartcard" + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "_Preferências" ++msgid "_Change CD" ++msgstr "_Alterar CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "_Sair" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -765,7 +814,7 @@ msgstr "_Visualizar" + + #: ../src/resources/ui/virt-viewer.ui.h:9 + msgid "_Full screen" +-msgstr "_Full screen" ++msgstr "_Tela cheia" + + #: ../src/resources/ui/virt-viewer.ui.h:10 + msgid "_Zoom" +@@ -773,19 +822,19 @@ msgstr "_Zoom" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "_Mais Zoom" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "_Menos Zoom" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "_Tamanho normal" ++msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "_Displays" ++msgstr "_Telas " + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +@@ -801,23 +850,19 @@ msgstr "_Ajuda" + + #: ../src/resources/ui/virt-viewer.ui.h:18 + msgid "_Guest Details" +-msgstr "_Detalhes do Convidado" ++msgstr "_Informação de hóspede" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "_Sobre" +- +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "Alterar _CD" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +-msgstr "Detalhes do Convidado" ++msgstr "Informação de hóspede" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:3 + msgid "Name:" +-msgstr "Nome:" ++msgstr "Nome: " + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:4 + msgid "GUID:" +@@ -827,30 +872,27 @@ msgstr "GUID:" + msgid "Choose a virtual machine" + msgstr "Escolha uma máquina virtual" + +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "Nome" +- + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" +-msgstr "Máquinas virtuais disponíveis" ++msgstr "Máquinas virtuais disponíveis " + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "Preferências" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +-msgstr "Compartilhamento de pasta" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:3 + msgid "Share folder" +-msgstr "Compartilhar pasta" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "Somente leitura" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "Spice" ++msgstr "" ++ +diff --git a/po/ru.po b/po/ru.po +index 7964d13..a062985 100644 +--- a/po/ru.po ++++ b/po/ru.po +@@ -1,37 +1,34 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: +-# Alexander Savchenko, 2014 + # Automatically generated, 2010 + # triplepointfive , 2012 + # Yulia , 2010, 2012 + # Yulia , 2013 +-# Ilyas B Arinov , 2015. #zanata +-# yuliya , 2015. #zanata +-# yuliya , 2016. #zanata ++# ypoyarko , 2013. #zanata ++# tchuang , 2016. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2016-04-01 12:38-0400\n" +-"Last-Translator: yuliya \n" +-"Language-Team: Russian (http://www.transifex.com/projects/p/virt-viewer/" +-"language/ru/)\n" +-"Language: ru\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" ++"PO-Revision-Date: 2016-10-19 01:54+0000\n" ++"Last-Translator: Copied by Zanata \n" ++"Language-Team: Russian \n" ++"Language: ru\n" ++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " ++"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + "X-Generator: Zanata 3.9.6\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 + msgid "Remote Viewer" +-msgstr "Удаленный рабочий стол" ++msgstr "Удаленный просмотр" + + #: ../data/remote-viewer.appdata.xml.in.h:2 + msgid "Remotely access virtual machines" +@@ -54,127 +51,159 @@ msgstr "Доступ к удаленному рабочему столу" + msgid "Virt-Viewer connection file" + msgstr "Файл соединения virt-viewer" + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" + msgstr "Изменить заголовок окна" + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "Открыть соединение с помощью контроллера Spice" + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" +-msgstr "Клиент удаленного просмотра рабочего стола" ++msgstr "Клиент удаленного просмотра" + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "Не удалось установить соединение" + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "Дисплей отключен контроллером" + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "Ошибка подключения контроллера: %s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" +-msgstr "не удалось обработать oVirt uri" ++msgstr "не удалось обработать uri ovirt" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "Аутентификация была отменена" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "Виртуальная машина oVirt %s не работает" + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" +-msgstr "У виртуальной машины oVirt %s дисплей отсутствует" ++msgstr "У виртуальной машины oVirt %s нет дисплея" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" +-msgstr "Отсутствуют сведения о хосте виртуальной машины oVirt %s" ++msgstr "" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "Неизвестный тип дисплея виртуальной машины oVirt %s: %d" ++msgstr "У виртуальной машины oVirt %s неизвестный тип дисплея: %d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." + msgstr "Инициализация сеанса Spice..." + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" +-msgstr "Соединение не выбрано" ++msgstr "Подключение не выбрано" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " +-msgstr "Недопустимый файл %s:" ++msgstr "Недопустимый файл %s: " + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" +-msgstr "Не удалось определить тип подключения из заданного адреса" ++msgstr "Не удалось определить тип подключения из URI" + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " +-msgstr "Не удалось открыть сеанс oVirt:" ++msgstr "Не удалось открыть сеанс oVirt: " + +-#. ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" ++msgstr "" ++ ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" + msgstr "Свойства подключения" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "" ++msgstr "_Адрес подключения" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +-msgstr "Пример: spice://foo.example.org:5900" ++msgstr "Например, spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "Последние подключения" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" + msgstr "" + +@@ -183,6 +212,23 @@ msgstr "" + msgid "C_onnect" + msgstr "" + ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "Имя" ++ + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" + msgstr "" +@@ -191,15 +237,14 @@ msgstr "" + msgid "" + "Copyright (C) 2007-2012 Daniel P. Berrange\n" + "Copyright (C) 2007-2014 Red Hat, Inc." +-msgstr "" +-"(C) 2007-2012 Daniel P. Berrange\n" +-"(C) 2007-2014 Red Hat, Inc." ++msgstr "(C) Daniel P. Berrange, 2007–2012\n" ++"(C) Red Hat, Inc., 2007–2014" + + #: ../src/resources/ui/virt-viewer-about.ui.h:4 + msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" + msgstr "" +-"Клиент доступа к удаленному рабочему столу построен на основе GTK-VNC, SPICE-" +-"GTK и libvirt" ++"Клиент удаленного рабочего стола построен на основе GTK-VNC, SPICE-GTK и " ++"libvirt" + + #: ../src/resources/ui/virt-viewer-about.ui.h:5 + msgid "virt-manager.org" +@@ -222,7 +267,7 @@ msgid "" + "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + msgstr "" + "Эта программа относится к категории свободного программного обеспечения;\n" +-"ее изменение и распространение допускается в соответствии с условиями \n" ++"её можно распространять и изменять в соответствии с условиями \n" + "лицензии GNU General Public License 2 или любой более поздней версии, \n" + "опубликованной фондом свободного программного обеспечения. \n" + "\n" +@@ -251,17 +296,17 @@ msgstr "Больше не спрашивать" + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "Адрес слишком длинный для пути к сокету unix: %s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "Не удалось создать сокет unix: %s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "Не удалось подключиться к сокету unix: %s" + + #: ../src/virt-viewer-app.c:955 + #, c-format +@@ -271,128 +316,132 @@ msgstr "Ожидание просмотра %d..." + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" +-msgstr "Тип графики «%s» не поддерживается" ++msgstr "Неподдерживаемый тип графической подсистемы «%s»" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "Ошибка соединения ssh." + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." +-msgstr "Не удалось подключиться к каналу. Поддерживается только SSH." ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." ++msgstr "" + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "Подключение к каналу не поддерживается." + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "Дисплей может быть подключён только через libvirt с --attach" ++msgstr "" ++"Дисплей можно присоединить только через libvirt с помощью опции --attach" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "Подключение к графическому серверу" + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" + msgstr "Гостевой домен завершил работу" + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "Установлено соединение с графическим сервером" + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Не удалось установить соединение с сервером %s" + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" +-msgstr "Не удалось пройти аутентификацию на удаленном сервере %s: %s\n" ++msgstr "" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "Не удалось пройти аутентификацию на удаленном сервере: %s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" + msgstr "Ошибка перенаправления USB: %s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "Уровень увеличения должен быть между %d-%d\n" ++msgstr "Масштаб должен быть в диапазоне %d–%d\n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "" ++msgstr "Дисплей _%d" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "недопустимый аргумент kiosk-quit: %s" ++msgstr "Недопустимый аргумент kiosk-quit: %s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "Показать версию" + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" + msgstr "Масштаб окна в процентах" + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" +-"Открыть в полноэкранном режиме (регулирует разрешение гостя для соответствия " +-"клиенту)" ++"Открыть в полноэкранном режиме (изменяет разрешение экрана гостевой системы " ++"в соответствии с клиентом)" + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" + msgstr "Настроить комбинации клавиш" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" +-msgstr "Включить режим киоска" ++msgstr "Включить режим kiosk" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "Выйти по заданному условию в режиме киоска" ++msgstr "Выходить при данном условии в режиме kiosk" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "Подробный вывод" + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "Показать сообщения диагностики" + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" + "\n" + "%s\n" + "\n" +-msgstr "" +-"Требуется аутентификация для соединения %s с:\n" ++msgstr "Требуется аутентификация для подключения %s к:\n" + "\n" + "%s\n" + "\n" +@@ -400,15 +449,15 @@ msgstr "" + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "Требуется аутентификация для соединения %s:\n" ++msgstr "Требуется аутентификация для подключения %s:\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" + msgstr "Требуется проверка подлинности" +@@ -419,7 +468,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "метка" + +@@ -439,17 +488,19 @@ msgstr "Показать пароль" + msgid "VNC does not provide GUID" + msgstr "VNC не предоставляет GUID" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." + msgstr[0] "" ++msgstr[1] "" ++msgstr[2] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -458,21 +509,21 @@ msgstr "" + msgid "Virt Viewer" + msgstr "Просмотр виртуальных систем" + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" +-msgstr "Неверный пароль" ++msgstr "Недопустимый пароль" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" + msgstr "Выбрать устройства USB для перенаправления" + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" + msgstr "" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Неподдерживаемый тип аутентификации %d" +@@ -485,95 +536,99 @@ msgstr "Виртуальная машина не найдена" + msgid "No virtual machine was chosen" + msgstr "Виртуальная машина не выбрана" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Del" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" + msgstr "" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "Снимок экрана" + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" + msgstr "Неизвестно" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" ++msgstr "" ++ ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "Отключиться" + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "Выбор устройства USB" + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "Отправить комбинацию клавиш" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "Выйти из полноэкранного режима" + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(нажмите %s для освобождения курсора)" +@@ -581,14 +636,14 @@ msgstr "(нажмите %s для освобождения курсора)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -598,140 +653,147 @@ msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" + msgstr "" +-"Для настройки этого соединения требуется по крайней мере %s %s. Для " +-"получения подробной информации см. %s" ++"Для настройки этого подключения требуется по крайней мере версия %s %s. См. " ++"подробности в %s" + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "Для настройки этого соединения требуется по крайней мере %s %s" ++msgstr "Для настройки подключения необходимо наличие %s версии %s " + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "Прямое подключение без туннелей" + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" + msgstr "Подключиться к локальному графическому сеансу с помощью libvirt" + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "Подключиться к гипервизору" + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "Ожидать запуска домена" + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "Заново подключиться к домену после перезапуска" + +-#: ../src/virt-viewer.c:105 ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" ++msgstr "" ++ ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "" ++ ++#: ../src/virt-viewer.c:154 + msgid "Virtual machine graphical console" + msgstr "Графическая консоль виртуальной машины" + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" +-"\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" + msgstr "" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" + msgstr "" +-"\n" +-"Не определен ДОМЕН | ID | UUID для «--wait»\n" +-"\n" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" + msgstr "Ожидание перезапуска гостевого домена" + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "Не удалось определить тип графической подсистемы для гостя %s" + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "Не удалось определить хост для гостя %s" + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "Гость '%s' недосягаем" ++msgstr "Гость «%s» недоступен" + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" +-msgstr "Виртуальная машина %s не запущена" ++msgstr "Виртуальная машина %s не работает" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" + msgstr "Ожидание запуска libvirt" + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "Поиск гостевого домена" + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "Ожидание создания гостевого домена" + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "Проверка статуса гостевого домена" + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" +-msgstr "Не удалось получить статус гостевой системы" ++msgstr "Невозможно получить состояние гостевой системы" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "Ожидание запуска гостевого домена" + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "Невозможно подключиться к libvirt с URI: %s." ++msgstr "Невозможно подключиться к libvirt с помощью URI: %s." + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[нет]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." +-msgstr "Аутентификация не пройдена." ++msgstr "Ошибка аутентификации." + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " +-msgstr "Не удалось подключиться:" ++msgstr "Не удалось подключиться: " + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" + msgstr "_Файл" + + #: ../src/resources/ui/virt-viewer.ui.h:2 + msgid "_Screenshot" +-msgstr "" ++msgstr "_Снимок экрана" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "" ++msgstr "_Выбор устройства USB" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +@@ -739,11 +801,11 @@ msgstr "Подключение смарт-карты" + + #: ../src/resources/ui/virt-viewer.ui.h:5 + msgid "Smartcard removal" +-msgstr "Извлечение смарт-карты" ++msgstr "Удаление смарт-карты" + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "" ++msgid "_Change CD" ++msgstr "_Изменить CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +@@ -755,7 +817,7 @@ msgstr "_Просмотр" + + #: ../src/resources/ui/virt-viewer.ui.h:9 + msgid "_Full screen" +-msgstr "" ++msgstr "_Полноэкранный режим" + + #: ../src/resources/ui/virt-viewer.ui.h:10 + msgid "_Zoom" +@@ -775,7 +837,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "" ++msgstr "Дис_плеи" + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +@@ -791,19 +853,15 @@ msgstr "_Справка" + + #: ../src/resources/ui/virt-viewer.ui.h:18 + msgid "_Guest Details" +-msgstr "Параметры _гостевой системы" ++msgstr "_Сведения о госте" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" + msgstr "" + +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "_Поменять CD" +- + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +-msgstr "Параметры гостевой системы" ++msgstr "Сведения о госте" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:3 + msgid "Name:" +@@ -815,11 +873,7 @@ msgstr "GUID:" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:1 + msgid "Choose a virtual machine" +-msgstr "Выберите виртуальную машину" +- +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "Имя" ++msgstr "Выбор виртуальной машины" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" +@@ -827,20 +881,21 @@ msgstr "Доступные виртуальные машины" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "Настройки" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +-msgstr "Совместный доступ к папке" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:3 + msgid "Share folder" +-msgstr "Поделиться папкой" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "Только для чтения" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "Spice" ++msgstr "" ++ +diff --git a/po/zh_CN.po b/po/zh_CN.po +index 7c6f808..84a239a 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -1,27 +1,27 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: + # Aron Xu , 2010 + # Christopher Meng , 2013 + # Leah Liu , 2010 + # Tommy He , 2013 + # Wei Liu , 2012-2013 ++# Leah Liu , 2013. #zanata + # Leah Liu , 2016. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2016-02-23 12:28-0500\n" +-"Last-Translator: Leah Liu \n" +-"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/virt-" +-"viewer/language/zh_CN/)\n" +-"Language: zh-CN\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"PO-Revision-Date: 2016-10-12 12:22+0000\n" ++"Last-Translator: Leah Liu \n" ++"Language-Team: Chinese (China) \n" ++"Language: zh-CN\n" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Zanata 3.9.6\n" + +@@ -51,115 +51,146 @@ msgstr "访问远程桌面" + msgid "Virt-Viewer connection file" + msgstr "Virt-Viewer 连接文件" + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" + msgstr "设置窗口标题" + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "使用 Spice 控制器沟通打开连接" + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" +-msgstr "远程查看客户端" ++msgstr "远程查看器客户端" + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "初始化连接失败" + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "显示控制器禁用的" + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "控制器连接失败:%s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" + msgstr "解析 ovirt uri 失败" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" +-msgstr "已取消认证" ++msgstr "认证已取消" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "oVirt VM %s 未运行" + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" +-msgstr "oVirt VM %s 没有显示器" ++msgstr "oVirt VM %s 没有显示" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" +-msgstr "oVirt VM %s 没有主机虚拟系" ++msgstr "" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "oVirt VM %s 有未知限制器类型:%d" ++msgstr "oVirt VM %s 有未知显示类型:%d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." + msgstr "设置 Spice 会话......" + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" +-msgstr "没有选择任何连接" ++msgstr "未选择任何连接" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " + msgstr "无效文件 %s:" + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" + msgstr "无法确定 URI 的连接类型" + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " + msgstr "无法打开 oVirt 会话:" + +-#. ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" ++msgstr "" ++ ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" + msgstr "连接详情" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "" ++msgstr "连接地址(_A)" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +@@ -167,11 +198,12 @@ msgstr "例如:spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "最近的连接" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" + msgstr "" + +@@ -180,6 +212,23 @@ msgstr "" + msgid "C_onnect" + msgstr "" + ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "名称" ++ + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" + msgstr "" +@@ -190,7 +239,7 @@ msgid "" + "Copyright (C) 2007-2014 Red Hat, Inc." + msgstr "" + "版权所有 (C) 2007-2012 Daniel P. Berrange\n" +-"版权所有 (C) 2007-2010 Red Hat, Inc." ++"版权所有 (C) 2007-2014 Red Hat, Inc." + + #: ../src/resources/ui/virt-viewer-about.ui.h:4 + msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" +@@ -216,8 +265,7 @@ msgid "" + "along with this program; if not, write to the Free Software\n" + "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + msgstr "" +-"本程序是免费软件,您可以根据自由软件基金发布的 GNU 通用公共许可证版本 2 或(您" +-"认为合适的)之后的版本重新发布和(/或)修改这个软件。\n" ++"本程序是免费软件,您可以根据自由软件基金发布的 GNU 通用公共许可证版本 2 或(您认为合适的)之后的版本重新发布和(/或)修改这个软件。\n" + "\n" + "发布本程序是希望它\n" + "对您有帮助,但不做任何保证,\n" +@@ -243,146 +291,149 @@ msgstr "不要再问我" + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "对于 unix socket_path 来说地址过长:%s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "创建 unix 插槽失败:%s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "连接到 unix 插槽失败:%s" + + #: ../src/virt-viewer-app.c:955 + #, c-format + msgid "Waiting for display %d..." +-msgstr "等待显示器 %d......" ++msgstr "等待画面 %d......" + + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" + msgstr "不支持的图形类型 '%s'" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "连接到 ssh 失败" + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." +-msgstr "无法连接到通道,只支持 SSH。" ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." ++msgstr "" + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "无法连接到不支持的通道。" + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "只能通过 libvirt 使用 --attach 连接显示器" ++msgstr "只能通过 libvirt 使用 --attach 显示" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "正在连接到图形服务器" + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" + msgstr "已关闭虚拟机域" + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "已连接到图形服务器" + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "无法连接到图形服务器 %s" + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" +-msgstr "无法使用远程桌面服务器在 %s 认证: %s\n" ++msgstr "" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "无法使用远程桌面服务器验证:%s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" + msgstr "USB 重新定向错误:%s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "缩放级别必须在 %d-%d 之间\n" ++msgstr "缩放等级必须在 %d-%d 之间\n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "" ++msgstr "显示 _%d" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "无效的 kiosk-quit 参数:%s" ++msgstr "无效 kiosk-quit 参数:%s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "显示版本信息" + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" + msgstr "窗口缩放级别,以百分比计" + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" +-msgstr "以全屏模式打开(调整虚拟机解析度使其适用于客户端)" ++msgstr "以全屏模式打开(调整虚拟机分辨率以适应客户端)。" + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" + msgstr "自定义快捷键" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" + msgstr "启用 kiosk 模式" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "以 kiosk 模式中给出的条件退出" ++msgstr "退出 kiosk 模式中的给定条件" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "显示详细信息" + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "显示调试信息" + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" + "\n" + "%s\n" + "\n" +-msgstr "" +-"%s 连接需要认证:\n" ++msgstr "%s 连接至以下部分需要认证:\n" + "\n" + "%s\n" + "\n" +@@ -390,15 +441,15 @@ msgstr "" + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "需要为 %s 连接进行认证:\n" ++msgstr "%s 连接需要认证:\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" + msgstr "所需验证" +@@ -409,7 +460,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "标签" + +@@ -429,17 +480,17 @@ msgstr "显示密码" + msgid "VNC does not provide GUID" + msgstr "VNC 不提供 GUID" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." + msgstr[0] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -448,21 +499,21 @@ msgstr "" + msgid "Virt Viewer" + msgstr "Virt Viewer" + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" + msgstr "无效密码" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" + msgstr "为重新定向选择 USB 设备" + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" + msgstr "" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "不支持的验证类型 %d" +@@ -475,95 +526,99 @@ msgstr "未找到虚拟机" + msgid "No virtual machine was chosen" + msgstr "未选择虚拟机" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Del" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" + msgstr "" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "截屏" + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" + msgstr "未知" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" ++msgstr "" ++ ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "断开连接" + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "USB 设备选择" + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "发送按键组合" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "离开全屏" + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(按 %s 释放光标)" +@@ -571,14 +626,14 @@ msgstr "(按 %s 释放光标)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -587,139 +642,146 @@ msgstr " " + msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" +-msgstr "设置这个连接至少需要 %s 的 %s 版本,详情请查看 %s" ++msgstr "设置这个连接至少需要 %s 版本 %s,详情请查看 %s" + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "设置这个连接至少需要 %s 的 %s 版本" ++msgstr "设置这个连接至少需要 %s 版本 %s" + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "无自动通道的直接连接" + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" + msgstr "使用 libvirt 附加本地画面" + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "连接到管理程序(hypervisor)" + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "等待域启动" + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "重启后重新连接到域" + +-#: ../src/virt-viewer.c:105 ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" ++msgstr "" ++ ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "" ++ ++#: ../src/virt-viewer.c:154 + msgid "Virtual machine graphical console" + msgstr "虚拟机图形控制台" + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" +-"\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" + msgstr "" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" + msgstr "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" +-"\n" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" + msgstr "等待虚拟机域重启" + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "无法确定虚拟机 %s 的图形类型" + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "无法确定虚拟机 %s 的主机" + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "无法访问 '%s'" ++msgstr "无法连接到虚拟机 '%s'。" + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" + msgstr "虚拟机 %s 未运行" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" + msgstr "等待 libvirt 启动" + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "正在查找虚拟机域" + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "正在等待生成虚拟机域" + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "正在检查虚拟机域状态" + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" +-msgstr "无法获得虚拟机状态" ++msgstr "无法获取虚拟机状态" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "正在等待虚拟机域启动" + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "无论使用 URI 连接到 libvirt:%s" ++msgstr "无法使用 URI 连接到 libvirt:%s" + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[无]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." + msgstr "认证失败。" + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " +-msgstr "无法连接:" ++msgstr "连接失败:" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" + msgstr "文件(_F)" + + #: ../src/resources/ui/virt-viewer.ui.h:2 + msgid "_Screenshot" +-msgstr "" ++msgstr "截图(_S)" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "" ++msgstr "USB 设备选择(_U)" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +@@ -730,8 +792,8 @@ msgid "Smartcard removal" + msgstr "删除智能卡" + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "" ++msgid "_Change CD" ++msgstr "更换 CD(_ C)" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +@@ -743,7 +805,7 @@ msgstr "查看(_V)" + + #: ../src/resources/ui/virt-viewer.ui.h:9 + msgid "_Full screen" +-msgstr "" ++msgstr "全屏(_F)" + + #: ../src/resources/ui/virt-viewer.ui.h:10 + msgid "_Zoom" +@@ -763,7 +825,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "" ++msgstr "显示(_D)" + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +@@ -785,10 +847,6 @@ msgstr "虚拟机详情(_G)" + msgid "_About" + msgstr "" + +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "更换设备(_C)" +- + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" + msgstr "虚拟机详情" +@@ -805,30 +863,27 @@ msgstr "GUID:" + msgid "Choose a virtual machine" + msgstr "选择虚拟机" + +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "名称" +- + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" + msgstr "可用虚拟机" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "属性" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +-msgstr "文件夹共享" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:3 + msgid "Share folder" +-msgstr "共享文件夹" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "只读" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "Spice" ++msgstr "" ++ +diff --git a/po/zh_TW.po b/po/zh_TW.po +index 027b0e9..4fa4853 100644 +--- a/po/zh_TW.po ++++ b/po/zh_TW.po +@@ -1,28 +1,27 @@ + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER + # This file is distributed under the same license as the PACKAGE package. +-# ++# + # Translators: + # Cheng-Chia Tseng , 2013 + # Chester Cheng , 2013 + # Terry Chuang , 2010 + # Terry Chuang , 2012-2013 + # Walter Cheuk , 2012 +-# Chester Cheng , 2016. #zanata +-# Terry Chuang , 2016. #zanata ++# ccheng , 2013. #zanata ++# tchuang , 2016. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: PACKAGE VERSION\n" ++"Project-Id-Version: virt-viewer\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2016-11-24 13:55+0000\n" +-"PO-Revision-Date: 2016-02-25 07:46-0500\n" +-"Last-Translator: Chester Cheng \n" +-"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/virt-" +-"viewer/language/zh_TW/)\n" +-"Language: zh-TW\n" ++"POT-Creation-Date: 2013-07-09 21:09+0100\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" ++"PO-Revision-Date: 2016-10-19 01:48+0000\n" ++"Last-Translator: Copied by Zanata \n" ++"Language-Team: Chinese (Taiwan) \n" ++"Language: zh-TW\n" + "Plural-Forms: nplurals=1; plural=0;\n" + "X-Generator: Zanata 3.9.6\n" + +@@ -52,127 +51,159 @@ msgstr "存取遠端桌面" + msgid "Virt-Viewer connection file" + msgstr "Virt-Viewer 連線檔案" + +-#: ../src/remote-viewer.c:139 ++#: ../src/remote-viewer-iso-list-dialog.c:160 ++msgid "Failed to fetch CD names" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:212 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:285 ++msgid "Refresh" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:286 ++msgid "Close" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:306 ++msgid "Unspecified error" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:328 ++msgid "Failed to change CD" ++msgstr "" ++ ++#: ../src/remote-viewer-iso-list-dialog.c:380 ++msgid "Change CD" ++msgstr "" ++ ++#: ../src/remote-viewer.c:146 + msgid "Set window title" + msgstr "設定視窗標題" + +-#: ../src/remote-viewer.c:142 ++#: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" + msgstr "透過 Spice 控制器通訊來開啟連線" + +-#: ../src/remote-viewer.c:150 ++#: ../src/remote-viewer.c:157 + msgid "Remote viewer client" +-msgstr "遠端檢視器客戶端" ++msgstr "遠端檢視器用戶端" + +-#: ../src/remote-viewer.c:175 ++#: ../src/remote-viewer.c:182 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:187 ++#: ../src/remote-viewer.c:194 + #, c-format +-msgid "" +-"\n" ++msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" + +-#: ../src/remote-viewer.c:209 ../src/virt-viewer.c:152 ++#: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:282 ../src/remote-viewer.c:1183 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 + msgid "Failed to initiate connection" + msgstr "初始化連線失敗" + +-#: ../src/remote-viewer.c:297 ++#: ../src/remote-viewer.c:337 + msgid "Display disabled by controller" + msgstr "畫面已被控制器停用" + +-#: ../src/remote-viewer.c:593 ++#: ../src/remote-viewer.c:633 + #, c-format + msgid "Controller connection failed: %s" + msgstr "控制器連線失敗:%s" + +-#: ../src/remote-viewer.c:848 ++#: ../src/remote-viewer.c:850 + msgid "failed to parse ovirt uri" +-msgstr "無法叵析 ovirt uri" ++msgstr "無法叵析 oVirt URI" + +-#: ../src/remote-viewer.c:868 ../src/virt-viewer.c:1014 ++#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" +-msgstr "認證已取消" ++msgstr "驗證已取消" + +-#: ../src/remote-viewer.c:893 ++#: ../src/remote-viewer.c:895 + #, c-format + msgid "oVirt VM %s is not running" +-msgstr "oVirt VM %s 沒有在執行" ++msgstr "oVirt VM %s 非運作中" + +-#: ../src/remote-viewer.c:907 ++#: ../src/remote-viewer.c:909 + #, c-format + msgid "oVirt VM %s has no display" +-msgstr "oVirt VM %s 沒有畫面" ++msgstr "oVirt VM %s 並無顯示" + +-#: ../src/remote-viewer.c:933 ++#: ../src/remote-viewer.c:935 + #, c-format + msgid "oVirt VM %s has no host information" +-msgstr "oVirt VM %s 沒有主機資訊" ++msgstr "" + +-#: ../src/remote-viewer.c:944 ++#: ../src/remote-viewer.c:946 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" +-msgstr "oVirt VM %s 含有不明顯示類型:%d" ++msgstr "oVirt VM %s 具有不明顯示類型:%d" + +-#: ../src/remote-viewer.c:1115 ++#: ../src/remote-viewer.c:1114 + msgid "Setting up Spice session..." +-msgstr "正在設置 Spice session..." ++msgstr "正在設置 Spice 作業階段..." + +-#: ../src/remote-viewer.c:1123 ++#: ../src/remote-viewer.c:1122 + msgid "No connection was chosen" + msgstr "未選擇連線" + +-#: ../src/remote-viewer.c:1141 ++#: ../src/remote-viewer.c:1140 + #, c-format + msgid "Invalid file %s: " +-msgstr "無效的檔案 %s:" ++msgstr "無效檔案 %s: " + +-#: ../src/remote-viewer.c:1149 ++#: ../src/remote-viewer.c:1148 + msgid "Cannot determine the connection type from URI" + msgstr "無法從 URI 判斷連線類型" + +-#: ../src/remote-viewer.c:1155 ++#: ../src/remote-viewer.c:1154 + msgid "Couldn't open oVirt session: " +-msgstr "無法開啟 oVirt session:" ++msgstr "無法開啟 oVirt 作業階段: " + +-#. ++#: ../src/remote-viewer.c:1202 ++#, c-format ++msgid "Unable to connect: %s" ++msgstr "" ++ ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/remote-viewer-connect.ui.h:1 + msgid "Connection details" + msgstr "連線細節" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:2 + msgid "Connection _Address" +-msgstr "" ++msgstr "連線位址(_A)" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:3 + msgid "For example, spice://foo.example.org:5900" +-msgstr "例如 spice://foo.example.org:5900" ++msgstr "例如,spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "最近的連線" ++msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:922 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" + msgstr "" + +@@ -181,6 +212,23 @@ msgstr "" + msgid "C_onnect" + msgstr "" + ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 ++msgid "Loading..." ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 ++msgid "Select ISO" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 ++msgid "Selected" ++msgstr "" ++ ++#: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 ++#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 ++msgid "Name" ++msgstr "名稱" ++ + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" + msgstr "" +@@ -190,8 +238,8 @@ msgid "" + "Copyright (C) 2007-2012 Daniel P. Berrange\n" + "Copyright (C) 2007-2014 Red Hat, Inc." + msgstr "" +-"著作權 (C) 2007-2012 Daniel P. Berrange\n" +-"著作權 (C) 2007-2014 Red Hat, Inc." ++"版權所有 (C) 2007-2012 Daniel P. Berrange\n" ++"版權所有 (C) 2007-2014 Red Hat, Inc." + + #: ../src/resources/ui/virt-viewer-about.ui.h:4 + msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" +@@ -229,8 +277,8 @@ msgstr "" + "\n" + "當您取得此程式時,您應同時取得了\n" + "一份 GNU 通用公共許可證。若沒有的話,請聯絡自由軟體\n" +-"基金會(Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, " +-"MA 02111-1307 USA\n" ++"基金會(Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA " ++"02111-1307 USA\n" + + #: ../src/resources/ui/virt-viewer-about.ui.h:20 + msgid "The Fedora Translation Team" +@@ -247,17 +295,17 @@ msgstr "不再詢問我" + #: ../src/virt-viewer-app.c:655 + #, c-format + msgid "Address is too long for unix socket_path: %s" +-msgstr "" ++msgstr "Unix socket_path 的位址過長:%s" + + #: ../src/virt-viewer-app.c:665 + #, c-format + msgid "Creating unix socket failed: %s" +-msgstr "" ++msgstr "無法建立 Unix Socket:%s" + + #: ../src/virt-viewer-app.c:671 + #, c-format + msgid "Connecting to unix socket failed: %s" +-msgstr "" ++msgstr "無法連線至 Unix Socket:%s" + + #: ../src/virt-viewer-app.c:955 + #, c-format +@@ -267,126 +315,129 @@ msgstr "正在等候顯示器 %d..." + #: ../src/virt-viewer-app.c:1062 + #, c-format + msgid "Unsupported graphic type '%s'" +-msgstr "不支援的圖形類型「%s」" ++msgstr "不支援的圖形化類型「%s」" + +-#: ../src/virt-viewer-app.c:1145 ++#: ../src/virt-viewer-app.c:1146 + msgid "Connect to ssh failed." + msgstr "連至 ssh 的連線失敗。" + +-#: ../src/virt-viewer-app.c:1147 +-msgid "Can't connect to channel, SSH only supported." +-msgstr "無法連至頻道,僅支援 SSH。" ++#: ../src/virt-viewer-app.c:1161 ++#, c-format ++msgid "Can't connect to channel: %s" ++msgstr "" ++ ++#: ../src/virt-viewer-app.c:1163 ++msgid "only SSH or unix socket connection supported." ++msgstr "" + +-#: ../src/virt-viewer-app.c:1159 ++#: ../src/virt-viewer-app.c:1176 + msgid "Connect to channel unsupported." + msgstr "不支援頻道的連接。" + +-#: ../src/virt-viewer-app.c:1221 ++#: ../src/virt-viewer-app.c:1238 + msgid "Display can only be attached through libvirt with --attach" +-msgstr "顯示器僅能以 --attach 透過 libvirt 來連接" ++msgstr "僅能透過 libvirt 和 --attach 連接顯示器" + +-#: ../src/virt-viewer-app.c:1244 ++#: ../src/virt-viewer-app.c:1263 + msgid "Connecting to graphic server" + msgstr "正在連接圖形化伺服器" + +-#: ../src/virt-viewer-app.c:1343 ++#: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" +-msgstr "客座端網域已關閉" ++msgstr "客端網域已關閉" + +-#: ../src/virt-viewer-app.c:1404 ++#: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "已連上圖形化伺服器" + +-#: ../src/virt-viewer-app.c:1431 ++#: ../src/virt-viewer-app.c:1450 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "無法連接圖形化伺服器 %s" + +-#: ../src/virt-viewer-app.c:1457 ++#: ../src/virt-viewer-app.c:1476 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" +-msgstr "無法取得位於 %s 的遠端桌面伺服器的認證:%s\n" ++msgstr "" + +-#: ../src/virt-viewer-app.c:1471 ++#: ../src/virt-viewer-app.c:1490 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" +-msgstr "無法取得遠端桌面伺服器的認證:%s" ++msgstr "無法在遠端桌面伺服器驗證:%s" + +-#: ../src/virt-viewer-app.c:1479 ++#: ../src/virt-viewer-app.c:1498 + #, c-format + msgid "USB redirection error: %s" +-msgstr "USB 重定向錯誤:%s" ++msgstr "USB 重新導引錯誤:%s" + +-#: ../src/virt-viewer-app.c:1813 ++#: ../src/virt-viewer-app.c:1832 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "縮放等級必須介於 %d-%d\n" ++msgstr "放大等級必須介於 %d-%d\n" + +-#: ../src/virt-viewer-app.c:1866 ++#: ../src/virt-viewer-app.c:1885 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1876 ++#: ../src/virt-viewer-app.c:1895 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2300 ++#: ../src/virt-viewer-app.c:2319 + #, c-format + msgid "Display _%d" +-msgstr "" ++msgstr "顯示(_%d)" + +-#: ../src/virt-viewer-app.c:2556 ++#: ../src/virt-viewer-app.c:2575 + #, c-format + msgid "Invalid kiosk-quit argument: %s" + msgstr "無效的 kiosk-quit 引數:%s" + +-#: ../src/virt-viewer-app.c:2567 ++#: ../src/virt-viewer-app.c:2586 + msgid "Display version information" + msgstr "顯示版本資訊" + +-#: ../src/virt-viewer-app.c:2569 ++#: ../src/virt-viewer-app.c:2588 + msgid "Zoom level of window, in percentage" + msgstr "視窗放大等級,單位為百分比" + +-#: ../src/virt-viewer-app.c:2571 ++#: ../src/virt-viewer-app.c:2590 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" +-msgstr "以全螢幕模式開啟 (調整客端解析度以適應客戶端)" ++msgstr "以全螢幕模式開啟 (調整客端解析度以適應用戶端)" + +-#: ../src/virt-viewer-app.c:2573 ++#: ../src/virt-viewer-app.c:2592 + msgid "Customise hotkeys" + msgstr "自訂快速鍵" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2594 + msgid "Enable kiosk mode" + msgstr "啟用 kiosk 模式" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "Quit on given condition in kiosk mode" +-msgstr "於 kiosk 模式中的指定情況下離開" ++msgstr "在 kiosk 模式中於指定情況下退出" + +-#: ../src/virt-viewer-app.c:2577 ++#: ../src/virt-viewer-app.c:2596 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2579 ++#: ../src/virt-viewer-app.c:2598 + msgid "Display verbose information" + msgstr "顯示詳細資訊" + +-#: ../src/virt-viewer-app.c:2581 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display debugging information" + msgstr "顯示除錯資訊" + + #: ../src/virt-viewer-auth.c:89 + #, c-format +-msgid "" +-"Authentication is required for the %s connection to:\n" ++msgid "Authentication is required for the %s connection to:\n" + "\n" + "%s\n" + "\n" +-msgstr "" +-"需通過認證,%s 連線才能:\n" ++msgstr "%s 連線須通過驗證才能連線至:\n" + "\n" + "%s\n" + "\n" +@@ -394,18 +445,18 @@ msgstr "" + #: ../src/virt-viewer-auth.c:93 + #, c-format + msgid "Authentication is required for the %s connection:\n" +-msgstr "%s 連線需通過認證:\n" ++msgstr "%s 連線須通過驗證:\n" + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer-auth.ui.h:1 + msgid "Authentication required" +-msgstr "須要通過認證" ++msgstr "須要通過驗證" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +@@ -413,7 +464,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +-#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 ++#: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:2 + msgid "label" + msgstr "標籤" + +@@ -431,19 +482,19 @@ msgstr "顯示密碼" + + #: ../src/virt-viewer-display-vnc.c:134 + msgid "VNC does not provide GUID" +-msgstr "VNC 不提供 GUID" ++msgstr "VNC 並未提供 GUID" + +-#: ../src/virt-viewer-file-transfer-dialog.c:122 ++#: ../src/virt-viewer-file-transfer-dialog.c:128 + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:145 ++#: ../src/virt-viewer-file-transfer-dialog.c:153 + #, c-format + msgid "Transferring %d file..." + msgid_plural "Transferring %d files..." + msgstr[0] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:203 ++#: ../src/virt-viewer-file-transfer-dialog.c:225 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -452,122 +503,126 @@ msgstr "" + msgid "Virt Viewer" + msgstr "Virt 檢視器" + +-#: ../src/virt-viewer-session-spice.c:705 ++#: ../src/virt-viewer-session-spice.c:704 + msgid "Invalid password" +-msgstr "密碼無效" ++msgstr "無效密碼" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:797 ++#: ../src/virt-viewer-session-spice.c:798 + msgid "Select USB devices for redirection" +-msgstr "選擇欲重定向的 USB 裝置" ++msgstr "選擇欲重新導引的 USB 裝置" + +-#: ../src/virt-viewer-session-spice.c:799 ++#: ../src/virt-viewer-session-spice.c:800 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" + msgstr "" + +-#: ../src/virt-viewer-session-vnc.c:156 ++#: ../src/virt-viewer-session-vnc.c:157 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "不支援的認證類型 %d" + + #: ../src/virt-viewer-vm-connection.c:64 + msgid "No virtual machine found" +-msgstr "找不到虛擬機器" ++msgstr "找不到虛擬機" + + #: ../src/virt-viewer-vm-connection.c:93 + msgid "No virtual machine was chosen" +-msgstr "未選擇虛擬機器" ++msgstr "未選擇虛擬機" + +-#: ../src/virt-viewer-window.c:538 ++#: ../src/virt-viewer-window.c:539 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Del" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:540 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:541 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:544 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:923 ++#: ../src/virt-viewer-window.c:980 + msgid "_Save" + msgstr "" + +-#: ../src/virt-viewer-window.c:931 ++#: ../src/virt-viewer-window.c:988 + msgid "Screenshot" + msgstr "螢幕快照" + +-#: ../src/virt-viewer-window.c:1000 ../src/virt-viewer-window.c:1002 ++#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 + msgid "Unknown" + msgstr "不明" + +-#: ../src/virt-viewer-window.c:1075 ++#: ../src/virt-viewer-window.c:1140 ++msgid "Unable to connnect to oVirt" ++msgstr "" ++ ++#: ../src/virt-viewer-window.c:1163 + msgid "Disconnect" + msgstr "中斷連接" + +-#: ../src/virt-viewer-window.c:1083 ../src/virt-viewer-window.c:1084 ++#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 + msgid "USB device selection" + msgstr "USB 裝置選取" + +-#: ../src/virt-viewer-window.c:1093 ++#: ../src/virt-viewer-window.c:1181 + msgid "Send key combination" + msgstr "傳送按鍵組合" + +-#: ../src/virt-viewer-window.c:1103 ../src/virt-viewer-window.c:1104 ++#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 + msgid "Leave fullscreen" + msgstr "離開全螢幕" + +-#: ../src/virt-viewer-window.c:1179 ++#: ../src/virt-viewer-window.c:1267 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1182 ++#: ../src/virt-viewer-window.c:1270 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(按下 %s 以釋放游標)" +@@ -575,14 +630,14 @@ msgstr "(按下 %s 以釋放游標)" + #. translators: + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" +-#. +-#: ../src/virt-viewer-window.c:1193 ++#. ++#: ../src/virt-viewer-window.c:1281 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1197 ++#: ../src/virt-viewer-window.c:1285 + msgid " " + msgstr " " + +@@ -591,139 +646,146 @@ msgstr " " + msgid "" + "At least %s version %s is required to setup this connection, see %s for " + "details" +-msgstr "至少需要 %s 版本 %s 以上才能設置此連線,詳情請見 %s" ++msgstr "至少需要 %s 版本 %s 以上才能設定此連線,請參閱 %s 以取得詳細資料" + + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "至少需要 %s 版本 %s 以上才能設置此連線" ++msgstr "至少 %s 版本 %s 需要用於設定此連線" + +-#: ../src/virt-viewer.c:90 ++#: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" + msgstr "無自動穿隧的直接連線" + +-#: ../src/virt-viewer.c:92 ++#: ../src/virt-viewer.c:135 + msgid "Attach to the local display using libvirt" +-msgstr "使用 libvirt 接至本機顯示器" ++msgstr "使用 libvirt 接至本機顯示" + +-#: ../src/virt-viewer.c:94 ++#: ../src/virt-viewer.c:137 + msgid "Connect to hypervisor" + msgstr "連接 hypervisor" + +-#: ../src/virt-viewer.c:96 ++#: ../src/virt-viewer.c:139 + msgid "Wait for domain to start" + msgstr "等候網域啟動" + +-#: ../src/virt-viewer.c:98 ++#: ../src/virt-viewer.c:141 + msgid "Reconnect to domain upon restart" + msgstr "重新啓動時重新連接網域" + +-#: ../src/virt-viewer.c:105 ++#: ../src/virt-viewer.c:143 ++msgid "Select the virtual machine only by its name" ++msgstr "" ++ ++#: ../src/virt-viewer.c:145 ++msgid "Select the virtual machine only by its id" ++msgstr "" ++ ++#: ../src/virt-viewer.c:147 ++msgid "Select the virtual machine only by its uuid" ++msgstr "" ++ ++#: ../src/virt-viewer.c:154 + msgid "Virtual machine graphical console" +-msgstr "虛擬機圖形化主控臺" ++msgstr "虛擬機圖形化主控台" + +-#: ../src/virt-viewer.c:124 ++#: ../src/virt-viewer.c:173 + #, c-format +-msgid "" +-"\n" +-"Usage: %s [OPTIONS] [DOMAIN-NAME|ID|UUID]\n" ++msgid "\n" ++"Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" + msgstr "" + +-#: ../src/virt-viewer.c:136 ++#: ../src/virt-viewer.c:185 + #, c-format +-msgid "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" ++msgid "\n" ++"No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" + msgstr "" +-"\n" +-"No DOMAIN-NAME|ID|UUID was specified for '--wait'\n" +-"\n" + +-#: ../src/virt-viewer.c:250 ++#: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" + msgstr "正在等候客端網域重新啓用" + +-#: ../src/virt-viewer.c:496 ++#: ../src/virt-viewer.c:554 + #, c-format + msgid "Cannot determine the graphic type for the guest %s" + msgstr "無法判斷客端 %s 的圖形化類型為何" + +-#: ../src/virt-viewer.c:535 ++#: ../src/virt-viewer.c:603 + #, c-format + msgid "Cannot determine the host for the guest %s" + msgstr "無法判斷客端 %s 的主機為何" + +-#: ../src/virt-viewer.c:563 ++#: ../src/virt-viewer.c:631 + #, c-format + msgid "Guest '%s' is not reachable" +-msgstr "無法連上客座端 '%s'" ++msgstr "無法連線至客端「%s」" + +-#: ../src/virt-viewer.c:787 ++#: ../src/virt-viewer.c:860 + #, c-format + msgid "Virtual machine %s is not running" +-msgstr "虛擬機器 %s 沒有在執行" ++msgstr "虛擬機 %s 非運作中" + +-#: ../src/virt-viewer.c:810 ++#: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" + msgstr "等候 libvirt 啟動" + +-#: ../src/virt-viewer.c:814 ++#: ../src/virt-viewer.c:888 + msgid "Finding guest domain" + msgstr "正在尋找客端網域" + +-#: ../src/virt-viewer.c:818 ++#: ../src/virt-viewer.c:892 + msgid "Waiting for guest domain to be created" + msgstr "正在等候客端網域被建立" + +-#: ../src/virt-viewer.c:840 ++#: ../src/virt-viewer.c:918 + msgid "Checking guest domain status" + msgstr "正在檢查客端網域狀態" + +-#: ../src/virt-viewer.c:843 ++#: ../src/virt-viewer.c:921 + msgid "Cannot get guest state" +-msgstr "無法取得客座端狀態" ++msgstr "無法取得客端狀態" + +-#: ../src/virt-viewer.c:849 ++#: ../src/virt-viewer.c:927 + msgid "Waiting for guest domain to start" + msgstr "正在等候客端網域啟動" + +-#: ../src/virt-viewer.c:953 ++#: ../src/virt-viewer.c:1040 + #, c-format + msgid "Unable to connect to libvirt with URI: %s." +-msgstr "無法透過 URI 連接 libvirt:%s。" ++msgstr "無法利用 URI 連線至 libvirt:%s。" + +-#: ../src/virt-viewer.c:954 ++#: ../src/virt-viewer.c:1041 + msgid "[none]" + msgstr "[無]" + +-#: ../src/virt-viewer.c:961 ++#: ../src/virt-viewer.c:1048 + msgid "Authentication failed." +-msgstr "認證失敗。" ++msgstr "驗證失敗。" + +-#: ../src/virt-viewer.c:1021 ++#: ../src/virt-viewer.c:1108 + msgid "Failed to connect: " +-msgstr "無法連上:" ++msgstr "無法連線: " + +-#. ++#. + #. * Local variables: + #. * c-indent-level: 4 + #. * c-basic-offset: 4 + #. * indent-tabs-mode: nil + #. * End: +-#. ++#. + #: ../src/resources/ui/virt-viewer.ui.h:1 + msgid "_File" + msgstr "檔案(_F)" + + #: ../src/resources/ui/virt-viewer.ui.h:2 + msgid "_Screenshot" +-msgstr "" ++msgstr "螢幕截圖(_S)" + + #: ../src/resources/ui/virt-viewer.ui.h:3 + msgid "_USB device selection" +-msgstr "" ++msgstr "USB 裝置選取(_U)" + + #: ../src/resources/ui/virt-viewer.ui.h:4 + msgid "Smartcard insertion" +@@ -734,8 +796,8 @@ msgid "Smartcard removal" + msgstr "智慧卡移除" + + #: ../src/resources/ui/virt-viewer.ui.h:6 +-msgid "_Preferences" +-msgstr "" ++msgid "_Change CD" ++msgstr "變更 CD(_C)" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +@@ -747,7 +809,7 @@ msgstr "檢視(_V)" + + #: ../src/resources/ui/virt-viewer.ui.h:9 + msgid "_Full screen" +-msgstr "" ++msgstr "全螢幕(_F)" + + #: ../src/resources/ui/virt-viewer.ui.h:10 + msgid "_Zoom" +@@ -767,7 +829,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +-msgstr "" ++msgstr "顯示(_D)" + + #: ../src/resources/ui/virt-viewer.ui.h:15 + msgid "Release cursor" +@@ -783,19 +845,15 @@ msgstr "求助(_H)" + + #: ../src/resources/ui/virt-viewer.ui.h:18 + msgid "_Guest Details" +-msgstr "客座端詳細資料 (_G)" ++msgstr "客端詳細資料(_G)" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" + msgstr "" + +-#: ../src/resources/ui/virt-viewer.ui.h:20 +-msgid "_Change CD" +-msgstr "更換 CD(_C)" +- + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +-msgstr "客座端詳細資料" ++msgstr "客端詳細資料" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:3 + msgid "Name:" +@@ -807,32 +865,29 @@ msgstr "GUID:" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:1 + msgid "Choose a virtual machine" +-msgstr "選擇虛擬機器" +- +-#: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +-msgid "Name" +-msgstr "名稱" ++msgstr "選擇虛擬機" + + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:5 + msgid "Available virtual machines" +-msgstr "可用的虛擬機器" ++msgstr "可用的虛擬機" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "偏好設定" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +-msgstr "資料夾共享" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:3 + msgid "Share folder" +-msgstr "共享資料夾" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "唯讀" ++msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "Spice" ++msgstr "" ++ +-- +2.13.0 + diff --git a/SOURCES/0037-window-Do-not-show-fullscreen-toolbar-if-in-kiosk-mo.patch b/SOURCES/0037-window-Do-not-show-fullscreen-toolbar-if-in-kiosk-mo.patch new file mode 100644 index 0000000..f5d2c28 --- /dev/null +++ b/SOURCES/0037-window-Do-not-show-fullscreen-toolbar-if-in-kiosk-mo.patch @@ -0,0 +1,36 @@ +From afcb97dcf18286a1685fd9761377e5bb98cdea9f Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 19 May 2017 16:49:20 -0300 +Subject: [PATCH virt-viewer 37/38] window: Do not show fullscreen toolbar if + in kiosk mode + +Regression since commit cc455b7f916110d7cfae6b7af753349e070c9494. + +Related: https://bugzilla.redhat.com/show_bug.cgi?id=1446161 + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/virt-viewer-window.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 415f729..8d05e52 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -516,8 +516,11 @@ virt_viewer_window_enter_fullscreen(VirtViewerWindow *self, gint monitor) + + virt_viewer_window_menu_fullscreen_set_active(self, TRUE); + gtk_widget_hide(menu); +- gtk_widget_show(priv->toolbar); +- virt_viewer_timed_revealer_force_reveal(priv->revealer, TRUE); ++ ++ if (!priv->kiosk) { ++ gtk_widget_show(priv->toolbar); ++ virt_viewer_timed_revealer_force_reveal(priv->revealer, TRUE); ++ } + + if (priv->display) { + virt_viewer_display_set_monitor(priv->display, monitor); +-- +2.9.4 + diff --git a/SOURCES/0038-kiosk-Show-authentication-dialog-again-if-cancelled.patch b/SOURCES/0038-kiosk-Show-authentication-dialog-again-if-cancelled.patch new file mode 100644 index 0000000..4c81ffa --- /dev/null +++ b/SOURCES/0038-kiosk-Show-authentication-dialog-again-if-cancelled.patch @@ -0,0 +1,29 @@ +From 6819216091347a7c37e87474d0ee99b306d0d3e7 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 19 May 2017 17:12:19 -0300 +Subject: [PATCH virt-viewer 38/38] kiosk: Show authentication dialog again if + cancelled + +Related: https://bugzilla.redhat.com/show_bug.cgi?id=1446161 + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/virt-viewer-app.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 2b74a9f..e90afe8 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1441,6 +1441,8 @@ virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED, const gch + + if (!priv->kiosk) + virt_viewer_app_hide_all_windows(self); ++ else if (priv->cancelled) ++ priv->authretry = TRUE; + + if (priv->quitting) + g_application_quit(G_APPLICATION(self)); +-- +2.9.4 + diff --git a/SOURCES/0039-spice-do-not-show-error-on-cancel-close-of-auth-dial.patch b/SOURCES/0039-spice-do-not-show-error-on-cancel-close-of-auth-dial.patch new file mode 100644 index 0000000..eae26f6 --- /dev/null +++ b/SOURCES/0039-spice-do-not-show-error-on-cancel-close-of-auth-dial.patch @@ -0,0 +1,38 @@ +From 3b8f6932fd4b9f4019eb305943f6d1b6dd01e119 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Fri, 2 Jun 2017 14:05:51 +0200 +Subject: [PATCH virt-viewer 39/39] spice: do not show error on cancel/close of + auth dialog + +Mainly an issue for kiosk mode due the fact that it'll not quit the +application on cancel. That means that authentication dialog can't +really be canceled and showing an input error such as "wrong password" +is misleading (no password should be taken in consideration on Cancel). + +Related: https://bugzilla.redhat.com/show_bug.cgi?id=1446161 + +Signed-off-by: Victor Toso +Acked-by: Pavel Grunt +Acked-by: Eduardo Lima (Etrunko) +--- + src/virt-viewer-session-spice.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index 5f326aa..f43ed65 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -724,6 +724,10 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel, + &password); + g_free(host); + if (!ret) { ++ /* ret is false when dialog did not return GTK_RESPONSE_OK. We ++ * should ignore auth error dialog if user has cancelled or closed ++ * the dialog */ ++ self->priv->pass_try = 0; + g_signal_emit_by_name(session, "session-cancelled"); + } else { + gboolean openfd; +-- +2.9.4 + diff --git a/SOURCES/0040-vnc-do-not-show-error-on-cancel-close-of-auth-dialog.patch b/SOURCES/0040-vnc-do-not-show-error-on-cancel-close-of-auth-dialog.patch new file mode 100644 index 0000000..ca63ad1 --- /dev/null +++ b/SOURCES/0040-vnc-do-not-show-error-on-cancel-close-of-auth-dialog.patch @@ -0,0 +1,68 @@ +From 98de755b5be6e76570782755ff026061310bec19 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Tue, 6 Jun 2017 14:05:32 +0200 +Subject: [PATCH] vnc: do not show error on cancel/close of auth dialog + +Mainly a kiosk mode issue, similar to the spice fix in 6480e52f62b. + +This patch saves the cancel/close state of auth dialog from +virt_viewer_auth_collect_credentials() in order to avoid an error +dialog to pop up to user in kiosk mode. + +This happens due the fact that we call virt_viewer_app_disconnected() +twice: +- One with "session-cancelled" which is correct and well handled; +- The other with "session-disconnected" which is misleading as there + was no connection at this time. This will trigger the error dialog + with "Unable to connect to the graphic server %s". + +Related: https://bugzilla.redhat.com/show_bug.cgi?id=1446161 + +Signed-off-by: Victor Toso +Acked-by: Eduardo Lima (Etrunko) +(cherry picked from commit fb14a8b300ed89a40938302a37679f902b3dab40) +--- + src/virt-viewer-session-vnc.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c +index 26fb405..c79b63c 100644 +--- a/src/virt-viewer-session-vnc.c ++++ b/src/virt-viewer-session-vnc.c +@@ -40,6 +40,7 @@ struct _VirtViewerSessionVncPrivate { + GtkWindow *main_window; + /* XXX we should really just have a VncConnection */ + VncDisplay *vnc; ++ gboolean auth_dialog_cancelled; + }; + + #define VIRT_VIEWER_SESSION_VNC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_SESSION_VNC, VirtViewerSessionVncPrivate)) +@@ -104,6 +105,8 @@ virt_viewer_session_vnc_connected(VncDisplay *vnc G_GNUC_UNUSED, + GtkWidget *display = virt_viewer_display_vnc_new(session, session->priv->vnc); + VirtViewerApp *app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(session)); + ++ session->priv->auth_dialog_cancelled = FALSE; ++ + virt_viewer_window_set_display(virt_viewer_app_get_main_window(app), + VIRT_VIEWER_DISPLAY(display)); + +@@ -117,6 +120,8 @@ virt_viewer_session_vnc_disconnected(VncDisplay *vnc G_GNUC_UNUSED, + VirtViewerSessionVnc *session) + { + GtkWidget *display; ++ if (session->priv->auth_dialog_cancelled) ++ return; + + virt_viewer_session_clear_displays(VIRT_VIEWER_SESSION(session)); + display = virt_viewer_display_vnc_new(session, session->priv->vnc); +@@ -314,6 +319,7 @@ virt_viewer_session_vnc_auth_credential(GtkWidget *src G_GNUC_UNUSED, + + if (!ret) { + vnc_display_close(self->priv->vnc); ++ self->priv->auth_dialog_cancelled = TRUE; + g_signal_emit_by_name(self, "session-cancelled"); + goto cleanup; + } +-- +2.13.0 + diff --git a/SOURCES/0041-remote-viewer-Show-authentication-dialog-again-if-in.patch b/SOURCES/0041-remote-viewer-Show-authentication-dialog-again-if-in.patch new file mode 100644 index 0000000..61e63dc --- /dev/null +++ b/SOURCES/0041-remote-viewer-Show-authentication-dialog-again-if-in.patch @@ -0,0 +1,54 @@ +From 8e29fa411c7ea10d95bb290fe94d9be965153142 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Thu, 8 Jun 2017 17:59:54 -0300 +Subject: [PATCH virt-viewer 41/41] remote-viewer: Show authentication dialog + again if in kiosk mode and connecting to ovirt + +Similar to previous commit 5d9e6d2338cbb680fe761b86e6ca433b1234e6e0, now +dealing with the case of connecting directly to ovirt:// URIs, which was +left behind. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1459808 + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/remote-viewer.c | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 451fb1d..d927f8a 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -742,19 +742,25 @@ authenticate_cb(RestProxy *proxy, G_GNUC_UNUSED RestProxyAuth *auth, + gchar *password = NULL; + VirtViewerWindow *window; + gboolean success = FALSE; ++ gboolean kiosk = FALSE; + + g_object_get(proxy, + "username", &username, + NULL); + ++ g_object_get(G_OBJECT(user_data), "kiosk", &kiosk, NULL); ++ + if (username == NULL || *username == '\0') + username = g_strdup(g_get_user_name()); + + window = virt_viewer_app_get_main_window(VIRT_VIEWER_APP(user_data)); +- success = virt_viewer_auth_collect_credentials(virt_viewer_window_get_window(window), +- "oVirt", +- NULL, +- &username, &password); ++ do { ++ success = virt_viewer_auth_collect_credentials(virt_viewer_window_get_window(window), ++ "oVirt", ++ NULL, ++ &username, &password); ++ } while (kiosk && !success); ++ + if (success) { + g_object_set(G_OBJECT(proxy), + "username", username, +-- +2.9.4 + diff --git a/SOURCES/0042-remote-viewer-connect-Keep-the-dialog-window-on-top.patch b/SOURCES/0042-remote-viewer-connect-Keep-the-dialog-window-on-top.patch new file mode 100644 index 0000000..1f60315 --- /dev/null +++ b/SOURCES/0042-remote-viewer-connect-Keep-the-dialog-window-on-top.patch @@ -0,0 +1,65 @@ +From 40b92b6b4fa4eb81c2b746365a6a056b3666ee81 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Fri, 9 Jun 2017 17:27:32 +0200 +Subject: [PATCH] remote-viewer-connect: Keep the 'dialog' window on top + +Otherwise, in kiosk mode, it'll be hidden from user. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1459800 + +Signed-off-by: Victor Toso +Acked-by: Eduardo Lima (Etrunko) +--- + src/remote-viewer-connect.c | 3 ++- + src/remote-viewer-connect.h | 2 +- + src/remote-viewer.c | 3 ++- + 3 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/remote-viewer-connect.c b/src/remote-viewer-connect.c +index 2fbc5ff..14594ac 100644 +--- a/src/remote-viewer-connect.c ++++ b/src/remote-viewer-connect.c +@@ -172,7 +172,7 @@ make_label_small(GtkLabel* label) + * @return FALSE if Cancel is pressed or dialog is closed + */ + gboolean +-remote_viewer_connect_dialog(gchar **uri) ++remote_viewer_connect_dialog(GtkWindow *main_window, gchar **uri) + { + GtkWidget *window, *label, *entry, *recent, *connect_button, *cancel_button; + GtkRecentFilter *rfilter; +@@ -192,6 +192,7 @@ remote_viewer_connect_dialog(gchar **uri) + g_return_val_if_fail(builder != NULL, GTK_RESPONSE_NONE); + + window = GTK_WIDGET(gtk_builder_get_object(builder, "remote-viewer-connection-window")); ++ gtk_window_set_transient_for(GTK_WINDOW(window), main_window); + connect_button = GTK_WIDGET(gtk_builder_get_object(builder, "connect-button")); + cancel_button = GTK_WIDGET(gtk_builder_get_object(builder, "cancel-button")); + label = GTK_WIDGET(gtk_builder_get_object(builder, "example-label")); +diff --git a/src/remote-viewer-connect.h b/src/remote-viewer-connect.h +index f00581e..99779ef 100644 +--- a/src/remote-viewer-connect.h ++++ b/src/remote-viewer-connect.h +@@ -23,7 +23,7 @@ + + #include + +-gboolean remote_viewer_connect_dialog(gchar **uri); ++gboolean remote_viewer_connect_dialog(GtkWindow *main_window, gchar **uri); + + #endif /* REMOTE_VIEWER_CONNECT_H */ + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index d927f8a..7834dac 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -1122,7 +1122,8 @@ remote_viewer_start(VirtViewerApp *app, GError **err) + #endif + retry_dialog: + if (priv->open_recent_dialog) { +- if (!remote_viewer_connect_dialog(&guri)) { ++ VirtViewerWindow *main_window = virt_viewer_app_get_main_window(app); ++ if (!remote_viewer_connect_dialog(virt_viewer_window_get_window(main_window), &guri)) { + g_set_error_literal(&error, + VIRT_VIEWER_ERROR, VIRT_VIEWER_ERROR_CANCELLED, + _("No connection was chosen")); diff --git a/SOURCES/0043-Change-default-screenshot-name-to-Screenshot.png.patch b/SOURCES/0043-Change-default-screenshot-name-to-Screenshot.png.patch new file mode 100644 index 0000000..3fb5a3b --- /dev/null +++ b/SOURCES/0043-Change-default-screenshot-name-to-Screenshot.png.patch @@ -0,0 +1,31 @@ +From bda3c47ae85d8aba46b21e5a9207e73f7521b1c4 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma +Date: Wed, 19 Jul 2017 14:33:00 -0500 +Subject: [PATCH] Change default screenshot name to "Screenshot.png" + +Since the code attempts to append ".png" to filenames without an +extension, it doesn't make much sense to have the default filename be +extensionless. Including the extension on the default filename makes +things more straightforward. + +Related: rhbz#1455832 +--- + src/virt-viewer-window.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 8d05e52..ef40ec7 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -988,7 +988,7 @@ virt_viewer_window_menu_file_screenshot(GtkWidget *menu G_GNUC_UNUSED, + image_dir = g_get_user_special_dir(G_USER_DIRECTORY_PICTURES); + if (image_dir != NULL) + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), image_dir); +- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), _("Screenshot")); ++ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), _("Screenshot.png")); + + if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { + char *filename; +-- +2.13.6 + diff --git a/SOURCES/0044-Report-errors-when-saving-screenshot.patch b/SOURCES/0044-Report-errors-when-saving-screenshot.patch new file mode 100644 index 0000000..71f00d4 --- /dev/null +++ b/SOURCES/0044-Report-errors-when-saving-screenshot.patch @@ -0,0 +1,81 @@ +From e327a522719e5bc2237a3e8c4064e40b41fb9d15 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma +Date: Mon, 17 Jul 2017 16:15:12 -0500 +Subject: [PATCH] Report errors when saving screenshot + +Currently, the user gets no feedback if the screenshot fails (e.g. if +they don't have permission to write in the chosen directory, etc). This +patch adds a simple dialog showing the error message when a screenshot +fails. +--- + src/virt-viewer-window.c | 24 ++++++++++++++++-------- + 1 file changed, 16 insertions(+), 8 deletions(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index ef40ec7..41794a6 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -936,34 +936,37 @@ static GdkPixbufFormat *get_image_format(const char *filename) + return g_hash_table_lookup(image_formats_once.retval, ext); + } + +-static void ++static gboolean + virt_viewer_window_save_screenshot(VirtViewerWindow *self, +- const char *file) ++ const char *file, ++ GError **error) + { + VirtViewerWindowPrivate *priv = self->priv; + GdkPixbuf *pix = virt_viewer_display_get_pixbuf(VIRT_VIEWER_DISPLAY(priv->display)); + GdkPixbufFormat *format = get_image_format(file); ++ gboolean result; + + if (format == NULL) { + g_debug("unknown file extension, falling back to png"); + if (!g_str_has_suffix(file, ".png")) { + char *png_filename; + png_filename = g_strconcat(file, ".png", NULL); +- gdk_pixbuf_save(pix, png_filename, "png", NULL, +- "tEXt::Generator App", PACKAGE, NULL); ++ result = gdk_pixbuf_save(pix, png_filename, "png", error, ++ "tEXt::Generator App", PACKAGE, NULL); + g_free(png_filename); + } else { +- gdk_pixbuf_save(pix, file, "png", NULL, +- "tEXt::Generator App", PACKAGE, NULL); ++ result = gdk_pixbuf_save(pix, file, "png", error, ++ "tEXt::Generator App", PACKAGE, NULL); + } + } else { + char *type = gdk_pixbuf_format_get_name(format); + g_debug("saving to %s", type); +- gdk_pixbuf_save(pix, file, type, NULL, NULL); ++ result = gdk_pixbuf_save(pix, file, type, error, NULL); + g_free(type); + } + + g_object_unref(pix); ++ return result; + } + + G_MODULE_EXPORT void +@@ -992,9 +995,14 @@ virt_viewer_window_menu_file_screenshot(GtkWidget *menu G_GNUC_UNUSED, + + if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { + char *filename; ++ GError *error = NULL; + + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog)); +- virt_viewer_window_save_screenshot(self, filename); ++ if (!virt_viewer_window_save_screenshot(self, filename, &error)) { ++ virt_viewer_app_simple_message_dialog(self->priv->app, ++ error->message); ++ g_error_free(error); ++ } + g_free(filename); + } + +-- +2.13.6 + diff --git a/SOURCES/0045-Screenshot-reject-unknown-image-type-filenames.patch b/SOURCES/0045-Screenshot-reject-unknown-image-type-filenames.patch new file mode 100644 index 0000000..ce5d64a --- /dev/null +++ b/SOURCES/0045-Screenshot-reject-unknown-image-type-filenames.patch @@ -0,0 +1,57 @@ +From 83f72567d319768cdd04755b7bd7f9201cb63403 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma +Date: Wed, 19 Jul 2017 15:59:46 -0500 +Subject: [PATCH] Screenshot: reject unknown image type filenames + +If the image format cannot be determined for a screenshot filename, +simply return an error informing the user that this is not a valid image +format. + +In the past, if we couldn't determine the file type, we simply saved it +as a PNG, and appended a ".png" file extension to the filename. This has +several problems. First, it can result in some oddly-named files (e.g. a +screenshot named 'Screenshot.pdf.png'). + +Second, modifying the filename that is returned from the GtkFileChooser +undermines the overwrite-confirmation functionality that is built into +the gtk file chooser. When the user specifies a filename in the file +chooser dialog, the chooser will automatically check whether a file of +that name exists, and if it does, it will display a dialog asking +whether the user wants to overwrite it. But if we then append a ".png" +extension to the filename and save it, we may be overwriting an existing +file without warning. By returning an error for unrecognized file types, +we avoid this problem. + +Resolves: rhbz#1455832 +--- + src/virt-viewer-window.c | 14 +++----------- + 1 file changed, 3 insertions(+), 11 deletions(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 41794a6..a796685 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -947,17 +947,9 @@ virt_viewer_window_save_screenshot(VirtViewerWindow *self, + gboolean result; + + if (format == NULL) { +- g_debug("unknown file extension, falling back to png"); +- if (!g_str_has_suffix(file, ".png")) { +- char *png_filename; +- png_filename = g_strconcat(file, ".png", NULL); +- result = gdk_pixbuf_save(pix, png_filename, "png", error, +- "tEXt::Generator App", PACKAGE, NULL); +- g_free(png_filename); +- } else { +- result = gdk_pixbuf_save(pix, file, "png", error, +- "tEXt::Generator App", PACKAGE, NULL); +- } ++ g_set_error(error, G_FILE_ERROR, G_FILE_ERROR_FAILED, ++ _("Unable to determine image format for file '%s'"), file); ++ result = FALSE; + } else { + char *type = gdk_pixbuf_format_get_name(format); + g_debug("saving to %s", type); +-- +2.13.6 + diff --git a/SOURCES/0046-configure-check-for-new-functions-in-libgovirt.patch b/SOURCES/0046-configure-check-for-new-functions-in-libgovirt.patch new file mode 100644 index 0000000..a125c33 --- /dev/null +++ b/SOURCES/0046-configure-check-for-new-functions-in-libgovirt.patch @@ -0,0 +1,35 @@ +From 909174b37f433a8c68039bd6c853cca6e09a8dd1 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 29 Sep 2017 17:54:39 -0300 +Subject: [PATCH] configure: check for new functions in libgovirt + +These functions will be used in ovirt-foreign-menu code and guarded +by #ifdef blocks so that we can keep compatibility with older libgovirt +versions. + +Related: https://bugzilla.redhat.com/show_bug.cgi?id=1427467 + https://bugzilla.redhat.com/show_bug.cgi?id=1428401 + +Signed-off-by: Eduardo Lima (Etrunko) +--- + configure.ac | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 395659b..6ed5f8a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -190,6 +190,10 @@ AS_IF([test "x$with_ovirt" = "xyes"], + void *fun = rest_proxy_auth_cancel;])], + [AC_DEFINE([HAVE_OVIRT_CANCEL], 1, [Have rest_proxy_auth_cancel and OVIRT_REST_CALL_ERROR_CANCELLED?])], + []) ++ AC_CHECK_FUNCS([ovirt_api_search_vms ovirt_vm_get_host ovirt_host_get_cluster ovirt_cluster_get_data_center], ++ [AC_DEFINE([HAVE_OVIRT_DATA_CENTER], 1, [Have support for data center])], ++ [] ++ ) + CFLAGS="$SAVED_CFLAGS" + LIBS="$SAVED_LIBS"] + ) +-- +2.13.6 + diff --git a/SOURCES/0047-foreign-menu-Use-query-for-fetching-virtual-machines.patch b/SOURCES/0047-foreign-menu-Use-query-for-fetching-virtual-machines.patch new file mode 100644 index 0000000..d3c88b9 --- /dev/null +++ b/SOURCES/0047-foreign-menu-Use-query-for-fetching-virtual-machines.patch @@ -0,0 +1,36 @@ +From 4970f2528ce0e84d63242426cb6e360b5bbd07fe Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 12 May 2017 16:06:08 -0300 +Subject: [PATCH] foreign-menu: Use query for fetching virtual machines + +This can save us some bandwidth, as we are searching for the specific +virtual machine instead of retrieving the collection with all VMs, and +then iterating over the results after the transfer finishes. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/ovirt-foreign-menu.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index 2939ae5..6d0eab3 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -697,7 +697,14 @@ static void ovirt_foreign_menu_fetch_vm_async(OvirtForeignMenu *menu, + g_return_if_fail(OVIRT_IS_PROXY(menu->priv->proxy)); + g_return_if_fail(OVIRT_IS_API(menu->priv->api)); + ++#ifdef HAVE_OVIRT_API_SEARCH_VMS ++ char * query = g_strdup_printf("id=%s", menu->priv->vm_guid); ++ vms = ovirt_api_search_vms(menu->priv->api, query); ++ g_free(query); ++#else + vms = ovirt_api_get_vms(menu->priv->api); ++#endif ++ + ovirt_collection_fetch_async(vms, menu->priv->proxy, + g_task_get_cancellable(task), + vms_fetched_cb, task); +-- +2.13.6 + diff --git a/SOURCES/0048-ovirt-foreign-menu-Fetch-host-cluster-and-data-cente.patch b/SOURCES/0048-ovirt-foreign-menu-Fetch-host-cluster-and-data-cente.patch new file mode 100644 index 0000000..c568bee --- /dev/null +++ b/SOURCES/0048-ovirt-foreign-menu-Fetch-host-cluster-and-data-cente.patch @@ -0,0 +1,226 @@ +From 1ae320d801440c6d7a052013b88031e06d7836d5 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Thu, 3 Aug 2017 18:48:25 -0300 +Subject: [PATCH] ovirt-foreign-menu: Fetch host, cluster and data center + information + +It is possible that the data center the VM is associated with has more +than one storage domain associated with it as well, when only one is +active while the others are not. + +The current ovir-foreign-menu code does not take it into consideration, +thus the ISO dialog may show invalid results with that scenario. We fix +this problem by making use of new functions in libgovirt, adding support +or hosts, clusters and data centers. + +Related: https://bugzilla.redhat.com/show_bug.cgi?id=1427467 + https://bugzilla.redhat.com/show_bug.cgi?id=1428401 + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/ovirt-foreign-menu.c | 154 +++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 154 insertions(+) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index 6d0eab3..bf32773 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -34,6 +34,11 @@ typedef enum { + STATE_0, + STATE_API, + STATE_VM, ++#ifdef HAVE_OVIRT_DATA_CENTER ++ STATE_HOST, ++ STATE_CLUSTER, ++ STATE_DATA_CENTER, ++#endif + STATE_STORAGE_DOMAIN, + STATE_VM_CDROM, + STATE_CDROM_FILE, +@@ -43,6 +48,11 @@ typedef enum { + static void ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, GTask *task, OvirtForeignMenuState state); + static void ovirt_foreign_menu_fetch_api_async(OvirtForeignMenu *menu, GTask *task); + static void ovirt_foreign_menu_fetch_vm_async(OvirtForeignMenu *menu, GTask *task); ++#ifdef HAVE_OVIRT_DATA_CENTER ++static void ovirt_foreign_menu_fetch_host_async(OvirtForeignMenu *menu, GTask *task); ++static void ovirt_foreign_menu_fetch_cluster_async(OvirtForeignMenu *menu, GTask *task); ++static void ovirt_foreign_menu_fetch_data_center_async(OvirtForeignMenu *menu, GTask *task); ++#endif + static void ovirt_foreign_menu_fetch_storage_domain_async(OvirtForeignMenu *menu, GTask *task); + static void ovirt_foreign_menu_fetch_vm_cdrom_async(OvirtForeignMenu *menu, GTask *task); + static void ovirt_foreign_menu_refresh_cdrom_file_async(OvirtForeignMenu *menu, GTask *task); +@@ -55,6 +65,11 @@ struct _OvirtForeignMenuPrivate { + OvirtProxy *proxy; + OvirtApi *api; + OvirtVm *vm; ++#ifdef HAVE_OVIRT_DATA_CENTER ++ OvirtHost *host; ++ OvirtCluster *cluster; ++ OvirtDataCenter *data_center; ++#endif + char *vm_guid; + + OvirtCollection *files; +@@ -184,6 +199,11 @@ ovirt_foreign_menu_dispose(GObject *obj) + g_clear_object(&self->priv->proxy); + g_clear_object(&self->priv->api); + g_clear_object(&self->priv->vm); ++#ifdef HAVE_OVIRT_DATA_CENTER ++ g_clear_object(&self->priv->host); ++ g_clear_object(&self->priv->cluster); ++ g_clear_object(&self->priv->data_center); ++#endif + g_clear_pointer(&self->priv->vm_guid, g_free); + g_clear_object(&self->priv->files); + g_clear_object(&self->priv->cdrom); +@@ -299,6 +319,27 @@ ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, + ovirt_foreign_menu_fetch_vm_async(menu, task); + break; + } ++#ifdef HAVE_OVIRT_DATA_CENTER ++ /* fall through */ ++ case STATE_HOST: ++ if (menu->priv->host == NULL) { ++ ovirt_foreign_menu_fetch_host_async(menu, task); ++ break; ++ } ++ /* fall through */ ++ case STATE_CLUSTER: ++ if (menu->priv->cluster == NULL) { ++ ovirt_foreign_menu_fetch_cluster_async(menu, task); ++ break; ++ } ++ /* fall through */ ++ case STATE_DATA_CENTER: ++ if (menu->priv->data_center == NULL) { ++ ovirt_foreign_menu_fetch_data_center_async(menu, task); ++ break; ++ } ++#endif ++ /* fall through */ + case STATE_STORAGE_DOMAIN: + if (menu->priv->files == NULL) { + ovirt_foreign_menu_fetch_storage_domain_async(menu, task); +@@ -646,6 +687,119 @@ static void ovirt_foreign_menu_fetch_storage_domain_async(OvirtForeignMenu *menu + } + + ++#ifdef HAVE_OVIRT_DATA_CENTER ++static void data_center_fetched_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ GError *error = NULL; ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); ++ OvirtResource *resource = OVIRT_RESOURCE(source_object); ++ ++ ovirt_resource_refresh_finish(resource, result, &error); ++ if (error != NULL) { ++ g_debug("failed to fetch Data Center: %s", error->message); ++ g_task_return_error(task, error); ++ g_object_unref(task); ++ return; ++ } ++ ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_DATA_CENTER); ++} ++ ++ ++static void ovirt_foreign_menu_fetch_data_center_async(OvirtForeignMenu *menu, ++ GTask *task) ++{ ++ g_return_if_fail(OVIRT_IS_FOREIGN_MENU(menu)); ++ g_return_if_fail(OVIRT_IS_PROXY(menu->priv->proxy)); ++ g_return_if_fail(OVIRT_IS_CLUSTER(menu->priv->cluster)); ++ ++ menu->priv->data_center = ovirt_cluster_get_data_center(menu->priv->cluster); ++ ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->data_center), ++ menu->priv->proxy, ++ g_task_get_cancellable(task), ++ data_center_fetched_cb, ++ task); ++} ++ ++ ++static void cluster_fetched_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ GError *error = NULL; ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); ++ OvirtResource *resource = OVIRT_RESOURCE(source_object); ++ ++ ovirt_resource_refresh_finish(resource, result, &error); ++ if (error != NULL) { ++ g_debug("failed to fetch Cluster: %s", error->message); ++ g_task_return_error(task, error); ++ g_object_unref(task); ++ return; ++ } ++ ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_CLUSTER); ++} ++ ++ ++static void ovirt_foreign_menu_fetch_cluster_async(OvirtForeignMenu *menu, ++ GTask *task) ++{ ++ g_return_if_fail(OVIRT_IS_FOREIGN_MENU(menu)); ++ g_return_if_fail(OVIRT_IS_PROXY(menu->priv->proxy)); ++ g_return_if_fail(OVIRT_IS_HOST(menu->priv->host)); ++ ++ menu->priv->cluster = ovirt_host_get_cluster(menu->priv->host); ++ ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->cluster), ++ menu->priv->proxy, ++ g_task_get_cancellable(task), ++ cluster_fetched_cb, ++ task); ++} ++ ++ ++static void host_fetched_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ GError *error = NULL; ++ GTask *task = G_TASK(user_data); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(g_task_get_source_object(task)); ++ OvirtResource *resource = OVIRT_RESOURCE(source_object); ++ ++ ovirt_resource_refresh_finish(resource, result, &error); ++ if (error != NULL) { ++ g_debug("failed to fetch Host: %s", error->message); ++ g_task_return_error(task, error); ++ g_object_unref(task); ++ return; ++ } ++ ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_HOST); ++} ++ ++ ++static void ovirt_foreign_menu_fetch_host_async(OvirtForeignMenu *menu, ++ GTask *task) ++{ ++ g_return_if_fail(OVIRT_IS_FOREIGN_MENU(menu)); ++ g_return_if_fail(OVIRT_IS_PROXY(menu->priv->proxy)); ++ g_return_if_fail(OVIRT_IS_VM(menu->priv->vm)); ++ ++ menu->priv->host = ovirt_vm_get_host(menu->priv->vm); ++ ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->host), ++ menu->priv->proxy, ++ g_task_get_cancellable(task), ++ host_fetched_cb, ++ task); ++} ++#endif /* HAVE_OVIRT_DATA_CENTER */ ++ ++ + static void vms_fetched_cb(GObject *source_object, + GAsyncResult *result, + gpointer user_data) +-- +2.13.6 + diff --git a/SOURCES/0049-foreign-menu-Check-if-storage-domain-is-active-for-d.patch b/SOURCES/0049-foreign-menu-Check-if-storage-domain-is-active-for-d.patch new file mode 100644 index 0000000..c2d6ca9 --- /dev/null +++ b/SOURCES/0049-foreign-menu-Check-if-storage-domain-is-active-for-d.patch @@ -0,0 +1,177 @@ +From 0e0342f3b37b2c4a312de55902e3cc16af58ccd4 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 4 Aug 2017 18:32:55 -0300 +Subject: [PATCH] foreign-menu: Check if storage domain is active for data + center + +This last patch of the series is where we actually check if the storage +domain is active in the data center the VM is associated with. It makes +use of g_strv_contains(), which is available only in glib version 2.44. +Compatibility code has been added if building against older versions +than required. + +Related: https://bugzilla.redhat.com/show_bug.cgi?id=1427467 + https://bugzilla.redhat.com/show_bug.cgi?id=1428401 + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/Makefile.am | 2 ++ + src/glib-compat.c | 35 +++++++++++++++++++++++++++++++++++ + src/glib-compat.h | 39 +++++++++++++++++++++++++++++++++++++++ + src/ovirt-foreign-menu.c | 25 +++++++++++++++++++++++++ + 4 files changed, 101 insertions(+) + create mode 100644 src/glib-compat.c + create mode 100644 src/glib-compat.h + +diff --git a/src/Makefile.am b/src/Makefile.am +index 9748277..b3eea67 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -54,6 +54,8 @@ libvirt_viewer_util_la_SOURCES = \ + + libvirt_viewer_la_SOURCES = \ + $(BUILT_SOURCES) \ ++ glib-compat.h \ ++ glib-compat.c \ + virt-viewer-auth.h \ + virt-viewer-auth.c \ + virt-viewer-app.h \ +diff --git a/src/glib-compat.c b/src/glib-compat.c +new file mode 100644 +index 0000000..62ac87e +--- /dev/null ++++ b/src/glib-compat.c +@@ -0,0 +1,35 @@ ++/* ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, see . ++ */ ++#include ++ ++#include "glib-compat.h" ++ ++#if !GLIB_CHECK_VERSION(2,44,0) ++gboolean ++g_strv_contains (const gchar * const *strv, ++ const gchar *str) ++{ ++ g_return_val_if_fail (strv != NULL, FALSE); ++ g_return_val_if_fail (str != NULL, FALSE); ++ ++ for (; *strv != NULL; strv++) ++ { ++ if (g_str_equal (str, *strv)) ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++#endif +diff --git a/src/glib-compat.h b/src/glib-compat.h +new file mode 100644 +index 0000000..f1b43ae +--- /dev/null ++++ b/src/glib-compat.h +@@ -0,0 +1,39 @@ ++/* ++ * Virt Viewer: A virtual machine console viewer ++ * ++ * Copyright (C) 2017 Red Hat, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ * Author: Eduardo Lima (Etrunko) ++ */ ++ ++#include ++ ++#ifndef GLIB_COMPAT_H ++#define GLIB_COMPAT_H 1 ++ ++#include ++ ++G_BEGIN_DECLS ++ ++#if !GLIB_CHECK_VERSION(2,44,0) ++gboolean g_strv_contains (const gchar * const *strv, ++ const gchar *str); ++#endif ++ ++G_END_DECLS ++ ++#endif // GLIB_COMPAT_H +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index bf32773..b8ad179 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -29,6 +29,7 @@ + + #include "ovirt-foreign-menu.h" + #include "virt-viewer-util.h" ++#include "glib-compat.h" + + typedef enum { + STATE_0, +@@ -618,6 +619,24 @@ static void ovirt_foreign_menu_fetch_vm_cdrom_async(OvirtForeignMenu *menu, + cdroms_fetched_cb, task); + } + ++#ifdef HAVE_OVIRT_DATA_CENTER ++static gboolean storage_domain_attached_to_data_center(OvirtStorageDomain *domain, ++ OvirtDataCenter *data_center) ++{ ++ GStrv data_center_ids; ++ char *data_center_guid; ++ gboolean match; ++ ++ g_object_get(domain, "data-center-ids", &data_center_ids, NULL); ++ g_object_get(data_center, "guid", &data_center_guid, NULL); ++ match = g_strv_contains((const gchar * const *) data_center_ids, data_center_guid); ++ g_strfreev(data_center_ids); ++ g_free(data_center_guid); ++ ++ return match; ++} ++#endif ++ + + static void storage_domains_fetched_cb(GObject *source_object, + GAsyncResult *result, +@@ -653,6 +672,12 @@ static void storage_domains_fetched_cb(GObject *source_object, + continue; + } + ++#ifdef HAVE_OVIRT_DATA_CENTER ++ if (!storage_domain_attached_to_data_center(domain, menu->priv->data_center)) { ++ continue; ++ } ++#endif ++ + file_collection = ovirt_storage_domain_get_files(domain); + if (file_collection != NULL) { + if (menu->priv->files) { +-- +2.13.6 + diff --git a/SOURCES/0050-remote-viewer-Pass-guri-to-remote_viewer_session_con.patch b/SOURCES/0050-remote-viewer-Pass-guri-to-remote_viewer_session_con.patch new file mode 100644 index 0000000..cb53248 --- /dev/null +++ b/SOURCES/0050-remote-viewer-Pass-guri-to-remote_viewer_session_con.patch @@ -0,0 +1,69 @@ +From 8f1b485ddf106aae94ccdf14c26ad11a19c471b4 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 20 Oct 2017 15:00:46 -0200 +Subject: [PATCH] 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 + +Backport from upstream 6608c0dd60fbf3a762a21a4d039fefc75c040406 + +Signed-off-by: Eduardo Lima (Etrunko) +--- + src/remote-viewer.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 7834dac..429f38c 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -1064,8 +1064,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,13 +1074,17 @@ 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 +@@ -1169,7 +1172,7 @@ retry_dialog: + } + + 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 +-- +2.13.6 + diff --git a/SOURCES/0051-doc-Adjust-reference-to-spice-gtk-man-page.patch b/SOURCES/0051-doc-Adjust-reference-to-spice-gtk-man-page.patch new file mode 100644 index 0000000..134c31f --- /dev/null +++ b/SOURCES/0051-doc-Adjust-reference-to-spice-gtk-man-page.patch @@ -0,0 +1,30 @@ +From 784c4d11f12ed21bba8c5360019fd484f23a4438 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Thu, 21 Sep 2017 10:16:56 +0200 +Subject: [PATCH] doc: Adjust reference to spice-gtk man page + +The man page spice-gtk ships is named "spice-client", not "spice-gtk" + +Signed-off-by: Christophe Fergeau +Reviewed-by: Daniel P. Berrange + +https://bugzilla.redhat.com/show_bug.cgi?id=1477966 +--- + man/virt-viewer.pod | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index bae3a70..2a1c739 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -232,6 +232,6 @@ to the extent permitted by law. + + =head1 SEE ALSO + +-C, C, C, the project website C ++C, C, C, the project website C + + =cut +-- +2.13.6 + diff --git a/SOURCES/0052-doc-Adjust-reference-to-spice-gtk-man-page-for-remot.patch b/SOURCES/0052-doc-Adjust-reference-to-spice-gtk-man-page-for-remot.patch new file mode 100644 index 0000000..750fef3 --- /dev/null +++ b/SOURCES/0052-doc-Adjust-reference-to-spice-gtk-man-page-for-remot.patch @@ -0,0 +1,32 @@ +From cd8d0fe14c04e30111e94c7f6f5b0c69779ad942 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Thu, 21 Sep 2017 10:16:56 +0200 +Subject: [PATCH] doc: Adjust reference to spice-gtk man page for remote-viewer + +Similar to last commit, as noticed by reporter in bugzilla: + +https://bugzilla.redhat.com/show_bug.cgi?id=1477966 + +Man page should reference spice-client, not spice-gtk. + +Signed-off-by: Eduardo Lima (Etrunko) +Acked-by: Victor Toso +--- + man/remote-viewer.pod | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod +index 60ea3a6..560f73f 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -385,6 +385,6 @@ to the extent permitted by law. + + =head1 SEE ALSO + +-C, C, the project website C ++C, C, the project website C + + =cut +-- +2.14.3 + diff --git a/SOURCES/0053-Update-translations-from-zanata.patch b/SOURCES/0053-Update-translations-from-zanata.patch new file mode 100644 index 0000000..c84e041 --- /dev/null +++ b/SOURCES/0053-Update-translations-from-zanata.patch @@ -0,0 +1,5548 @@ +From a90bc147bb3a746fa4963cc7e89269d731131608 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Mon, 11 Dec 2017 17:45:19 -0200 +Subject: [PATCH] Update translations from zanata + +--- + po/de.po | 228 +++++++++++++++++++++++++++++++--------------------------- + po/es.po | 234 +++++++++++++++++++++++++++++++++--------------------------- + po/fr.po | 221 ++++++++++++++++++++++++++++++-------------------------- + po/it.po | 207 +++++++++++++++++++++++++++++------------------------ + po/ja.po | 186 ++++++++++++++++++++++++----------------------- + po/ko.po | 194 ++++++++++++++++++++++++++----------------------- + po/pt_BR.po | 220 +++++++++++++++++++++++++++++--------------------------- + po/ru.po | 194 ++++++++++++++++++++++++++----------------------- + po/zh_CN.po | 198 ++++++++++++++++++++++++++------------------------ + po/zh_TW.po | 204 ++++++++++++++++++++++++++++------------------------ + 10 files changed, 1119 insertions(+), 967 deletions(-) + +diff --git a/po/de.po b/po/de.po +index 1c972cd..9c53fbf 100644 +--- a/po/de.po ++++ b/po/de.po +@@ -4,26 +4,32 @@ + # + # Translators: + # Automatically generated, 2010 +-# Fabian Affolter , 2012 ++# Fabian Affolter , 2012,2014 + # hpeters , 2010 ++# hpeters , 2010,2012 + # hpeters , 2012 ++# noxin , 2013 ++# Rainer Gromansperg , 2013 ++# Rainer Gromansperg , 2013 + # Roman Spirgi , 2012 +-# rgromans , 2013. #zanata +-# hpeters , 2016. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# ljanda , 2017. #zanata ++# lrintel , 2017. #zanata ++# phrdina , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2016-10-19 09:59+0000\n" +-"Last-Translator: hpeters \n" ++"PO-Revision-Date: 2017-11-14 01:10+0000\n" ++"Last-Translator: Copied by Zanata \n" + "Language-Team: German \n" + "Language: de\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -61,15 +67,15 @@ msgstr "" + + #: ../src/remote-viewer-iso-list-dialog.c:285 + msgid "Refresh" +-msgstr "" ++msgstr "Aktualisieren" + + #: ../src/remote-viewer-iso-list-dialog.c:286 + msgid "Close" +-msgstr "" ++msgstr "Schließen" + + #: ../src/remote-viewer-iso-list-dialog.c:306 + msgid "Unspecified error" +-msgstr "" ++msgstr "Unbekannter Fehler" + + #: ../src/remote-viewer-iso-list-dialog.c:328 + msgid "Failed to change CD" +@@ -81,7 +87,7 @@ msgstr "" + + #: ../src/remote-viewer.c:146 + msgid "Set window title" +-msgstr "Fenstertitel festlegen" ++msgstr "Titel des Window setzen" + + #: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" +@@ -110,7 +116,7 @@ msgstr "" + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "Initiieren der Verbindung fehlgeschlagen" + +@@ -123,56 +129,56 @@ msgstr "Anzeige vom Kontroller deaktiviert" + msgid "Controller connection failed: %s" + msgstr "Kontroller-Verbindung fehlgeschlagen: %s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "Analysieren der ovirt-URI fehlgeschlagen" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "Authentifikation abgebrochen" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "oVirt VM %s läuft nicht" + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "oVirt VM %s hat keine Anzeige" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "oVirt VM %s hat einen unbekannten Anzeigetyp: %d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." +-msgstr "Einrichten der Spice-Sitzung …" ++msgstr "Einrichten der Spice-Sitzung ..." + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "Keine Verbindung gewählt" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "Ungültige Datei %s:" + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "Verbindungstyp konnte nicht von URI ermittelt werden" + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "oVirt-Sitzung konnte nicht geöffnet werden:" + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" + msgstr "" +@@ -201,20 +207,20 @@ msgid "Recent connections" + msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "_Abbrechen" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "_Verbinden" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 + msgid "Loading..." +-msgstr "" ++msgstr "Lade..." + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 + msgid "Select ISO" +@@ -222,7 +228,7 @@ msgstr "" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 + msgid "Selected" +-msgstr "" ++msgstr "Ausgewählt" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +@@ -287,11 +293,11 @@ msgstr "Das Fedora Übersetzungs-Team" + + #: ../src/virt-viewer-app.c:459 + msgid "Do you want to close the session?" +-msgstr "Wollen Sie die Sitzung beenden?" ++msgstr "Möchten Sie die Sitzung beenden?" + + #: ../src/virt-viewer-app.c:461 + msgid "Do not ask me again" +-msgstr "Nicht mehr nachfragen" ++msgstr "Nicht noch einmal nachfragen" + + #: ../src/virt-viewer-app.c:655 + #, c-format +@@ -311,7 +317,7 @@ msgstr "Verbindung mit Unix-Socket fehlgeschlagen: %s" + #: ../src/virt-viewer-app.c:955 + #, c-format + msgid "Waiting for display %d..." +-msgstr "Warten auf Anzeige %d …" ++msgstr "Warten auf Anzeige %d ..." + + #: ../src/virt-viewer-app.c:1062 + #, c-format +@@ -345,92 +351,92 @@ msgstr "Verbinden mit Grafikserver" + + #: ../src/virt-viewer-app.c:1362 + msgid "Guest domain has shutdown" +-msgstr "Gast-Domain wurde abgeschaltet" ++msgstr "Gast-Domain wurde beendet" + + #: ../src/virt-viewer-app.c:1423 + msgid "Connected to graphic server" + msgstr "Verbunden mit Grafikserver" + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Verbindung zum Grafik-Server %s konnte nicht hergestellt werden" + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "Authentifikation beim Remote-Desktop-Server fehlgeschlagen: %s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "USB-Weiterleitungsfehler: %s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "Zoom-Level muss zwischen %d und %d sein\n" ++msgstr "Zoom-Level muss zwischen %d-%d sein\n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "_%d anzeigen" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" + msgstr "Ungültiger kiosk-quit Parameter: %s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "Versionsinformationen anzeigen" + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" + msgstr "Zoomlevel des Fensters in Prozent" + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" + "Im Vollbildmodus öffnen (passt die Auflösung des Gast-Systems dem Client an)." + "" + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" +-msgstr "Tastenkombinationen anpassen" ++msgstr "eigene angepasste Hotkeys" + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" +-msgstr "Kiosk-Modus aktivieren" ++msgstr "Kiosk Modus ermöglichen" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" +-msgstr "Bei angegebener Bedingung im Kiosk-Modus beenden" ++msgstr "Beenden bei bestimmter Bedingung im Kiosk-Modus" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "Ausführliche Informationen anzeigen" + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "Debugging-Informationen anzeigen" + +@@ -464,7 +470,7 @@ msgstr "Authentifikation erforderlich" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "_OK" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +@@ -492,14 +498,18 @@ msgstr "VNC stellt keine GUID bereit" + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." + msgstr[0] "" + msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -513,16 +523,17 @@ msgid "Invalid password" + msgstr "Ungültiges Passwort" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" +-msgstr "USB-Geräte zur Weiterleitung wählen" ++msgstr "USB-Gerät zur Weiterleitung wählen" + +-#: ../src/virt-viewer-session-spice.c:800 ++# translation auto-copied from project subscription-manager, version 1.9.X, document keys ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "S_chließen" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Nicht unterstützter Authentifikationsstyp %d" +@@ -535,99 +546,105 @@ msgstr "Keine virtuelle Maschine gefunden" + msgid "No virtual machine was chosen" + msgstr "Keine virtuelle Maschine ausgewählt" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" + msgstr "Strg+Alt+_Entf" + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Strg+Alt+_Rücktaste" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Strg+Alt+F_1" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Strg+Alt+F_2" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Strg+Alt+F_3" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Strg+Alt+F_4" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Strg+Alt+F_5" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Strg+Alt+F_6" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Strg+Alt+F_7" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Strg+Alt+F_8" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Strg+Alt+F_9" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Strg+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Strg+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Strg+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 +-msgid "_Save" ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" + msgstr "" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" ++#: ../src/virt-viewer-window.c:978 ++msgid "_Save" ++msgstr "_Speichern" ++ ++#: ../src/virt-viewer-window.c:986 ++#, fuzzy ++msgid "Screenshot.png" + msgstr "Screenshot" + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "Unbekannt" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "Verbindung trennen" + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "USB-Geräteauswahl" + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "Tastenkombination senden" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "Vollbildmodus verlassen" + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Strg+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Drücken Sie %s, um den Mauszeiger freizugeben)" +@@ -636,13 +653,13 @@ msgstr "(Drücken Sie %s, um den Mauszeiger freizugeben)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -713,7 +730,7 @@ msgstr "" + + #: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" +-msgstr "Warten auf Neustart der Gast-Domain" ++msgstr "Warten auf Neustart der Domain" + + #: ../src/virt-viewer.c:554 + #, c-format +@@ -737,7 +754,7 @@ msgstr "Virtuelle Maschine %s läuft nicht" + + #: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" +-msgstr "Warten auf Start von libvirt" ++msgstr "Auf den Start von libvirt wird gewartet" + + #: ../src/virt-viewer.c:888 + msgid "Finding guest domain" +@@ -809,7 +826,7 @@ msgstr "_CD wechseln" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "_Beenden" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -825,15 +842,15 @@ msgstr "_Zoom" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "Ansicht ver_größern" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "Ansicht ver_kleinern" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "_Normale Größe" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +@@ -845,7 +862,7 @@ msgstr "Cursor freigeben" + + #: ../src/resources/ui/virt-viewer.ui.h:16 + msgid "_Send key" +-msgstr "_Schlüssel senden" ++msgstr "_Taste senden" + + #: ../src/resources/ui/virt-viewer.ui.h:17 + msgid "_Help" +@@ -857,7 +874,7 @@ msgstr "_Gast-Details" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" ++msgstr "_Info" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +@@ -881,7 +898,7 @@ msgstr "Verfügbare virtuelle Maschinen" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "" ++msgstr "Einstellungen" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +@@ -893,9 +910,8 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "" ++msgstr "Nur lesen" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "" +- +diff --git a/po/es.po b/po/es.po +index 17d7fbf..f079772 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -3,28 +3,33 @@ + # This file is distributed under the same license as the PACKAGE package. + # + # Translators: +-# Adolfo Jayme , 2012 +-# vareli , 2013 ++# Adolfo Jayme Barrientos , 2012 ++# vareli , 2013-2014 + # vareli , 2013 ++# Gerardo Rosales , 2014 + # Gladys Guerrero , 2012 + # Gladys Guerrero , 2012-2013 ++# Luis Bazán , 2013 + # Manuel Eduardo Ospina Sarmiento , 2010 + # Manuel Ospina , 2010 +-# gguerrer , 2016. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# ljanda , 2017. #zanata ++# lrintel , 2017. #zanata ++# phrdina , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2016-10-20 01:23+0000\n" +-"Last-Translator: gguerrer \n" ++"PO-Revision-Date: 2017-12-11 01:16+0000\n" ++"Last-Translator: ljanda \n" + "Language-Team: Spanish \n" + "Language: es\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -62,23 +67,23 @@ msgstr "" + + #: ../src/remote-viewer-iso-list-dialog.c:285 + msgid "Refresh" +-msgstr "" ++msgstr "Actualizar" + + #: ../src/remote-viewer-iso-list-dialog.c:286 + msgid "Close" +-msgstr "" ++msgstr "Cerrar" + + #: ../src/remote-viewer-iso-list-dialog.c:306 + msgid "Unspecified error" +-msgstr "" ++msgstr "Error no especificado" + + #: ../src/remote-viewer-iso-list-dialog.c:328 + msgid "Failed to change CD" +-msgstr "" ++msgstr "Error al cambiar CD" + + #: ../src/remote-viewer-iso-list-dialog.c:380 + msgid "Change CD" +-msgstr "" ++msgstr "Cambiar CD" + + #: ../src/remote-viewer.c:146 + msgid "Set window title" +@@ -97,7 +102,8 @@ msgstr "Cliente de visor remoto" + msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" +-msgstr "" ++msgstr "\n" ++"Error: no se puede manipular multiples URls\n" + + #: ../src/remote-viewer.c:194 + #, c-format +@@ -110,8 +116,10 @@ msgstr "" + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" ++"Ejecute «%s --help» para ver una lista completa de las opciones disponibles " ++"de los comandos en línea.\n" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "No se pudo inicializar la conexión" + +@@ -124,60 +132,60 @@ msgstr "Pantalla desactivada por el controlador" + msgid "Controller connection failed: %s" + msgstr "No se pudo conectar al controlador: %s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "Falló al intentar analizar uri ovirt" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "Se canceló la autenticación" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "La máquina virtual oVirt %s no se está ejecutando" + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "La máquina virtual oVirt %s no tiene pantalla" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "" + "La máquina virtual oVirt %s tiene un tipo de pantalla desconocido: %d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." + msgstr "Configurando sesión de Spice…" + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "No se seleccionó ninguna conexión" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "Archivo inválido %s:" + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "No se puede determinar el tipo de conexión de la URI" + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "No se pudo abrir la sesión oVirt:" + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" +-msgstr "" ++msgstr "No se pudo establecer la conexión: %s." + + #. + #. * Local variables: +@@ -200,31 +208,31 @@ msgstr "Por ejemplo, spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "" ++msgstr "Conecciones recientes" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "_Cancelar" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "C_onectar" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 + msgid "Loading..." +-msgstr "" ++msgstr "Cargando..." + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 + msgid "Select ISO" +-msgstr "" ++msgstr "Seleccionar ISO" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 + msgid "Selected" +-msgstr "" ++msgstr "Seleccionado" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +@@ -233,7 +241,7 @@ msgstr "Nombre" + + #: ../src/resources/ui/virt-viewer-about.ui.h:1 + msgid "About Virt-Viewer" +-msgstr "" ++msgstr "Sobre Virt-Viewer" + + #: ../src/resources/ui/virt-viewer-about.ui.h:2 + msgid "" +@@ -326,7 +334,7 @@ msgstr "Falló la conexión a ssh." + #: ../src/virt-viewer-app.c:1161 + #, c-format + msgid "Can't connect to channel: %s" +-msgstr "" ++msgstr "No se puede conectar con el canal: %s" + + #: ../src/virt-viewer-app.c:1163 + msgid "only SSH or unix socket connection supported." +@@ -353,86 +361,87 @@ msgstr "Dominio de huéspedes se ha apagado" + msgid "Connected to graphic server" + msgstr "Conectado al servidor gráfico" + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "No se pudo conectar al servidor gráfico %s" + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" ++"No se puede autenticar con el servidor del escritorio remoto al %s: %s\n" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "No se puede autenticar con el servidor del escritorio remoto: %s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "Error de redirección USB: %s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" + msgstr "El nivel de amplificación debe estar entre %d-%d \n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" +-msgstr "" ++msgstr "%s\n" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" +-msgstr "" ++msgstr "%s versión %s" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "Mostrar _%d" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "Argumento kiosk-quit es inválido: %s" ++msgstr "Argumento kiosk-quit no válido: %s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "Mostrar información de versión" + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" + msgstr "Aumentar acercamiento de ventana, en porcentaje" + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" + "Abierto en modo de pantalla completa (ajusta la resolución del huésped para " + "adaptarse a la del cliente)." + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" + msgstr "Personalizar teclas calientes" + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" + msgstr "Activar el modo kiosk" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" + msgstr "Salir según la condición determinada en modo kiosk" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "Mostrar información detallada" + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "Mostrar información de depuración" + +@@ -468,7 +477,7 @@ msgstr "Se necesita autenticación" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "_Aceptar" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +@@ -496,14 +505,18 @@ msgstr "VNC no proporciona GUID" + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." + msgstr[0] "" + msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -517,16 +530,17 @@ msgid "Invalid password" + msgstr "Contraseña inválida" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" + msgstr "Seleccione los dispositivos USB para redirigir" + +-#: ../src/virt-viewer-session-spice.c:800 ++# translation auto-copied from project subscription-manager, version 1.9.X, document keys ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "_Cerrar" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Tipo de autenticación no compatible %d" +@@ -539,99 +553,104 @@ msgstr "No se encontró ninguna maquina virtual" + msgid "No virtual machine was chosen" + msgstr "No se seleccionó ninguna maquina virtual" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Supr" + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Retroceso" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 +-msgid "_Save" ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" + msgstr "" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" +-msgstr "Captura de pantalla" ++#: ../src/virt-viewer-window.c:978 ++msgid "_Save" ++msgstr "_Guardar" ++ ++#: ../src/virt-viewer-window.c:986 ++msgid "Screenshot.png" ++msgstr "Captura de pantalla.png" + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "Desconocido" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "Desconectar" + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "Selección de dispositivos USB" + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "Enviar combinación de teclas" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "Salir de pantalla completa" + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Presione %s para liberar el puntero)" +@@ -640,13 +659,13 @@ msgstr "(Presione %s para liberar el puntero)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -705,14 +724,16 @@ msgstr "Consola gráfica de la máquina virtual" + msgid "\n" + "Usage: %s [OPTIONS] [ID|UUID|DOMAIN-NAME]\n" + "\n" +-msgstr "" ++msgstr "\n" ++"Uso: %s [OPCIONES] [ID|UUID|DOMINIO-NOMBRE]\n" + + #: ../src/virt-viewer.c:185 + #, c-format + msgid "\n" + "No ID|UUID|DOMAIN-NAME was specified for '%s'\n" + "\n" +-msgstr "" ++msgstr "\n" ++"No se especificó ID|UUID|DOMINIO-NOMBRE para '%s'\n" + + #: ../src/virt-viewer.c:300 + msgid "Waiting for guest domain to re-start" +@@ -812,7 +833,7 @@ msgstr "_Cambiar CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "Salir" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -828,15 +849,15 @@ msgstr "_Zoom" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "_Ampliar" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "_Reducir" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "Tamaño _normal" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +@@ -860,7 +881,7 @@ msgstr "_Información de huésped" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" ++msgstr "_Acerca de" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +@@ -884,7 +905,7 @@ msgstr "Máquinas virtuales disponibles" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "" ++msgstr "Preferencias" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +@@ -896,9 +917,8 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "" ++msgstr "Sólo lectura" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "" +- ++msgstr "Spice" +diff --git a/po/fr.po b/po/fr.po +index a3e6e9e..4daa868 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -5,23 +5,27 @@ + # Translators: + # Boris BARNIER , 2010 + # Christophe Fergeau , 2013 ++# Gé Baylard , 2014 + # Jérôme Fenal , 2012-2013 + # Sam Friedmann , 2010,2012 +-# Corina Roe , 2016. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# ljanda , 2017. #zanata ++# lrintel , 2017. #zanata ++# phrdina , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2016-10-12 01:08+0000\n" +-"Last-Translator: Corina Roe \n" ++"PO-Revision-Date: 2017-12-11 01:12+0000\n" ++"Last-Translator: ljanda \n" + "Language-Team: French \n" + "Language: fr\n" + "Plural-Forms: nplurals=2; plural=(n > 1);\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -59,15 +63,15 @@ msgstr "" + + #: ../src/remote-viewer-iso-list-dialog.c:285 + msgid "Refresh" +-msgstr "" ++msgstr "Réactualiser" + + #: ../src/remote-viewer-iso-list-dialog.c:286 + msgid "Close" +-msgstr "" ++msgstr "Fermer" + + #: ../src/remote-viewer-iso-list-dialog.c:306 + msgid "Unspecified error" +-msgstr "" ++msgstr "Erreur non précisée" + + #: ../src/remote-viewer-iso-list-dialog.c:328 + msgid "Failed to change CD" +@@ -95,7 +99,8 @@ msgstr "Client de l'afficheur distant" + msgid "\n" + "Error: can't handle multiple URIs\n" + "\n" +-msgstr "" ++msgstr "\n" ++"Erreur : impossible de gérer plusieurs URI\n" + + #: ../src/remote-viewer.c:194 + #, c-format +@@ -103,13 +108,18 @@ msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "" ++"\n" ++"Erreur : arguments surnuméraires spécifiés lors de l'utilisation du " ++"contrôleur Spice\n" + + #: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" ++"Lancer '%s --help' pour voir la liste complète des options de ligne de " ++"commande disponibles\n" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "Impossible d'initier la connexion" + +@@ -122,56 +132,56 @@ msgstr "Affichage désactivé par le contrôleur" + msgid "Controller connection failed: %s" + msgstr "Échec de la connexion du contrôleur : %s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "impossible d'analyser uri ovirt" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "L'authenfication a été annulée" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "VM oVirt %s n'est pas lancée" + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "VM oVirt %s n'a aucun affichage" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "VM oVirt %s n'a aucun type d'affichage : %d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." + msgstr "Mise en place d'une session Spice..." + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "Aucune connexion n'a été sélectionnée" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "Fichier invalide: %s" + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "Impossible de déterminer le type de la connexion à partir de l'URI" + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "Impossible de créer une session oVirt :" + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" + msgstr "" +@@ -197,23 +207,23 @@ msgstr "Par exemple, spice://foo.example.org:5900" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:4 + msgid "Recent connections" +-msgstr "" ++msgstr "Connexions récentes" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "_Annuler" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "Se _connecter" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 + msgid "Loading..." +-msgstr "" ++msgstr "Chargement..." + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 + msgid "Select ISO" +@@ -221,7 +231,7 @@ msgstr "" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 + msgid "Selected" +-msgstr "" ++msgstr "Sélectionné" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +@@ -348,88 +358,88 @@ msgstr "Le domaine invité est fermé" + msgid "Connected to graphic server" + msgstr "Connecté au serveur d'affichage" + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Impossible d'établir la connexion au serveur d'affichage %s" + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" +-msgstr "" ++msgstr "Authentification avec le serveur distant sur %s impossible : %s\n" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "" + "Impossible d'authentifier la connexion avec le serveur de bureau distant : " + "%s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "Erreur de redirection USB : %s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "Le niveau du zoom doit se trouver entre %d-%d\n" ++msgstr "Le niveau de zoom doit être dans la plage %d-%d\n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" +-msgstr "" ++msgstr "%s\n" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" +-msgstr "" ++msgstr "%s version %s" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "Affichage _%d" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "Argument kiosk-quit non valide : %s" ++msgstr "Argument kiosk-quit invalide : %s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "Afficher les informations de version" + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" + msgstr "Niveau de zoom de la fenêtre, en pourcentage" + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" + "Ouvrir en mode plein écran (ajuste la résolution de l'invité pour s'adapter " + "à celle du client)." + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" + msgstr "Personnaliser les raccourcis clavier" + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" +-msgstr "Activer le mode kiosk" ++msgstr "Activer le mode kiosque" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" +-msgstr "Quitter en accordance aux conditions données en mode kiosk" ++msgstr "Quitter sur une condition définie dans le mode kiosque" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "Afficher les informations détaillées" + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "Afficher les informations de débogage" + +@@ -462,7 +472,7 @@ msgstr "Authentification requise" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "_OK" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +@@ -490,14 +500,18 @@ msgstr "VNC ne fournit pas de GUID" + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." + msgstr[0] "" + msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -511,16 +525,17 @@ msgid "Invalid password" + msgstr "Mot de passe incorrect" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" + msgstr "Sélectionnez les périphériques USB à rediriger" + +-#: ../src/virt-viewer-session-spice.c:800 ++# translation auto-copied from project subscription-manager, version 1.9.X, document keys ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "_Fermer" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Le type d'authentification %d n'est pas pris en charge" +@@ -533,99 +548,104 @@ msgstr "Aucune machine virtuelle trouvée" + msgid "No virtual machine was chosen" + msgstr "Aucune machine virtuelle sélectionnée" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Suppr" + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Effacer" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 +-msgid "_Save" ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" + msgstr "" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" +-msgstr "Capture d'écran" ++#: ../src/virt-viewer-window.c:978 ++msgid "_Save" ++msgstr "_Enregistrer" + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:986 ++msgid "Screenshot.png" ++msgstr "Capture d'écran.png" ++ ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "Inconnu" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "Déconnexion" + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "Sélection du périphérique USB" + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "Envoyer la combinaison de touches" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "Quitter le plein écran" + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Appuyer sur %s pour libérer la souris)" +@@ -634,13 +654,13 @@ msgstr "(Appuyer sur %s pour libérer la souris)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -807,7 +827,7 @@ msgstr "_Changer CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "_Quitter" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -823,15 +843,15 @@ msgstr "_Zoom" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "Zoom a_vant" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "Zoom a_rrière" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "Taille _normale" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +@@ -855,7 +875,7 @@ msgstr "Infos_Invité" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" ++msgstr "À _propos" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +@@ -879,7 +899,7 @@ msgstr "Machines virtuelles disponibles" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "" ++msgstr "Préférences" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +@@ -891,9 +911,8 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "" ++msgstr "Lecture seule" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" +-msgstr "" +- ++msgstr "Serveur Spice" +diff --git a/po/it.po b/po/it.po +index fe0a9d7..e154b5b 100644 +--- a/po/it.po ++++ b/po/it.po +@@ -3,27 +3,32 @@ + # This file is distributed under the same license as the PACKAGE package. + # + # Translators: ++# Francesco D'Aluisio , 2013 + # Francesco Tombolini , 2010 + # fvalen , 2013 + # fvalen , 2012 + # Gianluca Sforna , 2010 + # Guido Grazioli , 2013 + # Silvio Pierro , 2012 +-# tchuang , 2016. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# ljanda , 2017. #zanata ++# lrintel , 2017. #zanata ++# phrdina , 2017. #zanata ++# tchuang , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2016-10-19 01:53+0000\n" ++"PO-Revision-Date: 2017-11-14 01:10+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Italian \n" + "Language: it\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -61,15 +66,16 @@ msgstr "" + + #: ../src/remote-viewer-iso-list-dialog.c:285 + msgid "Refresh" +-msgstr "" ++msgstr "Aggiorna" + ++# translation auto-copied from project subscription-manager, version 1.9.X, document keys + #: ../src/remote-viewer-iso-list-dialog.c:286 + msgid "Close" +-msgstr "" ++msgstr "Chiudi" + + #: ../src/remote-viewer-iso-list-dialog.c:306 + msgid "Unspecified error" +-msgstr "" ++msgstr "Errore non specificato" + + #: ../src/remote-viewer-iso-list-dialog.c:328 + msgid "Failed to change CD" +@@ -110,7 +116,7 @@ msgstr "" + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "Inizializzazione connessione fallita" + +@@ -123,56 +129,56 @@ msgstr "Schermo disabilitato dal controller" + msgid "Controller connection failed: %s" + msgstr "Connessione controller fallita: %s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "impossibile analizzare uri ovirt" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "L'autenticazione è stata annullata" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "La virtual machine oVirt %s non è in esecuzione" + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "La virtual machine oVirt %s non dispone di display" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "La virtual machine oVirt %s ha un tipo di display sconosciuto: %d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." + msgstr "Impostazione sessione Spice in corso..." + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "Non sono state selezionate connessioni" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "%s file non valido: " + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "Impossibile determinare il tipo di connessione dall'URI" + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "Impossibile aprire la sessione oVirt: " + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" + msgstr "" +@@ -201,20 +207,21 @@ msgid "Recent connections" + msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "_Annulla" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "C_onnetti" + ++# translation auto-copied from project evolution, version 3.8.5, document evolution-3.8 + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 + msgid "Loading..." +-msgstr "" ++msgstr "Caricamento in corso..." + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 + msgid "Select ISO" +@@ -349,86 +356,86 @@ msgstr "Il dominio del guest si è arrestato" + msgid "Connected to graphic server" + msgstr "Connesso al server grafico" + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Impossibile connettersi al server grafico %s" + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "" + "Impossibile eseguire l'autenticazione con il server desktop remoto su: %s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "Errore di reindirizzamento USB: %s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "Il livello di zoom deve essere tra %d e %d\n" ++msgstr "Livello di Zoom deve essere tra %d-%d\n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "Visualizza _%d" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "Argomento kiosk-quit non valido: %s" ++msgstr "Argomento kiosk-quit invalido: %s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "Mostra informazioni sulla versione" + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" + msgstr "Livello di zoom della finestra, in percentuale" + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" + "Apri in modalità schermo intero (adatta la risoluzione del guest al client)" + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" + msgstr "Personalizza i tasti di scelta rapida" + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" +-msgstr "Abilità modalità tutto schermo" ++msgstr "Abilita modalità Kiosk" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" +-msgstr "Esci con determinate condizioni in modalità tutto schermo" ++msgstr "Esci dalla modalità kiosk in una data condizione" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "Mostra informazioni dettagliate" + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "Mostra le informazioni di debug" + +@@ -461,7 +468,7 @@ msgstr "Autenticazione necessaria" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "_Ok" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +@@ -489,14 +496,18 @@ msgstr "VNC non fornisce GUID" + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." + msgstr[0] "" + msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -510,16 +521,17 @@ msgid "Invalid password" + msgstr "Password non valida" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" + msgstr "Seleziona i dispositivi USB per il reindirizzamento" + +-#: ../src/virt-viewer-session-spice.c:800 ++# translation auto-copied from project subscription-manager, version 1.9.X, document keys ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "_Chiudi" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Tipo di autenticazione %d non supportata" +@@ -532,99 +544,105 @@ msgstr "Nessuna macchina virtuale trovata" + msgid "No virtual machine was chosen" + msgstr "Nessuna macchina virtuale selezionata" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" +-msgstr "Ctrl+Alt+_Canc" ++msgstr "Ctrl+Alt+_Del" + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 +-msgid "_Save" ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" + msgstr "" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" ++#: ../src/virt-viewer-window.c:978 ++msgid "_Save" ++msgstr "_Salva" ++ ++#: ../src/virt-viewer-window.c:986 ++#, fuzzy ++msgid "Screenshot.png" + msgstr "Schermata" + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "Sconosciuto" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "Scollega" + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "Selezione dispositivo USB" + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "Invia combinazione di tasti" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "Lascia a schermo intero" + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Premere %s per rilasciare il puntatore)" +@@ -633,13 +651,13 @@ msgstr "(Premere %s per rilasciare il puntatore)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -805,7 +823,7 @@ msgstr "_Cambia CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "_Abbandona" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -821,15 +839,15 @@ msgstr "_Zoom" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "Aum_enta ingrandimento" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "Rid_uci ingrandimento" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "_Dimensione normale" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +@@ -853,7 +871,7 @@ msgstr "_Dettagli guest" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" ++msgstr "I_nformazioni" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +@@ -877,7 +895,7 @@ msgstr "Macchine virtuali disponibili" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "" ++msgstr "Preferenze" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +@@ -887,11 +905,14 @@ msgstr "" + msgid "Share folder" + msgstr "" + ++# * Read-only ++# * Read and write ++# ++# Permessi su file + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "" ++msgstr "Leggere soltanto" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "" +- +diff --git a/po/ja.po b/po/ja.po +index 066ca67..bf001ba 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -3,26 +3,26 @@ + # This file is distributed under the same license as the PACKAGE package. + # + # Translators: +-# Hajime Taira , 2012 ++# Hajime Taira , 2012-2014 + # Kiyoto Hashida , 2010 ++# noriko , 2014 + # Tomoyuki KATO , 2012-2013 +-# asasaki , 2016. #zanata +-# jito , 2016. #zanata +-# kmoriguc , 2017. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# amoewaki , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2017-05-15 01:23+0000\n" +-"Last-Translator: kmoriguc \n" ++"PO-Revision-Date: 2017-11-30 12:51+0000\n" ++"Last-Translator: amoewaki \n" + "Language-Team: Japanese \n" + "Language: ja\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -55,7 +55,7 @@ msgstr "Virt-Viewer 接続ファイル" + + #: ../src/remote-viewer-iso-list-dialog.c:160 + msgid "Failed to fetch CD names" +-msgstr "CD 名 の取得に失敗しました" ++msgstr "CD 名の取得に失敗しました" + + #: ../src/remote-viewer-iso-list-dialog.c:212 + msgid "Loading..." +@@ -108,15 +108,15 @@ msgid "\n" + "Error: extra arguments given while using Spice controller\n" + "\n" + msgstr "\n" +-"エラー: Spice コントローラーを使用している間に余分な引数が指定されました\n" ++"エラー: Spice コントローラーの使用時に、余分な引数が指定されました\n" + "\n" + + #: ../src/remote-viewer.c:216 ../src/virt-viewer.c:202 + #, c-format + msgid "Run '%s --help' to see a full list of available command line options\n" +-msgstr "利用可能なコマンドラインオプションを一覧表示するには '%s --help' を実行してください\n" ++msgstr "利用可能なコマンドラインオプションを一覧表示するには、'%s --help' を実行してください\n" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "接続の初期化に失敗しました" + +@@ -129,56 +129,56 @@ msgstr "ディスプレイがコントローラーにより無効化されまし + msgid "Controller connection failed: %s" + msgstr "コントローラーの接続に失敗しました: %s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "ovirt uri の構文解析に失敗しました" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "認証が取り消されました" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" +-msgstr "oVirt VM %s が実行されていません" ++msgstr "oVirt VM %s が実行していません" + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "oVirt VM %s にはディスプレイがありません" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "oVirt VM %s にはホストの情報がありません" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "oVirt VM %s のディスプレイの種類は不明です: %d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." + msgstr "Spice セッションのセットアップ中..." + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "接続が選択されていません" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "無効なファイル %s: " + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "URI から接続の種類を決定できません" + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "oVirt セッションを開けませんでした: " + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" + msgstr "接続できません: %s" +@@ -207,7 +207,7 @@ msgid "Recent connections" + msgstr "最近の接続" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +@@ -249,7 +249,7 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-about.ui.h:4 + msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" +-msgstr "GTK-VNC, SPICE-GTK および libvirt でビルドされたリモートデスクトップクライアント" ++msgstr "GTK-VNC、SPICE-GTK、および libvirt でビルドされたリモートデスクトップクライアント" + + #: ../src/resources/ui/virt-viewer-about.ui.h:5 + msgid "virt-manager.org" +@@ -355,84 +355,84 @@ msgstr "仮想マシンがシャットダウンしました" + msgid "Connected to graphic server" + msgstr "グラフィックサーバーに接続" + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "グラフィックサーバー %s に接続できません" + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "%s のリモートデスクトップサーバーで認証に失敗しました: %s\n" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "リモートデスクトップサーバーでの認証に失敗しました: %s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "USB リダイレクトエラー: %s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "ズームレベルは %d-%d の範囲内でなければいけません\n" ++msgstr "ズームレベルは %d - %d の範囲内でなければいけません\n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" + msgstr "%s\n" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" + msgstr "%s バージョン %s" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "ディスプレイ_%d" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "無効な kiosk-quit 引数: %s" ++msgstr "無効な kiosk-quit の引数: %s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "バージョン情報を表示します" + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" +-msgstr "ウィンドウのズームレベル(パーセント単位)" ++msgstr "ウィンドウのズームレベル (パーセント単位)" + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "フルスクリーンモードで開きます (クライアントに合わせてゲストの解像度を調整します)。" + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" + msgstr "ホットキーのカスタマイズ" + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" +-msgstr "キオスクモードを有効にする" ++msgstr "Kiosk モードを有効化" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" +-msgstr "キオスクモードで指定条件について終了する" ++msgstr "Kiosk モードを、指定した条件で終了します" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "詳細情報を表示します" + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "デバッグ情報を表示します" + +@@ -493,16 +493,20 @@ msgstr "VNC が GUID を提供していません" + msgid "File Transfers" + msgstr "ファイルの転送" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "1 個のファイルを転送しています…" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." +-msgstr[0] "%d 個のファイルを転送しています…" ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." ++msgstr[0] "%d ファイルを %d 個転送しています ..." + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" +-msgstr "エラーにより以下のファイルの転送に失敗しました:%s" ++msgstr "エラーにより以下のファイルの転送に失敗しました: %s" + + #: ../src/virt-viewer-main.c:38 + msgid "Virt Viewer" +@@ -513,16 +517,16 @@ msgid "Invalid password" + msgstr "無効なパスワード" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" + msgstr "リダイレクトする USB デバイスを選択" + +-#: ../src/virt-viewer-session-spice.c:800 ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" + msgstr "閉じる(_C)" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "サポートしていない認証の種類 %d" +@@ -535,99 +539,104 @@ msgstr "仮想マシンが見つかりません" + msgid "No virtual machine was chosen" + msgstr "仮想マシンが選択されていません" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+Del(_D)" + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+Backspace(_B)" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F1(_1)" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F2(_2)" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F3(_3)" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F4(_4)" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F5(_5)" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F6(_6)" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F7(_7)" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F8(_8)" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F9(_9)" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F10(_0)" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" ++msgstr "ファイル '%s' のイメージフォーマットが判定できません。" ++ ++#: ../src/virt-viewer-window.c:978 + msgid "_Save" + msgstr "保存(_S)" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" +-msgstr "スクリーンショット" ++#: ../src/virt-viewer-window.c:986 ++msgid "Screenshot.png" ++msgstr "Screenshot.png" + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "不明" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "oVirt に接続できません" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "切断" + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "USB デバイスの選択" + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "組み合わせキーの送信" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "フルスクリーンの解除" + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(ポインターを開放するには %s を押します)" +@@ -636,13 +645,13 @@ msgstr "(ポインターを開放するには %s を押します)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -899,4 +908,3 @@ msgstr "読み込み専用" + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "Spice" +- +diff --git a/po/ko.po b/po/ko.po +index 892ea46..875afcb 100644 +--- a/po/ko.po ++++ b/po/ko.po +@@ -8,23 +8,25 @@ + # eukim , 2012 + # eukim , 2012 + # Hyunsok Oh , 2010 +-# eukim , 2013. #zanata +-# eukim , 2016. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# ljanda , 2017. #zanata ++# lrintel , 2017. #zanata ++# phrdina , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2016-10-17 02:37+0000\n" +-"Last-Translator: eukim \n" ++"PO-Revision-Date: 2017-11-14 01:10+0000\n" ++"Last-Translator: Copied by Zanata \n" + "Language-Team: Korean (http://www.transifex.com/projects/p/fedora/language/" + "ko/)\n" + "Language: ko\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -62,15 +64,15 @@ msgstr "" + + #: ../src/remote-viewer-iso-list-dialog.c:285 + msgid "Refresh" +-msgstr "" ++msgstr "새로고침 " + + #: ../src/remote-viewer-iso-list-dialog.c:286 + msgid "Close" +-msgstr "" ++msgstr "닫기" + + #: ../src/remote-viewer-iso-list-dialog.c:306 + msgid "Unspecified error" +-msgstr "" ++msgstr "알 수 없는 오류가 있습니다" + + #: ../src/remote-viewer-iso-list-dialog.c:328 + msgid "Failed to change CD" +@@ -111,7 +113,7 @@ msgstr "" + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "연결 초기화 실패 " + +@@ -124,56 +126,56 @@ msgstr "컨트롤러에 의해 디스플레이가 비활성화됨 " + msgid "Controller connection failed: %s" + msgstr "컨트롤러 연결에 실패함: %s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "ovirt uri 구문 분석에 실패했습니다" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "인증이 취소되었습니다" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "oVirt VM %s이/가 실행되고 있지 않습니다" + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "oVirt VM %s에 디스플레이가 없습니다" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "oVirt VM %s에 알 수 없는 디스플레이 유형이 있습니다: %d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." + msgstr "Spice 세션 설정 중..." + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "연결이 선택되어 있지 않습니다" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "잘못된 파일 %s:" + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "URI에서 연결 유형을 지정할 수 없음 " + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "oVirt 세션을 열 수 없습니다:" + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" + msgstr "" +@@ -202,20 +204,20 @@ msgid "Recent connections" + msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "취소(_C)" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "연결(_O)" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 + msgid "Loading..." +-msgstr "" ++msgstr "로딩 중..." + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 + msgid "Select ISO" +@@ -223,7 +225,7 @@ msgstr "" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 + msgid "Selected" +-msgstr "" ++msgstr "선택됨 " + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +@@ -350,84 +352,84 @@ msgstr "게스트 도메인이 종료되었습니다 " + msgid "Connected to graphic server" + msgstr "그래픽 서버에 연결 " + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "그래픽 서버 %s에 연결할 수 없음 " + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "원격 데스크탑 서버로 인증할 수 없음: %s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "USB 리디렉션 오류: %s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" + msgstr "줌 레벨은 %d-%d 범위 내에 있어야 합니다\n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "디스플레이 _%d" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" + msgstr "잘못된 kiosk-quit 인수: %s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "버전 정보 보기 " + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" + msgstr "윈도우의 줌 레벨 (백분율) " + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "전체 화면 모드로 엽니다 (클라이언트에 맞게 게스트 해상도를 조정합니다)." + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" + msgstr "핫키 사용자 정의 " + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" + msgstr "kiosk 모드 활성화" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" + msgstr "kiosk 모드에서 지정된 조건을 종료" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "상세 정보 보기 " + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "디버그 정보 보기 " + +@@ -460,7 +462,7 @@ msgstr "인증이 필요함 " + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "_OK" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +@@ -488,13 +490,17 @@ msgstr "VNC는 GUID를 제공하지 않습니다" + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." + msgstr[0] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -508,16 +514,17 @@ msgid "Invalid password" + msgstr "잘못된 암호" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" + msgstr "리디렉션을 위한 USB 장치 선택 " + +-#: ../src/virt-viewer-session-spice.c:800 ++# translation auto-copied from project subscription-manager, version 1.11.X, document keys ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "종료(_C)" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "지원되지 않는 인증 유형 %d" +@@ -530,99 +537,105 @@ msgstr "가상 머신을 찾을 수 없습니다" + msgid "No virtual machine was chosen" + msgstr "가상 머신이 선택되어 있지 않습니다" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+Del(_D) " + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+Backspace(_B)" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 +-msgid "_Save" ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" + msgstr "" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" ++#: ../src/virt-viewer-window.c:978 ++msgid "_Save" ++msgstr "저장 (_S)" ++ ++#: ../src/virt-viewer-window.c:986 ++#, fuzzy ++msgid "Screenshot.png" + msgstr "스크린샷 " + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "알 수 없음" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "연결 해제 " + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "USB 장치 선택 " + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "조합 키 전송" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "전체 화면 해제 " + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(포인터를 개방하려면 %s를 누르십시오)" +@@ -631,13 +644,13 @@ msgstr "(포인터를 개방하려면 %s를 누르십시오)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -801,7 +814,7 @@ msgstr "CD 변경 (_C)" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "종료(_Q)" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -817,15 +830,15 @@ msgstr "줌(_Z) " + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "확대(_I)" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "축소(_O)" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "보통 크기(_N)" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +@@ -849,7 +862,7 @@ msgstr "게스트 정보 (_G)" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" ++msgstr "정보(_A)" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +@@ -873,7 +886,7 @@ msgstr "사용 가능한 가상 머신" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "" ++msgstr "환경설정" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +@@ -885,9 +898,8 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "" ++msgstr "읽기 전용" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "" +- +diff --git a/po/pt_BR.po b/po/pt_BR.po +index 21745aa..f016926 100644 +--- a/po/pt_BR.po ++++ b/po/pt_BR.po +@@ -5,22 +5,24 @@ + # Translators: + # Glaucia Freitas , 2012 + # Glaucia Freitas , 2013 +-# gcintra , 2013. #zanata +-# adallape , 2016. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# ljanda , 2017. #zanata ++# lrintel , 2017. #zanata ++# phrdina , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2016-10-17 01:16+0000\n" +-"Last-Translator: adallape \n" ++"PO-Revision-Date: 2017-11-14 01:12+0000\n" ++"Last-Translator: Copied by Zanata \n" + "Language-Team: Portuguese (Brazil) \n" +-"Language: pt-BR\n" ++"Language: pt_BR\n" + "Plural-Forms: nplurals=2; plural=(n > 1);\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -42,11 +44,11 @@ msgstr "" + + #: ../data/remote-viewer.desktop.in.h:2 + msgid "Access remote desktops" +-msgstr "Acesse áreas de trabalho remotas" ++msgstr "Acesso remoto computadores" + + #: ../data/virt-viewer-mime.xml.in.h:1 + msgid "Virt-Viewer connection file" +-msgstr "Arquivo de conexão do Virt-Viewer" ++msgstr "Virt-Viewer arquivo conexão" + + #: ../src/remote-viewer-iso-list-dialog.c:160 + msgid "Failed to fetch CD names" +@@ -58,15 +60,15 @@ msgstr "" + + #: ../src/remote-viewer-iso-list-dialog.c:285 + msgid "Refresh" +-msgstr "" ++msgstr "Atualizar" + + #: ../src/remote-viewer-iso-list-dialog.c:286 + msgid "Close" +-msgstr "" ++msgstr "Fechar" + + #: ../src/remote-viewer-iso-list-dialog.c:306 + msgid "Unspecified error" +-msgstr "" ++msgstr "Erro não especificado" + + #: ../src/remote-viewer-iso-list-dialog.c:328 + msgid "Failed to change CD" +@@ -78,7 +80,7 @@ msgstr "" + + #: ../src/remote-viewer.c:146 + msgid "Set window title" +-msgstr "Definir título de janela" ++msgstr "Setando título da janela" + + #: ../src/remote-viewer.c:149 + msgid "Open connection using Spice controller communication" +@@ -107,7 +109,7 @@ msgstr "" + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "Falha ao iniciar a conexão " + +@@ -120,56 +122,56 @@ msgstr "Exibir desabilitado pelo controlador" + msgid "Controller connection failed: %s" + msgstr "Conexão de controlador falhou:%s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "Falhou ao analisar uri ovirt" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "A autenticação foi cancelada" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "A máquina virtual oVirt %s não está executando " + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "A máquina virtual oVirt %s não possui display" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "A máquina virtual oVirt %s tem um tipo de display desconhecido: %d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." + msgstr "Configurando uma sessão Spice" + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "Nenhuma conexão foi selecionada" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "Arquivo inválido %s: " + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "Não foi possíve determinar o tipo de conexão a partir do URI" + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "Não foi possível abrir a sessão oVirt: " + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" + msgstr "" +@@ -198,20 +200,20 @@ msgid "Recent connections" + msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "_Cancelar" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "C_onectado" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 + msgid "Loading..." +-msgstr "" ++msgstr "Carregando..." + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 + msgid "Select ISO" +@@ -219,7 +221,7 @@ msgstr "" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 + msgid "Selected" +-msgstr "" ++msgstr "Selecionado" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +@@ -286,11 +288,11 @@ msgstr "A equipe de Tradução do Fedora " + + #: ../src/virt-viewer-app.c:459 + msgid "Do you want to close the session?" +-msgstr "Você deseja fechar a sessão?" ++msgstr "Você quer fechar a sessão?" + + #: ../src/virt-viewer-app.c:461 + msgid "Do not ask me again" +-msgstr "Não perguntar novamente." ++msgstr "Não me pergunte novamente" + + #: ../src/virt-viewer-app.c:655 + #, c-format +@@ -350,86 +352,86 @@ msgstr "Domínio de convidado precisa ser fechado" + msgid "Connected to graphic server" + msgstr "Conectado ao servidor de gráfico" + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Incapaz de conectar ao servidor de gráfico %s" + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "Incapaz de autenticar com o servidor remoto: %s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "Erro de redirecionamento do USB:%s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" +-msgstr "O nível de amplificação deve estar entre %d-%d\n" ++msgstr "Zoom nível deve ser dentro de %d-%d\n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "Exibir_ %d" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "Argumento kiosk-quit inválido: %s" ++msgstr "Inválido kiosk-quit argumento: %s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "Exibir informações de versão" + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" + msgstr "Nível de zoom da janela, em porcentagem" + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" + "Abrir em modo de tela cheia (ajuste a resolução do hóspede para ser " + "compatível com o cliente)" + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" +-msgstr "Padronizar hotkeys" ++msgstr "Personalize teclas de atalho " + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" +-msgstr "Ativar modo de quiosque" ++msgstr "Ativar kiosk modo" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" +-msgstr "Sair da condição determinada no modo de quiosque " ++msgstr "Sair em determinada condição em kiosk modo " + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "Exibir informações de verbose" + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "Exibir informações de depuração" + +@@ -462,7 +464,7 @@ msgstr "Autenticação requerida" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "_OK" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +@@ -490,14 +492,18 @@ msgstr "VNC não fornece GUID" + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." + msgstr[0] "" + msgstr[1] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -511,16 +517,17 @@ msgid "Invalid password" + msgstr "Senha inválida" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" + msgstr "Selecionar os dispositivos do USB para redirecionamento" + +-#: ../src/virt-viewer-session-spice.c:800 ++# translation auto-copied from project subscription-manager, version 1.11.X, document keys ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "_Encerra" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Autenticação não suportada tipo %d" +@@ -533,99 +540,105 @@ msgstr "Máquina virtual não encontrada" + msgid "No virtual machine was chosen" + msgstr "Não foi selecionada uma máquina virtual" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Del" + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 +-msgid "_Save" ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" + msgstr "" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" ++#: ../src/virt-viewer-window.c:978 ++msgid "_Save" ++msgstr "_Salvar" ++ ++#: ../src/virt-viewer-window.c:986 ++#, fuzzy ++msgid "Screenshot.png" + msgstr "Screenshot" + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "Desconhecido" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "Desconectar" + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "Seleção de dispositivo de USB" + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "Enviar combinação de teclas" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "Deixar tela cheia" + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(Pressione %s para liberar o ponteiro)" +@@ -634,13 +647,13 @@ msgstr "(Pressione %s para liberar o ponteiro)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -656,7 +669,7 @@ msgstr "" + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "Ao menos a %s versão %s é requerida para definir esta conexão" ++msgstr "Pelo menos %s versão %s é necessária para configurar esta conexão" + + #: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" +@@ -734,7 +747,7 @@ msgstr "A máquina virtual %s não está executando" + + #: ../src/virt-viewer.c:884 + msgid "Waiting for libvirt to start" +-msgstr "Esperando o libvirt iniciar" ++msgstr "Aguardando libvirt para iniciar" + + #: ../src/virt-viewer.c:888 + msgid "Finding guest domain" +@@ -806,7 +819,7 @@ msgstr "_Alterar CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "_Sair" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -822,15 +835,15 @@ msgstr "_Zoom" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "_Ampliar" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "_Reduzir" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "Tamanho _normal" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +@@ -854,7 +867,7 @@ msgstr "_Informação de hóspede" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" ++msgstr "_Sobre" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +@@ -878,7 +891,7 @@ msgstr "Máquinas virtuais disponíveis " + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "" ++msgstr "Preferências" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +@@ -890,9 +903,8 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "" ++msgstr "Apenas leitura" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "" +- +diff --git a/po/ru.po b/po/ru.po +index a062985..e61926e 100644 +--- a/po/ru.po ++++ b/po/ru.po +@@ -3,27 +3,31 @@ + # This file is distributed under the same license as the PACKAGE package. + # + # Translators: ++# Alexander Savchenko, 2014 + # Automatically generated, 2010 + # triplepointfive , 2012 + # Yulia , 2010, 2012 + # Yulia , 2013 +-# ypoyarko , 2013. #zanata +-# tchuang , 2016. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# ljanda , 2017. #zanata ++# lrintel , 2017. #zanata ++# phrdina , 2017. #zanata ++# tchuang , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2016-10-19 01:54+0000\n" ++"PO-Revision-Date: 2017-11-14 01:12+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Russian \n" + "Language: ru\n" + "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " + "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -61,15 +65,16 @@ msgstr "" + + #: ../src/remote-viewer-iso-list-dialog.c:285 + msgid "Refresh" +-msgstr "" ++msgstr "Обновить" + ++# translation auto-copied from project subscription-manager, version 1.11.X, document keys + #: ../src/remote-viewer-iso-list-dialog.c:286 + msgid "Close" +-msgstr "" ++msgstr "Закрыть" + + #: ../src/remote-viewer-iso-list-dialog.c:306 + msgid "Unspecified error" +-msgstr "" ++msgstr "Неуказанная ошибка" + + #: ../src/remote-viewer-iso-list-dialog.c:328 + msgid "Failed to change CD" +@@ -110,7 +115,7 @@ msgstr "" + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "Не удалось установить соединение" + +@@ -123,56 +128,56 @@ msgstr "Дисплей отключен контроллером" + msgid "Controller connection failed: %s" + msgstr "Ошибка подключения контроллера: %s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "не удалось обработать uri ovirt" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "Аутентификация была отменена" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "Виртуальная машина oVirt %s не работает" + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "У виртуальной машины oVirt %s нет дисплея" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "У виртуальной машины oVirt %s неизвестный тип дисплея: %d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." + msgstr "Инициализация сеанса Spice..." + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "Подключение не выбрано" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "Недопустимый файл %s: " + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "Не удалось определить тип подключения из URI" + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "Не удалось открыть сеанс oVirt: " + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" + msgstr "" +@@ -201,20 +206,21 @@ msgid "Recent connections" + msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "_Отмена" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "П_одключиться" + ++# translation auto-copied from project webkitgtk3, version 2.0.3, document webkitgtk3, author ypoyarko + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 + msgid "Loading..." +-msgstr "" ++msgstr "Загрузка..." + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 + msgid "Select ISO" +@@ -352,86 +358,86 @@ msgstr "Гостевой домен завершил работу" + msgid "Connected to graphic server" + msgstr "Установлено соединение с графическим сервером" + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "Не удалось установить соединение с сервером %s" + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "Не удалось пройти аутентификацию на удаленном сервере: %s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "Ошибка перенаправления USB: %s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" + msgstr "Масштаб должен быть в диапазоне %d–%d\n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "Дисплей _%d" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" + msgstr "Недопустимый аргумент kiosk-quit: %s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "Показать версию" + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" + msgstr "Масштаб окна в процентах" + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "" + "Открыть в полноэкранном режиме (изменяет разрешение экрана гостевой системы " + "в соответствии с клиентом)" + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" + msgstr "Настроить комбинации клавиш" + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" + msgstr "Включить режим kiosk" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" + msgstr "Выходить при данном условии в режиме kiosk" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "Подробный вывод" + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "Показать сообщения диагностики" + +@@ -464,7 +470,7 @@ msgstr "Требуется проверка подлинности" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "_ОК" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +@@ -492,15 +498,19 @@ msgstr "VNC не предоставляет GUID" + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." + msgstr[0] "" + msgstr[1] "" + msgstr[2] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -514,16 +524,17 @@ msgid "Invalid password" + msgstr "Недопустимый пароль" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" + msgstr "Выбрать устройства USB для перенаправления" + +-#: ../src/virt-viewer-session-spice.c:800 ++# translation auto-copied from project subscription-manager, version 1.11.X, document keys ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "_Закрыть" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "Неподдерживаемый тип аутентификации %d" +@@ -536,99 +547,105 @@ msgstr "Виртуальная машина не найдена" + msgid "No virtual machine was chosen" + msgstr "Виртуальная машина не выбрана" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Del" + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 +-msgid "_Save" ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" + msgstr "" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" ++#: ../src/virt-viewer-window.c:978 ++msgid "_Save" ++msgstr "_Сохранить" ++ ++#: ../src/virt-viewer-window.c:986 ++#, fuzzy ++msgid "Screenshot.png" + msgstr "Снимок экрана" + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "Неизвестно" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "Отключиться" + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "Выбор устройства USB" + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "Отправить комбинацию клавиш" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "Выйти из полноэкранного режима" + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(нажмите %s для освобождения курсора)" +@@ -637,13 +654,13 @@ msgstr "(нажмите %s для освобождения курсора)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -809,7 +826,7 @@ msgstr "_Изменить CD" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "В_ыход" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -825,15 +842,15 @@ msgstr "_Масштаб" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "У_величить" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "У_меньшить" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "В обы_чном размере" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +@@ -857,7 +874,7 @@ msgstr "_Сведения о госте" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" ++msgstr "_О программе" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +@@ -881,7 +898,7 @@ msgstr "Доступные виртуальные машины" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "" ++msgstr "Настройки" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +@@ -893,9 +910,8 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "" ++msgstr "Только чтение" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "" +- +diff --git a/po/zh_CN.po b/po/zh_CN.po +index 84a239a..944946b 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -8,22 +8,24 @@ + # Leah Liu , 2010 + # Tommy He , 2013 + # Wei Liu , 2012-2013 +-# Leah Liu , 2013. #zanata +-# Leah Liu , 2016. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# ljanda , 2017. #zanata ++# lrintel , 2017. #zanata ++# phrdina , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2016-10-12 12:22+0000\n" +-"Last-Translator: Leah Liu \n" ++"PO-Revision-Date: 2017-11-14 01:38+0000\n" ++"Last-Translator: Copied by Zanata \n" + "Language-Team: Chinese (China) \n" +-"Language: zh-CN\n" ++"Language: zh_Hans\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -61,15 +63,15 @@ msgstr "" + + #: ../src/remote-viewer-iso-list-dialog.c:285 + msgid "Refresh" +-msgstr "" ++msgstr "刷新" + + #: ../src/remote-viewer-iso-list-dialog.c:286 + msgid "Close" +-msgstr "" ++msgstr "关闭" + + #: ../src/remote-viewer-iso-list-dialog.c:306 + msgid "Unspecified error" +-msgstr "" ++msgstr "未指定错误" + + #: ../src/remote-viewer-iso-list-dialog.c:328 + msgid "Failed to change CD" +@@ -110,7 +112,7 @@ msgstr "" + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "初始化连接失败" + +@@ -123,56 +125,56 @@ msgstr "显示控制器禁用的" + msgid "Controller connection failed: %s" + msgstr "控制器连接失败:%s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "解析 ovirt uri 失败" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "认证已取消" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "oVirt VM %s 未运行" + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "oVirt VM %s 没有显示" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "oVirt VM %s 有未知显示类型:%d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." + msgstr "设置 Spice 会话......" + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "未选择任何连接" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "无效文件 %s:" + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "无法确定 URI 的连接类型" + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "无法打开 oVirt 会话:" + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" + msgstr "" +@@ -201,20 +203,20 @@ msgid "Recent connections" + msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "取消(_C)" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "连接(_O)" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 + msgid "Loading..." +-msgstr "" ++msgstr "载入中..." + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 + msgid "Select ISO" +@@ -222,7 +224,7 @@ msgstr "" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:3 + msgid "Selected" +-msgstr "" ++msgstr "已选择" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:4 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:4 +@@ -346,84 +348,84 @@ msgstr "已关闭虚拟机域" + msgid "Connected to graphic server" + msgstr "已连接到图形服务器" + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "无法连接到图形服务器 %s" + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "无法使用远程桌面服务器验证:%s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "USB 重新定向错误:%s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" + msgstr "缩放等级必须在 %d-%d 之间\n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "显示 _%d" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" +-msgstr "无效 kiosk-quit 参数:%s" ++msgstr "无效的 kiosk-quit 参数:%s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "显示版本信息" + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" + msgstr "窗口缩放级别,以百分比计" + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" + msgstr "以全屏模式打开(调整虚拟机分辨率以适应客户端)。" + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" + msgstr "自定义快捷键" + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" + msgstr "启用 kiosk 模式" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" + msgstr "退出 kiosk 模式中的给定条件" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "显示详细信息" + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "显示调试信息" + +@@ -456,7 +458,7 @@ msgstr "所需验证" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "确定(_O)" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +@@ -484,13 +486,17 @@ msgstr "VNC 不提供 GUID" + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." + msgstr[0] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -504,16 +510,17 @@ msgid "Invalid password" + msgstr "无效密码" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" + msgstr "为重新定向选择 USB 设备" + +-#: ../src/virt-viewer-session-spice.c:800 ++# translation auto-copied from project subscription-manager, version 1.11.X, document keys ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "关闭(_C)" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "不支持的验证类型 %d" +@@ -526,99 +533,105 @@ msgstr "未找到虚拟机" + msgid "No virtual machine was chosen" + msgstr "未选择虚拟机" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Del" + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 +-msgid "_Save" ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" + msgstr "" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" ++#: ../src/virt-viewer-window.c:978 ++msgid "_Save" ++msgstr "保存(_S)" ++ ++#: ../src/virt-viewer-window.c:986 ++#, fuzzy ++msgid "Screenshot.png" + msgstr "截屏" + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "未知" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "断开连接" + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "USB 设备选择" + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "发送按键组合" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "离开全屏" + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(按 %s 释放光标)" +@@ -627,13 +640,13 @@ msgstr "(按 %s 释放光标)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -797,7 +810,7 @@ msgstr "更换 CD(_ C)" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "退出(_Q)" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -813,15 +826,15 @@ msgstr "缩放(_Z)" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "放大(_I)" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "缩小(_O)" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "普通大小(_N)" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +@@ -845,7 +858,7 @@ msgstr "虚拟机详情(_G)" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" ++msgstr "关于(_A)" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +@@ -869,7 +882,7 @@ msgstr "可用虚拟机" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "" ++msgstr "首选项" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +@@ -881,9 +894,8 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "" ++msgstr "只读" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "" +- +diff --git a/po/zh_TW.po b/po/zh_TW.po +index 4fa4853..f108b02 100644 +--- a/po/zh_TW.po ++++ b/po/zh_TW.po +@@ -8,22 +8,26 @@ + # Terry Chuang , 2010 + # Terry Chuang , 2012-2013 + # Walter Cheuk , 2012 +-# ccheng , 2013. #zanata +-# tchuang , 2016. #zanata ++# Eduardo Lima (Etrunko) , 2017. #zanata ++# ljanda , 2017. #zanata ++# lrintel , 2017. #zanata ++# phrdina , 2017. #zanata ++# tchuang , 2017. #zanata ++# weatortr , 2017. #zanata + msgid "" + msgstr "" +-"Project-Id-Version: virt-viewer\n" ++"Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2013-07-09 21:09+0100\n" ++"POT-Creation-Date: 2017-11-14 11:35-0200\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"PO-Revision-Date: 2016-10-19 01:48+0000\n" ++"PO-Revision-Date: 2017-11-14 01:39+0000\n" + "Last-Translator: Copied by Zanata \n" + "Language-Team: Chinese (Taiwan) \n" +-"Language: zh-TW\n" ++"Language: zh_Hant\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Zanata 3.9.6\n" ++"X-Generator: Zanata 4.3.2\n" + + #: ../data/remote-viewer.appdata.xml.in.h:1 + #: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:39 +@@ -59,17 +63,19 @@ msgstr "" + msgid "Loading..." + msgstr "" + ++# translation auto-copied from project anaconda, version 19.31.34, document anaconda + #: ../src/remote-viewer-iso-list-dialog.c:285 + msgid "Refresh" +-msgstr "" ++msgstr "重新整理" + ++# translation auto-copied from project subscription-manager, version 1.11.X, document keys + #: ../src/remote-viewer-iso-list-dialog.c:286 + msgid "Close" +-msgstr "" ++msgstr "關閉" + + #: ../src/remote-viewer-iso-list-dialog.c:306 + msgid "Unspecified error" +-msgstr "" ++msgstr "無法指定的錯誤" + + #: ../src/remote-viewer-iso-list-dialog.c:328 + msgid "Failed to change CD" +@@ -89,7 +95,7 @@ msgstr "透過 Spice 控制器通訊來開啟連線" + + #: ../src/remote-viewer.c:157 + msgid "Remote viewer client" +-msgstr "遠端檢視器用戶端" ++msgstr "遠端檢視器客戶端" + + #: ../src/remote-viewer.c:182 + #, c-format +@@ -110,7 +116,7 @@ msgstr "" + msgid "Run '%s --help' to see a full list of available command line options\n" + msgstr "" + +-#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1182 ++#: ../src/remote-viewer.c:322 ../src/remote-viewer.c:1194 + msgid "Failed to initiate connection" + msgstr "初始化連線失敗" + +@@ -123,56 +129,56 @@ msgstr "畫面已被控制器停用" + msgid "Controller connection failed: %s" + msgstr "控制器連線失敗:%s" + +-#: ../src/remote-viewer.c:850 ++#: ../src/remote-viewer.c:856 + msgid "failed to parse ovirt uri" + msgstr "無法叵析 oVirt URI" + +-#: ../src/remote-viewer.c:870 ../src/virt-viewer.c:1101 ++#: ../src/remote-viewer.c:876 ../src/virt-viewer.c:1101 + msgid "Authentication was cancelled" + msgstr "驗證已取消" + +-#: ../src/remote-viewer.c:895 ++#: ../src/remote-viewer.c:901 + #, c-format + msgid "oVirt VM %s is not running" + msgstr "oVirt VM %s 非運作中" + +-#: ../src/remote-viewer.c:909 ++#: ../src/remote-viewer.c:915 + #, c-format + msgid "oVirt VM %s has no display" + msgstr "oVirt VM %s 並無顯示" + +-#: ../src/remote-viewer.c:935 ++#: ../src/remote-viewer.c:941 + #, c-format + msgid "oVirt VM %s has no host information" + msgstr "" + +-#: ../src/remote-viewer.c:946 ++#: ../src/remote-viewer.c:952 + #, c-format + msgid "oVirt VM %s has unknown display type: %d" + msgstr "oVirt VM %s 具有不明顯示類型:%d" + +-#: ../src/remote-viewer.c:1114 ++#: ../src/remote-viewer.c:1125 + msgid "Setting up Spice session..." + msgstr "正在設置 Spice 作業階段..." + +-#: ../src/remote-viewer.c:1122 ++#: ../src/remote-viewer.c:1134 + msgid "No connection was chosen" + msgstr "未選擇連線" + +-#: ../src/remote-viewer.c:1140 ++#: ../src/remote-viewer.c:1152 + #, c-format + msgid "Invalid file %s: " + msgstr "無效檔案 %s: " + +-#: ../src/remote-viewer.c:1148 ++#: ../src/remote-viewer.c:1160 + msgid "Cannot determine the connection type from URI" + msgstr "無法從 URI 判斷連線類型" + +-#: ../src/remote-viewer.c:1154 ++#: ../src/remote-viewer.c:1166 + msgid "Couldn't open oVirt session: " + msgstr "無法開啟 oVirt 作業階段: " + +-#: ../src/remote-viewer.c:1202 ++#: ../src/remote-viewer.c:1214 + #, c-format + msgid "Unable to connect: %s" + msgstr "" +@@ -201,20 +207,20 @@ msgid "Recent connections" + msgstr "" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:5 +-#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:979 ++#: ../src/resources/ui/virt-viewer-auth.ui.h:2 ../src/virt-viewer-window.c:977 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:2 + #: ../src/resources/ui/virt-viewer-file-transfer-dialog.ui.h:1 + msgid "_Cancel" +-msgstr "" ++msgstr "取消 (_C)" + + #: ../src/resources/ui/remote-viewer-connect.ui.h:6 + #: ../src/resources/ui/virt-viewer-vm-connection.ui.h:3 + msgid "C_onnect" +-msgstr "" ++msgstr "連線(_O)" + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:1 + msgid "Loading..." +-msgstr "" ++msgstr "正在載入..." + + #: ../src/resources/ui/remote-viewer-iso-list.ui.h:2 + msgid "Select ISO" +@@ -350,84 +356,84 @@ msgstr "客端網域已關閉" + msgid "Connected to graphic server" + msgstr "已連上圖形化伺服器" + +-#: ../src/virt-viewer-app.c:1450 ++#: ../src/virt-viewer-app.c:1452 + #, c-format + msgid "Unable to connect to the graphic server %s" + msgstr "無法連接圖形化伺服器 %s" + +-#: ../src/virt-viewer-app.c:1476 ++#: ../src/virt-viewer-app.c:1478 + #, c-format + msgid "Unable to authenticate with remote desktop server at %s: %s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1490 ++#: ../src/virt-viewer-app.c:1492 + #, c-format + msgid "Unable to authenticate with remote desktop server: %s" + msgstr "無法在遠端桌面伺服器驗證:%s" + +-#: ../src/virt-viewer-app.c:1498 ++#: ../src/virt-viewer-app.c:1500 + #, c-format + msgid "USB redirection error: %s" + msgstr "USB 重新導引錯誤:%s" + +-#: ../src/virt-viewer-app.c:1832 ++#: ../src/virt-viewer-app.c:1834 + #, c-format + msgid "Zoom level must be within %d-%d\n" + msgstr "放大等級必須介於 %d-%d\n" + +-#: ../src/virt-viewer-app.c:1885 ++#: ../src/virt-viewer-app.c:1887 + #, c-format + msgid "%s\n" + msgstr "" + +-#: ../src/virt-viewer-app.c:1895 ++#: ../src/virt-viewer-app.c:1897 + #, c-format + msgid "%s version %s" + msgstr "" + +-#: ../src/virt-viewer-app.c:2319 ++#: ../src/virt-viewer-app.c:2321 + #, c-format + msgid "Display _%d" + msgstr "顯示(_%d)" + +-#: ../src/virt-viewer-app.c:2575 ++#: ../src/virt-viewer-app.c:2577 + #, c-format + msgid "Invalid kiosk-quit argument: %s" + msgstr "無效的 kiosk-quit 引數:%s" + +-#: ../src/virt-viewer-app.c:2586 ++#: ../src/virt-viewer-app.c:2588 + msgid "Display version information" + msgstr "顯示版本資訊" + +-#: ../src/virt-viewer-app.c:2588 ++#: ../src/virt-viewer-app.c:2590 + msgid "Zoom level of window, in percentage" + msgstr "視窗放大等級,單位為百分比" + +-#: ../src/virt-viewer-app.c:2590 ++#: ../src/virt-viewer-app.c:2592 + msgid "Open in full screen mode (adjusts guest resolution to fit the client)" +-msgstr "以全螢幕模式開啟 (調整客端解析度以適應用戶端)" ++msgstr "以全螢幕模式開啟 (調整客端解析度以適應客戶端)" + +-#: ../src/virt-viewer-app.c:2592 ++#: ../src/virt-viewer-app.c:2594 + msgid "Customise hotkeys" + msgstr "自訂快速鍵" + +-#: ../src/virt-viewer-app.c:2594 ++#: ../src/virt-viewer-app.c:2596 + msgid "Enable kiosk mode" + msgstr "啟用 kiosk 模式" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "Quit on given condition in kiosk mode" +-msgstr "在 kiosk 模式中於指定情況下退出" ++msgstr "於 kiosk 模式中的指定情況下離開" + +-#: ../src/virt-viewer-app.c:2596 ++#: ../src/virt-viewer-app.c:2598 + msgid "" + msgstr "" + +-#: ../src/virt-viewer-app.c:2598 ++#: ../src/virt-viewer-app.c:2600 + msgid "Display verbose information" + msgstr "顯示詳細資訊" + +-#: ../src/virt-viewer-app.c:2600 ++#: ../src/virt-viewer-app.c:2602 + msgid "Display debugging information" + msgstr "顯示除錯資訊" + +@@ -460,7 +466,7 @@ msgstr "須要通過驗證" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:3 + msgid "_OK" +-msgstr "" ++msgstr "確定(_O)" + + #: ../src/resources/ui/virt-viewer-auth.ui.h:4 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:5 +@@ -488,13 +494,17 @@ msgstr "VNC 並未提供 GUID" + msgid "File Transfers" + msgstr "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:153 ++#: ../src/virt-viewer-file-transfer-dialog.c:154 ++msgid "Transferring 1 file..." ++msgstr "" ++ ++#: ../src/virt-viewer-file-transfer-dialog.c:156 + #, c-format +-msgid "Transferring %d file..." +-msgid_plural "Transferring %d files..." ++msgid "Transferring %d file of %d..." ++msgid_plural "Transferring %d files of %d..." + msgstr[0] "" + +-#: ../src/virt-viewer-file-transfer-dialog.c:225 ++#: ../src/virt-viewer-file-transfer-dialog.c:228 + #, c-format + msgid "An error caused the following file transfers to fail:%s" + msgstr "" +@@ -508,16 +518,17 @@ msgid "Invalid password" + msgstr "無效密碼" + + #. Create the widgets +-#: ../src/virt-viewer-session-spice.c:798 ++#: ../src/virt-viewer-session-spice.c:802 + msgid "Select USB devices for redirection" + msgstr "選擇欲重新導引的 USB 裝置" + +-#: ../src/virt-viewer-session-spice.c:800 ++# translation auto-copied from project subscription-manager, version 1.11.X, document keys ++#: ../src/virt-viewer-session-spice.c:804 + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:2 + msgid "_Close" +-msgstr "" ++msgstr "關閉(_C)" + +-#: ../src/virt-viewer-session-vnc.c:157 ++#: ../src/virt-viewer-session-vnc.c:162 + #, c-format + msgid "Unsupported authentication type %d" + msgstr "不支援的認證類型 %d" +@@ -530,99 +541,105 @@ msgstr "找不到虛擬機" + msgid "No virtual machine was chosen" + msgstr "未選擇虛擬機" + +-#: ../src/virt-viewer-window.c:539 ++#: ../src/virt-viewer-window.c:542 + msgid "Ctrl+Alt+_Del" + msgstr "Ctrl+Alt+_Del" + +-#: ../src/virt-viewer-window.c:540 ++#: ../src/virt-viewer-window.c:543 + msgid "Ctrl+Alt+_Backspace" + msgstr "Ctrl+Alt+_Backspace" + +-#: ../src/virt-viewer-window.c:542 ++#: ../src/virt-viewer-window.c:545 + msgid "Ctrl+Alt+F_1" + msgstr "Ctrl+Alt+F_1" + +-#: ../src/virt-viewer-window.c:543 ++#: ../src/virt-viewer-window.c:546 + msgid "Ctrl+Alt+F_2" + msgstr "Ctrl+Alt+F_2" + +-#: ../src/virt-viewer-window.c:544 ++#: ../src/virt-viewer-window.c:547 + msgid "Ctrl+Alt+F_3" + msgstr "Ctrl+Alt+F_3" + +-#: ../src/virt-viewer-window.c:545 ++#: ../src/virt-viewer-window.c:548 + msgid "Ctrl+Alt+F_4" + msgstr "Ctrl+Alt+F_4" + +-#: ../src/virt-viewer-window.c:546 ++#: ../src/virt-viewer-window.c:549 + msgid "Ctrl+Alt+F_5" + msgstr "Ctrl+Alt+F_5" + +-#: ../src/virt-viewer-window.c:547 ++#: ../src/virt-viewer-window.c:550 + msgid "Ctrl+Alt+F_6" + msgstr "Ctrl+Alt+F_6" + +-#: ../src/virt-viewer-window.c:548 ++#: ../src/virt-viewer-window.c:551 + msgid "Ctrl+Alt+F_7" + msgstr "Ctrl+Alt+F_7" + +-#: ../src/virt-viewer-window.c:549 ++#: ../src/virt-viewer-window.c:552 + msgid "Ctrl+Alt+F_8" + msgstr "Ctrl+Alt+F_8" + +-#: ../src/virt-viewer-window.c:550 ++#: ../src/virt-viewer-window.c:553 + msgid "Ctrl+Alt+F_9" + msgstr "Ctrl+Alt+F_9" + +-#: ../src/virt-viewer-window.c:551 ++#: ../src/virt-viewer-window.c:554 + msgid "Ctrl+Alt+F1_0" + msgstr "Ctrl+Alt+F1_0" + +-#: ../src/virt-viewer-window.c:552 ++#: ../src/virt-viewer-window.c:555 + msgid "Ctrl+Alt+F11" + msgstr "Ctrl+Alt+F11" + +-#: ../src/virt-viewer-window.c:553 ++#: ../src/virt-viewer-window.c:556 + msgid "Ctrl+Alt+F12" + msgstr "Ctrl+Alt+F12" + +-#: ../src/virt-viewer-window.c:980 +-msgid "_Save" ++#: ../src/virt-viewer-window.c:951 ++#, c-format ++msgid "Unable to determine image format for file '%s'" + msgstr "" + +-#: ../src/virt-viewer-window.c:988 +-msgid "Screenshot" ++#: ../src/virt-viewer-window.c:978 ++msgid "_Save" ++msgstr "儲存(_S)" ++ ++#: ../src/virt-viewer-window.c:986 ++#, fuzzy ++msgid "Screenshot.png" + msgstr "螢幕快照" + +-#: ../src/virt-viewer-window.c:1050 ../src/virt-viewer-window.c:1052 ++#: ../src/virt-viewer-window.c:1053 ../src/virt-viewer-window.c:1055 + msgid "Unknown" + msgstr "不明" + +-#: ../src/virt-viewer-window.c:1140 ++#: ../src/virt-viewer-window.c:1143 + msgid "Unable to connnect to oVirt" + msgstr "" + +-#: ../src/virt-viewer-window.c:1163 ++#: ../src/virt-viewer-window.c:1166 + msgid "Disconnect" + msgstr "中斷連接" + +-#: ../src/virt-viewer-window.c:1171 ../src/virt-viewer-window.c:1172 ++#: ../src/virt-viewer-window.c:1174 ../src/virt-viewer-window.c:1175 + msgid "USB device selection" + msgstr "USB 裝置選取" + +-#: ../src/virt-viewer-window.c:1181 ++#: ../src/virt-viewer-window.c:1184 + msgid "Send key combination" + msgstr "傳送按鍵組合" + +-#: ../src/virt-viewer-window.c:1191 ../src/virt-viewer-window.c:1192 ++#: ../src/virt-viewer-window.c:1194 ../src/virt-viewer-window.c:1195 + msgid "Leave fullscreen" + msgstr "離開全螢幕" + +-#: ../src/virt-viewer-window.c:1267 ++#: ../src/virt-viewer-window.c:1270 + msgid "Ctrl+Alt" + msgstr "Ctrl+Alt" + +-#: ../src/virt-viewer-window.c:1270 ++#: ../src/virt-viewer-window.c:1273 + #, c-format + msgid "(Press %s to release pointer)" + msgstr "(按下 %s 以釋放游標)" +@@ -631,13 +648,13 @@ msgstr "(按下 %s 以釋放游標)" + #. * This is " - " + #. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" + #. +-#: ../src/virt-viewer-window.c:1281 ++#: ../src/virt-viewer-window.c:1284 + #, c-format + msgid "%s%s%s - %s" + msgstr "%s%s%s - %s" + + #. translators: +-#: ../src/virt-viewer-window.c:1285 ++#: ../src/virt-viewer-window.c:1288 + msgid " " + msgstr " " + +@@ -651,7 +668,7 @@ msgstr "至少需要 %s 版本 %s 以上才能設定此連線,請參閱 %s 以 + #: ../src/virt-viewer-file.c:851 + #, c-format + msgid "At least %s version %s is required to setup this connection" +-msgstr "至少 %s 版本 %s 需要用於設定此連線" ++msgstr "至少需要 %s 版本 %s 以上才能設置此連線" + + #: ../src/virt-viewer.c:133 + msgid "Direct connection with no automatic tunnels" +@@ -801,7 +818,7 @@ msgstr "變更 CD(_C)" + + #: ../src/resources/ui/virt-viewer.ui.h:7 + msgid "_Quit" +-msgstr "" ++msgstr "退出(_Q)" + + #: ../src/resources/ui/virt-viewer.ui.h:8 + msgid "_View" +@@ -817,15 +834,15 @@ msgstr "遠近(_Z)" + + #: ../src/resources/ui/virt-viewer.ui.h:11 + msgid "Zoom _In" +-msgstr "" ++msgstr "拉近(_I)" + + #: ../src/resources/ui/virt-viewer.ui.h:12 + msgid "Zoom _Out" +-msgstr "" ++msgstr "拉遠(_O)" + + #: ../src/resources/ui/virt-viewer.ui.h:13 + msgid "_Normal Size" +-msgstr "" ++msgstr "一般大小(_N)" + + #: ../src/resources/ui/virt-viewer.ui.h:14 + msgid "_Displays" +@@ -849,7 +866,7 @@ msgstr "客端詳細資料(_G)" + + #: ../src/resources/ui/virt-viewer.ui.h:19 + msgid "_About" +-msgstr "" ++msgstr "關於(_A)" + + #: ../src/resources/ui/virt-viewer-guest-details.ui.h:1 + msgid "Guest Details" +@@ -873,7 +890,7 @@ msgstr "可用的虛擬機" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:1 + msgid "Preferences" +-msgstr "" ++msgstr "偏好設定" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:2 + msgid "Folder sharing" +@@ -885,9 +902,8 @@ msgstr "" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:4 + msgid "Read-only" +-msgstr "" ++msgstr "唯讀" + + #: ../src/resources/ui/virt-viewer-preferences.ui.h:5 + msgid "Spice" + msgstr "" +- +-- +2.14.3 + diff --git a/SOURCES/0054-remote-viewer-remove-spice-controller.patch b/SOURCES/0054-remote-viewer-remove-spice-controller.patch new file mode 100644 index 0000000..83ba48e --- /dev/null +++ b/SOURCES/0054-remote-viewer-remove-spice-controller.patch @@ -0,0 +1,678 @@ +From cfcf554c54965761772afe10fba950e5f2fed536 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Fri, 23 Jun 2017 17:25:07 +0200 +Subject: [PATCH] remote-viewer: remove --spice-controller +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +spice controller interface is being removed from spice-gtk. + +Signed-off-by: Marc-André Lureau +Reviewed-by: Victor Toso +Signed-off-by: Victor Toso +--- + configure.ac | 3 +- + data/Makefile.am | 1 - + data/spice-xpi-client-remote-viewer | 6 - + data/virt-viewer.wxs.in | 11 - + man/remote-viewer.pod | 6 - + src/Makefile.am | 2 - + src/remote-viewer.c | 448 +--------------------------- + 7 files changed, 5 insertions(+), 472 deletions(-) + delete mode 100644 data/spice-xpi-client-remote-viewer + +diff --git a/configure.ac b/configure.ac +index 6ed5f8a..abdbdaf 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -159,13 +159,12 @@ AC_ARG_WITH([spice-gtk], + AS_IF([test "x$with_spice_gtk" != "xno" && test "x$with_spice_gtk" != "xyes"], + [PKG_CHECK_EXISTS([spice-client-gtk-3.0 >= $SPICE_GTK_REQUIRED + spice-client-glib-2.0 >= $SPICE_GTK_REQUIRED +- spice-controller spice-protocol >= $SPICE_PROTOCOL_REQUIRED], ++ spice-protocol >= $SPICE_PROTOCOL_REQUIRED], + [with_spice_gtk=yes], [with_spice_gtk=no])]) + + AS_IF([test "x$with_spice_gtk" = "xyes"], + [PKG_CHECK_MODULES(SPICE_GTK, [spice-client-gtk-3.0 >= $SPICE_GTK_REQUIRED + spice-client-glib-2.0 >= $SPICE_GTK_REQUIRED])] +- [PKG_CHECK_MODULES(SPICE_CONTROLLER, [spice-controller])] + [PKG_CHECK_MODULES(SPICE_PROTOCOL, [spice-protocol >= $SPICE_PROTOCOL_REQUIRED])] + [AC_DEFINE([HAVE_SPICE_GTK], 1, [Have spice-gtk?])] + ) +diff --git a/data/Makefile.am b/data/Makefile.am +index 55718d9..54be2b1 100644 +--- a/data/Makefile.am ++++ b/data/Makefile.am +@@ -3,7 +3,6 @@ CLEANFILES = + MANUFACTURER = Virt Manager Project + + EXTRA_DIST = \ +- spice-xpi-client-remote-viewer \ + virt-viewer.wxs.in \ + $(NULL) + +diff --git a/data/spice-xpi-client-remote-viewer b/data/spice-xpi-client-remote-viewer +deleted file mode 100644 +index 3109c66..0000000 +--- a/data/spice-xpi-client-remote-viewer ++++ /dev/null +@@ -1,6 +0,0 @@ +-#!/bin/sh +- +-logger -t spice "starting remote-viewer --spice-controller $@..." +-env | logger -t spice +-exec remote-viewer --spice-controller "$@" 2>&1 | logger -t spice +-logger -t spice "remote-viewer execution failed" +diff --git a/data/virt-viewer.wxs.in b/data/virt-viewer.wxs.in +index 9838265..2047720 100644 +--- a/data/virt-viewer.wxs.in ++++ b/data/virt-viewer.wxs.in +@@ -55,16 +55,6 @@ + NOT NEWERVERSIONDETECTED + + +- +- +- +- +- +- +- +- +- +- + + + +@@ -129,7 +119,6 @@ + + + +- + + + +diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod +index 560f73f..e26aee7 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -55,12 +55,6 @@ CONFIGURATION section below. + + Set the window title to B + +-=item --spice-controller +- +-Use the SPICE controller to initialize the connection with the SPICE +-server. This option is used by the SPICE browser addons to allow web +-page to start a client. +- + =item --debug + + Print debugging information +diff --git a/src/Makefile.am b/src/Makefile.am +index b3eea67..6f2b7a1 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -180,11 +180,9 @@ remote_viewer_SOURCES = \ + $(NULL) + remote_viewer_LDFLAGS = \ + $(COMMON_LIBS) \ +- $(SPICE_CONTROLLER_LIBS) \ + $(NULL) + remote_viewer_CFLAGS = \ + $(COMMON_CFLAGS) \ +- $(SPICE_CONTROLLER_CFLAGS) \ + $(NULL) + remote_viewer_LDADD = \ + libvirt-viewer-util.la \ +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 429f38c..a920aa0 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -36,7 +36,6 @@ + #endif + + #ifdef HAVE_SPICE_GTK +-#include <spice-controller.h> + #include "virt-viewer-session-spice.h" + #endif + +@@ -53,10 +52,6 @@ + #endif + + struct _RemoteViewerPrivate { +-#ifdef HAVE_SPICE_GTK +- SpiceCtrlController *controller; +- SpiceCtrlForeignMenu *ctrl_foreign_menu; +-#endif + #ifdef HAVE_OVIRT + OvirtForeignMenu *ovirt_foreign_menu; + #endif +@@ -82,33 +77,15 @@ static OvirtVm * choose_vm(GtkWindow *main_window, + #endif + + static gboolean remote_viewer_start(VirtViewerApp *self, GError **error); +-#ifdef HAVE_SPICE_GTK +-static gboolean remote_viewer_activate(VirtViewerApp *self, GError **error); +-static void remote_viewer_window_added(GtkApplication *app, GtkWindow *w); +-static void spice_foreign_menu_updated(RemoteViewer *self); +-static void foreign_menu_title_changed(SpiceCtrlForeignMenu *menu, GParamSpec *pspec, RemoteViewer *self); +-#endif + + static void + remote_viewer_dispose (GObject *object) + { +-#if defined(HAVE_SPICE_GTK) || defined(HAVE_OVIRT) ++#if defined(HAVE_OVIRT) + RemoteViewer *self = REMOTE_VIEWER(object); + RemoteViewerPrivate *priv = self->priv; + #endif + +-#ifdef HAVE_SPICE_GTK +- if (priv->controller) { +- g_object_unref(priv->controller); +- priv->controller = NULL; +- } +- +- if (priv->ctrl_foreign_menu) { +- g_object_unref(priv->ctrl_foreign_menu); +- priv->ctrl_foreign_menu = NULL; +- } +-#endif +- + #ifdef HAVE_OVIRT + if (priv->ovirt_foreign_menu) { + g_object_unref(priv->ovirt_foreign_menu); +@@ -136,7 +113,6 @@ remote_viewer_deactivated(VirtViewerApp *app, gboolean connect_error) + + static gchar **opt_args = NULL; + static char *opt_title = NULL; +-static gboolean opt_controller = FALSE; + + static void + remote_viewer_add_option_entries(VirtViewerApp *self, GOptionContext *context, GOptionGroup *group) +@@ -144,10 +120,6 @@ remote_viewer_add_option_entries(VirtViewerApp *self, GOptionContext *context, G + static const GOptionEntry options[] = { + { "title", 't', 0, G_OPTION_ARG_STRING, &opt_title, + N_("Set window title"), NULL }, +-#ifdef HAVE_SPICE_GTK +- { "spice-controller", '\0', 0, G_OPTION_ARG_NONE, &opt_controller, +- N_("Open connection using Spice controller communication"), NULL }, +-#endif + { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &opt_args, + NULL, "URI|VV-FILE" }, + { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } +@@ -188,27 +160,7 @@ remote_viewer_local_command_line (GApplication *gapp, + g_object_set(app, "guri", opt_args[0], NULL); + } + +-#ifdef HAVE_SPICE_GTK +- if (opt_controller) { +- if (opt_args) { +- g_printerr(_("\nError: extra arguments given while using Spice controller\n\n")); +- ret = TRUE; +- *status = 1; +- goto end; +- } +- +- self->priv->controller = spice_ctrl_controller_new(); +- self->priv->ctrl_foreign_menu = spice_ctrl_foreign_menu_new(); +- +- g_object_set(self, "guest-name", "defined by Spice controller", NULL); +- +- g_signal_connect(self->priv->ctrl_foreign_menu, "notify::title", +- G_CALLBACK(foreign_menu_title_changed), +- self); +- } +-#endif +- +- if (opt_title && !opt_controller) ++ if (opt_title) + g_object_set(app, "title", opt_title, NULL); + + end: +@@ -245,7 +197,6 @@ static void + remote_viewer_class_init (RemoteViewerClass *klass) + { + GObjectClass *object_class = G_OBJECT_CLASS (klass); +- GtkApplicationClass *gtk_app_class = GTK_APPLICATION_CLASS(klass); + VirtViewerAppClass *app_class = VIRT_VIEWER_APP_CLASS (klass); + GApplicationClass *g_app_class = G_APPLICATION_CLASS(klass); + +@@ -259,12 +210,6 @@ remote_viewer_class_init (RemoteViewerClass *klass) + app_class->start = remote_viewer_start; + app_class->deactivated = remote_viewer_deactivated; + app_class->add_option_entries = remote_viewer_add_option_entries; +-#ifdef HAVE_SPICE_GTK +- app_class->activate = remote_viewer_activate; +- gtk_app_class->window_added = remote_viewer_window_added; +-#else +- (void) gtk_app_class; +-#endif + + #ifdef HAVE_OVIRT + g_object_class_install_property(object_class, +@@ -292,217 +237,7 @@ remote_viewer_new(void) + NULL); + } + +-#ifdef HAVE_SPICE_GTK +-static void +-foreign_menu_title_changed(SpiceCtrlForeignMenu *menu G_GNUC_UNUSED, +- GParamSpec *pspec G_GNUC_UNUSED, +- RemoteViewer *self) +-{ +- gboolean has_focus; +- +- g_object_get(G_OBJECT(self), "has-focus", &has_focus, NULL); +- /* FIXME: use a proper "new client connected" event +- ** a foreign menu client set the title when connecting, +- ** inform of focus state at that time. +- */ +- spice_ctrl_foreign_menu_app_activated_msg(self->priv->ctrl_foreign_menu, has_focus); +- +- /* update menu title */ +- spice_foreign_menu_updated(self); +-} +- +-static void +-spice_ctrl_do_connect(SpiceCtrlController *ctrl G_GNUC_UNUSED, +- VirtViewerApp *self) +-{ +- GError *error = NULL; +- +- if (!virt_viewer_app_initial_connect(self, &error)) { +- const gchar *msg = error ? error->message : +- _("Failed to initiate connection"); +- virt_viewer_app_simple_message_dialog(self, msg); +- g_clear_error(&error); +- } +-} +- +-static void +-spice_ctrl_show(SpiceCtrlController *ctrl G_GNUC_UNUSED, RemoteViewer *self) +-{ +- virt_viewer_app_show_display(VIRT_VIEWER_APP(self)); +-} +- +-static void +-spice_ctrl_hide(SpiceCtrlController *ctrl G_GNUC_UNUSED, RemoteViewer *self) +-{ +- virt_viewer_app_show_status(VIRT_VIEWER_APP(self), _("Display disabled by controller")); +-} +- +-static void +-spice_menuitem_activate_cb(GtkMenuItem *mi, GObject *ctrl) +-{ +- SpiceCtrlMenuItem *menuitem = g_object_get_data(G_OBJECT(mi), "spice-menuitem"); +- +- g_return_if_fail(menuitem != NULL); +- if (gtk_menu_item_get_submenu(mi)) +- return; +- +- if (SPICE_CTRL_IS_CONTROLLER(ctrl)) +- spice_ctrl_controller_menu_item_click_msg(SPICE_CTRL_CONTROLLER(ctrl), menuitem->id); +- else if (SPICE_CTRL_IS_FOREIGN_MENU(ctrl)) +- spice_ctrl_foreign_menu_menu_item_click_msg(SPICE_CTRL_FOREIGN_MENU(ctrl), menuitem->id); +-} +- +-static GtkWidget * +-ctrlmenu_to_gtkmenu (RemoteViewer *self, SpiceCtrlMenu *ctrlmenu, GObject *ctrl) +-{ +- GList *l; +- GtkWidget *menu = gtk_menu_new(); +- guint n = 0; +- +- for (l = ctrlmenu->items; l != NULL; l = l->next) { +- SpiceCtrlMenuItem *menuitem = l->data; +- GtkWidget *item; +- char *s; +- if (menuitem->text == NULL) { +- g_warn_if_reached(); +- continue; +- } +- +- for (s = menuitem->text; *s; s++) +- if (*s == '&') +- *s = '_'; +- +- if (g_str_equal(menuitem->text, "-")) { +- item = gtk_separator_menu_item_new(); +- } else if (menuitem->flags & CONTROLLER_MENU_FLAGS_CHECKED) { +- item = gtk_check_menu_item_new_with_mnemonic(menuitem->text); +- g_object_set(item, "active", TRUE, NULL); +- } else { +- item = gtk_menu_item_new_with_mnemonic(menuitem->text); +- } +- +- if (menuitem->flags & (CONTROLLER_MENU_FLAGS_GRAYED | CONTROLLER_MENU_FLAGS_DISABLED)) +- gtk_widget_set_sensitive(item, FALSE); +- +- g_object_set_data_full(G_OBJECT(item), "spice-menuitem", +- g_object_ref(menuitem), g_object_unref); +- g_signal_connect(item, "activate", G_CALLBACK(spice_menuitem_activate_cb), ctrl); +- gtk_menu_attach(GTK_MENU (menu), item, 0, 1, n, n + 1); +- n += 1; +- +- if (menuitem->submenu) { +- gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), +- ctrlmenu_to_gtkmenu(self, menuitem->submenu, ctrl)); +- } +- } +- +- if (n == 0) { +- g_object_ref_sink(menu); +- g_object_unref(menu); +- menu = NULL; +- } +- +- gtk_widget_show_all(menu); +- return menu; +-} +- +-static void +-spice_menu_update(RemoteViewer *self, VirtViewerWindow *win) +-{ +- GtkWidget *menuitem = g_object_get_data(G_OBJECT(win), "spice-menu"); +- SpiceCtrlMenu *menu; +- +- if (self->priv->controller == NULL) +- return; +- +- if (menuitem != NULL) +- gtk_widget_destroy(menuitem); +- +- { +- GtkMenuShell *shell = GTK_MENU_SHELL(gtk_builder_get_object(virt_viewer_window_get_builder(win), "top-menu")); +- menuitem = gtk_menu_item_new_with_label("Spice"); +- gtk_menu_shell_append(shell, menuitem); +- g_object_set_data(G_OBJECT(win), "spice-menu", menuitem); +- } +- +- g_object_get(self->priv->controller, "menu", &menu, NULL); +- if (menu == NULL || g_list_length(menu->items) == 0) { +- gtk_widget_set_visible(menuitem, FALSE); +- } else { +- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), +- ctrlmenu_to_gtkmenu(self, menu, G_OBJECT(self->priv->controller))); +- gtk_widget_set_visible(menuitem, TRUE); +- } +- +- if (menu != NULL) +- g_object_unref(menu); +-} +- +-static void +-spice_menu_update_each(gpointer value, +- gpointer user_data) +-{ +- spice_menu_update(REMOTE_VIEWER(user_data), VIRT_VIEWER_WINDOW(value)); +-} +- +-static void +-spice_ctrl_menu_updated(RemoteViewer *self) +-{ +- GList *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); +- +- g_debug("Spice controller menu updated"); +- +- g_list_foreach(windows, spice_menu_update_each, self); +-} +- +-static void +-spice_foreign_menu_update(RemoteViewer *self, VirtViewerWindow *win) +-{ +- GtkWidget *menuitem = g_object_get_data(G_OBJECT(win), "foreign-menu"); +- SpiceCtrlMenu *menu; +- +- if (self->priv->ctrl_foreign_menu == NULL) +- return; +- +- if (menuitem != NULL) +- gtk_widget_destroy(menuitem); +- +- { +- GtkMenuShell *shell = GTK_MENU_SHELL(gtk_builder_get_object(virt_viewer_window_get_builder(win), "top-menu")); +- const gchar *title = spice_ctrl_foreign_menu_get_title(self->priv->ctrl_foreign_menu); +- menuitem = gtk_menu_item_new_with_label(title); +- gtk_menu_shell_append(shell, menuitem); +- g_object_set_data(G_OBJECT(win), "foreign-menu", menuitem); +- } +- +- g_object_get(self->priv->ctrl_foreign_menu, "menu", &menu, NULL); +- if (menu == NULL || g_list_length(menu->items) == 0) { +- gtk_widget_set_visible(menuitem, FALSE); +- } else { +- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), +- ctrlmenu_to_gtkmenu(self, menu, G_OBJECT(self->priv->ctrl_foreign_menu))); +- gtk_widget_set_visible(menuitem, TRUE); +- } +- g_object_unref(menu); +-} +- +-static void +-spice_foreign_menu_update_each(gpointer value, +- gpointer user_data) +-{ +- spice_foreign_menu_update(REMOTE_VIEWER(user_data), VIRT_VIEWER_WINDOW(value)); +-} +- +-static void +-spice_foreign_menu_updated(RemoteViewer *self) +-{ +- GList *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); +- +- g_debug("Spice foreign menu updated"); +- +- g_list_foreach(windows, spice_foreign_menu_update_each, self); +-} +- ++#if defined(HAVE_SPICE_GTK) && defined(HAVE_OVIRT) + static SpiceSession * + remote_viewer_get_spice_session(RemoteViewer *self) + { +@@ -518,158 +253,6 @@ remote_viewer_get_spice_session(RemoteViewer *self) + + return session; + } +- +-static void +-app_notified(VirtViewerApp *app, +- GParamSpec *pspec, +- RemoteViewer *self) +-{ +- GValue value = G_VALUE_INIT; +- +- g_value_init(&value, pspec->value_type); +- g_object_get_property(G_OBJECT(app), pspec->name, &value); +- +- if (g_str_equal(pspec->name, "has-focus")) { +- if (self->priv->ctrl_foreign_menu) +- spice_ctrl_foreign_menu_app_activated_msg(self->priv->ctrl_foreign_menu, g_value_get_boolean(&value)); +- } +- +- g_value_unset(&value); +-} +- +-static void +-spice_ctrl_notified(SpiceCtrlController *ctrl, +- GParamSpec *pspec, +- RemoteViewer *self) +-{ +- SpiceSession *session = remote_viewer_get_spice_session(self); +- GValue value = G_VALUE_INIT; +- VirtViewerApp *app = VIRT_VIEWER_APP(self); +- +- g_return_if_fail(session != NULL); +- +- g_value_init(&value, pspec->value_type); +- g_object_get_property(G_OBJECT(ctrl), pspec->name, &value); +- +- if (g_str_equal(pspec->name, "host") || +- g_str_equal(pspec->name, "port") || +- g_str_equal(pspec->name, "password") || +- g_str_equal(pspec->name, "ca-file") || +- g_str_equal(pspec->name, "enable-smartcard") || +- g_str_equal(pspec->name, "color-depth") || +- g_str_equal(pspec->name, "disable-effects") || +- g_str_equal(pspec->name, "enable-usbredir") || +- g_str_equal(pspec->name, "secure-channels") || +- g_str_equal(pspec->name, "proxy")) { +- g_object_set_property(G_OBJECT(session), pspec->name, &value); +- } else if (g_str_equal(pspec->name, "sport")) { +- g_object_set_property(G_OBJECT(session), "tls-port", &value); +- } else if (g_str_equal(pspec->name, "tls-ciphers")) { +- g_object_set_property(G_OBJECT(session), "ciphers", &value); +- } else if (g_str_equal(pspec->name, "host-subject")) { +- g_object_set_property(G_OBJECT(session), "cert-subject", &value); +- } else if (g_str_equal(pspec->name, "enable-usb-autoshare")) { +- VirtViewerSession *vsession = NULL; +- +- g_object_get(self, "session", &vsession, NULL); +- g_object_set_property(G_OBJECT(vsession), "auto-usbredir", &value); +- g_object_unref(G_OBJECT(vsession)); +- } else if (g_str_equal(pspec->name, "usb-filter")) { +- SpiceUsbDeviceManager *manager; +- manager = spice_usb_device_manager_get(session, NULL); +- if (manager != NULL) { +- g_object_set_property(G_OBJECT(manager), +- "auto-connect-filter", +- &value); +- } +- } else if (g_str_equal(pspec->name, "title")) { +- g_object_set(app, "title", g_value_get_string(&value), NULL); +- } else if (g_str_equal(pspec->name, "display-flags")) { +- guint flags = g_value_get_uint(&value); +- gboolean fullscreen = !!(flags & CONTROLLER_SET_FULL_SCREEN); +- g_object_set(G_OBJECT(self), "fullscreen", fullscreen, NULL); +- } else if (g_str_equal(pspec->name, "menu")) { +- spice_ctrl_menu_updated(self); +- } else if (g_str_equal(pspec->name, "hotkeys")) { +- virt_viewer_app_set_hotkeys(app, g_value_get_string(&value)); +- } else { +- gchar *content = g_strdup_value_contents(&value); +- +- g_debug("unimplemented property: %s=%s", pspec->name, content); +- g_free(content); +- } +- +- g_object_unref(session); +- g_value_unset(&value); +-} +- +-static void +-spice_ctrl_foreign_menu_notified(SpiceCtrlForeignMenu *ctrl_foreign_menu G_GNUC_UNUSED, +- GParamSpec *pspec, +- RemoteViewer *self) +-{ +- if (g_str_equal(pspec->name, "menu")) { +- spice_foreign_menu_updated(self); +- } +-} +- +-static void +-spice_ctrl_listen_async_cb(GObject *object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- GError *error = NULL; +- VirtViewerApp *app = VIRT_VIEWER_APP(user_data); +- +- if (SPICE_CTRL_IS_CONTROLLER(object)) +- spice_ctrl_controller_listen_finish(SPICE_CTRL_CONTROLLER(object), res, &error); +- else if (SPICE_CTRL_IS_FOREIGN_MENU(object)) { +- spice_ctrl_foreign_menu_listen_finish(SPICE_CTRL_FOREIGN_MENU(object), res, &error); +- } else +- g_warn_if_reached(); +- +- if (error != NULL) { +- virt_viewer_app_simple_message_dialog(app, +- _("Controller connection failed: %s"), +- error->message); +- g_clear_error(&error); +- exit(EXIT_FAILURE); /* TODO: make start async? */ +- } +-} +- +- +-static gboolean +-remote_viewer_activate(VirtViewerApp *app, GError **error) +-{ +- RemoteViewer *self; +- gboolean ret = FALSE; +- +- g_return_val_if_fail(REMOTE_VIEWER_IS(app), FALSE); +- +- self = REMOTE_VIEWER(app); +- +- if (self->priv->controller) { +- SpiceSession *session = remote_viewer_get_spice_session(self); +- ret = spice_session_connect(session); +- g_object_unref(session); +- } else { +- ret = VIRT_VIEWER_APP_CLASS(remote_viewer_parent_class)->activate(app, error); +- } +- +- return ret; +-} +- +-static void +-remote_viewer_window_added(GtkApplication *app, +- GtkWindow *w) +-{ +- VirtViewerWindow *win = VIRT_VIEWER_WINDOW( +- g_object_get_data(G_OBJECT(w), "virt-viewer-window")); +- spice_menu_update(REMOTE_VIEWER(app), win); +- spice_foreign_menu_update(REMOTE_VIEWER(app), win); +- +- GTK_APPLICATION_CLASS(remote_viewer_parent_class)->window_added(app, w); +-} + #endif + + #ifdef HAVE_OVIRT +@@ -1101,29 +684,8 @@ remote_viewer_start(VirtViewerApp *app, GError **err) + gchar *type = NULL; + GError *error = NULL; + +-#ifdef HAVE_SPICE_GTK +- g_signal_connect(app, "notify", G_CALLBACK(app_notified), self); +- +- if (priv->controller) { +- if (!virt_viewer_app_create_session(app, "spice", &error)) { +- g_debug("Couldn't create a Spice session"); +- goto cleanup; +- } +- +- g_signal_connect(priv->controller, "notify", G_CALLBACK(spice_ctrl_notified), self); +- g_signal_connect(priv->controller, "do_connect", G_CALLBACK(spice_ctrl_do_connect), self); +- g_signal_connect(priv->controller, "show", G_CALLBACK(spice_ctrl_show), self); +- g_signal_connect(priv->controller, "hide", G_CALLBACK(spice_ctrl_hide), self); +- +- spice_ctrl_controller_listen(priv->controller, NULL, spice_ctrl_listen_async_cb, self); +- +- g_signal_connect(priv->ctrl_foreign_menu, "notify", G_CALLBACK(spice_ctrl_foreign_menu_notified), self); +- spice_ctrl_foreign_menu_listen(priv->ctrl_foreign_menu, NULL, spice_ctrl_listen_async_cb, self); +- +- virt_viewer_app_show_status(VIRT_VIEWER_APP(self), _("Setting up Spice session...")); +- } else { +-#endif + retry_dialog: ++ { + if (priv->open_recent_dialog) { + VirtViewerWindow *main_window = virt_viewer_app_get_main_window(app); + if (!remote_viewer_connect_dialog(virt_viewer_window_get_window(main_window), &guri)) { +@@ -1193,9 +755,7 @@ retry_dialog: + } + goto cleanup; + } +-#ifdef HAVE_SPICE_GTK + } +-#endif + + ret = VIRT_VIEWER_APP_CLASS(remote_viewer_parent_class)->start(app, &error); + +-- +2.17.1 + diff --git a/SOURCES/0055-remote-viewer-connect-centralize-window.patch b/SOURCES/0055-remote-viewer-connect-centralize-window.patch new file mode 100644 index 0000000..ed2f080 --- /dev/null +++ b/SOURCES/0055-remote-viewer-connect-centralize-window.patch @@ -0,0 +1,28 @@ +From 5d80d344729f1edd844dc022e581e9ba27c52f35 Mon Sep 17 00:00:00 2001 +From: Victor Toso <me@victortoso.com> +Date: Wed, 30 May 2018 14:43:59 +0200 +Subject: [PATCH] remote-viewer-connect: centralize window + +Instead of top-left corner. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1508274 + +Signed-off-by: Victor Toso <victortoso@redhat.com> +Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com> +(cherry picked from commit c127a80fc6b98404207f8e1874097dfd94d76f4a) +--- + src/resources/ui/remote-viewer-connect.ui | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/resources/ui/remote-viewer-connect.ui b/src/resources/ui/remote-viewer-connect.ui +index 308d121..b2f3f09 100644 +--- a/src/resources/ui/remote-viewer-connect.ui ++++ b/src/resources/ui/remote-viewer-connect.ui +@@ -4,6 +4,7 @@ + <object class="GtkWindow" id="remote-viewer-connection-window"> + <property name="can_focus">False</property> + <property name="title" translatable="yes">Connection details</property> ++ <property name="window-position">3</property> + <child> + <object class="GtkVBox" id="main-box"> + <property name="visible">True</property> diff --git a/SOURCES/0056-app-Always-add-guest-name-comment.patch b/SOURCES/0056-app-Always-add-guest-name-comment.patch new file mode 100644 index 0000000..64e5aff --- /dev/null +++ b/SOURCES/0056-app-Always-add-guest-name-comment.patch @@ -0,0 +1,38 @@ +From 1397ef78ac43e971cef317893f9fe597bf7074ed Mon Sep 17 00:00:00 2001 +From: Victor Toso <me@victortoso.com> +Date: Thu, 30 Aug 2018 13:51:17 +0200 +Subject: [PATCH] app: Always add guest name comment + +Even when the user adds comments, we should place the guest's name +unless it is present already. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1623756 + +Signed-off-by: Victor Toso <victortoso@redhat.com> +Acked-by: Christophe Fergeau <cfergeau@redhat.com> +(cherry picked from commit 7ffb7f9cf485f6eefacccf6b20167b0d67521ebb) +--- + src/virt-viewer-app.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index e90afe8..6f17842 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -258,9 +258,13 @@ virt_viewer_app_save_config(VirtViewerApp *self) + if (error) { + g_debug("Unable to get comment from key file: %s", error->message); + g_clear_error(&error); +- } else { +- if (!comment || *comment == '\0') +- g_key_file_set_comment(priv->config, priv->uuid, NULL, priv->guest_name, NULL); ++ } ++ ++ if (comment == NULL || ++ (comment != NULL && g_strstr_len(comment, -1, priv->guest_name) == NULL)) { ++ /* Note that this function appends the guest's name string as last ++ * comment in case there were comments there already */ ++ g_key_file_set_comment(priv->config, priv->uuid, NULL, priv->guest_name, NULL); + } + g_free(comment); + } diff --git a/SOURCES/0057-Mark-PrintScreen-as-translatable.patch b/SOURCES/0057-Mark-PrintScreen-as-translatable.patch new file mode 100644 index 0000000..cafd08e --- /dev/null +++ b/SOURCES/0057-Mark-PrintScreen-as-translatable.patch @@ -0,0 +1,33 @@ +From 661068853210ea3a9d3335f1117d912972723f72 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Tue, 9 Jan 2018 14:42:25 +0100 +Subject: [PATCH] Mark PrintScreen as translatable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It's for example ImprÉcran on French keyboards. + +Signed-off-by: Christophe Fergeau <cfergeau@redhat.com> + +https://bugzilla.redhat.com/show_bug.cgi?id=1510411 +Fabiano Fidêncio <fidencio@redhat.com> + +(cherry picked from commit da336ab4b3e4ce1d172b53d43a516ed5d3506a1f) +--- + src/virt-viewer-window.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index a796685..a05140b 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -555,7 +555,7 @@ static const struct keyComboDef keyCombos[] = { + { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F11, GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F11"), NULL}, + { { GDK_KEY_Control_L, GDK_KEY_Alt_L, GDK_KEY_F12, GDK_KEY_VoidSymbol }, N_("Ctrl+Alt+F12"), NULL}, + { { GDK_KEY_VoidSymbol }, "" , NULL}, +- { { GDK_KEY_Print, GDK_KEY_VoidSymbol }, "_PrintScreen", NULL}, ++ { { GDK_KEY_Print, GDK_KEY_VoidSymbol }, N_("_PrintScreen"), NULL}, + }; + + static guint diff --git a/SOURCES/0058-ovirt-foreign-menu-Bypass-errors-from-Host-Cluster-D.patch b/SOURCES/0058-ovirt-foreign-menu-Bypass-errors-from-Host-Cluster-D.patch new file mode 100644 index 0000000..8285197 --- /dev/null +++ b/SOURCES/0058-ovirt-foreign-menu-Bypass-errors-from-Host-Cluster-D.patch @@ -0,0 +1,129 @@ +From f7f487b4490793eb54a276103eae7a17c829b2b4 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" <etrunko@redhat.com> +Date: Fri, 6 Jul 2018 09:12:18 -0300 +Subject: [PATCH virt-viewer] ovirt-foreign-menu: Bypass errors from + Host/Cluster/Data Center + +When accessing ovirt as a regular user, it may happen that queries to +Hosts, Clusters and Data Centers return errors due to insufficient +permissions, while they will work fine if access is done by admin user. +In this case, we skip the errors and fallback to the old method. + +Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com> +--- + src/ovirt-foreign-menu.c | 51 ++++++++++++++++++++++++++++++---------- + 1 file changed, 39 insertions(+), 12 deletions(-) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index b8ad179..451b116 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -621,12 +621,21 @@ static void ovirt_foreign_menu_fetch_vm_cdrom_async(OvirtForeignMenu *menu, + + #ifdef HAVE_OVIRT_DATA_CENTER + static gboolean storage_domain_attached_to_data_center(OvirtStorageDomain *domain, +- OvirtDataCenter *data_center) ++ OvirtDataCenter *data_center) + { + GStrv data_center_ids; + char *data_center_guid; + gboolean match; + ++ /* For some reason we did not get data center information, so just return ++ * TRUE as it will work like a fallback to old method, where we did not ++ * check relationship between data center and storage domain. ++ */ ++ if (data_center == NULL) { ++ g_debug("Could not get data center info, considering storage domain is attached to it"); ++ return TRUE; ++ } ++ + g_object_get(domain, "data-center-ids", &data_center_ids, NULL); + g_object_get(data_center, "guid", &data_center_guid, NULL); + match = g_strv_contains((const gchar * const *) data_center_ids, data_center_guid); +@@ -725,9 +734,6 @@ static void data_center_fetched_cb(GObject *source_object, + ovirt_resource_refresh_finish(resource, result, &error); + if (error != NULL) { + g_debug("failed to fetch Data Center: %s", error->message); +- g_task_return_error(task, error); +- g_object_unref(task); +- return; + } + + ovirt_foreign_menu_next_async_step(menu, task, STATE_DATA_CENTER); +@@ -742,6 +748,12 @@ static void ovirt_foreign_menu_fetch_data_center_async(OvirtForeignMenu *menu, + g_return_if_fail(OVIRT_IS_CLUSTER(menu->priv->cluster)); + + menu->priv->data_center = ovirt_cluster_get_data_center(menu->priv->cluster); ++ ++ if (menu->priv->data_center == NULL) { ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_DATA_CENTER); ++ return; ++ } ++ + ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->data_center), + menu->priv->proxy, + g_task_get_cancellable(task), +@@ -762,9 +774,6 @@ static void cluster_fetched_cb(GObject *source_object, + ovirt_resource_refresh_finish(resource, result, &error); + if (error != NULL) { + g_debug("failed to fetch Cluster: %s", error->message); +- g_task_return_error(task, error); +- g_object_unref(task); +- return; + } + + ovirt_foreign_menu_next_async_step(menu, task, STATE_CLUSTER); +@@ -776,9 +785,21 @@ static void ovirt_foreign_menu_fetch_cluster_async(OvirtForeignMenu *menu, + { + g_return_if_fail(OVIRT_IS_FOREIGN_MENU(menu)); + g_return_if_fail(OVIRT_IS_PROXY(menu->priv->proxy)); +- g_return_if_fail(OVIRT_IS_HOST(menu->priv->host)); + +- menu->priv->cluster = ovirt_host_get_cluster(menu->priv->host); ++ /* If there is no host information, we get cluster from the VM */ ++ if (menu->priv->host == NULL) { ++ g_return_if_fail(OVIRT_IS_VM(menu->priv->vm)); ++ menu->priv->cluster = ovirt_vm_get_cluster(menu->priv->vm); ++ } else { ++ g_return_if_fail(OVIRT_IS_HOST(menu->priv->host)); ++ menu->priv->cluster = ovirt_host_get_cluster(menu->priv->host); ++ } ++ ++ if (menu->priv->cluster == NULL) { ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_CLUSTER); ++ return; ++ } ++ + ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->cluster), + menu->priv->proxy, + g_task_get_cancellable(task), +@@ -799,9 +820,6 @@ static void host_fetched_cb(GObject *source_object, + ovirt_resource_refresh_finish(resource, result, &error); + if (error != NULL) { + g_debug("failed to fetch Host: %s", error->message); +- g_task_return_error(task, error); +- g_object_unref(task); +- return; + } + + ovirt_foreign_menu_next_async_step(menu, task, STATE_HOST); +@@ -816,6 +834,15 @@ static void ovirt_foreign_menu_fetch_host_async(OvirtForeignMenu *menu, + g_return_if_fail(OVIRT_IS_VM(menu->priv->vm)); + + menu->priv->host = ovirt_vm_get_host(menu->priv->vm); ++ ++ /* In some cases the VM XML does not include host information, so we just ++ * skip to the next step ++ */ ++ if (menu->priv->host == NULL) { ++ ovirt_foreign_menu_next_async_step(menu, task, STATE_HOST); ++ return; ++ } ++ + ovirt_resource_refresh_async(OVIRT_RESOURCE(menu->priv->host), + menu->priv->proxy, + g_task_get_cancellable(task), +-- +2.20.1 + diff --git a/SOURCES/0059-Spice-listen-for-new-SpiceSession-disconnected-signa.patch b/SOURCES/0059-Spice-listen-for-new-SpiceSession-disconnected-signa.patch new file mode 100644 index 0000000..c59d0f1 --- /dev/null +++ b/SOURCES/0059-Spice-listen-for-new-SpiceSession-disconnected-signa.patch @@ -0,0 +1,91 @@ +From 295e4773bd6bd9219dfccce5d7a0fb9ada1fcc3b Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Thu, 31 May 2018 13:30:33 -0500 +Subject: [PATCH] Spice: listen for new 'SpiceSession::disconnected' signal + +Previously we were emitting the VirtViewerSession::session-disconnected +when we got the Spice::session::channel-destroy signal for the last +channel. However, since the channels are still valid at this point, and +because VirtViewerApp quits the application in response to the +session-disconnected signal, that means that the channels were never +being properly freed. This was particularly problematic for the usbredir +channel, which must disconnect any connected USB devices as part of its +destruction. By using the new SpiceSession::disconnected signal instead, +we can ensure that all channels have been disconnected and properly +destroyed before quitting the application. + +(cherry picked from commit 65ef66e42a6db2a9826fffef0db49920a02d358f) +--- + src/virt-viewer-session-spice.c | 24 +++++++++++++++++++----- + 1 file changed, 19 insertions(+), 5 deletions(-) + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index f43ed65..d479a77 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -51,7 +51,7 @@ struct _VirtViewerSessionSpicePrivate { + guint pass_try; + gboolean did_auto_conf; + VirtViewerFileTransferDialog *file_transfer_dialog; +- ++ GError *disconnect_error; + }; + + #define VIRT_VIEWER_SESSION_SPICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_SESSION_SPICE, VirtViewerSessionSpicePrivate)) +@@ -76,6 +76,8 @@ static void virt_viewer_session_spice_channel_new(SpiceSession *s, + static void virt_viewer_session_spice_channel_destroy(SpiceSession *s, + SpiceChannel *channel, + VirtViewerSession *session); ++static void virt_viewer_session_spice_session_disconnected(SpiceSession *s, ++ VirtViewerSessionSpice *session); + static void virt_viewer_session_spice_smartcard_insert(VirtViewerSession *session); + static void virt_viewer_session_spice_smartcard_remove(VirtViewerSession *session); + static gboolean virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self); +@@ -153,6 +155,7 @@ virt_viewer_session_spice_dispose(GObject *obj) + gtk_widget_destroy(GTK_WIDGET(spice->priv->file_transfer_dialog)); + spice->priv->file_transfer_dialog = NULL; + } ++ g_clear_error(&spice->priv->disconnect_error); + + G_OBJECT_CLASS(virt_viewer_session_spice_parent_class)->dispose(obj); + } +@@ -399,6 +402,8 @@ create_spice_session(VirtViewerSessionSpice *self) + G_CALLBACK(virt_viewer_session_spice_channel_new), self, 0); + virt_viewer_signal_connect_object(self->priv->session, "channel-destroy", + G_CALLBACK(virt_viewer_session_spice_channel_destroy), self, 0); ++ virt_viewer_signal_connect_object(self->priv->session, "disconnected", ++ G_CALLBACK(virt_viewer_session_spice_session_disconnected), self, 0); + + usb_manager = spice_usb_device_manager_get(self->priv->session, NULL); + if (usb_manager) { +@@ -1092,6 +1097,13 @@ virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self) + return TRUE; + } + ++static void ++virt_viewer_session_spice_session_disconnected(G_GNUC_UNUSED SpiceSession *s, ++ VirtViewerSessionSpice *self) ++{ ++ g_signal_emit_by_name(self, "session-disconnected", self->priv->disconnect_error); ++} ++ + static void + virt_viewer_session_spice_channel_destroy(G_GNUC_UNUSED SpiceSession *s, + SpiceChannel *channel, +@@ -1130,10 +1142,12 @@ virt_viewer_session_spice_channel_destroy(G_GNUC_UNUSED SpiceSession *s, + if (self->priv->usbredir_channel_count == 0) + virt_viewer_session_set_has_usbredir(session, FALSE); + } +- +- self->priv->channel_count--; +- if (self->priv->channel_count == 0) +- g_signal_emit_by_name(self, "session-disconnected", error ? error->message : NULL); ++ if (error) { ++ g_warning("Channel error: %s", error->message); ++ if (self->priv->disconnect_error == NULL) { ++ self->priv->disconnect_error = g_error_copy(error); ++ } ++ } + } + + VirtViewerSession * diff --git a/SOURCES/0060-Fix-a-regression-when-initial-connection-fails.patch b/SOURCES/0060-Fix-a-regression-when-initial-connection-fails.patch new file mode 100644 index 0000000..b2577b6 --- /dev/null +++ b/SOURCES/0060-Fix-a-regression-when-initial-connection-fails.patch @@ -0,0 +1,105 @@ +From a3b0413fc28ee1f9c302cf98925b8b1832aeb970 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Tue, 29 Jan 2019 14:47:51 -0600 +Subject: [PATCH] Fix a regression when initial connection fails + +Due to changes in commit 65ef66e4, when the initial connection fails, +virt-viewer just sat quietly and didn't indicate what was wrong. It also +did not exit as it did before. This is because we were using +virt_viewer_session_spice_channel_destroy() incorrectly. This function +was intended to be a callback that is called to clean up the VV session +when the SpiceSession tells us that a channel has been destroyed. It +does not actually destroy the channel, it only cleans up references to +that channel within virt-viewer. After calling this function, the +channel is not affected in any way. If the channel object was valid +before calling the function, it will be valid and unchanged after +calling the function as well. + +The problem is that before commit 65ef66e4, this function +(_channel_destroy()) also had a side-effect of emitting a signal that +made us think that the SpiceSession was disconnected when it was not. +The application responded to this signal by exiting even though the +session was not properly disconnected and cleaned up. + +We now no longer exit the application until the SpiceSession is properly +disconnected and cleaned up. So we need to make sure that this happens +when our initial connection fails. Therefore, when the main channel +receives an error channel-event, we should not call +virt_viewer_session_spice_channel_destroy(). This function should only +be called when a channel has actually been destroyed, and the channel is +not destroyed at this point. We should instead explicitly disconnect +the session, which will result in the channels being destroyed properly. +After the session destroys all of the channels, the 'channel-destroy' signal +will be emitted by SpiceSession, so the _channel_destroy() function will +eventually get called by the signal handler. + +To make the proper use of the function more obvious, I also changed the +function name from _channel_destroy() to _channel_destroyed() and added +a comment. + +Fixes: rhbz#1666869 +Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com> +Acked-by: Christophe Fergeau <cfergeau@redhat.com> +(cherry picked from commit c2dabf0730e1601745d2cdfc28f59e65e17cdab1) +--- + src/virt-viewer-session-spice.c | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index d479a77..b664024 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -73,9 +73,9 @@ static void virt_viewer_session_spice_usb_device_selection(VirtViewerSession *se + static void virt_viewer_session_spice_channel_new(SpiceSession *s, + SpiceChannel *channel, + VirtViewerSession *session); +-static void virt_viewer_session_spice_channel_destroy(SpiceSession *s, +- SpiceChannel *channel, +- VirtViewerSession *session); ++static void virt_viewer_session_spice_channel_destroyed(SpiceSession *s, ++ SpiceChannel *channel, ++ VirtViewerSession *session); + static void virt_viewer_session_spice_session_disconnected(SpiceSession *s, + VirtViewerSessionSpice *session); + static void virt_viewer_session_spice_smartcard_insert(VirtViewerSession *session); +@@ -401,7 +401,7 @@ create_spice_session(VirtViewerSessionSpice *self) + virt_viewer_signal_connect_object(self->priv->session, "channel-new", + G_CALLBACK(virt_viewer_session_spice_channel_new), self, 0); + virt_viewer_signal_connect_object(self->priv->session, "channel-destroy", +- G_CALLBACK(virt_viewer_session_spice_channel_destroy), self, 0); ++ G_CALLBACK(virt_viewer_session_spice_channel_destroyed), self, 0); + virt_viewer_signal_connect_object(self->priv->session, "disconnected", + G_CALLBACK(virt_viewer_session_spice_session_disconnected), self, 0); + +@@ -770,14 +770,14 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel, + spice_session_connect(self->priv->session); + } + } else { +- virt_viewer_session_spice_channel_destroy(NULL, channel, session); ++ spice_session_disconnect(self->priv->session); + } + break; + } + case SPICE_CHANNEL_ERROR_IO: + case SPICE_CHANNEL_ERROR_LINK: + case SPICE_CHANNEL_ERROR_TLS: +- virt_viewer_session_spice_channel_destroy(NULL, channel, session); ++ spice_session_disconnect(self->priv->session); + break; + default: + g_warning("unhandled spice main channel event: %d", event); +@@ -1104,10 +1104,11 @@ virt_viewer_session_spice_session_disconnected(G_GNUC_UNUSED SpiceSession *s, + g_signal_emit_by_name(self, "session-disconnected", self->priv->disconnect_error); + } + ++/* called when the spice session indicates that a session has been destroyed */ + static void +-virt_viewer_session_spice_channel_destroy(G_GNUC_UNUSED SpiceSession *s, +- SpiceChannel *channel, +- VirtViewerSession *session) ++virt_viewer_session_spice_channel_destroyed(G_GNUC_UNUSED SpiceSession *s, ++ SpiceChannel *channel, ++ VirtViewerSession *session) + { + VirtViewerSessionSpice *self = VIRT_VIEWER_SESSION_SPICE(session); + int id; diff --git a/SOURCES/0061-configure-Fix-check-for-govirt-functions.patch b/SOURCES/0061-configure-Fix-check-for-govirt-functions.patch new file mode 100644 index 0000000..a4c4ab3 --- /dev/null +++ b/SOURCES/0061-configure-Fix-check-for-govirt-functions.patch @@ -0,0 +1,30 @@ +From cb6c7c5003b47eb6b65b3e739a4fb8a464b6075e Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" <etrunko@redhat.com> +Date: Fri, 31 May 2019 12:10:20 -0300 +Subject: [PATCH virt-viewer] configure: Fix check for govirt functions + +Use saved CFLAGS and LIBS to avoid errors in the check programs. + +Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com> +--- + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index abdbdaf..fcdbdf6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -182,8 +182,8 @@ AS_IF([test "x$with_ovirt" = "xyes"], + [AC_DEFINE([HAVE_OVIRT], 1, [Have libgovirt?])] + [SAVED_CFLAGS="$CFLAGS" + SAVED_LIBS="$LIBS" +- CFLAGS="$OVIRT_CFLAGS" +- LIBS="$OVIRT_LIBS" ++ CFLAGS="$SAVED_CFLAGS $OVIRT_CFLAGS" ++ LIBS="$SAVED_LIBS $OVIRT_LIBS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <govirt/govirt.h>]], + [static int err = OVIRT_REST_CALL_ERROR_CANCELLED; + void *fun = rest_proxy_auth_cancel;])], +-- +2.21.0 + diff --git a/SPECS/virt-viewer.spec b/SPECS/virt-viewer.spec new file mode 100644 index 0000000..1e6cc56 --- /dev/null +++ b/SPECS/virt-viewer.spec @@ -0,0 +1,770 @@ +# -*- rpm-spec -*- + +%global _hardened_build 1 + +# Default to skipping autoreconf. Distros can change just this one line +# (or provide a command-line override) if they backport any patches that +# touch configure.ac or Makefile.am. +%{!?enable_autotools:%global enable_autotools 1} + +%define with_spice 0 +%if 0%{?fedora} >= 17 || 0%{?rhel} >= 6 +%define with_spice 1 +%endif + +%define with_govirt 0 +%if 0%{?fedora} >= 19 || 0%{?rhel} >= 7 +%define with_govirt 1 +%endif + +# spice-gtk is x86 x86_64 arm only currently: +%ifnarch %{ix86} x86_64 %{arm} +%define with_spice 0 +%endif + +Name: virt-viewer +Version: 5.0 +Release: 15%{?dist}%{?extra_release} +Summary: Virtual Machine Viewer +Group: Applications/System +License: GPLv2+ +URL: https://virt-manager.org/ +Source0: https://releases.pagure.org/%{name}/%{name}-%{version}.tar.gz + +Patch0001: 0001-spice-Fix-display-id-in-the-warning-log.patch +Patch0002: 0002-spice-Replace-g_warning-with-g_debug.patch +Patch0003: 0003-Set-guest-name-at-the-same-time-as-uuid.patch +Patch0004: 0004-app-Update-warning-msg-in-virt-viewer-s-window.patch +Patch0005: 0005-remote-viewer-Extend-ifdef-HAVE_OVIRT-block.patch +Patch0006: 0006-ovirt-foreign-menu-Set-new-ISO-name-using-GTask-API.patch +Patch0007: 0007-ovirt-foreign-menu-Fetch-ISO-names-using-GTask-API.patch +Patch0008: 0008-ovirt-foreign-menu-Add-accessors-for-current-iso-and.patch +Patch0009: 0009-Introduce-ISO-List-dialog.patch +Patch0010: 0010-Run-ISO-dialog-when-Change-CD-menu-is-activated.patch +Patch0011: 0011-README-Update-links.patch +Patch0012: 0012-README-switch-to-Markdown-syntax.patch +Patch0013: 0013-Update-for-README.md.patch +Patch0014: 0014-iso-dialog-Do-not-use-string-directly.patch +Patch0015: 0015-Do-not-print-password-in-the-debug-log.patch +Patch0016: 0016-iso-dialog-Avoid-crash-when-closing-dialog-early.patch +Patch0017: 0017-session-spice-Pass-hostname-to-authentication-dialog.patch +Patch0018: 0018-Show-errors-generated-by-connection-dialog.patch +Patch0019: 0019-man-Mention-that-ssh-agent-can-be-useful.patch +Patch0020: 0020-spice-Remove-unneeded-braces.patch +Patch0021: 0021-file-transfer-Fix-label-of-the-dialog.patch +Patch0022: 0022-Fix-build-when-building-without-oVirt.patch +Patch0023: 0023-Avoid-harmless-warnings-due-lack-of-oVirt-on-build.patch +Patch0024: 0024-Don-t-define-function-without-oVirt-integration.patch +Patch0025: 0025-virt-viewer-Allow-more-precise-VM-selection.patch +Patch0026: 0026-virt-viewer-Adjust-name-id-uuid-comment.patch +Patch0027: 0027-Comment-out-folder-sharing-menus.patch +Patch0028: 0028-virt-viewer-Fix-comparison-in-domain-selection.patch +Patch0029: 0029-vnc-Set-display-as-enabled-on-init.patch +Patch0030: 0030-window-Allow-to-control-zoom-using-keypad.patch +Patch0031: 0031-virt-viewer-Support-newer-libvirt-xml-format.patch +Patch0032: 0032-app-Allow-to-connect-to-channel-using-unix-socket.patch +Patch0033: 0033-virt-viewer-Ensure-to-not-close-during-migration.patch +Patch0034: 0034-Make-the-progress-bar-smooth-during-file-transfer.patch +Patch0036: 0036-Update-translation-from-internal-zanata.patch +Patch0037: 0037-window-Do-not-show-fullscreen-toolbar-if-in-kiosk-mo.patch +Patch0038: 0038-kiosk-Show-authentication-dialog-again-if-cancelled.patch +Patch0039: 0039-spice-do-not-show-error-on-cancel-close-of-auth-dial.patch +Patch0040: 0040-vnc-do-not-show-error-on-cancel-close-of-auth-dialog.patch +Patch0041: 0041-remote-viewer-Show-authentication-dialog-again-if-in.patch +Patch0042: 0042-remote-viewer-connect-Keep-the-dialog-window-on-top.patch +Patch0043: 0043-Change-default-screenshot-name-to-Screenshot.png.patch +Patch0044: 0044-Report-errors-when-saving-screenshot.patch +Patch0045: 0045-Screenshot-reject-unknown-image-type-filenames.patch +Patch0046: 0046-configure-check-for-new-functions-in-libgovirt.patch +Patch0047: 0047-foreign-menu-Use-query-for-fetching-virtual-machines.patch +Patch0048: 0048-ovirt-foreign-menu-Fetch-host-cluster-and-data-cente.patch +Patch0049: 0049-foreign-menu-Check-if-storage-domain-is-active-for-d.patch +Patch0050: 0050-remote-viewer-Pass-guri-to-remote_viewer_session_con.patch +Patch0051: 0051-doc-Adjust-reference-to-spice-gtk-man-page.patch +Patch0052: 0052-doc-Adjust-reference-to-spice-gtk-man-page-for-remot.patch +Patch0053: 0053-Update-translations-from-zanata.patch +Patch0054: 0054-remote-viewer-remove-spice-controller.patch +Patch0055: 0055-remote-viewer-connect-centralize-window.patch +Patch0056: 0056-app-Always-add-guest-name-comment.patch +Patch0057: 0057-Mark-PrintScreen-as-translatable.patch +Patch0058: 0058-ovirt-foreign-menu-Bypass-errors-from-Host-Cluster-D.patch +Patch0059: 0059-Spice-listen-for-new-SpiceSession-disconnected-signa.patch +Patch0060: 0060-Fix-a-regression-when-initial-connection-fails.patch +Patch0061: 0061-configure-Fix-check-for-govirt-functions.patch + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +Requires: openssh-clients +Requires(post): desktop-file-utils +Requires(postun): desktop-file-utils +Requires(post): %{_sbindir}/update-alternatives +Requires(postun): %{_sbindir}/update-alternatives + +%if 0%{?enable_autotools} +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: gettext-devel +BuildRequires: libtool +%endif + +BuildRequires: pkgconfig(glib-2.0) >= 2.38 +BuildRequires: pkgconfig(gtk+-3.0) >= 3.12 +BuildRequires: pkgconfig(libvirt) >= 0.10.0 +BuildRequires: pkgconfig(libvirt-glib-1.0) >= 0.1.8 +BuildRequires: pkgconfig(libxml-2.0) >= 2.6.0 +BuildRequires: pkgconfig(gtk-vnc-2.0) >= 0.4.0 +%if %{with_spice} +BuildRequires: pkgconfig(spice-client-gtk-3.0) >= 0.35 +BuildRequires: pkgconfig(spice-protocol) >= 0.12.12 +%endif +BuildRequires: /usr/bin/pod2man +BuildRequires: intltool +%if %{with_govirt} +BuildRequires: pkgconfig(govirt-1.0) >= 0.3.3 +%endif + +%if 0%{?fedora} >= 20 +Obsoletes: spice-client < 0.12.3-2 +%endif + + +%description +Virtual Machine Viewer provides a graphical console client for connecting +to virtual machines. It uses the GTK-VNC or SPICE-GTK widgets to provide +the display, and libvirt for looking up VNC/SPICE server details. + +%prep +%setup -q +%patch0001 -p1 +%patch0002 -p1 +%patch0003 -p1 +%patch0004 -p1 +%patch0005 -p1 +%patch0006 -p1 +%patch0007 -p1 +%patch0008 -p1 +%patch0009 -p1 +%patch0010 -p1 +%patch0011 -p1 +%patch0012 -p1 +%patch0013 -p1 +%patch0014 -p1 +%patch0015 -p1 +%patch0016 -p1 +%patch0017 -p1 +%patch0018 -p1 +%patch0019 -p1 +%patch0020 -p1 +%patch0021 -p1 +%patch0022 -p1 +%patch0023 -p1 +%patch0024 -p1 +%patch0025 -p1 +%patch0026 -p1 +%patch0027 -p1 +%patch0028 -p1 +%patch0029 -p1 +%patch0030 -p1 +%patch0031 -p1 +%patch0032 -p1 +%patch0033 -p1 +%patch0034 -p1 +%patch0036 -p1 +%patch0037 -p1 +%patch0038 -p1 +%patch0039 -p1 +%patch0040 -p1 +%patch0041 -p1 +%patch0042 -p1 +%patch0043 -p1 +%patch0044 -p1 +%patch0045 -p1 +%patch0046 -p1 +%patch0047 -p1 +%patch0048 -p1 +%patch0049 -p1 +%patch0050 -p1 +%patch0051 -p1 +%patch0052 -p1 +%patch0053 -p1 +%patch0054 -p1 +%patch0055 -p1 +%patch0056 -p1 +%patch0057 -p1 +%patch0058 -p1 +%patch0059 -p1 +%patch0060 -p1 +%patch0061 -p1 + +%build + +%if 0%{?enable_autotools} +autoreconf -if +%endif + +%if %{with_spice} +%define spice_arg --with-spice-gtk +%else +%define spice_arg --without-spice-gtk +%endif + +%if %{with_govirt} +%define govirt_arg --with-ovirt +%endif + +%configure %{spice_arg} %{govirt_arg} --with-buildid=%{release} --disable-update-mimedb --with-osid=rhel%{?rhel} +%__make %{?_smp_mflags} V=1 + + +%install +rm -rf $RPM_BUILD_ROOT +%__make install DESTDIR=$RPM_BUILD_ROOT +%find_lang %{name} + +%clean +rm -rf $RPM_BUILD_ROOT + +%post +/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : +/bin/touch --no-create %{_datadir}/mime/packages &> /dev/null || : +%{_bindir}/update-desktop-database -q %{_datadir}/applications +if [ $1 -eq 2 ] ; then + # Here due 1658325, postun alone is not enough. Can be removed later on. + %{_sbindir}/update-alternatives --remove spice-xpi-client %{_libexecdir}/spice-xpi-client-remote-viewer || : +fi + +%postun +%{_sbindir}/update-alternatives --remove spice-xpi-client %{_libexecdir}/spice-xpi-client-remote-viewer || : +if [ $1 -eq 0 ] ; then + /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null + %{_bindir}/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : + %{_bindir}/update-mime-database %{_datadir}/mime &> /dev/null || : +fi +%{_bindir}/update-desktop-database -q %{_datadir}/applications + +%posttrans +%{_bindir}/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +%{_bindir}/update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || : + +%files -f %{name}.lang +%defattr(-,root,root,-) +%doc README.md COPYING AUTHORS ChangeLog NEWS +%{_bindir}/%{name} +%{_bindir}/remote-viewer +%{_datadir}/icons/hicolor/*/apps/* +%{_datadir}/icons/hicolor/*/devices/* +%{_datadir}/applications/remote-viewer.desktop +%{_datadir}/appdata/remote-viewer.appdata.xml +%{_datadir}/mime/packages/virt-viewer-mime.xml +%{_mandir}/man1/virt-viewer.1* +%{_mandir}/man1/remote-viewer.1* + +%changelog +* Fri May 31 2019 Eduardo Lima (Etrunko) <etrunko@redhat.com> - 5.0.15 +- Fix check for ovirt functions + Related: rhbz#1427467 + +* Wed May 22 2019 Victor Toso <victortoso@redhat.com> - 5.0-14 +- Listen to SpiceSession::disconnected + Resolves: rhbz#1505809 + +* Wed Apr 10 2019 Eduardo Lima (Etrunko) <etrunko@redhat.com> - 5.0.13 +- Bypass errors from oVirt foreign menu queries + Related: rhbz#1428401 + +* Fri Mar 15 2019 Victor Toso <victortoso@redhat.com> - 5.0-12 +- Centralize recent dialog + Resolves: rhbz#1508274 +- Always add guest name as comment + Resolves: rhbz#1623756 +- Mark PrintScreen as translatable + Resolves: rhbz#1510411 +- Remove symlink to spice-xpi-client-remote-viewer on update (it was dropped) + Resolves: rhbz#1658325 + +* Wed Jun 13 2018 Victor Toso <victortoso@redhat.com> - 5.0-11 +- Disable spice-controller in virt-viewer + Resolves: rhbz#1590457 + +* Mon Dec 11 2017 Eduardo Lima (Etrunko) <etrunko@redhat.com> - 5.0-10 +- Adjust reference to spice-gtk man page for remote-viewer + Resolves: rhbz#1477966 +- Update translations + Resolves: rhbz#1481243 + +* Fri Nov 17 2017 Eduardo Lima (Etrunko) <etrunko@redhat.com> - 5.0-9 +- Drop downstream specific patch reverting string change + Related: rhbz#1481243 +- Fix scope declaration of enable_autotools macro + Resolves: rhbz#1504132 +- Fix wrong date in previous changelog entry + Resolves: rhbz#1504132 +- Save oVirt uri after connecting to guest + Resolves: rhbz#1459792 +- Adjust reference to spice-gtk man page + Resolves: rhbz#1477966 + +* Mon Oct 02 2017 Eduardo Lima (Etrunko) <etrunko@redhat.com> - 5.0-8 +- Show authentication dialog if in kiosk mode and connecting to ovirt + Resolves: rhbz#1459808 +- Keep the remove-viewer-connect dialog window on top + Resolves: rhbz#1459800 +- Show overwrite confirmation when saving screenshot file + Resolves: rhbz#1455832 +- Fix REST endpoint used to load the storagedomains + Resolves: rhb#1427467 + +* Tue Jun 06 2017 Victor Toso <victortoso@redhat.com> - 5.0-7 +- Do not show error on cancel/close of auth dialog - vnc fix + Resolves: rhbz#1446161 + +* Thu Jun 01 2017 Eduardo Lima (Etrunko) <etrunko@redhat.com> - 5.0-6 +- Do not show error on cancel/close of auth dialog + Resolves: rhbz#1446161 + +* Thu Jun 01 2017 Eduardo Lima (Etrunko) <etrunko@redhat.com> - 5.0-5 +- Do not allow exit fullscreen in kiosk mode + Resolves: rhbz#1446161 + +* Thu May 18 2017 Pavel Grunt <pgrunt@redhat.com> - 5.0-4 +- Fix seamless migration in virt-viewer + Resolves: rhbz#1442929 +- Make file transfer progressbar smooth again + Resolves: rhbz#1449572 +- Update translation from internal zanata + Resolves: rhzb#1378279 + +* Mon Apr 10 2017 Pavel Grunt <pgrunt@redhat.com> - 5.0-3 +- Handle initial zoom settings for vnc + Resolves: rhbz#1436991 +- Allow to control zoom using numpad + Resolves: rhbz#1337575 +- Support new elements in libvirt xml + Resolves: rhbz#1411765 + +* Wed Mar 15 2017 Pavel Grunt <pgrunt@redhat.com> - 5.0-2 +- Really enable the hardened build + Resolves: rhzb#1420780 +- Fixup for precise VM selection + Resolves: rhbz#1399077 + +* Wed Mar 15 2017 Pavel Grunt <pgrunt@redhat.com> - 5.0-1 +- Rebase to the latest upstream release + Resolves: rhbz#1413982 +- Rebuild with spice-gtk 0.33 + Resolves: rbhz#1431995 +- Rebuild with correct hardening flags + Resolves: rhbz#1420780 +- Fix display id inconsistencies in debug logs + Resolves: rhbz#1368390 +- Provide a dialog for selecting ISOs + Resolves: rhbz#1414016 +- Always display warning messages + Resolves: rhbz#1386630 +- Do not print password in the logs + Resolves: rhbz#1410030 +- Update qemu+ssh URL example + Resolves: rhbz#1377283 +- Add cli options for precise VM selection in virt-viewer + Resolves: rhbz#1399077 + +* Mon Dec 12 2016 Pavel Grunt <pgrunt@redhat.com> - 2.0-13 +- Fix connection using broken monitor mapping + Resolves: rhbz#1351243 +- Provide correct exit code on cancel + Resolves: rhbz#1374430 +- Inform user about connection failure + Resolves: rhbz#1377100 +- Recommend using ssh-agent + Resolves: rhbz#1377283 + +* Wed Sep 14 2016 Pavel Grunt <pgrunt@redhat.com> - 2.0-12 +- Update translations + Resolves: rhbz#1182470 + +* Fri Jul 22 2016 Pavel Grunt <pgrunt@redhat.com> - 2.0-11 +- Fix sensitivity of menu items + Resolves: rhbz#1354291 + +* Fri Jul 01 2016 Pavel Grunt <pgrunt@redhat.com> - 2.0-10 +- Avoid crashing when using invalid video config + Resolves: rhbz#1250820 +- Add mnemonics for remote-viewer connection dialog + Resolves: rhbz#1351487 + +* Thu Jun 30 2016 Eduardo Lima (Etrunko) <etrunko@redhat.com> - 2.0-9 +- Adjust timer to refresh ovirt foreign menu + Resolves: rhbz#1347726 + +* Wed Jun 08 2016 Pavel Grunt <pgrunt@redhat.com> - 2.0-8 +- Utilize SSO to authenticate against oVirt engine for foreign menu support + Resolves: rhbz#1286696 +- monitor-config: do it all or nothing + Resolves: rhbz#1339493 +- Return early on empty monitor mapping + Resolves: rhbz#1339491 +- Disable default vnc grab sequence + Resolves: rhbz#1339575 +- Avoid crashing when using invalid video config + Resolves: rhbz#1250820 +- Add missing access keys + Resolves: rhbz#1332545 +- Add progress bar for file transfer + Resolves: rhbz#1324521 +- Improve logs when parsing hotkeys + Resolves: rhbz#1339572 + +* Thu Mar 17 2016 Pavel Grunt <pgrunt@redhat.com> - 2.0-7 +- Fix for extra monitors on start up + Resolves: rhbz#1153372 +- Add support for proxy-url libgovirt property + Resolves: rhbz#1292761 +- Show correct name and uuid for vnc guests + Resolves: rhbz#1293879 +- Stop polling after reconnecting to libvirtd + Resolves: rhbz#1271519 +- Fix crash when disabling the last display + Resolves: rhbz#1294938 +- Fix monitor mapping + Resolves: rhbz#1267184 +- Fix for usb-filter ignored by the vv-file + Resolves: rhbz#1309634 +- Show only attached CDs in the foreign menu + Resolves: rhbz#1313371 +- Set useful dimensions of virt-viewer window + Resolves: rhbz#1297260 + +* Sun Aug 09 2015 Fabiano Fidêncio <fidencio@redhat.com> - 2.0-6 +- Error message continously popping out when stopping libvirtd + Resolves: rhbz#1246022 + +* Thu Jul 23 2015 Fabiano Fidêncio <fidencio@redhat.com> - 2.0-5 +- Allow to resize window to any size + Resolves: rhbz#1242509 +- Upate virt-viewer-events.c to match libvirt-glib's event file + Resolves: rhbz#1243228 + +* Fri Jul 10 2015 Fabiano Fidêncio <fidencio@redhat.com> - 2.0-4 +- set keepAlive on libvirt connection + Resolves: rhbz#1164052 +- Rebase to 2.0: Add a missing bug + Resolves: rhbz#1228759 + +* Wed Jun 17 2015 Jonathon Jongsma <jjongsma@redhat.com> - 2.0-3 +- fix coverity warning for code introduced in 2.0 + Related: rhbz#1181288 + +* Tue Jun 16 2015 Jonathon Jongsma <jjongsma@redhat.com> - 2.0-2 +- Add 'admin' key to [ovirt] .vv file section + Resolves: rhbz#1210248 +- Shortcuts missing from "Send key" menu when started using plugin + Resolves: rhbz#1230602 +- Add minimum version check to rhev spice-client + Resolves: rhbz#1223469 + +* Mon May 18 2015 Fabiano Fidêncio <fidencio@redhat.com> 2.0-1 +- Rebase to 2.0 + Resolves: rhbz#1181288 +- virt-viewer cannot connect to spice VM when libvirt uses tcp port + with sasl encryption + Resolves: rhbz#1167354 +- virt-viewer will core dump with -r option via ssh when destroying + the guest + Resolves: rhbz#1163647 +- virt-viewer cannot set zoom level in command line for vnc guest + Resolves: rhbz#1170071 +- launching virt-viewer using --attach makes it crashes + Resolves: rhbz#1196552 +- --attach doesn't work with SELinux + Resolves: rhbz#1141228 + +* Mon Dec 01 2014 Fabiano Fidêncio <fidencio@redhat.com> 0.6.0.12 +- Show a debug message instead of an error message when trying to + connect to a non-existent guest using ovirt + Resolves: rhbz#1168495 + +* Tue Nov 04 2014 Fabiano Fidêncio <fidencio@redhat.com> 0.6.0.11 +- Fix crash when connecting to a guest through VNC and typing a wrong + password + Resolves: rhbz#1159731 + +* Thu Oct 23 2014 Fabiano Fidêncio <fidencio@redhat.com> 0.6.0.10 +- Revert "Fix bug with initial placement of fullscreen windows" + Related: rhbz#1129477 + +* Wed Oct 22 2014 Fabiano Fidêncio <fidencio@redhat.com> 0.6.0-9 +- Set initial window size to display desktop size and make the default + window size a bit more useful + Resolves: rhbz#1152981 +- Force display_show_hint() when the display is se + Resolves: rhbz#1152468 +- Fix bug with initial placement of fullscreen windows + Related: rhbz#1129477 +- Don't disable "send key" menu when display isn't ready + Related: rhbz#1152468 +- VirtViewerDisplayVnc: set 'session' property + Resolves: rhbz#1152815 + +* Thu Oct 9 2014 Fabiano Fidêncio <fidencio@redhat.com> 0.6.0-8 +- Adapt auth_cancelled to the downstream code + Related: rhbz#1142742 +- ovirt: Allow to remove CD images + Resolves: rhbz#1145126 +- Create windows on demand, not at startup + Resolves: rhbz#1032939 +- Use socat instead of nc if possible + Resolves: rhbz#1030487 +- spice: do not open in fullscreen with CONTROLLER_AUTO_DISPLAY_RES + Resolves: rhbz#1149352 + +* Tue Sep 30 2014 Fabiano Fidêncio <fidencio@redhat.com> 0.6.0-7 +- Revert "Add support to use numpad accelerators for zoom-in, zoom-out + and zoom-reset + Related: rhbz#921326 +- Update virt-viewer man page for Update virt-viewer man page for oVirt + connection support and fullscreen monitor mapping + Resolves: rhbz#1142769 +- Improve error message if input wrong username or password for a tcp + connection + Resolves: rhbz#1142742 +- Unset app 'fullscreen' when leaving fullscreen + Resolves: rhbz#1146997 +- Don't use fallback ca-file when launching vv-file + Resolves: rhbz#1127762 +- Force displays to update geometry when agent connects + Related: rhbz#1032971 + +* Thu Sep 18 2014 Fabiano Fidêncio <fidencio@redhat.com> 0.6.0-6 +- Report disconnection error details + Related: rhbz#1115986 +- Add support to use numpad accelerators for zoom-in, zoom-out and + zoom-reset + Resolves: rhbz#921326 +- Do not show duplicated menu items + Related: rhbz#921326 + +* Fri Sep 12 2014 Christophe Fergeau <cfergeau@redhat.com> 0.6.0-5 +- Allow to pass usernames in ovirt URIs + Resolves: rhbz#1061826 +- Add support for oVirt foreign menu - this allows to change the ISO image + used by an oVirt VM from remote-viewer GUI + Resolves: rhbz#1127156 +- Don't attempt to connect to localhost displays with qemu+tcp:// libvirt + connections + Resolves: rhbz#1108523 +- Provide more details in error dialog when a disconnection occurs + Resolves: rhbz#1115986 +- Fix harmless Coverity warning + Resolves: rhbz#885108 + +* Fri Sep 05 2014 Jonathon Jongsma <jjongsma@redhat.com> - 0.6.0-4 +- Add support for user-defined fullscreen monitor configuration file + Resolves: rhbz#1129477 + +* Tue Aug 05 2014 Marc-Andre Lureau <marcandre.lureau@redhat.com> - 0.6.0-3 +- Fix zoom-{in, out} accelerators. Resolves: rhbz#989407 +- Fix man page spelling. Resolves: rhbz#970825 + +* Mon Aug 04 2014 Jonathon Jongsma <jjongsma@redhat.com> - 0.6.0-2 +- add buildid to configure +- Bump gtk2 dependency to match requirement in 0.6.0 + Related: rhbz#1109400 +- Improve documentation of --attach command line option + Resolves: rhbz#999291 + +* Mon Jul 7 2014 Marc-André Lureau <marcandre.lureau@redhat.com> 0.6.0-1 +- Rebase to 0.6.0. + Resolves: rhbz#1109400 + Resolves: rhbz#921332 rhbz#1020669 rhbz#1021350 rhbz#1022426 + Resolves: rhbz#1023253 rhbz#1024204 rhbz#1024312 rhbz#1032967 rhbz#1063237 + Resolves: rhbz#1063239 rhbz#1096718 rhbz#1096721 rhbz#1109731 +- Remove "Pass CAD" RHEL-only patch + Resolves: rhbz#923072 +- Fix broken 'release-cursor' accel when not specified in --hotkeys + Resolves: rhbz#1032869 +- Should use a USB icon instead of a generic settings icon + Resolves: rhbz#921406 +- remote-viewer should add introduction for new added functions into man page and help info. + Resolves: rhbz#970825 +- ctrl-[+-0] zoom in/out/native keyboard shortcuts don't work in fullscreen (with mouse over the control bar) + Resolves: rhbz#989407 +- No box pop out when input a wrong password and retry connection for vnc guest + Resolves: rhbz#1007306 +- Menu item "Automatically resize" could be disabled if there is no spice vdagent connection + Resolves: rhbz#1007666 +- Remote-Viewer: Zoom Out Behavior Is Not Consistent + Resolves: rhbz#1022404 +- If "ctrl alt" key combination is set as the one for releasing window, the window is not released. + Resolves: rhbz#1032869 +- virt-viewer --direct fails to connect to remote guest configured with listen="0.0.0.0" + Resolves: rhbz#1079211 +- Unnecessary warning info show when using virt-viewer -k to launch a spice guest + Resolves: rhbz#1107519 +- Need to update virt-viewer man page + Resolves: rhbz#921341 + +* Fri Feb 14 2014 Christophe Fergeau <cfergeau@redhat.com> 0.5.7-7 +- Don't show ctrl+0 in "Send Keys" menu when using --hotkeys + Resolves: rhbz#1063195 + +* Tue Jan 28 2014 Christophe Fergeau <cfergeau@redhat.com> 0.5.7-6 +- Fix fullscreen+multiscreen bug + Resolves: rhbz#920988 + +- Fix addition of hotkey combos to "Send Keys" menu + Resolves: rhbz#922716 + +- Translation updates from RH translation team + Resolves: rhbz#1047327 + +- Add kiosk mode + Resolves: rhbz#1040926 + +- Add .vv file description to man page + Resolves: rhbz#970825 + +- spice: show an error dialog if password is invalid + Resolves: rhbz#990883 + + +* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 0.5.7-5 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 0.5.7-4 +- Mass rebuild 2013-12-27 + +* Mon Dec 16 2013 Jonathon Jongsma <jjongsma@redhat.com> 0.5.7-3 +- Do all display alignment in virt-viewer (rhbz#1022769) + +* Fri Sep 13 2013 Christophe Fergeau <cfergeau@redhat.com> 0.5.7-2 +- Build virt-viewer for rhel7 with gtk3 and ovirt support + +* Wed Jul 31 2013 Daniel P. Berrange <berrange@redhat.com> - 0.5.7-1 +- Update to 0.5.7 release + +* Thu May 23 2013 Christophe Fergeau <cfergeau@redhat.com> - 0.5.6-2 +- Mark remote-viewer as replacing spice-client + +* Wed May 1 2013 Daniel P. Berrange <berrange@redhat.com> - 0.5.6-1 +- Update to 0.5.6 release + +* Wed Feb 13 2013 Daniel P. Berrange <berrange@redhat.com> - 0.5.5-1 +- Update to 0.5.5 release + +* Fri Dec 14 2012 Cole Robinson <crobinso@redhat.com> - 0.5.4-3 +- Fix crash after entering spice password (bz #880381) + +* Sat Oct 13 2012 Chris Tyler <chris@tylers.info> - 0.5.4-2 +- Enabled spice support for ARM archs + +* Mon Sep 17 2012 Daniel P. Berrange <berrange@redhat.com> - 0.5.4-1 +- Update to 0.5.4 release + +* Fri Sep 14 2012 Hans de Goede <hdegoede@redhat.com> - 0.5.3-6 +- Rebuild for spice-gtk ABI breakage (previous spice-gtk build was borked) + +* Tue Sep 11 2012 Hans de Goede <hdegoede@redhat.com> - 0.5.3-5 +- Rebuild for spice-gtk ABI breakage + +* Fri Sep 7 2012 Hans de Goede <hdegoede@redhat.com> - 0.5.3-4 +- Rebuild for spice-gtk soname change + +* Mon Aug 13 2012 Daniel P. Berrange <berrange@redhat.com> - 0.5.3-3 +- Rebuild for spice-gtk soname change + +* Sun Jul 22 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Wed May 16 2012 Daniel P. Berrange <berrange@redhat.com> - 0.5.3-1 +- Update to 0.5.3 release + +* Fri Mar 9 2012 Daniel P. Berrange <berrange@redhat.com> - 0.5.2-1 +- Update to 0.5.2 release + +* Fri Feb 17 2012 Daniel P. Berrange <berrange@redhat.com> - 0.5.1-1 +- Update to 0.5.1 release + +* Tue Feb 14 2012 Daniel P. Berrange <berrange@redhat.com> - 0.5.0-1 +- Update to 0.5.0 release + +* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.4.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Wed Nov 9 2011 Daniel P. Berrange <berrange@redhat.com> - 0.4.2-1 +- Update to 0.4.2 release + +* Sun Aug 14 2011 Daniel P. Berrange <berrange@redhat.com> - 0.4.1-3 +- More ssh tunnelling port fixes + +* Fri Aug 12 2011 Daniel P. Berrange <berrange@redhat.com> - 0.4.1-2 +- Fix ssh tunnelling + +* Thu Aug 4 2011 Daniel P. Berrange <berrange@redhat.com> - 0.4.1-1 +- Update to 0.4.1 release + +* Tue Aug 2 2011 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-2 +- Rebuild for accidental spice-glib soname change + +* Tue Jul 12 2011 Daniel P. Berrange <berrange@redhat.com> - 0.4.0-1 +- Update to 0.4.0 release +- Switch build to GTK3 instead of GTK2 + +* Tue May 31 2011 Daniel P. Berrange <berrange@redhat.com> - 0.3.1-2 +- Rebuild for spice-glib ABI breakage + +* Wed May 11 2011 Karsten Hopp <karsten@redhat.com> 0.3.1-1.1 +- spice-gtk is x86 x86_64 only, don't require it on other archs + +* Mon Feb 21 2011 Daniel P. Berrange <berrange@redhat.com> - 0.3.1-1 +- Update to 0.3.1 release + +* Mon Feb 21 2011 Daniel P. Berrange <berrange@redhat.com> - 0.3.0-1 +- Update to 0.3.0 and enable SPICE + +* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Fri Jan 15 2010 Daniel P. Berrange <berrange@redhat.com> - 0.2.1-1 +- Update to 0.2.1 release + +* Wed Jul 29 2009 Daniel P. Berrange <berrange@redhat.com> - 0.2.0-1.fc12 +- Update to 0.2.0 release + +* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.0.3-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu May 7 2009 Daniel P. Berrange <berrange@redhat.com> - 0.0.3-5.fc12 +- Fix auth against libvirt (rhbz #499594) +- Fix confusion of VNC credentials (rhbz #499595) +- Correct keyboard grab handling (rhbz #499362) + +* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.0.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Jul 7 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 0.0.3-3.fc10 +- fix conditional comparison +- remove file dep + +* Wed Jun 25 2008 Daniel P. Berrange <berrange@redhat.com> - 0.0.3-2.fc10 +- Rebuild for GNU TLS ABI bump + +* Mon Mar 10 2008 Daniel P. Berrange <berrange@redhat.com> - 0.0.3-1.fc9 +- Updated to 0.0.3 release + +* Mon Feb 18 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 0.0.2-4 +- Autorebuild for GCC 4.3 + +* Fri Jan 11 2008 Daniel P. Berrange <berrange@redhat.com> - 0.0.2-3.fc9 +- Set domain name as window title +- Hide input for passwd fields during auth + +* Mon Oct 15 2007 Daniel P. Berrange <berrange@redhat.com> - 0.0.2-2.fc8 +- Change TLS x509 credential name to sync with libvirt + +* Tue Aug 28 2007 Daniel P. Berrange <berrange@redhat.com> - 0.0.2-1.fc8 +- Added support for remote console access + +* Fri Aug 17 2007 Daniel P. Berrange <berrange@redhat.com> - 0.0.1-2.fc8 +- Restrict built to x86 & ia64 because libvirt is only on those arches + +* Wed Aug 15 2007 Daniel P. Berrange <berrange@redhat.com> - 0.0.1-1.fc8 +- First release