From 4ab1942072efbd3ad3253c9a771fa48e83248fec Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Mar 05 2015 13:06:51 +0000 Subject: import virt-viewer-0.6.0-12.el7 --- diff --git a/.gitignore b/.gitignore index 9b1090f..cc80e5f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/virt-viewer-0.5.7.tar.gz +SOURCES/virt-viewer-0.6.0.tar.gz diff --git a/.virt-viewer.metadata b/.virt-viewer.metadata index 9b067c8..efe4935 100644 --- a/.virt-viewer.metadata +++ b/.virt-viewer.metadata @@ -1 +1 @@ -53c177c8c2750b29a11c09696a780e88ba1a1b89 SOURCES/virt-viewer-0.5.7.tar.gz +91871971f1aea391843ca901ef28c1f721178b4e SOURCES/virt-viewer-0.6.0.tar.gz diff --git a/SOURCES/0001-Do-all-display-alignment-in-virt-viewer.patch b/SOURCES/0001-Do-all-display-alignment-in-virt-viewer.patch deleted file mode 100644 index 42f8666..0000000 --- a/SOURCES/0001-Do-all-display-alignment-in-virt-viewer.patch +++ /dev/null @@ -1,476 +0,0 @@ -From f60cbfd064f07cafd21fac6840bf98ef081947f1 Mon Sep 17 00:00:00 2001 -From: Jonathon Jongsma -Date: Thu, 24 Oct 2013 15:04:54 -0500 -Subject: [PATCH] Do all display alignment in virt-viewer - -Don't rely on spice-gtk to do any alignment of displays. This patch sets the -disable-display-align property on the SpiceMainChannel, and makes the -VirtViewerSession in charge of doing all alignment. This means that every -display has to tell the VirtViewerSession when its "virtual monitor" has changed -configuration (and wants to reconfigure its display on the guest), rather than -sending it directly to the Main Channel. The session will then align the -displays (if necessary), and the spice session will send down new configuration -for all displays at once. This solves a couple of problems: - -1. It allows the session to send down absolute coordinates only in the case - where *all* windows are fullscreen (so that we can still support - vertically-stacked displays, etc). But it auto-aligns displays if only a - subset of the displays are in fullscreen mode. This solves the problem of - overlapping regions on different displays when one monitor is in fullscreen - because only one monitor's configuration was updated and the others were not - aligned. -2. Allows us to always align based on the current position of each display. This - contrasts with the earlier behavior where the position used for alignment was - the window's position at the time when it was last resized. This caused - displays to be arranged in a seemingly non-deterministic manner if one window - was moved and then another window was resized (causing a display - re-configuration). - -Solves rhbz#1002156 - -Conflicts: - src/virt-viewer-session-spice.c ---- - src/virt-viewer-display-spice.c | 90 +++++++++-------------------------------- - src/virt-viewer-display.c | 72 +++++++++++++++++++++++++++++++++ - src/virt-viewer-display.h | 2 + - src/virt-viewer-session-spice.c | 26 +++++++++--- - src/virt-viewer-session.c | 90 +++++++++++++++++++++++++++++++++++++++++ - src/virt-viewer-session.h | 1 + - 6 files changed, 204 insertions(+), 77 deletions(-) - -diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c -index 48f07e3..46bc96a 100644 ---- a/src/virt-viewer-display-spice.c -+++ b/src/virt-viewer-display-spice.c -@@ -95,22 +95,31 @@ get_main(VirtViewerDisplay *self) - } - - static void -+virt_viewer_display_spice_monitor_geometry_changed(VirtViewerDisplaySpice *self) -+{ -+ -+ if (virt_viewer_display_get_auto_resize(VIRT_VIEWER_DISPLAY(self)) == FALSE) -+ return; -+ -+ g_signal_emit_by_name(self, "monitor-geometry-changed", NULL); -+ -+} -+ -+static void - show_hint_changed(VirtViewerDisplay *self) - { - SpiceMainChannel *main_channel = get_main(self); -- guint enabled = TRUE; -- guint nth, hint = virt_viewer_display_get_show_hint(self); -+ guint enabled = virt_viewer_display_get_enabled(self); -+ guint nth; - - /* this may happen when finalizing */ - if (!main_channel) - return; - - g_object_get(self, "nth-display", &nth, NULL); -- if (!(hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_SET) || -- hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED) -- enabled = FALSE; -- - spice_main_set_display_enabled(main_channel, nth, enabled); -+ -+ virt_viewer_display_spice_monitor_geometry_changed(VIRT_VIEWER_DISPLAY_SPICE(self)); - } - - static void -@@ -181,70 +190,12 @@ virt_viewer_display_spice_mouse_grab(SpiceDisplay *display G_GNUC_UNUSED, - - - static void --virt_viewer_display_spice_resize(VirtViewerDisplaySpice *self, -- GtkAllocation *allocation, -- gboolean resize_guest) --{ -- gdouble dw = allocation->width, dh = allocation->height; -- guint zoom = 100; -- guint nth; -- gint x = 0, y = 0; -- gboolean disable_display_position = TRUE; -- -- if (virt_viewer_display_get_auto_resize(VIRT_VIEWER_DISPLAY(self)) == FALSE) -- return; -- -- if (virt_viewer_display_get_show_hint(VIRT_VIEWER_DISPLAY(self)) & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED) -- return; -- -- if (self->priv->auto_resize == AUTO_RESIZE_FULLSCREEN) { -- GdkRectangle monitor; -- GdkScreen *screen = gtk_widget_get_screen(GTK_WIDGET(self)); -- int n = virt_viewer_display_get_monitor(VIRT_VIEWER_DISPLAY(self)); -- if (n == -1) -- n = gdk_screen_get_monitor_at_window(screen, -- gtk_widget_get_window(GTK_WIDGET(self))); -- gdk_screen_get_monitor_geometry(screen, n, &monitor); -- disable_display_position = FALSE; -- x = monitor.x; -- y = monitor.y; -- dw = monitor.width; -- dh = monitor.height; -- } else { -- GtkWidget *top = gtk_widget_get_toplevel(GTK_WIDGET(self)); -- gtk_window_get_position(GTK_WINDOW(top), &x, &y); -- if (x < 0) -- x = 0; -- if (y < 0) -- y = 0; -- } -- -- if (virt_viewer_display_get_zoom(VIRT_VIEWER_DISPLAY(self))) { -- zoom = virt_viewer_display_get_zoom_level(VIRT_VIEWER_DISPLAY(self)); -- -- dw = round(dw * 100 / zoom); -- dh = round(dh * 100 / zoom); -- } -- -- g_object_get(self, "nth-display", &nth, NULL); -- -- if (resize_guest) { -- g_object_set(get_main(VIRT_VIEWER_DISPLAY(self)), -- "disable-display-position", disable_display_position, -- "disable-display-align", !disable_display_position, -- NULL); -- spice_main_set_display(get_main(VIRT_VIEWER_DISPLAY(self)), -- nth, x, y, dw, dh); -- } --} -- --static void - virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self, -- GtkAllocation *allocation, -+ GtkAllocation *allocation G_GNUC_UNUSED, - gpointer data G_GNUC_UNUSED) - { -- virt_viewer_display_spice_resize(self, allocation, -- self->priv->auto_resize != AUTO_RESIZE_NEVER); -+ if (self->priv->auto_resize != AUTO_RESIZE_NEVER) -+ virt_viewer_display_spice_monitor_geometry_changed(self); - - if (self->priv->auto_resize == AUTO_RESIZE_FULLSCREEN) - self->priv->auto_resize = AUTO_RESIZE_NEVER; -@@ -255,13 +206,10 @@ zoom_level_changed(VirtViewerDisplaySpice *self, - GParamSpec *pspec G_GNUC_UNUSED, - VirtViewerApp *app G_GNUC_UNUSED) - { -- GtkAllocation allocation; -- - if (self->priv->auto_resize != AUTO_RESIZE_NEVER) - return; - -- gtk_widget_get_allocation(GTK_WIDGET(self), &allocation); -- virt_viewer_display_spice_resize(self, &allocation, TRUE); -+ virt_viewer_display_spice_monitor_geometry_changed(self); - } - - static void -diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c -index 8810254..96322d8 100644 ---- a/src/virt-viewer-display.c -+++ b/src/virt-viewer-display.c -@@ -255,6 +255,16 @@ virt_viewer_display_class_init(VirtViewerDisplayClass *class) - G_TYPE_NONE, - 0); - -+ g_signal_new("monitor-geometry-changed", -+ G_OBJECT_CLASS_TYPE(object_class), -+ G_SIGNAL_RUN_LAST | G_SIGNAL_NO_HOOKS, -+ 0, -+ NULL, -+ NULL, -+ g_cclosure_marshal_VOID__VOID, -+ G_TYPE_NONE, -+ 0); -+ - g_type_class_add_private(class, sizeof(VirtViewerDisplayPrivate)); - } - -@@ -664,6 +674,12 @@ void virt_viewer_display_set_enabled(VirtViewerDisplay *self, gboolean enabled) - virt_viewer_display_set_show_hint(self, VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED, !enabled); - } - -+gboolean virt_viewer_display_get_enabled(VirtViewerDisplay *self) -+{ -+ return ((self->priv->show_hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_SET) && -+ !(self->priv->show_hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED)); -+} -+ - VirtViewerSession* virt_viewer_display_get_session(VirtViewerDisplay *self) - { - g_return_val_if_fail(VIRT_VIEWER_IS_DISPLAY(self), NULL); -@@ -755,6 +771,62 @@ gboolean virt_viewer_display_get_fullscreen(VirtViewerDisplay *self) - return self->priv->fullscreen; - } - -+void virt_viewer_display_get_preferred_monitor_geometry(VirtViewerDisplay* self, -+ GdkRectangle* preferred) -+{ -+ GtkWidget *top = NULL; -+ gint topx = 0, topy = 0; -+ -+ g_return_if_fail(preferred != NULL); -+ -+ if (!virt_viewer_display_get_enabled(VIRT_VIEWER_DISPLAY(self))) { -+ preferred->width = 0; -+ preferred->height = 0; -+ preferred->x = 0; -+ preferred->y = 0; -+ return; -+ } -+ -+ top = gtk_widget_get_toplevel(GTK_WIDGET(self)); -+ gtk_window_get_position(GTK_WINDOW(top), &topx, &topy); -+ topx = MAX(topx, 0); -+ topy = MAX(topy, 0); -+ -+ if (virt_viewer_display_get_auto_resize(VIRT_VIEWER_DISPLAY(self)) == FALSE) { -+ guint w, h; -+ virt_viewer_display_get_desktop_size(self, &w, &h); -+ preferred->width = w; -+ preferred->height = h; -+ preferred->x = topx; -+ preferred->y = topy; -+ } else { -+ if (virt_viewer_display_get_fullscreen(VIRT_VIEWER_DISPLAY(self))) { -+ GdkRectangle physical_monitor; -+ GdkScreen *screen = gtk_widget_get_screen(GTK_WIDGET(self)); -+ int n = virt_viewer_display_get_monitor(VIRT_VIEWER_DISPLAY(self)); -+ if (n == -1) -+ n = gdk_screen_get_monitor_at_window(screen, -+ gtk_widget_get_window(GTK_WIDGET(self))); -+ gdk_screen_get_monitor_geometry(screen, n, &physical_monitor); -+ preferred->x = physical_monitor.x; -+ preferred->y = physical_monitor.y; -+ preferred->width = physical_monitor.width; -+ preferred->height = physical_monitor.height; -+ } else { -+ gtk_widget_get_allocation(GTK_WIDGET(self), preferred); -+ preferred->x = topx; -+ preferred->y = topy; -+ } -+ -+ if (virt_viewer_display_get_zoom(VIRT_VIEWER_DISPLAY(self))) { -+ guint zoom = virt_viewer_display_get_zoom_level(VIRT_VIEWER_DISPLAY(self)); -+ -+ preferred->width = round(preferred->width * 100 / zoom); -+ preferred->height = round(preferred->height * 100 / zoom); -+ } -+ } -+} -+ - /* - * Local variables: - * c-indent-level: 4 -diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h -index 99844c4..195eeee 100644 ---- a/src/virt-viewer-display.h -+++ b/src/virt-viewer-display.h -@@ -124,8 +124,10 @@ void virt_viewer_display_release_cursor(VirtViewerDisplay *display); - - void virt_viewer_display_close(VirtViewerDisplay *display); - void virt_viewer_display_set_enabled(VirtViewerDisplay *display, gboolean enabled); -+gboolean virt_viewer_display_get_enabled(VirtViewerDisplay *display); - gboolean virt_viewer_display_get_selectable(VirtViewerDisplay *display); - void virt_viewer_display_queue_resize(VirtViewerDisplay *display); -+void virt_viewer_display_get_preferred_monitor_geometry(VirtViewerDisplay *self, GdkRectangle* preferred); - - G_END_DECLS - -diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c -index 656814c..4c52b47 100644 ---- a/src/virt-viewer-session-spice.c -+++ b/src/virt-viewer-session-spice.c -@@ -79,6 +79,7 @@ static void virt_viewer_session_spice_channel_destroy(SpiceSession *s, - 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); -+static void virt_viewer_session_spice_apply_monitor_geometry(VirtViewerSession *self, GdkRectangle *monitors, guint nmonitors); - - static void - virt_viewer_session_spice_get_property(GObject *object, guint property_id, -@@ -154,6 +155,7 @@ virt_viewer_session_spice_class_init(VirtViewerSessionSpiceClass *klass) - dclass->smartcard_insert = virt_viewer_session_spice_smartcard_insert; - dclass->smartcard_remove = virt_viewer_session_spice_smartcard_remove; - dclass->mime_type = virt_viewer_session_spice_mime_type; -+ dclass->apply_monitor_geometry = virt_viewer_session_spice_apply_monitor_geometry; - - g_type_class_add_private(klass, sizeof(VirtViewerSessionSpicePrivate)); - -@@ -672,6 +674,10 @@ virt_viewer_session_spice_channel_new(SpiceSession *s, - g_signal_connect(channel, "channel-event", - G_CALLBACK(virt_viewer_session_spice_main_channel_event), self); - self->priv->main_channel = SPICE_MAIN_CHANNEL(channel); -+ g_object_set(G_OBJECT(channel), -+ "disable-display-position", FALSE, -+ "disable-display-align", TRUE, -+ NULL); - - g_signal_connect(channel, "notify::agent-connected", G_CALLBACK(agent_connected_changed), self); - virt_viewer_session_spice_fullscreen_auto_conf(self); -@@ -739,12 +745,6 @@ virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self) - return FALSE; - } - -- DEBUG_LOG("Performing full screen auto-conf, %d host monitors", -- gdk_screen_get_n_monitors(screen)); -- g_object_set(G_OBJECT(cmain), -- "disable-display-position", FALSE, -- "disable-display-align", TRUE, -- NULL); - spice_main_set_display_enabled(cmain, -1, FALSE); - for (i = 0; i < gdk_screen_get_n_monitors(screen); i++) { - gdk_screen_get_monitor_geometry(screen, i, &dest); -@@ -842,6 +842,20 @@ virt_viewer_session_spice_smartcard_remove(VirtViewerSession *session G_GNUC_UNU - spice_smartcard_manager_remove_card(spice_smartcard_manager_get()); - } - -+void -+virt_viewer_session_spice_apply_monitor_geometry(VirtViewerSession *session, GdkRectangle *monitors, guint nmonitors) -+{ -+ guint i; -+ VirtViewerSessionSpice *self = VIRT_VIEWER_SESSION_SPICE(session); -+ -+ for (i = 0; i < nmonitors; i++) { -+ GdkRectangle* rect = &monitors[i]; -+ -+ spice_main_set_display(self->priv->main_channel, i, rect->x, -+ rect->y, rect->width, rect->height); -+ } -+} -+ - /* - * Local variables: - * c-indent-level: 4 -diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c -index 595dcd0..24f0c72 100644 ---- a/src/virt-viewer-session.c -+++ b/src/virt-viewer-session.c -@@ -25,6 +25,7 @@ - #include - - #include -+#include - - #include "virt-viewer-session.h" - #include "virt-viewer-util.h" -@@ -337,6 +338,91 @@ virt_viewer_session_init(VirtViewerSession *session) - session->priv = VIRT_VIEWER_SESSION_GET_PRIVATE(session); - } - -+/* simple sorting of monitors. Primary sort left-to-right, secondary sort from -+ * top-to-bottom, finally by monitor id */ -+static int -+displays_cmp(const void *p1, const void *p2, gpointer user_data) -+{ -+ guint diff; -+ GdkRectangle *displays = user_data; -+ guint i = *(guint*)p1; -+ guint j = *(guint*)p2; -+ GdkRectangle *m1 = &displays[i]; -+ GdkRectangle *m2 = &displays[j]; -+ diff = m1->x - m2->x; -+ if (diff == 0) -+ diff = m1->y - m2->y; -+ if (diff == 0) -+ diff = i - j; -+ -+ return diff; -+} -+ -+static void -+virt_viewer_session_align_monitors_linear(GdkRectangle *displays, guint ndisplays) -+{ -+ gint i, x = 0; -+ guint *sorted_displays; -+ -+ g_return_if_fail(displays != NULL); -+ -+ if (ndisplays == 0) -+ return; -+ -+ sorted_displays = g_new0(guint, ndisplays); -+ for (i = 0; i < ndisplays; i++) -+ sorted_displays[i] = i; -+ g_qsort_with_data(sorted_displays, ndisplays, sizeof(guint), displays_cmp, displays); -+ -+ /* adjust monitor positions so that there's no gaps or overlap between -+ * monitors */ -+ for (i = 0; i < ndisplays; i++) { -+ guint nth = sorted_displays[i]; -+ g_assert(nth < ndisplays); -+ GdkRectangle *rect = &displays[nth]; -+ rect->x = x; -+ rect->y = 0; -+ x += rect->width; -+ } -+ g_free(sorted_displays); -+} -+ -+static void -+virt_viewer_session_on_monitor_geometry_changed(VirtViewerSession* self, -+ VirtViewerDisplay* display G_GNUC_UNUSED) -+{ -+ VirtViewerSessionClass *klass; -+ gboolean all_fullscreen = TRUE; -+ guint nmonitors = g_list_length(self->priv->displays); -+ GdkRectangle *monitors = NULL; -+ -+ klass = VIRT_VIEWER_SESSION_GET_CLASS(self); -+ if (!klass->apply_monitor_geometry) -+ return; -+ -+ monitors = g_new0(GdkRectangle, nmonitors); -+ for (GList *l = self->priv->displays; l; l = l->next) { -+ VirtViewerDisplay *d = VIRT_VIEWER_DISPLAY(l->data); -+ guint nth = 0; -+ GdkRectangle *rect = NULL; -+ -+ g_object_get(d, "nth-display", &nth, NULL); -+ g_return_if_fail(nth < nmonitors); -+ rect = &monitors[nth]; -+ virt_viewer_display_get_preferred_monitor_geometry(d, rect); -+ -+ if (virt_viewer_display_get_enabled(d) && -+ !virt_viewer_display_get_fullscreen(d)) -+ all_fullscreen = FALSE; -+ } -+ -+ if (!all_fullscreen) -+ virt_viewer_session_align_monitors_linear(monitors, nmonitors); -+ -+ klass->apply_monitor_geometry(self, monitors, nmonitors); -+ g_free(monitors); -+} -+ - void virt_viewer_session_add_display(VirtViewerSession *session, - VirtViewerDisplay *display) - { -@@ -346,6 +432,10 @@ void virt_viewer_session_add_display(VirtViewerSession *session, - session->priv->displays = g_list_append(session->priv->displays, display); - g_object_ref(display); - g_signal_emit_by_name(session, "session-display-added", display); -+ -+ virt_viewer_signal_connect_object(display, "monitor-geometry-changed", -+ G_CALLBACK(virt_viewer_session_on_monitor_geometry_changed), session, -+ G_CONNECT_SWAPPED); - } - - -diff --git a/src/virt-viewer-session.h b/src/virt-viewer-session.h -index 0467724..388d675 100644 ---- a/src/virt-viewer-session.h -+++ b/src/virt-viewer-session.h -@@ -94,6 +94,7 @@ struct _VirtViewerSessionClass { - void (*session_cut_text)(VirtViewerSession *session, const gchar *str); - void (*session_bell)(VirtViewerSession *session); - void (*session_cancelled)(VirtViewerSession *session); -+ void (*apply_monitor_geometry)(VirtViewerSession *session, GdkRectangle* monitors, guint nmonitors); - }; - - GType virt_viewer_session_get_type(void); diff --git a/SOURCES/0001-Fix-race-with-metacity-in-fullscreen.patch b/SOURCES/0001-Fix-race-with-metacity-in-fullscreen.patch new file mode 100644 index 0000000..c8edee9 --- /dev/null +++ b/SOURCES/0001-Fix-race-with-metacity-in-fullscreen.patch @@ -0,0 +1,47 @@ +From 254f2f8b03461fbb2cae39e7e11dcf52b3b684a4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Tue, 1 Apr 2014 18:37:28 +0200 +Subject: [PATCH] Fix race with metacity in fullscreen + +To avoid some races with metacity, the window should be placed as +early as possible, before it is (re)allocated & mapped (rhbz#809546). +--- + src/virt-viewer-window.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 05d5fe7..a6ccaa1 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -475,7 +475,7 @@ virt_viewer_window_move_to_monitor(VirtViewerWindow *self) + GdkRectangle mon; + gint n = priv->fullscreen_monitor; + +- if (n == -1 || !priv->fullscreen) ++ if (n == -1) + return; + + gdk_screen_get_monitor_geometry(gdk_screen_get_default(), n, &mon); +@@ -550,6 +550,12 @@ virt_viewer_window_enter_fullscreen(VirtViewerWindow *self, gint monitor) + priv->fullscreen = TRUE; + + if (!gtk_widget_get_mapped(priv->window)) { ++ /* ++ * To avoid some races with metacity, the window should be placed ++ * as early as possible, before it is (re)allocated & mapped ++ * Position & size should not be queried yet. (rhbz#809546). ++ */ ++ virt_viewer_window_move_to_monitor(self); + g_signal_connect(priv->window, "map-event", G_CALLBACK(mapped), self); + return; + } +@@ -1312,7 +1318,8 @@ virt_viewer_window_show(VirtViewerWindow *self) + if (self->priv->kiosk) + virt_viewer_window_enable_kiosk(self); + +- virt_viewer_window_move_to_monitor(self); ++ if (self->priv->fullscreen) ++ virt_viewer_window_move_to_monitor(self); + } + + void diff --git a/SOURCES/0002-Don-t-re-configure-displays-when-show-hint-changes.patch b/SOURCES/0002-Don-t-re-configure-displays-when-show-hint-changes.patch deleted file mode 100644 index 250477f..0000000 --- a/SOURCES/0002-Don-t-re-configure-displays-when-show-hint-changes.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0cf787e72e94e4ca18ed486871c0602b4f94cd25 Mon Sep 17 00:00:00 2001 -From: Jonathon Jongsma -Date: Wed, 13 Nov 2013 16:37:51 -0600 -Subject: [PATCH] Don't re-configure displays when show-hint changes - -This caused secondary displays on a windows guest to flicker under some -circumstances. The old code didn't re-configure displays in this case either, so -it shouldn't have been included in the display alignment refactor. ---- - src/virt-viewer-display-spice.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c -index 46bc96a..4bffc19 100644 ---- a/src/virt-viewer-display-spice.c -+++ b/src/virt-viewer-display-spice.c -@@ -118,8 +118,6 @@ show_hint_changed(VirtViewerDisplay *self) - - g_object_get(self, "nth-display", &nth, NULL); - spice_main_set_display_enabled(main_channel, nth, enabled); -- -- virt_viewer_display_spice_monitor_geometry_changed(VIRT_VIEWER_DISPLAY_SPICE(self)); - } - - static void diff --git a/SOURCES/0002-Fix-scaling-of-window-upon-resize.patch b/SOURCES/0002-Fix-scaling-of-window-upon-resize.patch new file mode 100644 index 0000000..3641cc4 --- /dev/null +++ b/SOURCES/0002-Fix-scaling-of-window-upon-resize.patch @@ -0,0 +1,51 @@ +From 2f562451e3dcb4d6762a86f820d88048b321d343 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" +Date: Wed, 12 Mar 2014 17:33:24 +0000 +Subject: [PATCH] Fix scaling of window upon resize + +The code to determine scaling of windows was incorrectly +using the original desktop size instead of the host screen +size. The 128 pixel fudge factor was also causing windows +to be scaled when there was no need for them to be. + +Signed-off-by: Daniel P. Berrange +--- + src/virt-viewer-window.c | 16 +++++++--------- + 1 file changed, 7 insertions(+), 9 deletions(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index a6ccaa1..d971263 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -433,24 +433,22 @@ virt_viewer_window_resize(VirtViewerWindow *self, gboolean keep_win_size) + (screen, gtk_widget_get_window(priv->window)), + &fullscreen); + +- g_return_if_fail(fullscreen.height > 128); +- g_return_if_fail(fullscreen.width > 128); + g_return_if_fail(desktopWidth > 0); + g_return_if_fail(desktopHeight > 0); + + desktopAspect = (double)desktopWidth / (double)desktopHeight; +- screenAspect = (double)(fullscreen.width - 128) / (double)(fullscreen.height - 128); ++ screenAspect = (double)fullscreen.width / (double)fullscreen.height; + +- if ((desktopWidth > (fullscreen.width - 128)) || +- (desktopHeight > (fullscreen.height - 128))) { ++ if ((desktopWidth > fullscreen.width) || ++ (desktopHeight > fullscreen.height)) { + /* Doesn't fit native res, so go as large as possible + maintaining aspect ratio */ + if (screenAspect > desktopAspect) { +- width = desktopHeight * desktopAspect; +- height = desktopHeight; ++ width = fullscreen.height * desktopAspect; ++ height = fullscreen.height; + } else { +- width = desktopWidth; +- height = desktopWidth / desktopAspect; ++ width = fullscreen.width; ++ height = fullscreen.width / desktopAspect; + } + } else { + width = desktopWidth; diff --git a/SOURCES/0003-Create-a-sparse-array-for-monitor-geometry-changed.patch b/SOURCES/0003-Create-a-sparse-array-for-monitor-geometry-changed.patch deleted file mode 100644 index fd7ad25..0000000 --- a/SOURCES/0003-Create-a-sparse-array-for-monitor-geometry-changed.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 734d7ff11e6b3a15832bab06a0d7f0cb0f5339a8 Mon Sep 17 00:00:00 2001 -From: Jonathon Jongsma -Date: Wed, 13 Nov 2013 16:39:43 -0600 -Subject: [PATCH] Create a sparse array for monitor-geometry-changed - -It's possible to have only display N enabled without having all of the displays -before it. I experienced this a couple times with a windows guest where display -1 would show up before display 0 and we'd hit a warning that nth is not less -than nmonitors. So find the highest display ID and then create an array of that -size, leaving missing displays initialized to 0 ---- - src/virt-viewer-session.c | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c -index 24f0c72..20d5fb1 100644 ---- a/src/virt-viewer-session.c -+++ b/src/virt-viewer-session.c -@@ -393,13 +393,22 @@ virt_viewer_session_on_monitor_geometry_changed(VirtViewerSession* self, - { - VirtViewerSessionClass *klass; - gboolean all_fullscreen = TRUE; -- guint nmonitors = g_list_length(self->priv->displays); -+ guint nmonitors = 0; - GdkRectangle *monitors = NULL; - - klass = VIRT_VIEWER_SESSION_GET_CLASS(self); - if (!klass->apply_monitor_geometry) - return; - -+ /* find highest monitor ID so we can create the sparse array */ -+ for (GList *l = self->priv->displays; l; l = l->next) { -+ VirtViewerDisplay *d = VIRT_VIEWER_DISPLAY(l->data); -+ guint nth = 0; -+ g_object_get(d, "nth-display", &nth, NULL); -+ -+ nmonitors = MAX(nth + 1, nmonitors); -+ } -+ - monitors = g_new0(GdkRectangle, nmonitors); - for (GList *l = self->priv->displays; l; l = l->next) { - VirtViewerDisplay *d = VIRT_VIEWER_DISPLAY(l->data); diff --git a/SOURCES/0003-Silence-a-message-about-missing-configuration-file.patch b/SOURCES/0003-Silence-a-message-about-missing-configuration-file.patch new file mode 100644 index 0000000..b4617af --- /dev/null +++ b/SOURCES/0003-Silence-a-message-about-missing-configuration-file.patch @@ -0,0 +1,31 @@ +From ffe0c92907cc949cb9cc4e5d00b5f2b377ec251d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 12 Mar 2014 14:43:28 +0100 +Subject: [PATCH] Silence a message about missing configuration file + +Do not print a g_debug() error when the configuration file is missing, +unless given the --debug option. + +https://bugzilla.redhat.com/show_bug.cgi?id=1006737 +--- + src/virt-viewer-app.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 0cdf95a..4f31812 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1575,8 +1575,11 @@ virt_viewer_app_init (VirtViewerApp *self) + + g_key_file_load_from_file(self->priv->config, self->priv->config_file, + G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, &error); +- if (error) +- g_debug("Couldn't load configuration: %s", error->message); ++ ++ if (g_error_matches(error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) ++ DEBUG_LOG("No configuration file %s", self->priv->config_file); ++ else if (error) ++ g_warning("Couldn't load configuration: %s", error->message); + + g_clear_error(&error); + diff --git a/SOURCES/0004-Enable-the-display-before-showing-the-window.patch b/SOURCES/0004-Enable-the-display-before-showing-the-window.patch deleted file mode 100644 index 9ee9d3c..0000000 --- a/SOURCES/0004-Enable-the-display-before-showing-the-window.patch +++ /dev/null @@ -1,32 +0,0 @@ -From dc47ff3b6b31c8bdd49d5b301839fb0862bf7805 Mon Sep 17 00:00:00 2001 -From: Jonathon Jongsma -Date: Fri, 13 Dec 2013 10:15:17 -0600 -Subject: [PATCH] Enable the display before showing the window - -This ensures that the display is enabled when it gets its first Allocate event -(which causes a display reconfiguration). If the display is not enabled at this -point, it won't send down a new monitors_config message until the second -allocation, which may result in the display being disabled until a window is -resized. ---- - src/virt-viewer-window.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c -index 193c431..1fa3982 100644 ---- a/src/virt-viewer-window.c -+++ b/src/virt-viewer-window.c -@@ -1261,11 +1261,11 @@ virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *displa - void - virt_viewer_window_show(VirtViewerWindow *self) - { -- gtk_widget_show(self->priv->window); -- - if (self->priv->display) - virt_viewer_display_set_enabled(self->priv->display, TRUE); - -+ gtk_widget_show(self->priv->window); -+ - if (self->priv->desktop_resize_pending) { - virt_viewer_window_resize(self, FALSE); - self->priv->desktop_resize_pending = FALSE; diff --git a/SOURCES/0004-Remove-Automatically-resize-menu.patch b/SOURCES/0004-Remove-Automatically-resize-menu.patch new file mode 100644 index 0000000..5404311 --- /dev/null +++ b/SOURCES/0004-Remove-Automatically-resize-menu.patch @@ -0,0 +1,209 @@ +From 66f55ec707713472de4a76d851151a3c1d778e0d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 12 Mar 2014 18:46:49 +0100 +Subject: [PATCH] Remove "Automatically resize" menu + +Remove "Automatically resize" menu item (always enabled for Spice +display now) + +https://bugzilla.redhat.com/show_bug.cgi?id=1007649 +--- + src/virt-viewer-display-spice.c | 5 ----- + src/virt-viewer-display.c | 25 +------------------------ + src/virt-viewer-display.h | 2 -- + src/virt-viewer-window.c | 26 +------------------------- + src/virt-viewer.xml | 10 ---------- + 5 files changed, 2 insertions(+), 66 deletions(-) + +diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c +index d13fbda..ff0d069 100644 +--- a/src/virt-viewer-display-spice.c ++++ b/src/virt-viewer-display-spice.c +@@ -97,12 +97,7 @@ get_main(VirtViewerDisplay *self) + static void + virt_viewer_display_spice_monitor_geometry_changed(VirtViewerDisplaySpice *self) + { +- +- if (virt_viewer_display_get_auto_resize(VIRT_VIEWER_DISPLAY(self)) == FALSE) +- return; +- + g_signal_emit_by_name(self, "monitor-geometry-changed", NULL); +- + } + + static void +diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c +index feefcca..6c078a5 100644 +--- a/src/virt-viewer-display.c ++++ b/src/virt-viewer-display.c +@@ -47,7 +47,6 @@ struct _VirtViewerDisplayPrivate + gint monitor; /* Monitor number on the client */ + guint show_hint; + VirtViewerSession *session; +- gboolean auto_resize; + gboolean fullscreen; + }; + +@@ -280,7 +279,6 @@ virt_viewer_display_init(VirtViewerDisplay *display) + display->priv->desktopHeight = 100; + display->priv->zoom_level = 100; + display->priv->zoom = TRUE; +- display->priv->auto_resize = TRUE; + #if !GTK_CHECK_VERSION(3, 0, 0) + display->priv->dirty = TRUE; + #endif +@@ -691,20 +689,6 @@ VirtViewerSession* virt_viewer_display_get_session(VirtViewerDisplay *self) + return self->priv->session; + } + +-void virt_viewer_display_set_auto_resize(VirtViewerDisplay *self, gboolean auto_resize) +-{ +- g_return_if_fail(VIRT_VIEWER_IS_DISPLAY(self)); +- +- self->priv->auto_resize = auto_resize; +-} +- +-gboolean virt_viewer_display_get_auto_resize(VirtViewerDisplay *self) +-{ +- g_return_val_if_fail(VIRT_VIEWER_IS_DISPLAY(self), FALSE); +- +- return self->priv->auto_resize; +-} +- + void virt_viewer_display_set_monitor(VirtViewerDisplay *self, gint monitor) + { + g_return_if_fail(VIRT_VIEWER_IS_DISPLAY(self)); +@@ -796,14 +780,7 @@ void virt_viewer_display_get_preferred_monitor_geometry(VirtViewerDisplay* self, + topx = MAX(topx, 0); + topy = MAX(topy, 0); + +- if (virt_viewer_display_get_auto_resize(VIRT_VIEWER_DISPLAY(self)) == FALSE) { +- guint w, h; +- virt_viewer_display_get_desktop_size(self, &w, &h); +- preferred->width = w; +- preferred->height = h; +- preferred->x = topx; +- preferred->y = topy; +- } else { ++ { + if (virt_viewer_display_get_fullscreen(VIRT_VIEWER_DISPLAY(self))) { + GdkRectangle physical_monitor; + GdkScreen *screen = gtk_widget_get_screen(GTK_WIDGET(self)); +diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h +index 195eeee..fe88d98 100644 +--- a/src/virt-viewer-display.h ++++ b/src/virt-viewer-display.h +@@ -114,8 +114,6 @@ GdkPixbuf* virt_viewer_display_get_pixbuf(VirtViewerDisplay *display); + void virt_viewer_display_set_show_hint(VirtViewerDisplay *display, guint mask, gboolean enable); + guint virt_viewer_display_get_show_hint(VirtViewerDisplay *display); + VirtViewerSession* virt_viewer_display_get_session(VirtViewerDisplay *display); +-void virt_viewer_display_set_auto_resize(VirtViewerDisplay *display, gboolean auto_resize); +-gboolean virt_viewer_display_get_auto_resize(VirtViewerDisplay *display); + void virt_viewer_display_set_monitor(VirtViewerDisplay *display, gint monitor); + gint virt_viewer_display_get_monitor(VirtViewerDisplay *display); + void virt_viewer_display_set_fullscreen(VirtViewerDisplay *display, gboolean fullscreen); +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index d971263..f75fc41 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -50,7 +50,6 @@ gboolean virt_viewer_window_delete(GtkWidget *src, void *dummy, VirtViewerWindow + void virt_viewer_window_menu_file_quit(GtkWidget *src, VirtViewerWindow *self); + void virt_viewer_window_menu_help_about(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_view_fullscreen(GtkWidget *menu, VirtViewerWindow *self); +-void virt_viewer_window_menu_view_resize(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_send(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_file_screenshot(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_file_usb_device_selection(GtkWidget *menu, VirtViewerWindow *self); +@@ -101,7 +100,6 @@ struct _VirtViewerWindowPrivate { + gboolean kiosk; + + gint zoomlevel; +- gboolean auto_resize; + gboolean fullscreen; + gchar *subtitle; + }; +@@ -287,7 +285,6 @@ virt_viewer_window_init (VirtViewerWindow *self) + { + VirtViewerWindowPrivate *priv; + GtkWidget *vbox; +- GtkWidget *menu; + GdkColor color; + GSList *accels; + +@@ -295,14 +292,11 @@ virt_viewer_window_init (VirtViewerWindow *self) + priv = self->priv; + + priv->fullscreen_monitor = -1; +- priv->auto_resize = TRUE; + g_value_init(&priv->accel_setting, G_TYPE_STRING); + + priv->notebook = virt_viewer_notebook_new(); + priv->builder = virt_viewer_util_load_ui("virt-viewer.xml"); + +- menu = GTK_WIDGET(gtk_builder_get_object(priv->builder, "menu-view-resize")); +- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu), TRUE); + 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-file-screenshot")), FALSE); + +@@ -415,7 +409,7 @@ virt_viewer_window_resize(VirtViewerWindow *self, gboolean keep_win_size) + guint desktopHeight; + VirtViewerWindowPrivate *priv = self->priv; + +- if (!priv->auto_resize || priv->fullscreen) ++ if (priv->fullscreen) + return; + + DEBUG_LOG("Preparing main window resize"); +@@ -876,23 +870,6 @@ virt_viewer_window_menu_view_fullscreen(GtkWidget *menu, + virt_viewer_window_leave_fullscreen(self); + } + +-G_MODULE_EXPORT void +-virt_viewer_window_menu_view_resize(GtkWidget *menu, +- VirtViewerWindow *self) +-{ +- VirtViewerWindowPrivate *priv = self->priv; +- +- if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu))) { +- priv->auto_resize = TRUE; +- virt_viewer_window_resize(self, TRUE); +- } else { +- priv->auto_resize = FALSE; +- } +- +- if (priv->display) +- virt_viewer_display_set_auto_resize(priv->display, priv->auto_resize); +-} +- + static void add_if_writable (GdkPixbufFormat *data, GHashTable *formats) + { + if (gdk_pixbuf_format_is_writable(data)) { +@@ -1252,7 +1229,6 @@ virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *displa + priv->display = g_object_ref(display); + + virt_viewer_display_set_zoom_level(VIRT_VIEWER_DISPLAY(priv->display), priv->zoomlevel); +- virt_viewer_display_set_auto_resize(VIRT_VIEWER_DISPLAY(priv->display), priv->auto_resize); + virt_viewer_display_set_monitor(VIRT_VIEWER_DISPLAY(priv->display), priv->fullscreen_monitor); + virt_viewer_display_set_fullscreen(VIRT_VIEWER_DISPLAY(priv->display), priv->fullscreen); + +diff --git a/src/virt-viewer.xml b/src/virt-viewer.xml +index 4917201..8a3d3c0 100644 +--- a/src/virt-viewer.xml ++++ b/src/virt-viewer.xml +@@ -172,16 +172,6 @@ + + + +- +- True +- False +- False +- Automatically resize +- True +- +- +- +- + + True + False diff --git a/SOURCES/0005-Use-a-USB-icon-in-the-fullscreen-toolbar.patch b/SOURCES/0005-Use-a-USB-icon-in-the-fullscreen-toolbar.patch new file mode 100644 index 0000000..a144e79 --- /dev/null +++ b/SOURCES/0005-Use-a-USB-icon-in-the-fullscreen-toolbar.patch @@ -0,0 +1,302 @@ +From 7c219c7218705338578724ec75c3c02e4de8095e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= +Date: Wed, 12 Mar 2014 22:35:25 +0100 +Subject: [PATCH] Use a USB icon in the fullscreen toolbar + +Replace the generic GTK_STOCK_PREFERENCES with a more appropriate USB icon. + +The icon was provided by Jakub Steiner + +https://bugzilla.redhat.com/show_bug.cgi?id=804184 +--- + icons/24x24/Makefile.am | 11 ++- + icons/24x24/virt-viewer-usb.svg | 204 ++++++++++++++++++++++++++++++++++++++++ + mingw-virt-viewer.spec.in | 2 + + src/virt-viewer-window.c | 5 +- + virt-viewer.spec.in | 1 + + 5 files changed, 219 insertions(+), 4 deletions(-) + create mode 100644 icons/24x24/virt-viewer-usb.svg + +diff --git a/icons/24x24/Makefile.am b/icons/24x24/Makefile.am +index ba7d6aa..50ba421 100644 +--- a/icons/24x24/Makefile.am ++++ b/icons/24x24/Makefile.am +@@ -1,7 +1,12 @@ ++EXTRA_DIST = + size = $(notdir $(PWD)) +-icondir = $(datadir)/icons/hicolor/$(size)/apps/ +-icon_DATA = $(PACKAGE).png + +-EXTRA_DIST = $(icon_DATA) ++apps_icondir = $(datadir)/icons/hicolor/$(size)/apps/ ++apps_icon_DATA = $(PACKAGE).png ++EXTRA_DIST += $(apps_icon_DATA) ++ ++devices_icondir = $(datadir)/icons/hicolor/$(size)/devices/ ++devices_icon_DATA = virt-viewer-usb.svg ++EXTRA_DIST += $(devices_icon_DATA) + + -include $(top_srcdir)/git.mk +diff --git a/icons/24x24/virt-viewer-usb.svg b/icons/24x24/virt-viewer-usb.svg +new file mode 100644 +index 0000000..4101f6e +--- /dev/null ++++ b/icons/24x24/virt-viewer-usb.svg +@@ -0,0 +1,204 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ image/svg+xml ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/mingw-virt-viewer.spec.in b/mingw-virt-viewer.spec.in +index 01f8575..44d9230 100644 +--- a/mingw-virt-viewer.spec.in ++++ b/mingw-virt-viewer.spec.in +@@ -123,6 +123,7 @@ rm -rf $RPM_BUILD_ROOT + %{mingw32_datadir}/virt-viewer/ui/virt-viewer-about.xml + %{mingw32_datadir}/virt-viewer/ui/virt-viewer-auth.xml + %{mingw32_datadir}/icons/hicolor/*/apps/* ++%{mingw32_datadir}/icons/hicolor/*/devices/* + + %{mingw32_mandir}/man1/virt-viewer.1* + %{mingw32_mandir}/man1/remote-viewer.1* +@@ -143,6 +144,7 @@ rm -rf $RPM_BUILD_ROOT + %{mingw64_datadir}/virt-viewer/ui/virt-viewer-about.xml + %{mingw64_datadir}/virt-viewer/ui/virt-viewer-auth.xml + %{mingw64_datadir}/icons/hicolor/*/apps/* ++%{mingw64_datadir}/icons/hicolor/*/devices/* + + %{mingw64_mandir}/man1/virt-viewer.1* + %{mingw64_mandir}/man1/remote-viewer.1* +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index f75fc41..1ad896c 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -1045,12 +1045,15 @@ virt_viewer_window_toolbar_setup(VirtViewerWindow *self) + g_signal_connect(button, "clicked", G_CALLBACK(virt_viewer_window_menu_file_quit), self); + + /* USB Device selection */ +- button = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_PREFERENCES)); ++ button = gtk_image_new_from_icon_name("virt-viewer-usb", ++ GTK_ICON_SIZE_INVALID); ++ button = GTK_WIDGET(gtk_tool_button_new(button, NULL)); + gtk_tool_button_set_label(GTK_TOOL_BUTTON(button), _("USB device selection")); + gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("USB device selection")); + gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM(button), 0); + g_signal_connect(button, "clicked", G_CALLBACK(virt_viewer_window_menu_file_usb_device_selection), self); + priv->toolbar_usb_device_selection = button; ++ gtk_widget_show_all(button); + + /* Send key */ + button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); +diff --git a/virt-viewer.spec.in b/virt-viewer.spec.in +index d68029c..3dfeb96 100644 +--- a/virt-viewer.spec.in ++++ b/virt-viewer.spec.in +@@ -154,6 +154,7 @@ update-desktop-database -q %{_datadir}/applications + %{_datadir}/%{name}/ui/virt-viewer-auth.xml + %{_datadir}/%{name}/ui/virt-viewer-about.xml + %{_datadir}/icons/hicolor/*/apps/* ++%{_datadir}/icons/hicolor/*/devices/* + %{_datadir}/applications/remote-viewer.desktop + %{_datadir}/mime/packages/virt-viewer-mime.xml + %ghost %{_libexecdir}/spice-xpi-client diff --git a/SOURCES/0005-spice-show-an-error-dialog-if-password-is-invalid.patch b/SOURCES/0005-spice-show-an-error-dialog-if-password-is-invalid.patch deleted file mode 100644 index 5907908..0000000 --- a/SOURCES/0005-spice-show-an-error-dialog-if-password-is-invalid.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 835a81d588648be09c79966cf99e5adba7a555bb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Fri, 2 Aug 2013 16:53:18 +0200 -Subject: [PATCH] spice: show an error dialog if password is invalid - -Error message should show up when input the wrong password for spice -guests as vnc guests. - -https://bugzilla.redhat.com/show_bug.cgi?id=990883 -(cherry picked from commit 62f12d4c15333d25e73584dc9e128e201b1a92e2) ---- - src/virt-viewer-session-spice.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c -index 4c52b47..2d59db2 100644 ---- a/src/virt-viewer-session-spice.c -+++ b/src/virt-viewer-session-spice.c -@@ -53,6 +53,7 @@ struct _VirtViewerSessionSpicePrivate { - int channel_count; - int usbredir_channel_count; - gboolean has_sw_smartcard_reader; -+ guint pass_try; - }; - - #define VIRT_VIEWER_SESSION_SPICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_SESSION_SPICE, VirtViewerSessionSpicePrivate)) -@@ -490,6 +491,12 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED - break; - case SPICE_CHANNEL_ERROR_AUTH: - DEBUG_LOG("main channel: auth failure (wrong password?)"); -+ -+ if (self->priv->pass_try > 0) -+ g_signal_emit_by_name(session, "session-auth-failed", -+ _("invalid password")); -+ self->priv->pass_try++; -+ - int ret = virt_viewer_auth_collect_credentials(self->priv->main_window, - "SPICE", - NULL, diff --git a/SOURCES/0006-build-sys-Always-prepend-to-build-id.patch b/SOURCES/0006-build-sys-Always-prepend-to-build-id.patch new file mode 100644 index 0000000..b49d082 --- /dev/null +++ b/SOURCES/0006-build-sys-Always-prepend-to-build-id.patch @@ -0,0 +1,71 @@ +From d7574d436d973a44d02e26cc7fa77de21030ad62 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Wed, 2 Apr 2014 13:43:17 +0200 +Subject: [PATCH] build-sys: Always prepend '-' to build id + +When using the --with-buildid configure paramater, the build id which is +substituted in the MSI wxs file is automatically prepended by a '-', but +the build id which is used in the C files does not get this '-' +automatically. + +Currently, the linux and mingw spec files prepend a '-' on their own to the +--with-buildid argument, but this causes the MSI installer to show 2 '-' +during installation: "Please wait while Windows configures VirtViewer +0.6.0--1" + +This commit always prepends a '-' to the buildid strings, and removes the +'-' from the spec files. This is to ensure the separator between version +number and buildid is not forgotten, which could give a confusing version +number. +--- + configure.ac | 9 +++++---- + mingw-virt-viewer.spec.in | 2 +- + virt-viewer.spec.in | 2 +- + 3 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 7a00bf4..f966688 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -211,10 +211,11 @@ if test "x$have_gtk_vnc" != "xyes" && test "x$have_spice_gtk" != "xyes"; then + fi + + AC_ARG_WITH([buildid], +- AS_HELP_STRING([--with-buildid=id], [Set additional build version details])) +-AC_DEFINE_UNQUOTED([BUILDID], "$with_buildid", [Build version details]) +-if test "x$with_buildid" != x; then +- AC_SUBST([BUILDID], "-$with_buildid") ++ AS_HELP_STRING([--with-buildid=id], [Set additional build version details]), ++ [buildid="-$with_buildid"], [buildid=""]) ++AC_DEFINE_UNQUOTED([BUILDID], "$buildid", [Build version details]) ++if test "x$buildid" != x; then ++ AC_SUBST([BUILDID], "$buildid") + fi + + major=`echo $PACKAGE_VERSION | cut -d. -f1` +diff --git a/mingw-virt-viewer.spec.in b/mingw-virt-viewer.spec.in +index 44d9230..fb1c9fd 100644 +--- a/mingw-virt-viewer.spec.in ++++ b/mingw-virt-viewer.spec.in +@@ -85,7 +85,7 @@ MinGW Windows virt-viewer MSI + + + %build +-%mingw_configure --with-gtk=2.0 --with-buildid=-%{release} ++%mingw_configure --with-gtk=2.0 --with-buildid=%{release} + + %mingw_make %{?_smp_mflags} V=1 + %mingw_make %{?_smp_mflags} V=1 -C data msi +diff --git a/virt-viewer.spec.in b/virt-viewer.spec.in +index 3dfeb96..3cbf194 100644 +--- a/virt-viewer.spec.in ++++ b/virt-viewer.spec.in +@@ -109,7 +109,7 @@ autoreconf -if + %define govirt_arg --with-ovirt + %endif + +-%configure %{spice_arg} %{gtk_arg} %{govirt_arg} --with-buildid=-%{release} --disable-update-mimedb ++%configure %{spice_arg} %{gtk_arg} %{govirt_arg} --with-buildid=%{release} --disable-update-mimedb + %__make %{?_smp_mflags} + + diff --git a/SOURCES/0006-man-add-application-x-virt-viewer-file-format-descri.patch b/SOURCES/0006-man-add-application-x-virt-viewer-file-format-descri.patch deleted file mode 100644 index 65033e8..0000000 --- a/SOURCES/0006-man-add-application-x-virt-viewer-file-format-descri.patch +++ /dev/null @@ -1,212 +0,0 @@ -From 56637ede6d6eaf612ca5a0838421de2eda8dea86 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= -Date: Thu, 8 Aug 2013 15:21:53 +0200 -Subject: [PATCH] man: add application/x-virt-viewer file format description - -https://bugzilla.redhat.com/show_bug.cgi?id=970825 -(cherry picked from commit 692129ab4414a73ceafbcff33b92752fa63109d7) ---- - man/remote-viewer.pod | 176 ++++++++++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 171 insertions(+), 5 deletions(-) - -diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod -index 2ad0872..a4710c8 100644 ---- a/man/remote-viewer.pod -+++ b/man/remote-viewer.pod -@@ -13,7 +13,10 @@ B is a simple remote display client. The supported - protocols are SPICE and VNC. - - Starting remote-viewer without URI will open a simple dialog with an --entry and a list of previously successfully access URI. -+entry and a list of previously successfully accessed URI. -+ -+The URI can also point to a connection settings file, see FILE section -+for a description of the format. - - =head1 OPTIONS - -@@ -62,10 +65,10 @@ Print debugging information - - =item -H HOTKEYS, --hotkeys HOTKEYS - --Override the default hotkey bindings with B. Where B is --=[+][,=[+]]. Key-names are --case-insensitive, valid actions are: toggle-fullscreen, release-cursor, --smartcard-insert and smartcard-remove. Examples: -+Override the default hotkey bindings with B. Where B -+is =,=... Valid -+actions are: toggle-fullscreen, release-cursor, smartcard-insert and -+smartcard-remove. Examples: - - --hotkeys=toggle-fullscreen=shift+f11,release-cursor=shift+f12 - -@@ -76,6 +79,169 @@ empty string disables all hotkeys. - - =back - -+=head1 HOTKEY -+ -+A key binding combination is described by a series of key strings -+seperated by '+' that must be pressed together in order to activate -+the associated action. -+ -+It must be composed of modifiers (shift, ctrl or alt) and a -+non-modifier key. For example, "shift+f11". -+ -+=head1 FILE -+ -+B connection file is of INI file format, with a -+mandatory [virt-viewer] group and "type" key. -+ -+=head2 Example -+ -+Opening a file with the following content will start remote-viewer in -+fullscreen and connect to the host "betsiboka" using the SPICE -+protocol: -+ -+ [virt-viewer] -+ type=spice -+ host=betsiboka -+ port=5900 -+ fullscreen=1 -+ -+=head2 Key list -+ -+=over 4 -+ -+=item C (string) -+ -+If remote-viewer version isn't at superior or equal to the required -+version, an error is raised with the version expected. -+ -+The version format accepted is a list of integers seperated by '.'. -+ -+=item C (string, mandatory) -+ -+The session type, either "spice", "vnc" or "ovirt". -+ -+=item C (string, mandatory) -+ -+The server host to connect to. -+ -+=item C (integer) -+ -+The server port to connect to. -+ -+=item C (integer) -+ -+The server TLS/SSL port to connect to. -+ -+=item C (string) -+ -+The username for the session authentication. -+ -+=item C (string) -+ -+The password for the session authentication. -+ -+=item C (string list) -+ -+The list of session channels to disable. -+ -+The current SPICE channels are: main, display, inputs, cursor, playback, record, smartcard, usbredir. -+ -+=item C (string) -+ -+Set the cipher list to use for the secure connection, in textual -+OpenSSL cipher list format. (see ciphers(1)) -+ -+=item C (string) -+ -+String to present in the window title. -+ -+=item C<fullscreen> (boolean) -+ -+Opens the client windows in fullscreen. -+ -+=item C<ca> (string) -+ -+CA certificate in PEM format (using "\n" to seperate the lines), for verification purposes. -+ -+=item C<host-subject> (string) -+ -+Verify the certificate subject matches with the given subject. -+ -+=item C<toggle-fullscreen> (hotkey string) -+ -+Key binding for entering and leaving fullscreen mode. (see L<HOTKEY> for description of expected string) -+ -+=item C<release-cursor> (hotkey string) -+ -+Key binding for releasing cursor grab. (see L<HOTKEY> for description of expected string) -+ -+=item C<smartcard-insert> (hotkey string) -+ -+Key binding for inserting emulated smartcard. (see L<HOTKEY> for description of expected string) -+ -+=item C<smartcard-remove> (hotkey string) -+ -+Key binding for removing emulated smartcard. (see L<HOTKEY> for description of expected string) -+ -+=item C<color-depth> (integer) -+ -+Set the color depth of the guest display (16 or 32). -+ -+=item C<disable-effects> (string list) -+ -+A list of desktop effects to disable in the remote guest. -+ -+The effects that can be disabled with SPICE are: wallpaper, -+font-smooth, animation or all. -+ -+=item C<enable-smartcard> (boolean) -+ -+Set to 1 to enable client smartcard redirection. -+ -+=item C<enable-usbredir> (boolean) -+ -+Set to 1 to enable client USB device redirection. -+ -+=item C<enable-usb-autoshare> (boolean) -+ -+Set to 1 to enable client USB devices auto-sharing. -+ -+=item C<usb-filter> (string) -+ -+Set a string specifying a filter to use to determine which USB devices -+to autoconnect when plugged in, a filter consists of one or more -+rules. Where each rule has the form of: -+ -+C<class,vendor,product,version,allow> -+ -+Use -1 for class/vendor/product/version to accept any value. -+ -+And the rules are themselves are concatonated like this: -+ -+C<rule1|rule2|rule3> -+ -+=item C<secure-channels> (string list) -+ -+The list of session channels to secure. -+ -+The current SPICE channels are: main, display, inputs, cursor, playback, record, smartcard, usbredir. -+ -+=item C<delete-this-file> (boolean) -+ -+Set to 1 for the client to remove this connection file (if it can't, it will fail silentely) -+ -+=item C<proxy> (string) -+ -+A proxy URL to tunnel the connection through. -+ -+At the time of writing this documentation, the only supported proxy -+method with Spice is HTTP CONNECT. -+ -+For example, to tunnel connection through foobar host HTTP proxy on -+port 8080, use the value "http://foobar:8080". -+ -+=back -+ - =head1 EXAMPLES - - To connect to SPICE server on host "makai" with port 5900 diff --git a/SOURCES/0007-Update-user-visible-copyright-information.patch b/SOURCES/0007-Update-user-visible-copyright-information.patch new file mode 100644 index 0000000..5976a6a --- /dev/null +++ b/SOURCES/0007-Update-user-visible-copyright-information.patch @@ -0,0 +1,52 @@ +From 7bcc1269ca9e629b4f7782e769b07330e5937956 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Thu, 3 Apr 2014 17:32:52 +0200 +Subject: [PATCH] Update user-visible copyright information + +Years in copyright notices in the about dialog and man pages is at most +2012, let's set it to 2014 +--- + man/remote-viewer.pod | 2 +- + man/virt-viewer.pod | 2 +- + src/virt-viewer-about.xml | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod +index 6773c3b..e35d281 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -283,7 +283,7 @@ Report bugs to the mailing list C<http://www.redhat.com/mailman/listinfo/virt-to + + =head1 COPYRIGHT + +-Copyright (C) 2012 Red Hat, Inc., and various contributors. ++Copyright (C) 2012-2014 Red Hat, Inc., and various contributors. + This is free software. You may redistribute copies of it under the terms of the GNU General + Public License C<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent + permitted by law. +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index 963d7bc..5b3d6e6 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -148,7 +148,7 @@ Report bugs to the mailing list C<http://www.redhat.com/mailman/listinfo/virt-to + + =head1 COPYRIGHT + +-Copyright (C) 2007-2008 Red Hat, Inc., and various contributors. ++Copyright (C) 2007-2014 Red Hat, Inc., and various contributors. + This is free software. You may redistribute copies of it under the terms of the GNU General + Public License C<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent + permitted by law. +diff --git a/src/virt-viewer-about.xml b/src/virt-viewer-about.xml +index e9ae52a..16db3c2 100644 +--- a/src/virt-viewer-about.xml ++++ b/src/virt-viewer-about.xml +@@ -14,7 +14,7 @@ + <property name="skip_pager_hint">True</property> + <property name="program_name">Virtual Machine Viewer</property> + <property name="copyright" translatable="yes">Copyright (C) 2007-2012 Daniel P. Berrange +-Copyright (C) 2007-2012 Red Hat, Inc.</property> ++Copyright (C) 2007-2014 Red Hat, Inc.</property> + <property name="comments" translatable="yes">A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt</property> + <property name="website">http://virt-manager.org/</property> + <property name="website_label" translatable="yes">virt-manager.org</property> diff --git a/SOURCES/0007-remote-viewer-remove-d-direct-option.patch b/SOURCES/0007-remote-viewer-remove-d-direct-option.patch deleted file mode 100644 index b18cfce..0000000 --- a/SOURCES/0007-remote-viewer-remove-d-direct-option.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 44ec55fb9997bdc312b21e707b0aff2ea5e159fa Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Wed, 14 Aug 2013 22:30:12 +0200 -Subject: [PATCH] remote-viewer: remove -d direct option - -remote-viewer currently doesn't provide automatic ssh tunnels, and even if -it would, that would be explicit in the url given to remote-viewer (such -as spice+ssh://...) - -https://bugzilla.redhat.com/show_bug.cgi?id=991261 -(cherry picked from commit b8d114ef1dbf9b3c81ffd91d8497dd406ac61e26) ---- - src/remote-viewer-main.c | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/src/remote-viewer-main.c b/src/remote-viewer-main.c -index 820a676..19e5197 100644 ---- a/src/remote-viewer-main.c -+++ b/src/remote-viewer-main.c -@@ -112,7 +112,6 @@ main(int argc, char **argv) - char *hotkeys = NULL; - gboolean verbose = FALSE; - gboolean debug = FALSE; -- gboolean direct = FALSE; - RemoteViewer *viewer = NULL; - #ifdef HAVE_SPICE_GTK - gboolean controller = FALSE; -@@ -125,8 +124,6 @@ main(int argc, char **argv) - N_("Display verbose information"), NULL }, - { "title", 't', 0, G_OPTION_ARG_STRING, &title, - N_("Set window title"), NULL }, -- { "direct", 'd', 0, G_OPTION_ARG_NONE, &direct, -- N_("Direct connection with no automatic tunnels"), NULL }, - { "zoom", 'z', 0, G_OPTION_ARG_INT, &zoom, - N_("Zoom level of window, in percentage"), "ZOOM" }, - { "debug", '\0', 0, G_OPTION_ARG_NONE, &debug, -@@ -213,7 +210,6 @@ main(int argc, char **argv) - g_object_set(app, "fullscreen-auto-conf", fullscreen_auto_conf, NULL); - g_object_set(app, "fullscreen", fullscreen, NULL); - virt_viewer_window_set_zoom_level(virt_viewer_app_get_main_window(app), zoom); -- virt_viewer_app_set_direct(app, direct); - virt_viewer_app_set_hotkeys(app, hotkeys); - - if (!virt_viewer_app_start(app)) diff --git a/SOURCES/0008-Try-to-share-more-GOption-code-between-r-v-and-v-v.patch b/SOURCES/0008-Try-to-share-more-GOption-code-between-r-v-and-v-v.patch deleted file mode 100644 index f87f314..0000000 --- a/SOURCES/0008-Try-to-share-more-GOption-code-between-r-v-and-v-v.patch +++ /dev/null @@ -1,419 +0,0 @@ -From 39533e1b6bfffc2c0d0d04477dcc722a2acd587f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Fri, 16 Aug 2013 17:15:37 +0200 -Subject: [PATCH] Try to share more GOption code between r-v and v-v - -(cherry picked from commit 980de2d331cd2e2ba7e559accd887bf996e8bd81) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - src/remote-viewer-main.c | 54 +++--------------------------------------- - src/remote-viewer.c | 6 ++--- - src/remote-viewer.h | 6 ++--- - src/virt-viewer-app.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ - src/virt-viewer-app.h | 1 + - src/virt-viewer-main.c | 29 ++--------------------- - src/virt-viewer.c | 6 +---- - src/virt-viewer.h | 4 +--- - 8 files changed, 73 insertions(+), 94 deletions(-) - -diff --git a/src/remote-viewer-main.c b/src/remote-viewer-main.c -index 19e5197..a773288 100644 ---- a/src/remote-viewer-main.c -+++ b/src/remote-viewer-main.c -@@ -48,28 +48,6 @@ remote_viewer_version(void) - exit(EXIT_SUCCESS); - } - --gboolean fullscreen = FALSE; --gboolean fullscreen_auto_conf = FALSE; -- --static gboolean --option_fullscreen(G_GNUC_UNUSED const gchar *option_name, -- const gchar *value, -- G_GNUC_UNUSED gpointer data, GError **error) --{ -- fullscreen = TRUE; -- -- if (value == NULL) -- return TRUE; -- -- if (g_str_equal(value, "auto-conf")) { -- fullscreen_auto_conf = TRUE; -- return TRUE; -- } -- -- g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, _("Invalid full-screen argument: %s"), value); -- return FALSE; --} -- - static void - recent_add(gchar *uri, const gchar *mime_type) - { -@@ -105,13 +83,9 @@ main(int argc, char **argv) - GOptionContext *context; - GError *error = NULL; - int ret = 1; -- int zoom = 100; - gchar **args = NULL; - gchar *uri = NULL; - char *title = NULL; -- char *hotkeys = NULL; -- gboolean verbose = FALSE; -- gboolean debug = FALSE; - RemoteViewer *viewer = NULL; - #ifdef HAVE_SPICE_GTK - gboolean controller = FALSE; -@@ -120,22 +94,12 @@ main(int argc, char **argv) - const GOptionEntry options [] = { - { "version", 'V', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, - remote_viewer_version, N_("Display version information"), NULL }, -- { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, -- N_("Display verbose information"), NULL }, - { "title", 't', 0, G_OPTION_ARG_STRING, &title, - N_("Set window title"), NULL }, -- { "zoom", 'z', 0, G_OPTION_ARG_INT, &zoom, -- N_("Zoom level of window, in percentage"), "ZOOM" }, -- { "debug", '\0', 0, G_OPTION_ARG_NONE, &debug, -- N_("Display debugging information"), NULL }, -- { "full-screen", 'f', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, option_fullscreen, -- N_("Open in full screen mode (auto-conf adjusts guest resolution to fit the client's)."), N_("<auto-conf>") }, - #ifdef HAVE_SPICE_GTK - { "spice-controller", '\0', 0, G_OPTION_ARG_NONE, &controller, - N_("Open connection using Spice controller communication"), NULL }, - #endif -- { "hotkeys", 'H', 0, G_OPTION_ARG_STRING, &hotkeys, -- N_("Customise hotkeys"), NULL }, - { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &args, - NULL, "-- URI" }, - { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } -@@ -145,6 +109,7 @@ main(int argc, char **argv) - - /* Setup command line options */ - context = g_option_context_new (_("- Remote viewer client")); -+ g_option_context_add_main_entries (context, virt_viewer_app_get_options(), NULL); - g_option_context_add_main_entries (context, options, NULL); - g_option_context_add_group (context, gtk_get_option_group (TRUE)); - #ifdef HAVE_GTK_VNC -@@ -183,22 +148,13 @@ main(int argc, char **argv) - } - } - -- if (zoom < 10 || zoom > 200) { -- g_printerr(_("Zoom level must be within 10-200\n")); -- goto cleanup; -- } -- -- gtk_window_set_default_icon_name("virt-viewer"); -- -- virt_viewer_app_set_debug(debug); -- - #ifdef HAVE_SPICE_GTK - if (controller) { -- viewer = remote_viewer_new_with_controller(verbose); -+ viewer = remote_viewer_new_with_controller(); - g_object_set(viewer, "guest-name", "defined by Spice controller", NULL); - } else { - #endif -- viewer = remote_viewer_new(uri, title, verbose); -+ viewer = remote_viewer_new(uri, title); - g_object_set(viewer, "guest-name", uri, NULL); - #ifdef HAVE_SPICE_GTK - } -@@ -207,10 +163,6 @@ main(int argc, char **argv) - goto cleanup; - - app = VIRT_VIEWER_APP(viewer); -- g_object_set(app, "fullscreen-auto-conf", fullscreen_auto_conf, NULL); -- g_object_set(app, "fullscreen", fullscreen, NULL); -- virt_viewer_window_set_zoom_level(virt_viewer_app_get_main_window(app), zoom); -- virt_viewer_app_set_hotkeys(app, hotkeys); - - if (!virt_viewer_app_start(app)) - goto cleanup; -diff --git a/src/remote-viewer.c b/src/remote-viewer.c -index b656175..3f2801f 100644 ---- a/src/remote-viewer.c -+++ b/src/remote-viewer.c -@@ -220,11 +220,10 @@ remote_viewer_init(RemoteViewer *self) - } - - RemoteViewer * --remote_viewer_new(const gchar *uri, const gchar *title, gboolean verbose) -+remote_viewer_new(const gchar *uri, const gchar *title) - { - return g_object_new(REMOTE_VIEWER_TYPE, - "guri", uri, -- "verbose", verbose, - "title", title, - "open-recent-dialog", uri == NULL, - NULL); -@@ -250,7 +249,7 @@ foreign_menu_title_changed(SpiceCtrlForeignMenu *menu G_GNUC_UNUSED, - } - - RemoteViewer * --remote_viewer_new_with_controller(gboolean verbose) -+remote_viewer_new_with_controller(void) - { - RemoteViewer *self; - SpiceCtrlController *ctrl = spice_ctrl_controller_new(); -@@ -259,7 +258,6 @@ remote_viewer_new_with_controller(gboolean verbose) - self = g_object_new(REMOTE_VIEWER_TYPE, - "controller", ctrl, - "foreign-menu", menu, -- "verbose", verbose, - NULL); - g_signal_connect(menu, "notify::title", - G_CALLBACK(foreign_menu_title_changed), -diff --git a/src/remote-viewer.h b/src/remote-viewer.h -index de701e0..6035f94 100644 ---- a/src/remote-viewer.h -+++ b/src/remote-viewer.h -@@ -48,10 +48,8 @@ typedef struct { - - GType remote_viewer_get_type (void); - --RemoteViewer* remote_viewer_new(const gchar *uri, -- const gchar *title, -- gboolean verbose); --RemoteViewer* remote_viewer_new_with_controller(gboolean verbose); -+RemoteViewer* remote_viewer_new(const gchar *uri, const gchar *title); -+RemoteViewer* remote_viewer_new_with_controller(void); - - G_END_DECLS - -diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c -index 6d12584..637896e 100644 ---- a/src/virt-viewer-app.c -+++ b/src/virt-viewer-app.c -@@ -1402,11 +1402,21 @@ gboolean virt_viewer_app_start(VirtViewerApp *self) - return self->priv->started; - } - -+static int opt_zoom = 100; -+static gchar *opt_hotkeys = NULL; -+static gboolean opt_verbose = FALSE; -+static gboolean opt_debug = FALSE; -+static gboolean opt_fullscreen = FALSE; -+static gboolean opt_fullscreen_auto_conf = FALSE; -+ - static void - virt_viewer_app_init (VirtViewerApp *self) - { - GError *error = NULL; - -+ gtk_window_set_default_icon_name("virt-viewer"); -+ virt_viewer_app_set_debug(opt_debug); -+ - self->priv = GET_PRIVATE(self); - self->priv->windows = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, g_object_unref); - self->priv->config = g_key_file_new(); -@@ -1419,6 +1429,14 @@ virt_viewer_app_init (VirtViewerApp *self) - g_debug("Couldn't load configuration: %s", error->message); - - g_clear_error(&error); -+ -+ if (opt_zoom < 10 || opt_zoom > 200) { -+ g_printerr(_("Zoom level must be within 10-200\n")); -+ opt_zoom = 100; -+ } -+ -+ self->priv->verbose = opt_verbose; -+ self->priv->fullscreen_auto_conf = opt_fullscreen_auto_conf; - } - - static void -@@ -1495,6 +1513,10 @@ virt_viewer_app_constructor (GType gtype, - gtk_accel_map_add_entry("<virt-viewer>/view/release-cursor", GDK_F12, GDK_SHIFT_MASK); - gtk_accel_map_add_entry("<virt-viewer>/view/zoom-reset", GDK_0, GDK_CONTROL_MASK); - -+ virt_viewer_window_set_zoom_level(priv->main_window, opt_zoom); -+ virt_viewer_app_set_fullscreen(self, opt_fullscreen); -+ virt_viewer_app_set_hotkeys(self, opt_hotkeys); -+ - return obj; - } - -@@ -2049,6 +2071,45 @@ virt_viewer_app_get_windows(VirtViewerApp *self) - return self->priv->windows; - } - -+static gboolean -+option_fullscreen(G_GNUC_UNUSED const gchar *option_name, -+ const gchar *value, -+ G_GNUC_UNUSED gpointer data, GError **error) -+{ -+ opt_fullscreen = TRUE; -+ -+ if (value == NULL) -+ return TRUE; -+ -+ if (g_str_equal(value, "auto-conf")) { -+ opt_fullscreen_auto_conf = TRUE; -+ return TRUE; -+ } -+ -+ g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, _("Invalid full-screen argument: %s"), value); -+ return FALSE; -+} -+ -+const GOptionEntry * -+virt_viewer_app_get_options(void) -+{ -+ static const GOptionEntry options [] = { -+ { "zoom", 'z', 0, G_OPTION_ARG_INT, &opt_zoom, -+ N_("Zoom level of window, in percentage"), "ZOOM" }, -+ { "full-screen", 'f', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, option_fullscreen, -+ N_("Open in full screen mode (auto-conf adjusts guest resolution to fit the client's)"), N_("<auto-conf>") }, -+ { "hotkeys", 'H', 0, G_OPTION_ARG_STRING, &opt_hotkeys, -+ N_("Customise hotkeys"), NULL }, -+ { "verbose", 'v', 0, G_OPTION_ARG_NONE, &opt_verbose, -+ N_("Display verbose information"), NULL }, -+ { "debug", '\0', 0, G_OPTION_ARG_NONE, &opt_debug, -+ N_("Display debugging information"), NULL }, -+ { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } -+ }; -+ -+ return options; -+} -+ - /* - * Local variables: - * c-indent-level: 4 -diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h -index 93bb988..4721fe3 100644 ---- a/src/virt-viewer-app.h -+++ b/src/virt-viewer-app.h -@@ -98,6 +98,7 @@ gboolean virt_viewer_app_get_enable_accel(VirtViewerApp *self); - VirtViewerSession* virt_viewer_app_get_session(VirtViewerApp *self); - gboolean virt_viewer_app_get_fullscreen(VirtViewerApp *app); - gboolean virt_viewer_app_get_fullscreen_auto_conf(VirtViewerApp *app); -+const GOptionEntry* virt_viewer_app_get_options(void); - - G_END_DECLS - -diff --git a/src/virt-viewer-main.c b/src/virt-viewer-main.c -index 96e2e00..1f3f112 100644 ---- a/src/virt-viewer-main.c -+++ b/src/virt-viewer-main.c -@@ -47,24 +47,17 @@ int main(int argc, char **argv) - GError *error = NULL; - int ret = 1; - char *uri = NULL; -- int zoom = 100; - gchar **args = NULL; -- gchar *hotkeys = NULL; -- gboolean verbose = FALSE; -- gboolean debug = FALSE; - gboolean direct = FALSE; - gboolean attach = FALSE; - gboolean waitvm = FALSE; - gboolean reconnect = FALSE; -- gboolean fullscreen = FALSE; - VirtViewer *viewer = NULL; - char *base_name; - char *help_msg = NULL; - const GOptionEntry options [] = { - { "version", 'V', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, - virt_viewer_version, N_("Display version information"), NULL }, -- { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, -- N_("Display verbose information"), NULL }, - { "direct", 'd', 0, G_OPTION_ARG_NONE, &direct, - N_("Direct connection with no automatic tunnels"), NULL }, - { "attach", 'a', 0, G_OPTION_ARG_NONE, &attach, -@@ -75,14 +68,6 @@ int main(int argc, char **argv) - N_("Wait for domain to start"), NULL }, - { "reconnect", 'r', 0, G_OPTION_ARG_NONE, &reconnect, - N_("Reconnect to domain upon restart"), NULL }, -- { "zoom", 'z', 0, G_OPTION_ARG_INT, &zoom, -- N_("Zoom level of window, in percentage"), "ZOOM" }, -- { "debug", '\0', 0, G_OPTION_ARG_NONE, &debug, -- N_("Display debugging information"), NULL }, -- { "full-screen", 'f', 0, G_OPTION_ARG_NONE, &fullscreen, -- N_("Open in full screen mode"), NULL }, -- { "hotkeys", 'H', 0, G_OPTION_ARG_STRING, &hotkeys, -- N_("Customise hotkeys"), NULL }, - { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &args, - NULL, "-- DOMAIN-NAME|ID|UUID" }, - { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } -@@ -98,6 +83,7 @@ int main(int argc, char **argv) - /* Setup command line options */ - context = g_option_context_new (_("- Virtual machine graphical console")); - g_option_context_add_main_entries (context, options, NULL); -+ g_option_context_add_main_entries (context, virt_viewer_app_get_options(), NULL); - g_option_context_add_group (context, gtk_get_option_group (TRUE)); - #ifdef HAVE_GTK_VNC - g_option_context_add_group (context, vnc_display_get_option_group ()); -@@ -120,21 +106,10 @@ int main(int argc, char **argv) - goto cleanup; - } - -- if (zoom < 10 || zoom > 200) { -- g_printerr(_("Zoom level must be within 10-200\n")); -- goto cleanup; -- } -- -- gtk_window_set_default_icon_name("virt-viewer"); -- -- virt_viewer_app_set_debug(debug); -- -- viewer = virt_viewer_new(uri, args[0], zoom, direct, attach, waitvm, reconnect, verbose); -+ viewer = virt_viewer_new(uri, args[0], direct, attach, waitvm, reconnect); - if (viewer == NULL) - goto cleanup; - -- g_object_set(viewer, "fullscreen", fullscreen, NULL); -- virt_viewer_app_set_hotkeys(VIRT_VIEWER_APP(viewer), hotkeys); - if (!virt_viewer_app_start(VIRT_VIEWER_APP(viewer))) - goto cleanup; - -diff --git a/src/virt-viewer.c b/src/virt-viewer.c -index b98c252..ae25fc6 100644 ---- a/src/virt-viewer.c -+++ b/src/virt-viewer.c -@@ -735,19 +735,16 @@ virt_viewer_start(VirtViewerApp *app) - VirtViewer * - virt_viewer_new(const char *uri, - const char *name, -- gint zoom, - gboolean direct, - gboolean attach, - gboolean waitvm, -- gboolean reconnect, -- gboolean verbose) -+ gboolean reconnect) - { - VirtViewer *self; - VirtViewerApp *app; - VirtViewerPrivate *priv; - - self = g_object_new(VIRT_VIEWER_TYPE, -- "verbose", verbose, - "guest-name", name, - NULL); - app = VIRT_VIEWER_APP(self); -@@ -757,7 +754,6 @@ virt_viewer_new(const char *uri, - * UUID, or NAME string. To be replaced with the real guest name later - */ - g_object_set(app, "title", name, NULL); -- virt_viewer_window_set_zoom_level(virt_viewer_app_get_main_window(app), zoom); - virt_viewer_app_set_direct(app, direct); - virt_viewer_app_set_attach(app, attach); - -diff --git a/src/virt-viewer.h b/src/virt-viewer.h -index 73d9170..c962615 100644 ---- a/src/virt-viewer.h -+++ b/src/virt-viewer.h -@@ -51,12 +51,10 @@ GType virt_viewer_get_type (void); - VirtViewer * - virt_viewer_new(const char *uri, - const char *name, -- gint zoom, - gboolean direct, - gboolean attach, - gboolean waitvm, -- gboolean reconnect, -- gboolean verbose); -+ gboolean reconnect); - - G_END_DECLS - diff --git a/SOURCES/0008-man-Add-missing-.-at-end-of-one-sentence.patch b/SOURCES/0008-man-Add-missing-.-at-end-of-one-sentence.patch new file mode 100644 index 0000000..3667a7b --- /dev/null +++ b/SOURCES/0008-man-Add-missing-.-at-end-of-one-sentence.patch @@ -0,0 +1,22 @@ +From 378f26bc9d0b21e7a4a7ea33cbf6beceb19b3f2c Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Thu, 3 Apr 2014 17:36:30 +0200 +Subject: [PATCH] man: Add missing '.' at end of one sentence + +--- + 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 5b3d6e6..45459ef 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -13,7 +13,7 @@ B<virt-viewer> is a minimal tool for displaying the graphical console + of a virtual machine. The console is accessed using the VNC or SPICE + protocol. The guest can be referred to based on its name, ID, or + UUID. If the guest is not already running, then the viewer can be told +-to wait until it starts before attempting to connect to the console ++to wait until it starts before attempting to connect to the console. + The viewer can connect to remote hosts to lookup the console + information and then also connect to the remote console using the same + network transport. diff --git a/SOURCES/0009-Return-existing-window-in-app_window_new.patch b/SOURCES/0009-Return-existing-window-in-app_window_new.patch deleted file mode 100644 index a96eef8..0000000 --- a/SOURCES/0009-Return-existing-window-in-app_window_new.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 9d1bcdd906535232a886f3b170b85afe9896fcd7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Mon, 19 Aug 2013 19:44:25 +0200 -Subject: [PATCH] Return existing window in app_window_new() - -Since the returned window is weak, it can already returns existing -windows (instead of creating one and failing to insert). - -This allows the following set_kiosk() function to create a main window -before the app constructor is called. - -(cherry picked from commit cd7b5761af9691745f1cee7fa863298db417f8d1) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - src/virt-viewer-app.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c -index 637896e..fd98e62 100644 ---- a/src/virt-viewer-app.c -+++ b/src/virt-viewer-app.c -@@ -658,6 +658,10 @@ virt_viewer_app_window_new(VirtViewerApp *self, gint nth) - VirtViewerWindow* window; - GtkWindow *w; - -+ window = virt_viewer_app_get_nth_window(self, nth); -+ if (window) -+ return window; -+ - window = g_object_new(VIRT_VIEWER_TYPE_WINDOW, "app", self, NULL); - if (self->priv->main_window) - virt_viewer_window_set_zoom_level(window, virt_viewer_window_get_zoom_level(self->priv->main_window)); diff --git a/SOURCES/0009-man-Fix-link-to-GPLv2-text.patch b/SOURCES/0009-man-Fix-link-to-GPLv2-text.patch new file mode 100644 index 0000000..273856e --- /dev/null +++ b/SOURCES/0009-man-Fix-link-to-GPLv2-text.patch @@ -0,0 +1,42 @@ +From e53102cc563d1d382223b1482bfce31f730aa95e Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Fri, 4 Apr 2014 13:59:44 +0200 +Subject: [PATCH] man: Fix link to GPLv2 text + +The unversionned http links point to the GLPv3 text while virt-viewer is +still licensed under the GPLv2. +--- + man/remote-viewer.pod | 4 ++-- + man/virt-viewer.pod | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod +index e35d281..253a809 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -285,8 +285,8 @@ Report bugs to the mailing list C<http://www.redhat.com/mailman/listinfo/virt-to + + Copyright (C) 2012-2014 Red Hat, Inc., and various contributors. + This is free software. You may redistribute copies of it under the terms of the GNU General +-Public License C<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent +-permitted by law. ++Public License C<https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>. There is NO WARRANTY, ++to the extent permitted by law. + + =head1 SEE ALSO + +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index 45459ef..e766712 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -150,8 +150,8 @@ Report bugs to the mailing list C<http://www.redhat.com/mailman/listinfo/virt-to + + Copyright (C) 2007-2014 Red Hat, Inc., and various contributors. + This is free software. You may redistribute copies of it under the terms of the GNU General +-Public License C<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent +-permitted by law. ++Public License C<https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>. There is NO WARRANTY, ++to the extent permitted by law. + + =head1 SEE ALSO + diff --git a/SOURCES/0010-kiosk-add-app-kiosk-option-pass-it-down-to-window.patch b/SOURCES/0010-kiosk-add-app-kiosk-option-pass-it-down-to-window.patch deleted file mode 100644 index 983ebf0..0000000 --- a/SOURCES/0010-kiosk-add-app-kiosk-option-pass-it-down-to-window.patch +++ /dev/null @@ -1,226 +0,0 @@ -From 8a8706418c08eb2d4b027e7d6bfe18087b62efe4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Fri, 16 Aug 2013 20:54:52 +0200 -Subject: [PATCH] kiosk: add app kiosk option, pass it down to window - -See man page update for details. - -(cherry picked from commit 34eab7b91ee5349709e77e6ec85f92ab029a5350) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - man/remote-viewer.pod | 13 +++++++++++++ - man/virt-viewer.pod | 13 +++++++++++++ - src/virt-viewer-app.c | 37 +++++++++++++++++++++++++++++++++++++ - src/virt-viewer-window.c | 13 +++++++++++++ - src/virt-viewer-window.h | 1 + - 5 files changed, 77 insertions(+) - -diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod -index a4710c8..10fda2c 100644 ---- a/man/remote-viewer.pod -+++ b/man/remote-viewer.pod -@@ -77,6 +77,19 @@ smartcard-remove. Examples: - Note that hotkeys for which no binding is given are disabled, specifying an - empty string disables all hotkeys. - -+=item -k, --kiosk -+ -+Start in kiosk mode. In this mode, the application will start in -+fullscreen with minimal UI. It will prevent the user from quitting or -+performing any interaction outside of usage of the remote desktop -+session. -+ -+Note that it can't offer a complete secure solution by itself. Your -+kiosk system must have additional configuration and security settings -+to lock down the OS. In particular, you must configure or disable the -+window manager, limit the session capabilities, use some -+restart/watchdog mechanism, disable VT switching etc. -+ - =back - - =head1 HOTKEY -diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod -index 9187c2e..9d0597a 100644 ---- a/man/virt-viewer.pod -+++ b/man/virt-viewer.pod -@@ -86,6 +86,19 @@ smartcard-insert and smartcard-remove. Examples: - Note that hotkeys for which no binding is given are disabled, specifying an - empty string disables all hotkeys. - -+=item -k, --kiosk -+ -+Start in kiosk mode. In this mode, the application will start in -+fullscreen with minimal UI. It will prevent the user from quitting or -+performing any interaction outside of usage of the remote desktop -+session. -+ -+Note that it can't offer a complete secure solution by itself. Your -+kiosk system must have additional configuration and security settings -+to lock down the OS. In particular, you must configure or disable the -+window manager, limit the session capabilities, use some -+restart/watchdog mechanism, disable VT switching etc. -+ - =back - - =head1 EXAMPLES -diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c -index fd98e62..d3755d8 100644 ---- a/src/virt-viewer-app.c -+++ b/src/virt-viewer-app.c -@@ -119,6 +119,7 @@ struct _VirtViewerAppPrivate { - gboolean fullscreen_auto_conf; - gboolean attach; - gboolean quiting; -+ gboolean kiosk; - - VirtViewerSession *session; - gboolean active; -@@ -165,6 +166,7 @@ enum { - PROP_ENABLE_ACCEL, - PROP_HAS_FOCUS, - PROP_FULLSCREEN_AUTO_CONF, -+ PROP_KIOSK, - }; - - enum { -@@ -251,6 +253,11 @@ virt_viewer_app_quit(VirtViewerApp *self) - g_return_if_fail(VIRT_VIEWER_IS_APP(self)); - VirtViewerAppPrivate *priv = self->priv; - -+ if (self->priv->kiosk) { -+ g_warning("The app is in kiosk mode and can't quit"); -+ return; -+ } -+ - virt_viewer_app_save_config(self); - - if (priv->session) { -@@ -663,6 +670,7 @@ virt_viewer_app_window_new(VirtViewerApp *self, gint nth) - return window; - - window = g_object_new(VIRT_VIEWER_TYPE_WINDOW, "app", self, NULL); -+ virt_viewer_window_set_kiosk(window, self->priv->kiosk); - if (self->priv->main_window) - virt_viewer_window_set_zoom_level(window, virt_viewer_window_get_zoom_level(self->priv->main_window)); - virt_viewer_app_set_nth_window(self, nth, window); -@@ -1256,6 +1264,13 @@ static void virt_viewer_app_usb_failed(VirtViewerSession *session G_GNUC_UNUSED, - } - - static void -+virt_viewer_app_set_kiosk(VirtViewerApp *self, gboolean enabled) -+{ -+ self->priv->kiosk = enabled; -+} -+ -+ -+static void - virt_viewer_app_get_property (GObject *object, guint property_id, - GValue *value G_GNUC_UNUSED, GParamSpec *pspec) - { -@@ -1300,6 +1315,10 @@ virt_viewer_app_get_property (GObject *object, guint property_id, - g_value_set_boolean(value, virt_viewer_app_get_fullscreen_auto_conf(self)); - break; - -+ case PROP_KIOSK: -+ g_value_set_boolean(value, priv->kiosk); -+ break; -+ - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -@@ -1345,6 +1364,10 @@ virt_viewer_app_set_property (GObject *object, guint property_id, - priv->fullscreen_auto_conf = g_value_get_boolean(value); - break; - -+ case PROP_KIOSK: -+ virt_viewer_app_set_kiosk(self, g_value_get_boolean(value)); -+ break; -+ - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -@@ -1412,6 +1435,7 @@ static gboolean opt_verbose = FALSE; - static gboolean opt_debug = FALSE; - static gboolean opt_fullscreen = FALSE; - static gboolean opt_fullscreen_auto_conf = FALSE; -+static gboolean opt_kiosk = FALSE; - - static void - virt_viewer_app_init (VirtViewerApp *self) -@@ -1520,6 +1544,7 @@ virt_viewer_app_constructor (GType gtype, - virt_viewer_window_set_zoom_level(priv->main_window, opt_zoom); - virt_viewer_app_set_fullscreen(self, opt_fullscreen); - virt_viewer_app_set_hotkeys(self, opt_hotkeys); -+ virt_viewer_app_set_kiosk(self, opt_kiosk); - - return obj; - } -@@ -1627,6 +1652,16 @@ virt_viewer_app_class_init (VirtViewerAppClass *klass) - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); - -+ g_object_class_install_property(object_class, -+ PROP_KIOSK, -+ g_param_spec_boolean("kiosk", -+ "Kiosk", -+ "Kiosk mode", -+ FALSE, -+ G_PARAM_CONSTRUCT | -+ G_PARAM_READWRITE | -+ G_PARAM_STATIC_STRINGS)); -+ - signals[SIGNAL_WINDOW_ADDED] = - g_signal_new("window-added", - G_OBJECT_CLASS_TYPE(object_class), -@@ -2104,6 +2139,8 @@ virt_viewer_app_get_options(void) - N_("Open in full screen mode (auto-conf adjusts guest resolution to fit the client's)"), N_("<auto-conf>") }, - { "hotkeys", 'H', 0, G_OPTION_ARG_STRING, &opt_hotkeys, - N_("Customise hotkeys"), NULL }, -+ { "kiosk", 'k', 0, G_OPTION_ARG_NONE, &opt_kiosk, -+ N_("Enable kiosk mode"), NULL }, - { "verbose", 'v', 0, G_OPTION_ARG_NONE, &opt_verbose, - N_("Display verbose information"), NULL }, - { "debug", '\0', 0, G_OPTION_ARG_NONE, &opt_debug, -diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c -index 1fa3982..f4cdeed 100644 ---- a/src/virt-viewer-window.c -+++ b/src/virt-viewer-window.c -@@ -98,6 +98,7 @@ struct _VirtViewerWindowPrivate { - gboolean grabbed; - gint fullscreen_monitor; - gboolean desktop_resize_pending; -+ gboolean kiosk; - - gint zoomlevel; - gboolean auto_resize; -@@ -1337,6 +1338,18 @@ virt_viewer_window_get_display(VirtViewerWindow *self) - return self->priv->display; - } - -+void -+virt_viewer_window_set_kiosk(VirtViewerWindow *self, gboolean enabled) -+{ -+ g_return_if_fail(VIRT_VIEWER_IS_WINDOW(self)); -+ g_return_if_fail(enabled == !!enabled); -+ -+ if (self->priv->kiosk == enabled) -+ return; -+ -+ self->priv->kiosk = enabled; -+} -+ - /* - * Local variables: - * c-indent-level: 4 -diff --git a/src/virt-viewer-window.h b/src/virt-viewer-window.h -index 41ac5e2..33cf8f4 100644 ---- a/src/virt-viewer-window.h -+++ b/src/virt-viewer-window.h -@@ -74,6 +74,7 @@ void virt_viewer_window_leave_fullscreen(VirtViewerWindow *self); - void virt_viewer_window_enter_fullscreen(VirtViewerWindow *self, gint monitor); - GtkMenuItem *virt_viewer_window_get_menu_displays(VirtViewerWindow *self); - GtkBuilder* virt_viewer_window_get_builder(VirtViewerWindow *window); -+void virt_viewer_window_set_kiosk(VirtViewerWindow *self, gboolean enabled); - - G_END_DECLS - diff --git a/SOURCES/0010-man-Fix-concatonated-typo.patch b/SOURCES/0010-man-Fix-concatonated-typo.patch new file mode 100644 index 0000000..e4b36e3 --- /dev/null +++ b/SOURCES/0010-man-Fix-concatonated-typo.patch @@ -0,0 +1,23 @@ +From 0d762a00b092ef06af9c8e57f26c1611bcafcd59 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Fri, 4 Apr 2014 14:36:03 +0200 +Subject: [PATCH] man: Fix 'concatonated' typo + +This also removes an extra 'are' in the same sentence. +--- + 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 253a809..f65101b 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -241,7 +241,7 @@ C<class,vendor,product,version,allow> + + Use -1 for class/vendor/product/version to accept any value. + +-And the rules are themselves are concatonated like this: ++And the rules themselves are concatenated like this: + + C<rule1|rule2|rule3> + diff --git a/SOURCES/0011-kiosk-open-a-window-on-each-client-monitor.patch b/SOURCES/0011-kiosk-open-a-window-on-each-client-monitor.patch deleted file mode 100644 index 37bd337..0000000 --- a/SOURCES/0011-kiosk-open-a-window-on-each-client-monitor.patch +++ /dev/null @@ -1,43 +0,0 @@ -From dc45278502108076a95f8878a4ef2d6720034d9e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Mon, 15 Jul 2013 20:54:10 +0200 -Subject: [PATCH] kiosk: open a window on each client monitor - -Open a window on each client monitor in fullscreen. If the remote -display has less monitors than the client, the extra client monitors -will still be used to prevent the user from accessing the windows or -desktop below, and also to show some status messages when necessary. - -(cherry picked from commit 90f5bf7ac79421438481ad371cc8c1394ff89970) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - src/virt-viewer-app.c | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c -index d3755d8..2d68625 100644 ---- a/src/virt-viewer-app.c -+++ b/src/virt-viewer-app.c -@@ -1266,7 +1266,22 @@ static void virt_viewer_app_usb_failed(VirtViewerSession *session G_GNUC_UNUSED, - static void - virt_viewer_app_set_kiosk(VirtViewerApp *self, gboolean enabled) - { -+ int i; -+ - self->priv->kiosk = enabled; -+ virt_viewer_app_set_fullscreen(self, enabled); -+ -+ for (i = 0; i < gdk_screen_get_n_monitors(gdk_screen_get_default()); i++) { -+ VirtViewerWindow *win = virt_viewer_app_get_nth_window(self, i); -+ -+ if (win == NULL) -+ win = virt_viewer_app_window_new(self, i); -+ -+ if (enabled) -+ virt_viewer_window_show(win); -+ -+ virt_viewer_window_set_kiosk(win, enabled); -+ } - } - - diff --git a/SOURCES/0011-man-Use-nicer-link-to-GPLv2.patch b/SOURCES/0011-man-Use-nicer-link-to-GPLv2.patch new file mode 100644 index 0000000..24dec9c --- /dev/null +++ b/SOURCES/0011-man-Use-nicer-link-to-GPLv2.patch @@ -0,0 +1,40 @@ +From 1d01f3c9f4a2bbed427d860d4e46c861f6c7de09 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Mon, 7 Apr 2014 09:07:05 +0200 +Subject: [PATCH] man: Use nicer link to GPLv2 + +As pointed out by Eric Blake, +https://www.gnu.org/licenses/gpl-2.0.html and +https://www.gnu.org/licenses/old-licenses/gpl-2.0.html +both point to the same location, with the former being nicer to read. +--- + man/remote-viewer.pod | 2 +- + man/virt-viewer.pod | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod +index f65101b..63216e3 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -285,7 +285,7 @@ Report bugs to the mailing list C<http://www.redhat.com/mailman/listinfo/virt-to + + Copyright (C) 2012-2014 Red Hat, Inc., and various contributors. + This is free software. You may redistribute copies of it under the terms of the GNU General +-Public License C<https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>. There is NO WARRANTY, ++Public License C<https://www.gnu.org/licenses/gpl-2.0.html>. There is NO WARRANTY, + to the extent permitted by law. + + =head1 SEE ALSO +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index e766712..8b52377 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -150,7 +150,7 @@ Report bugs to the mailing list C<http://www.redhat.com/mailman/listinfo/virt-to + + Copyright (C) 2007-2014 Red Hat, Inc., and various contributors. + This is free software. You may redistribute copies of it under the terms of the GNU General +-Public License C<https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>. There is NO WARRANTY, ++Public License C<https://www.gnu.org/licenses/gpl-2.0.html>. There is NO WARRANTY, + to the extent permitted by law. + + =head1 SEE ALSO diff --git a/SOURCES/0012-kiosk-use-less-verbose-window-display-status.patch b/SOURCES/0012-kiosk-use-less-verbose-window-display-status.patch deleted file mode 100644 index 6c91165..0000000 --- a/SOURCES/0012-kiosk-use-less-verbose-window-display-status.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 902041dbd8ab97bf4dffa160ed321120e317cbaf Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Mon, 15 Jul 2013 20:46:53 +0200 -Subject: [PATCH] kiosk: use less verbose window/display status - -We want extra windows to remain blank after connection. - -For example, if the remote has a single monitor, and client has more, we -don't want extra client monitors to say "Connected to graphic server" -all the time on other monitors. Instead, we leave them empty/black in -kiosk mode. - -(cherry picked from commit 312da84df70ee989b673524f6624ef93b81c8903) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - src/virt-viewer-app.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c -index 2d68625..6ebff3e 100644 ---- a/src/virt-viewer-app.c -+++ b/src/virt-viewer-app.c -@@ -715,7 +715,8 @@ display_show_hint(VirtViewerDisplay *display, - if (win != self->priv->main_window && - g_getenv("VIRT_VIEWER_HIDE")) - virt_viewer_window_hide(win); -- virt_viewer_notebook_show_status(nb, _("Waiting for display %d..."), nth + 1); -+ if (!self->priv->kiosk) -+ virt_viewer_notebook_show_status(nb, _("Waiting for display %d..."), nth + 1); - } - virt_viewer_app_update_menu_displays(self); - -@@ -1179,7 +1180,11 @@ virt_viewer_app_connected(VirtViewerSession *session G_GNUC_UNUSED, - VirtViewerAppPrivate *priv = self->priv; - - priv->connected = TRUE; -- virt_viewer_app_show_status(self, _("Connected to graphic server")); -+ -+ if (self->priv->kiosk) -+ virt_viewer_app_show_status(self, ""); -+ else -+ virt_viewer_app_show_status(self, _("Connected to graphic server")); - } - - diff --git a/SOURCES/0012-man-remove-Perl-header.patch b/SOURCES/0012-man-remove-Perl-header.patch new file mode 100644 index 0000000..c140ba2 --- /dev/null +++ b/SOURCES/0012-man-remove-Perl-header.patch @@ -0,0 +1,22 @@ +From 3ef2353f56185575657512a6b5787fb9899d1596 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Thu, 3 Apr 2014 14:21:02 +0200 +Subject: [PATCH] man: remove Perl header + +Remove "User Contributed Perl Documentation" header. +--- + man/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/Makefile.am b/man/Makefile.am +index d6f709c..13bfb94 100644 +--- a/man/Makefile.am ++++ b/man/Makefile.am +@@ -13,6 +13,6 @@ EXTRA_DIST = \ + DISTCLEANFILES = $(man_MANS) + + %.1: %.pod +- pod2man $< > $@ ++ pod2man -c "Virtualization Support" $< > $@ + + -include $(top_srcdir)/git.mk diff --git a/SOURCES/0013-Don-t-show-do-you-want-to-quit-dialog-in-kiosk-mode.patch b/SOURCES/0013-Don-t-show-do-you-want-to-quit-dialog-in-kiosk-mode.patch new file mode 100644 index 0000000..5e33c8a --- /dev/null +++ b/SOURCES/0013-Don-t-show-do-you-want-to-quit-dialog-in-kiosk-mode.patch @@ -0,0 +1,45 @@ +From 3c712c34f7d9fa6ecbeea04386850524c48f9028 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Thu, 6 Feb 2014 10:07:14 +0100 +Subject: [PATCH] Don't show 'do you want to quit' dialog in kiosk mode + +In some situation, (for example, guest without vdagent running), it's +possible to pass key combinations to virt-viewer. When using alt+f4, +this can cause the 'do you want to quit?' dialog to show while it's +non-functional. +This commit moves the check for kiosk mode to before we show this dialog. +--- + src/virt-viewer-app.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 4f31812..499c33f 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -252,13 +252,9 @@ static void + virt_viewer_app_quit(VirtViewerApp *self) + { + g_return_if_fail(VIRT_VIEWER_IS_APP(self)); ++ g_return_if_fail(!self->priv->kiosk); + VirtViewerAppPrivate *priv = self->priv; + +- if (self->priv->kiosk) { +- g_warning("The app is in kiosk mode and can't quit"); +- return; +- } +- + virt_viewer_app_save_config(self); + + if (priv->session) { +@@ -367,6 +363,11 @@ virt_viewer_app_maybe_quit(VirtViewerApp *self, VirtViewerWindow *window) + { + GError *error = NULL; + ++ if (self->priv->kiosk) { ++ g_warning("The app is in kiosk mode and can't quit"); ++ return; ++ } ++ + gboolean ask = g_key_file_get_boolean(self->priv->config, + "virt-viewer", "ask-quit", &error); + if (error) { diff --git a/SOURCES/0013-kiosk-keep-a-reference-on-the-toolbar.patch b/SOURCES/0013-kiosk-keep-a-reference-on-the-toolbar.patch deleted file mode 100644 index 40de249..0000000 --- a/SOURCES/0013-kiosk-keep-a-reference-on-the-toolbar.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0d078b265ebfa8c6948cfb00d38ff30e67f181d2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Mon, 15 Jul 2013 20:48:37 +0200 -Subject: [PATCH] kiosk: keep a reference on the toolbar - -We are going to change the container content dynamically, so we need a -strong reference. - -(cherry picked from commit 4759171289c48884ba875897e22131766201a24e) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - src/virt-viewer-window.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c -index f4cdeed..45d1a35 100644 ---- a/src/virt-viewer-window.c -+++ b/src/virt-viewer-window.c -@@ -192,6 +192,7 @@ virt_viewer_window_dispose (GObject *object) - priv->subtitle = NULL; - - g_value_unset(&priv->accel_setting); -+ g_clear_object(&priv->toolbar); - } - - static void -@@ -1031,7 +1032,7 @@ virt_viewer_window_toolbar_setup(VirtViewerWindow *self) - GtkWidget *button; - VirtViewerWindowPrivate *priv = self->priv; - -- priv->toolbar = gtk_toolbar_new(); -+ priv->toolbar = g_object_ref(gtk_toolbar_new()); - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(priv->toolbar), FALSE); - gtk_widget_set_no_show_all(priv->toolbar, TRUE); - gtk_toolbar_set_style(GTK_TOOLBAR(priv->toolbar), GTK_TOOLBAR_BOTH_HORIZ); diff --git a/SOURCES/0014-Set-freed-variables-to-NULL-in-remote_viewer_start.patch b/SOURCES/0014-Set-freed-variables-to-NULL-in-remote_viewer_start.patch new file mode 100644 index 0000000..2066389 --- /dev/null +++ b/SOURCES/0014-Set-freed-variables-to-NULL-in-remote_viewer_start.patch @@ -0,0 +1,27 @@ +From 5e8642eb1f32109bf4801bd903fa945f580c0f2a Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Tue, 3 Jun 2014 11:13:14 -0500 +Subject: [PATCH] Set freed variables to NULL in remote_viewer_start() + +Coverity warns that 'type' can sometimes be used or free after already having +been freed. This can happen when open_recent_dialog is true and we jump back up +to the retry_dialog label. To prevent this, make sure the freed variables are +set to NULL after freeing. +--- + src/remote-viewer.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 768ff74..5fa4ee4 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -1043,7 +1043,9 @@ cleanup: + g_clear_object(&file); + g_clear_object(&vvfile); + g_free(guri); ++ guri = NULL; + g_free(type); ++ type = NULL; + + if (!ret && priv->open_recent_dialog) { + goto retry_dialog; diff --git a/SOURCES/0014-kiosk-teach-a-window-to-become-kiosk-mode.patch b/SOURCES/0014-kiosk-teach-a-window-to-become-kiosk-mode.patch deleted file mode 100644 index c5707e3..0000000 --- a/SOURCES/0014-kiosk-teach-a-window-to-become-kiosk-mode.patch +++ /dev/null @@ -1,63 +0,0 @@ -From aeec46ecc9ed5acb358a31db2566dd568534de6f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Mon, 15 Jul 2013 20:50:55 +0200 -Subject: [PATCH] kiosk: teach a window to become kiosk-mode - -Remove the toolbar, disable modifiers. - -(cherry picked from commit b7e153950ed473251c8ec67816fd8fcd0b0cdd0d) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - src/virt-viewer-window.c | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - -diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c -index 45d1a35..9ab6cc4 100644 ---- a/src/virt-viewer-window.c -+++ b/src/virt-viewer-window.c -@@ -1260,6 +1260,23 @@ virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *displa - } - } - -+static void -+virt_viewer_window_enable_kiosk(VirtViewerWindow *self) -+{ -+ VirtViewerWindowPrivate *priv; -+ -+ g_return_if_fail(VIRT_VIEWER_IS_WINDOW(self)); -+ priv = self->priv; -+ -+ ViewOvBox_SetOver(VIEW_OV_BOX(priv->layout), gtk_drawing_area_new()); -+ ViewAutoDrawer_SetActive(VIEW_AUTODRAWER(priv->layout), FALSE); -+ ViewAutoDrawer_SetOverlapPixels(VIEW_AUTODRAWER(priv->layout), 0); -+ -+ /* You probably also want X11 Option "DontVTSwitch" "true" */ -+ /* and perhaps more distro/desktop-specific options */ -+ virt_viewer_window_disable_modifiers(self); -+} -+ - void - virt_viewer_window_show(VirtViewerWindow *self) - { -@@ -1273,6 +1290,9 @@ virt_viewer_window_show(VirtViewerWindow *self) - self->priv->desktop_resize_pending = FALSE; - } - -+ if (self->priv->kiosk) -+ virt_viewer_window_enable_kiosk(self); -+ - virt_viewer_window_move_to_monitor(self); - } - -@@ -1349,6 +1369,11 @@ virt_viewer_window_set_kiosk(VirtViewerWindow *self, gboolean enabled) - return; - - self->priv->kiosk = enabled; -+ -+ if (enabled) -+ virt_viewer_window_enable_kiosk(self); -+ else -+ g_debug("disabling kiosk not implemented yet"); - } - - /* diff --git a/SOURCES/0015-Don-t-resize-guest-display-on-zoom-change.patch b/SOURCES/0015-Don-t-resize-guest-display-on-zoom-change.patch new file mode 100644 index 0000000..09e1436 --- /dev/null +++ b/SOURCES/0015-Don-t-resize-guest-display-on-zoom-change.patch @@ -0,0 +1,60 @@ +From 8269ad003fffbb92ac93afc7f6d21e9ba7a8b934 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 21 Feb 2014 16:39:30 -0600 +Subject: [PATCH] Don't resize guest display on zoom change + +When the zoom level is changed, the virt-viewer window gets resized. But we +don't want this to trigger a resize of the guest display. But occasionally +rounding errors cause the guest display to be reconfigured when zooming out. To +fix this, we first check whether the current size is the preferred size. If it +is, we don't send down a resize command to the guest. + +In addition to preventing guest resizes in response to zooming, it also improves +the behavior when the guest display resolution is changed from within the guest. +Before this change, we'd have the following behavior: + A. guest changes display to WxH + B. client gets notified of change and resizes the window to WxH + C. client responds to window resize by sending a new monitor config command to the guest + +With this change, the extra step C will be avoided because we're already at the +preferred size. + +Resolves: rhbz#1004051 +--- + src/virt-viewer-display-spice.c | 21 ++++++++++++++++++++- + 1 file changed, 20 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c +index ff0d069..8bffe5b 100644 +--- a/src/virt-viewer-display-spice.c ++++ b/src/virt-viewer-display-spice.c +@@ -185,9 +185,28 @@ virt_viewer_display_spice_mouse_grab(SpiceDisplay *display G_GNUC_UNUSED, + + static void + virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self, +- GtkAllocation *allocation G_GNUC_UNUSED, ++ GtkAllocation *allocation, + gpointer data G_GNUC_UNUSED) + { ++ GtkRequisition preferred; ++ ++ /* ignore all allocations before the widget gets mapped to screen since we ++ * only want to trigger guest resizing due to user actions ++ */ ++ if (!gtk_widget_get_mapped(GTK_WIDGET(self))) ++ return; ++ ++ /* when the window gets resized due to a change in zoom level, we don't want ++ * to re-size the guest display. So if we get an allocation event that ++ * resizes the window to the size it already wants to be (based on desktop ++ * size and zoom level), just return early ++ */ ++ gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, &preferred); ++ if (preferred.width == allocation->width ++ && preferred.height == allocation->height) { ++ return; ++ } ++ + if (self->priv->auto_resize != AUTO_RESIZE_NEVER) + virt_viewer_display_spice_monitor_geometry_changed(self); + diff --git a/SOURCES/0015-kiosk-add-kiosk-quit-option.patch b/SOURCES/0015-kiosk-add-kiosk-quit-option.patch deleted file mode 100644 index 3aef451..0000000 --- a/SOURCES/0015-kiosk-add-kiosk-quit-option.patch +++ /dev/null @@ -1,172 +0,0 @@ -From 866c00a73e802f8ebc347f4986d3a4044a93bc24 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Mon, 15 Jul 2013 20:52:15 +0200 -Subject: [PATCH] kiosk: add --kiosk-quit option - -In kiosk mode, it's useful to keep the app alive, even if the remote -session ended for example. Ie, we want to prevent the app from quiting -itself, even if the remote end closed, lost network, or crashed etc. - -(cherry picked from commit 91928798e45cd848585f33c269b4699cb26d8f1f) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - man/remote-viewer.pod | 7 +++++++ - man/virt-viewer.pod | 8 ++++++++ - src/virt-viewer-app.c | 44 +++++++++++++++++++++++++++++++++++++++++++- - 3 files changed, 58 insertions(+), 1 deletion(-) - -diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod -index 10fda2c..079def0 100644 ---- a/man/remote-viewer.pod -+++ b/man/remote-viewer.pod -@@ -90,6 +90,13 @@ to lock down the OS. In particular, you must configure or disable the - window manager, limit the session capabilities, use some - restart/watchdog mechanism, disable VT switching etc. - -+=item --kiosk-quit <never|on-disconnect> -+ -+By default, when kiosk mode is enabled, virt-viewer will remain open -+when the connection to the remote server is terminated. By setting -+kiosk-quit option to "on-disconnect" value, virt-viewer will quit -+instead. -+ - =back - - =head1 HOTKEY -diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod -index 9d0597a..fdaa631 100644 ---- a/man/virt-viewer.pod -+++ b/man/virt-viewer.pod -@@ -99,6 +99,14 @@ to lock down the OS. In particular, you must configure or disable the - window manager, limit the session capabilities, use some - restart/watchdog mechanism, disable VT switching etc. - -+=item --kiosk-quit <never|on-disconnect> -+ -+By default, when kiosk mode is enabled, virt-viewer will remain open -+when the connection to the remote server is terminated. By setting -+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. -+ - =back - - =head1 EXAMPLES -diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c -index 6ebff3e..f8c5117 100644 ---- a/src/virt-viewer-app.c -+++ b/src/virt-viewer-app.c -@@ -148,6 +148,7 @@ struct _VirtViewerAppPrivate { - GdkModifierType insert_smartcard_accel_mods; - guint remove_smartcard_accel_key; - GdkModifierType remove_smartcard_accel_mods; -+ gboolean quit_on_disconnect; - }; - - -@@ -167,6 +168,7 @@ enum { - PROP_HAS_FOCUS, - PROP_FULLSCREEN_AUTO_CONF, - PROP_KIOSK, -+ PROP_QUIT_ON_DISCONNECT, - }; - - enum { -@@ -1130,7 +1132,8 @@ virt_viewer_app_default_deactivated(VirtViewerApp *self, gboolean connect_error) - priv->guest_name); - } - -- gtk_main_quit(); -+ if (self->priv->quit_on_disconnect) -+ gtk_main_quit(); - } - - static void -@@ -1339,6 +1342,10 @@ virt_viewer_app_get_property (GObject *object, guint property_id, - g_value_set_boolean(value, priv->kiosk); - break; - -+ case PROP_QUIT_ON_DISCONNECT: -+ g_value_set_boolean(value, priv->quit_on_disconnect); -+ break; -+ - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -@@ -1388,6 +1395,10 @@ virt_viewer_app_set_property (GObject *object, guint property_id, - virt_viewer_app_set_kiosk(self, g_value_get_boolean(value)); - break; - -+ case PROP_QUIT_ON_DISCONNECT: -+ priv->quit_on_disconnect = g_value_get_boolean(value); -+ break; -+ - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); - } -@@ -1456,6 +1467,7 @@ static gboolean opt_debug = FALSE; - static gboolean opt_fullscreen = FALSE; - static gboolean opt_fullscreen_auto_conf = FALSE; - static gboolean opt_kiosk = FALSE; -+static gboolean opt_kiosk_quit = FALSE; - - static void - virt_viewer_app_init (VirtViewerApp *self) -@@ -1485,6 +1497,7 @@ virt_viewer_app_init (VirtViewerApp *self) - - self->priv->verbose = opt_verbose; - self->priv->fullscreen_auto_conf = opt_fullscreen_auto_conf; -+ self->priv->quit_on_disconnect = opt_kiosk ? opt_kiosk_quit : TRUE; - } - - static void -@@ -1682,6 +1695,15 @@ virt_viewer_app_class_init (VirtViewerAppClass *klass) - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); - -+ g_object_class_install_property(object_class, -+ PROP_QUIT_ON_DISCONNECT, -+ g_param_spec_boolean("quit-on-disconnect", -+ "Quit on disconnect", -+ "Quit on disconnect", -+ TRUE, -+ G_PARAM_READWRITE | -+ G_PARAM_STATIC_STRINGS)); -+ - signals[SIGNAL_WINDOW_ADDED] = - g_signal_new("window-added", - G_OBJECT_CLASS_TYPE(object_class), -@@ -2149,6 +2171,24 @@ option_fullscreen(G_GNUC_UNUSED const gchar *option_name, - return FALSE; - } - -+static gboolean -+option_kiosk_quit(G_GNUC_UNUSED const gchar *option_name, -+ const gchar *value, -+ G_GNUC_UNUSED gpointer data, GError **error) -+{ -+ if (g_str_equal(value, "never")) { -+ opt_kiosk_quit = FALSE; -+ return TRUE; -+ } -+ if (g_str_equal(value, "on-disconnect")) { -+ opt_kiosk_quit = TRUE; -+ return TRUE; -+ } -+ -+ g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, _("Invalid kiosk-quit argument: %s"), value); -+ return FALSE; -+} -+ - const GOptionEntry * - virt_viewer_app_get_options(void) - { -@@ -2161,6 +2201,8 @@ virt_viewer_app_get_options(void) - N_("Customise hotkeys"), NULL }, - { "kiosk", 'k', 0, G_OPTION_ARG_NONE, &opt_kiosk, - N_("Enable kiosk mode"), NULL }, -+ { "kiosk-quit", '\0', 0, G_OPTION_ARG_CALLBACK, option_kiosk_quit, -+ N_("Quit on given condition in kiosk mode"), N_("<never|on-disconnect>") }, - { "verbose", 'v', 0, G_OPTION_ARG_NONE, &opt_verbose, - N_("Display verbose information"), NULL }, - { "debug", '\0', 0, G_OPTION_ARG_NONE, &opt_debug, diff --git a/SOURCES/0016-Fix-regression-with-enabling-additional-displays.patch b/SOURCES/0016-Fix-regression-with-enabling-additional-displays.patch new file mode 100644 index 0000000..d3f1f69 --- /dev/null +++ b/SOURCES/0016-Fix-regression-with-enabling-additional-displays.patch @@ -0,0 +1,70 @@ +From bbf59fabc8071bf671783b86be5604ce184aa9a3 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 14 Mar 2014 15:35:04 -0500 +Subject: [PATCH] Fix regression with enabling additional displays + +Commit 8fa942 broke enabling of additional displays. We don't want to send down +display re-configurations due to events that happen while setting up windows for +enabled displays that we recieve from the server. However, by ignoring +allocations on unmapped windows, we fail to send display configurations for new +displays that a user is attempting to enable via the window menu. To +discriminate between these two cases, we check whether the display is in the +'ready' state or not. +- Unmapped displays with the 'ready' hint set can be assumed to be displays + that are enabled on the server that we are attempting to create windows for on + the client. In this case, we should *not* send a display configuration to the + server +- Unmapped displays with the 'ready' hint cleared can be assumed to be displays + that are not yet enabled on the server that we are trying to enable in the + client. In this case, we *should* send a display configuration to the server +--- + src/virt-viewer-display-spice.c | 36 ++++++++++++++++++++---------------- + 1 file changed, 20 insertions(+), 16 deletions(-) + +diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c +index 8bffe5b..c400f51 100644 +--- a/src/virt-viewer-display-spice.c ++++ b/src/virt-viewer-display-spice.c +@@ -189,22 +189,26 @@ virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self, + gpointer data G_GNUC_UNUSED) + { + GtkRequisition preferred; +- +- /* ignore all allocations before the widget gets mapped to screen since we +- * only want to trigger guest resizing due to user actions +- */ +- if (!gtk_widget_get_mapped(GTK_WIDGET(self))) +- return; +- +- /* when the window gets resized due to a change in zoom level, we don't want +- * to re-size the guest display. So if we get an allocation event that +- * resizes the window to the size it already wants to be (based on desktop +- * size and zoom level), just return early +- */ +- gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, &preferred); +- if (preferred.width == allocation->width +- && preferred.height == allocation->height) { +- return; ++ guint hint = virt_viewer_display_get_show_hint(VIRT_VIEWER_DISPLAY(self)); ++ ++ if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY) ++ { ++ /* ignore all allocations before the widget gets mapped to screen since we ++ * only want to trigger guest resizing due to user actions ++ */ ++ if (!gtk_widget_get_mapped(GTK_WIDGET(self))) ++ return; ++ ++ /* when the window gets resized due to a change in zoom level, we don't want ++ * to re-size the guest display. So if we get an allocation event that ++ * resizes the window to the size it already wants to be (based on desktop ++ * size and zoom level), just return early ++ */ ++ gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, &preferred); ++ if (preferred.width == allocation->width ++ && preferred.height == allocation->height) { ++ return; ++ } + } + + if (self->priv->auto_resize != AUTO_RESIZE_NEVER) diff --git a/SOURCES/0016-kiosk-warn-and-prevent-if-app-want-to-quit-or-window.patch b/SOURCES/0016-kiosk-warn-and-prevent-if-app-want-to-quit-or-window.patch deleted file mode 100644 index b160495..0000000 --- a/SOURCES/0016-kiosk-warn-and-prevent-if-app-want-to-quit-or-window.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 3d9b290590fd6b45ab8d65b2fad3c33d80be601b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Mon, 15 Jul 2013 20:52:42 +0200 -Subject: [PATCH] kiosk: warn and prevent if app want to quit or window to hide - -These condition shouldn't happen, they are here for debugging -purposes (ie file a bug if it happens). - -(cherry picked from commit 8a90721d648cc60b93d8d23189b836ff696cbf6c) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - src/virt-viewer-window.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c -index 9ab6cc4..30b340d 100644 ---- a/src/virt-viewer-window.c -+++ b/src/virt-viewer-window.c -@@ -1299,6 +1299,11 @@ virt_viewer_window_show(VirtViewerWindow *self) - void - virt_viewer_window_hide(VirtViewerWindow *self) - { -+ if (self->priv->kiosk) { -+ g_warning("Can't hide windows in kiosk mode"); -+ return; -+ } -+ - gtk_widget_hide(self->priv->window); - - if (self->priv->display) { diff --git a/SOURCES/0017-Fix-gtk2-build.patch b/SOURCES/0017-Fix-gtk2-build.patch new file mode 100644 index 0000000..9923fdd --- /dev/null +++ b/SOURCES/0017-Fix-gtk2-build.patch @@ -0,0 +1,102 @@ +From bc4be9139c60541659fae1fd961d9eb770820b08 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Mon, 31 Mar 2014 17:12:16 -0500 +Subject: [PATCH] Fix gtk2 build + +Previous commit accidentally broke gtk2 build by using +gtk_widget_get_preferred_size(). We can't simply use gtk_widget_size_request() +for the gtk2 build since this will generally return 50x50 whenever we're not in +the middle of a resize, so we need to add a compatibility function. +--- + src/virt-viewer-display-spice.c | 2 +- + src/virt-viewer-display.c | 41 ++++++++++++++++++++++++++++------------- + src/virt-viewer-display.h | 1 + + 3 files changed, 30 insertions(+), 14 deletions(-) + +diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c +index c400f51..0450b5b 100644 +--- a/src/virt-viewer-display-spice.c ++++ b/src/virt-viewer-display-spice.c +@@ -204,7 +204,7 @@ virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self, + * resizes the window to the size it already wants to be (based on desktop + * size and zoom level), just return early + */ +- gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, &preferred); ++ virt_viewer_display_get_preferred_size(VIRT_VIEWER_DISPLAY(self), &preferred); + if (preferred.width == allocation->width + && preferred.height == allocation->height) { + return; +diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c +index 6c078a5..f298bb0 100644 +--- a/src/virt-viewer-display.c ++++ b/src/virt-viewer-display.c +@@ -377,6 +377,31 @@ virt_viewer_display_grab_focus(GtkWidget *widget) + gtk_widget_grab_focus(gtk_bin_get_child(bin)); + } + ++/* Compatibility function to allow gtk2 to emulate gtk3 behavior. We can't use ++ * the size request since it simply returns the minimum size whenever dirty is ++ * false */ ++void virt_viewer_display_get_preferred_size(VirtViewerDisplay *self, ++ GtkRequisition *requisition) ++{ ++#if GTK_CHECK_VERSION(3, 0, 0) ++ gtk_widget_get_preferred_size(GTK_WIDGET(self), NULL, requisition); ++#else ++ VirtViewerDisplayPrivate *priv = self->priv; ++ int border_width = gtk_container_get_border_width(GTK_CONTAINER(self)); ++ ++ requisition->width = border_width * 2; ++ requisition->height = border_width * 2; ++ ++ if (priv->zoom) { ++ requisition->width += round(priv->desktopWidth * priv->zoom_level / 100.0); ++ requisition->height += round(priv->desktopHeight * priv->zoom_level / 100.0); ++ } else { ++ requisition->width += priv->desktopWidth; ++ requisition->height += priv->desktopHeight; ++ } ++#endif ++} ++ + + #if !GTK_CHECK_VERSION(3, 0, 0) + static gboolean +@@ -396,22 +421,12 @@ virt_viewer_display_size_request(GtkWidget *widget, + { + VirtViewerDisplay *display = VIRT_VIEWER_DISPLAY(widget); + VirtViewerDisplayPrivate *priv = display->priv; +- int border_width = gtk_container_get_border_width(GTK_CONTAINER(widget)); +- +- requisition->width = border_width * 2; +- requisition->height = border_width * 2; + + if (priv->dirty) { +- if (priv->zoom) { +- requisition->width += round(priv->desktopWidth * priv->zoom_level / 100.0); +- requisition->height += round(priv->desktopHeight * priv->zoom_level / 100.0); +- } else { +- requisition->width += priv->desktopWidth; +- requisition->height += priv->desktopHeight; +- } ++ virt_viewer_display_get_preferred_size(display, requisition); + } else { +- requisition->width += 50; +- requisition->height += 50; ++ requisition->width = 50; ++ requisition->height = 50; + } + + DEBUG_LOG("Display size request %dx%d (desktop %dx%d)", +diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h +index fe88d98..70ce772 100644 +--- a/src/virt-viewer-display.h ++++ b/src/virt-viewer-display.h +@@ -126,6 +126,7 @@ gboolean virt_viewer_display_get_enabled(VirtViewerDisplay *display); + gboolean virt_viewer_display_get_selectable(VirtViewerDisplay *display); + void virt_viewer_display_queue_resize(VirtViewerDisplay *display); + void virt_viewer_display_get_preferred_monitor_geometry(VirtViewerDisplay *self, GdkRectangle* preferred); ++void virt_viewer_display_get_preferred_size(VirtViewerDisplay *self, GtkRequisition* requisistion); + + G_END_DECLS + diff --git a/SOURCES/0017-kiosk-don-t-open-extra-monitors.patch b/SOURCES/0017-kiosk-don-t-open-extra-monitors.patch deleted file mode 100644 index 4da0a0b..0000000 --- a/SOURCES/0017-kiosk-don-t-open-extra-monitors.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 4fb186f97bafbe2ff1c162c8e921c21aef3683dd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Mon, 15 Jul 2013 20:53:15 +0200 -Subject: [PATCH] kiosk: don't open extra monitors - -In kiosk mode, we don't want new monitors windows that wouldn't fit on -the client monitors to come up. - -(cherry picked from commit 1cbacd462ea4925c6a083edb6120e56740a0c5df) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 ---- - src/virt-viewer-app.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - -diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c -index f8c5117..40c2633 100644 ---- a/src/virt-viewer-app.c -+++ b/src/virt-viewer-app.c -@@ -738,8 +738,17 @@ virt_viewer_app_display_added(VirtViewerSession *session G_GNUC_UNUSED, - if (nth == 0) { - window = priv->main_window; - } else { -- g_return_if_fail(virt_viewer_app_get_nth_window(self, nth) == NULL); -- window = virt_viewer_app_window_new(self, nth); -+ window = virt_viewer_app_get_nth_window(self, nth); -+ if (window == NULL) { -+ if (priv->kiosk) { -+ /* don't show extra monitors that don't fit on client */ -+ g_debug("kiosk mode: skip extra monitors that don't fit on client"); -+ g_object_unref(display); -+ return; -+ } -+ -+ window = virt_viewer_app_window_new(self, nth); -+ } - } - - virt_viewer_window_set_display(window, display); diff --git a/SOURCES/0018-kiosk-explicit-resize-window-to-fullscreen-size.patch b/SOURCES/0018-kiosk-explicit-resize-window-to-fullscreen-size.patch deleted file mode 100644 index b81d0e6..0000000 --- a/SOURCES/0018-kiosk-explicit-resize-window-to-fullscreen-size.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 0dd83aeb14023581b120e37efd929bee262f1288 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Mon, 15 Jul 2013 20:54:33 +0200 -Subject: [PATCH] kiosk: explicit resize window to fullscreen size - -Allow to run the client in kiosk mode with window-manager-less -environment. - -This was a conditional workaroud on win32. I am making it -non-conditional to make fullscreen work on non-wm environment. Hence -I don't see the need to refer explicitely to the bug workaround, since -it is no longer something that should be removed, even when bgo 652049 -is fixed. - -(cherry picked from commit 67ed4dff9829a1d957aebba9223028f6805dfafb) -https://bugzilla.redhat.com/show_bug.cgi?id=1040926 -https://bugzilla.redhat.com/show_bug.cgi?id=921332 ---- - src/virt-viewer-window.c | 7 +------ - 1 file changed, 1 insertion(+), 6 deletions(-) - -diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c -index 30b340d..abe3aa9 100644 ---- a/src/virt-viewer-window.c -+++ b/src/virt-viewer-window.c -@@ -480,13 +480,10 @@ virt_viewer_window_move_to_monitor(VirtViewerWindow *self) - - gdk_screen_get_monitor_geometry(gdk_screen_get_default(), n, &mon); - gtk_window_move(GTK_WINDOW(priv->window), mon.x, mon.y); --#ifdef G_OS_WIN32 -- /* FIXME: on windows, fullscreen doesn't always hide the taskbar -- See https://bugzilla.gnome.org/show_bug.cgi?id=652049 */ -+ - gtk_widget_set_size_request(GTK_WIDGET(priv->window), - mon.width, - mon.height); --#endif - } - - void -@@ -509,9 +506,7 @@ virt_viewer_window_leave_fullscreen(VirtViewerWindow *self) - ViewAutoDrawer_SetActive(VIEW_AUTODRAWER(priv->layout), FALSE); - gtk_widget_show(menu); - gtk_widget_hide(priv->toolbar); --#ifdef G_OS_WIN32 - gtk_widget_set_size_request(GTK_WIDGET(priv->window), -1, -1); --#endif - gtk_window_unfullscreen(GTK_WINDOW(priv->window)); - - } diff --git a/SOURCES/0018-rhbz-1007306-Don-t-free-session-if-we-re-re-trying-a.patch b/SOURCES/0018-rhbz-1007306-Don-t-free-session-if-we-re-re-trying-a.patch new file mode 100644 index 0000000..8cd5df5 --- /dev/null +++ b/SOURCES/0018-rhbz-1007306-Don-t-free-session-if-we-re-re-trying-a.patch @@ -0,0 +1,41 @@ +From b03b437ba04f7dc9a7cc6881df09b1a560c46782 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 31 Jan 2014 13:56:19 -0600 +Subject: [PATCH] rhbz#1007306 - Don't free session if we're re-trying auth + +deactivate() is called in response to a failed authentication attempt. If the +session is cleared here, when a user attempts to re-authenticate, it will issue +a warning and will not actually work. So only clear the session here if we're +not going to re-try authentication. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1007295 + +(cherry picked from commit 74b532f1ecf5affecc13e322723881ba42d2dd29) +--- + src/virt-viewer-app.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 499c33f..e4e2eeb 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1250,7 +1250,6 @@ virt_viewer_app_deactivate(VirtViewerApp *self, gboolean connect_error) + + if (priv->session) { + virt_viewer_session_close(VIRT_VIEWER_SESSION(priv->session)); +- g_clear_object(&priv->session); + } + + priv->connected = FALSE; +@@ -1266,8 +1265,10 @@ virt_viewer_app_deactivate(VirtViewerApp *self, gboolean connect_error) + if (priv->authretry) { + priv->authretry = FALSE; + g_idle_add(virt_viewer_app_retryauth, self); +- } else ++ } else { ++ g_clear_object(&priv->session); + virt_viewer_app_deactivated(self, connect_error); ++ } + + } + diff --git a/SOURCES/0019-Don-t-disable-fullscreen-if-kiosk-mode-is-off.patch b/SOURCES/0019-Don-t-disable-fullscreen-if-kiosk-mode-is-off.patch deleted file mode 100644 index 0291623..0000000 --- a/SOURCES/0019-Don-t-disable-fullscreen-if-kiosk-mode-is-off.patch +++ /dev/null @@ -1,28 +0,0 @@ -From f8201956ef422239fb9887806abe475da47a5dbe Mon Sep 17 00:00:00 2001 -From: Jonathon Jongsma <jjongsma@redhat.com> -Date: Fri, 18 Oct 2013 11:18:33 -0500 -Subject: [PATCH] Don't disable fullscreen if kiosk mode is off - -This conflicts with the --full-screen switch, because if kiosk mode is disabled, -it sets disables fullscreen mode, which overrides the earlier call to enable -fullscreen. - -(cherry picked from commit 5fc5a2c8971a12b7aaf512265e3c2a75b961b043) ---- - src/virt-viewer-app.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c -index 40c2633..dbd7101 100644 ---- a/src/virt-viewer-app.c -+++ b/src/virt-viewer-app.c -@@ -1286,7 +1286,8 @@ virt_viewer_app_set_kiosk(VirtViewerApp *self, gboolean enabled) - int i; - - self->priv->kiosk = enabled; -- virt_viewer_app_set_fullscreen(self, enabled); -+ if (enabled) -+ virt_viewer_app_set_fullscreen(self, enabled); - - for (i = 0; i < gdk_screen_get_n_monitors(gdk_screen_get_default()); i++) { - VirtViewerWindow *win = virt_viewer_app_get_nth_window(self, i); diff --git a/SOURCES/0019-Fix-broken-release-cursor-accel-when-not-specified-i.patch b/SOURCES/0019-Fix-broken-release-cursor-accel-when-not-specified-i.patch new file mode 100644 index 0000000..f882264 --- /dev/null +++ b/SOURCES/0019-Fix-broken-release-cursor-accel-when-not-specified-i.patch @@ -0,0 +1,73 @@ +From edb6ac714c6040ccd9a2f729ba636b63e2f35e9e Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Wed, 12 Mar 2014 11:12:15 -0500 +Subject: [PATCH] Fix broken 'release-cursor' accel when not specified in + --hotkeys + +When the --hotkeys option is given, all hotkeys that are not explicitly +specified are disabled. The method used to disable hotkeys is to change the +accel map entry to key=0, mods=0. However, when we decide whether to set a grab +sequence on the spice dispay widget, we simply use the return value for +gtk_accel_map_lookup_entry and assume that a TRUE value returned from this +function means that the hotkey is enabled. In reality, this function will +return TRUE for disabled hotkeys, but the 'key' variable will be set to key=0, +mods=0. The result is that if I start virt-viewer like this: + + virt-viewer --hotkeys secure-attention=ctrl+alt+end ... + +and the guest that I'm attached to uses server mouse mode, it will be impossible +to release the grab on the spice widget. Because we will explicitly disable the +grab keys in the spice widget and handle the 'release-cursor' hotkey in +virt-viewer, but the hotkey is an empty accel key. + +Instead of simply checking the return value of gtk_accel_map_lookup_entry, we +have to inspect the return value for 'key' and check whether any keys are +actually assigned. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1029108 + +(cherry picked from commit fe167a6668a131c6182f749c826e52046607cb6f) +--- + src/virt-viewer-display-spice.c | 7 +++++-- + src/virt-viewer-window.c | 9 ++++++--- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/src/virt-viewer-display-spice.c b/src/virt-viewer-display-spice.c +index 0450b5b..2ce42cf 100644 +--- a/src/virt-viewer-display-spice.c ++++ b/src/virt-viewer-display-spice.c +@@ -234,8 +234,11 @@ enable_accel_changed(VirtViewerApp *app, + GParamSpec *pspec G_GNUC_UNUSED, + VirtViewerDisplaySpice *self) + { +- if (virt_viewer_app_get_enable_accel(app) +- && gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", NULL)) { ++ GtkAccelKey key = { 0 }; ++ if (virt_viewer_app_get_enable_accel(app)) ++ gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", &key); ++ ++ if (key.accel_key || key.accel_mods) { + SpiceGrabSequence *seq = spice_grab_sequence_new(0, NULL); + /* disable default grab sequence */ + spice_display_set_grab_keys(self->priv->display, seq); +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 1ad896c..6f6f9a4 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -1141,10 +1141,13 @@ virt_viewer_window_update_title(VirtViewerWindow *self) + + if (priv->grabbed) { + gchar *label; +- GtkAccelKey key; ++ GtkAccelKey key = { 0 }; + +- if (virt_viewer_app_get_enable_accel(priv->app) +- && gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", &key)) { ++ if (virt_viewer_app_get_enable_accel(priv->app)) ++ gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", &key); ++ ++ if (key.accel_key || key.accel_mods) { ++ DEBUG_LOG("release-cursor accel key: key=%u, mods=%x, flags=%u", key.accel_key, key.accel_mods, key.accel_flags); + label = gtk_accelerator_get_label(key.accel_key, key.accel_mods); + } else { + label = g_strdup(_("Ctrl+Alt")); diff --git a/SOURCES/0020-Fix-tiny-windows-for-secondary-displays-in-gtk2-buil.patch b/SOURCES/0020-Fix-tiny-windows-for-secondary-displays-in-gtk2-buil.patch new file mode 100644 index 0000000..f81b363 --- /dev/null +++ b/SOURCES/0020-Fix-tiny-windows-for-secondary-displays-in-gtk2-buil.patch @@ -0,0 +1,37 @@ +From bd816fb6695f6e88521cff37faf12b061283d246 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Tue, 10 Jun 2014 11:31:25 -0500 +Subject: [PATCH] Fix tiny windows for secondary displays in gtk2 build + +When enabling a new display on linux guests, the new window would be tiny +(50x50) and zoomed way out. This was caused by the fact that when the display +widget received the 'map' event, it unconditionally cleared the 'dirty' flag, +which meant that it would only request 50x50 size. This behavior was intended to +fix a bug on the windows client which wprevented windows from resized smaller +than the guest display resolution. Unfortunately, due to the timing of the 'map' +and allocate events, the widget became very small. + +Instead of clearing the 'dirty' flag directly when a widget is mapped, we +now queue a resize event, which will guarantee that the widget attains its +desired size and will then clear its dirty flag (allowing it to be resized). +Testing on windows indicates that this fix still solves the 'unshrinkable +window' problem while also preventing the tiny secondary display bug. + +Resolves: rhbz#1104064 +--- + src/virt-viewer-display.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c +index f298bb0..48b7090 100644 +--- a/src/virt-viewer-display.c ++++ b/src/virt-viewer-display.c +@@ -454,7 +454,7 @@ virt_viewer_display_map(GtkWidget *widget) + { + GTK_WIDGET_CLASS(virt_viewer_display_parent_class)->map(widget); + +- virt_viewer_display_make_resizable(VIRT_VIEWER_DISPLAY(widget)); ++ virt_viewer_display_queue_resize(VIRT_VIEWER_DISPLAY(widget)); + } + + #else diff --git a/SOURCES/0020-Translation-updates-from-RH-translation-teams.patch b/SOURCES/0020-Translation-updates-from-RH-translation-teams.patch deleted file mode 100644 index 87b7daa..0000000 --- a/SOURCES/0020-Translation-updates-from-RH-translation-teams.patch +++ /dev/null @@ -1,11332 +0,0 @@ -From 4626c492f5b4ccafa9f8768dd7d7a5b4ef0e722c Mon Sep 17 00:00:00 2001 -From: Christophe Fergeau <cfergeau@redhat.com> -Date: Fri, 24 Jan 2014 19:19:42 +0100 -Subject: [PATCH] Translation updates from RH translation teams - -https://bugzilla.redhat.com/show_bug.cgi?id=1047327 ---- - po/as.po | 205 +++++++++++++++++++++---------------- - po/bn_IN.po | 233 ++++++++++++++++++++++++------------------ - po/de.po | 235 ++++++++++++++++++++++++------------------ - po/es.po | 209 ++++++++++++++++++++++---------------- - po/fr.po | 217 ++++++++++++++++++++++----------------- - po/gu.po | 201 ++++++++++++++++++++---------------- - po/hi.po | 198 ++++++++++++++++++++---------------- - po/it.po | 206 +++++++++++++++++++++---------------- - po/ja.po | 189 +++++++++++++++++++--------------- - po/kn.po | 207 +++++++++++++++++++++---------------- - po/ko.po | 199 ++++++++++++++++++++---------------- - po/ml.po | 215 +++++++++++++++++++++++---------------- - po/mr.po | 198 ++++++++++++++++++++---------------- - po/or.po | 211 ++++++++++++++++++++++---------------- - po/pa.po | 331 ++++++++++++++++++++++++++++++++---------------------------- - po/pt_BR.po | 232 ++++++++++++++++++++++++------------------ - po/ru.po | 210 +++++++++++++++++++++----------------- - po/ta.po | 210 ++++++++++++++++++++++---------------- - po/te.po | 202 +++++++++++++++++++++---------------- - po/zh_CN.po | 195 +++++++++++++++++++---------------- - po/zh_TW.po | 199 ++++++++++++++++++++---------------- - 21 files changed, 2576 insertions(+), 1926 deletions(-) - -diff --git a/po/as.po b/po/as.po -index 1486dba..5c2e2a6 100644 ---- a/po/as.po -+++ b/po/as.po -@@ -11,16 +11,19 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-30 09:18+0000\n" -+"PO-Revision-Date: 2013-04-30 05:18-0400\n" - "Last-Translator: ngoswami <ngoswami@redhat.com>\n" --"Language-Team: Assamese (http://www.transifex.com/projects/p/fedora/language/as/)\n" -+"Language-Team: Assamese (http://www.transifex.com/projects/p/fedora/language/" -+"as/)\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Language: as\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "দূৰৱৰ্তী দৰ্শক" - -@@ -82,11 +85,13 @@ msgstr "দুৰৱৰ্তী-দৰ্শক সংস্কৰণ %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "অবৈধ সম্পূৰ্ণ-পৰ্দা তৰ্ক: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "সংস্কৰণ তথ্য প্ৰদৰ্শন কৰক" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "ভাৰভৌচ তথ্য প্ৰদৰ্শন কৰক" - -@@ -94,15 +99,18 @@ msgstr "ভাৰভৌচ তথ্য প্ৰদৰ্শন কৰক" - msgid "Set window title" - msgstr "উইন্ডো শীৰ্ষক সংহতি কৰক" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "কোনো স্বচালিত টানেল নহোৱাকৈ প্ৰত্যক্ষ সংযোগ" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "উইন্ডোৰ জুম স্তৰ, শতাংশত" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "ডিবাগ তথ্য প্ৰদৰ্শন কৰক" - -@@ -110,7 +118,9 @@ msgstr "ডিবাগ তথ্য প্ৰদৰ্শন কৰক" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "পূৰ্ণ পৰ্দা অৱস্থাত খোলক (auto-conf এ ক্লাএন্টৰ সৈতে খাপ খোৱাবলে অতিথিৰ বিভেদন ধাৰ্য্য কৰে)।" -+msgstr "" -+"পূৰ্ণ পৰ্দা অৱস্থাত খোলক (auto-conf এ ক্লাএন্টৰ সৈতে খাপ খোৱাবলে অতিথিৰ " -+"বিভেদন ধাৰ্য্য কৰে)।" - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -120,7 +130,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Spice নিয়ন্ত্ৰক সংযোগ ব্যৱহাৰ কৰি সংযোগ খোলক" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "হটকি'সমূহ স্বনিৰ্বাচন কৰক" - -@@ -134,7 +145,9 @@ msgstr "- দূৰৱৰ্তী দৰ্শক ক্লাএন্ট" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s⏎ উপলব্ধ কমান্ড শাৰী বিকল্পসমূহৰ এটা সম্পূৰ্ণ তালিকা চাবলে '%s --help' চাওক⏎\n" -+msgstr "" -+"%s⏎ উপলব্ধ কমান্ড শাৰী বিকল্পসমূহৰ এটা সম্পূৰ্ণ তালিকা চাবলে '%s --help' " -+"চাওক⏎\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -146,12 +159,14 @@ msgstr "ত্ৰুটি: Spice নিয়ন্ত্ৰক ব্যৱহা - msgid "Error: can't handle multiple URIs\n" - msgstr "ত্ৰুটি: কেইবাটাও URls নিয়ন্ত্ৰণ কৰিব নোৱাৰি\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "জুম স্তৰ ১০-২০০ ৰ মাজত হব লাগিব\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "সংযোগ আৰম্ভ কৰিবলে ব্যৰ্থ" - -@@ -208,7 +223,6 @@ msgstr "এই ধৰণৰ বাবে এটা অধিবেশন সৃ - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "Glade ৰ বিষয়ে" -@@ -217,11 +231,15 @@ msgstr "Glade ৰ বিষয়ে" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "স্বত্বাধিকাৰ (C) ২০০৭-২০১২ ডেনিয়েল পি. বিৰেইঞ্জ\nস্বত্বাধিকাৰ (C) ২০০৭-২০১২ Red Hat, Inc." -+msgstr "" -+"স্বত্বাধিকাৰ (C) ২০০৭-২০১২ ডেনিয়েল পি. বিৰেইঞ্জ\n" -+"স্বত্বাধিকাৰ (C) ২০০৭-২০১২ Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.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/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -242,77 +260,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "এই প্ৰগ্ৰামটো এটা বিনামুলিয়া চফ্টৱেৰ; আপুনি Free Software Foundation ৰ দ্বাৰা প্ৰকাশিত GNU General Public License ৰ চুক্তিসমূহৰ অন্তৰ্গত ইয়াক পুনৰ বিলাব পাৰিব অথবা সলনি কৰিব পাৰিব; হৈতো অনুজ্ঞাৰ সংস্কৰণ ২, অথবা (আপুনাৰ বিকল্পত) যিকোনো পৰৱৰ্তী সংস্কৰণ।\n\nএই প্ৰগ্ৰামটো এইটো আশাত বিলোৱা হৈছে যে ই ব্যৱহাৰযোগ্য হ'ব, কিন্তু কোনো ৱাৰেন্টি নথকাকৈ; ব্যৱসায়ীক অথবা কোনো এটা বিশেষ কাৰণৰ যোগ্যতাৰ বাবে বুজুৱা ৱাৰেন্টি নথকাকৈ। অধিক যানিবলৈ GNU General Public License চাওক।\n\nআপুনি হৈতো ইতিমধ্যে এই প্ৰগ্ৰামৰ সৈতে GNU General Public License ৰ কপি এটা পাইছে; যদি নাই, Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA লে লিখক\n" -+msgstr "" -+"এই প্ৰগ্ৰামটো এটা বিনামুলিয়া চফ্টৱেৰ; আপুনি Free Software Foundation ৰ " -+"দ্বাৰা প্ৰকাশিত GNU General Public License ৰ চুক্তিসমূহৰ অন্তৰ্গত ইয়াক পুনৰ " -+"বিলাব পাৰিব অথবা সলনি কৰিব পাৰিব; হৈতো অনুজ্ঞাৰ সংস্কৰণ ২, অথবা (আপুনাৰ " -+"বিকল্পত) যিকোনো পৰৱৰ্তী সংস্কৰণ।\n" -+"\n" -+"এই প্ৰগ্ৰামটো এইটো আশাত বিলোৱা হৈছে যে ই ব্যৱহাৰযোগ্য হ'ব, কিন্তু কোনো " -+"ৱাৰেন্টি নথকাকৈ; ব্যৱসায়ীক অথবা কোনো এটা বিশেষ কাৰণৰ যোগ্যতাৰ বাবে বুজুৱা " -+"ৱাৰেন্টি নথকাকৈ। অধিক যানিবলৈ GNU General Public License চাওক।\n" -+"\n" -+"আপুনি হৈতো ইতিমধ্যে এই প্ৰগ্ৰামৰ সৈতে GNU General Public License ৰ কপি এটা " -+"পাইছে; যদি নাই, Free Software\n" -+"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA লে " -+"লিখক\n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora অনুবাদ দল" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "আপুনি অধিবেশন বন্ধ কৰিব বিচাৰে নে?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "মোক আকৌ নুশুধিব" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "প্ৰদৰ্শন %d ৰ বাবে অপেক্ষা কৰা হৈ আছে..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "অতিথি %s ৰ বাবে অজ্ঞাত গ্ৰাফিক ধৰণ" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh লে সংযোগ ব্যৰ্থ হল।" - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "চেনেলে সংযোগ কৰিব নোৱাৰি, কেৱল SSH সমৰ্থিত।" - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "চেনেললে সংযোগ অসমৰ্থিত।" - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "গ্ৰাফিক চাৰ্ভাৰলে সংযোগ কৰা হৈ আছে" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "অতিথি ডমেইন বন্ধ হল" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "গ্ৰাফিক চাৰ্ভাৰলে সংযোগিত" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "গ্ৰাফিক চাৰ্ভাৰ %s লে সংযোগ কৰিবলে অক্ষম" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s ত দূৰৱৰ্তী ডেস্কটপ চাৰ্ভাৰৰ সৈতে প্ৰমাণীত কৰিবলে অক্ষম: %s\nসংযোগ পুনৰ চেষ্টা কৰিব নে?" -+msgstr "" -+"%s ত দূৰৱৰ্তী ডেস্কটপ চাৰ্ভাৰৰ সৈতে প্ৰমাণীত কৰিবলে অক্ষম: %s\n" -+"সংযোগ পুনৰ চেষ্টা কৰিব নে?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "দূৰৱৰ্তী ডেস্কটপ চাৰ্ভাৰৰ সৈতে প্ৰমাণিত কৰিবলে অক্ষম: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB পুনৰনিৰ্দেশ ত্ৰুটি: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "%d প্ৰদৰ্শন কৰক" -@@ -322,7 +355,6 @@ msgstr "%d প্ৰদৰ্শন কৰক" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "প্ৰমাণীকৰণৰ প্ৰয়োজন" -@@ -371,7 +403,8 @@ msgstr "Virt দৰ্শক" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "উপলব্ধ কমান্ড শাৰী বিকল্পসমূহৰ এটা সম্পূৰ্ণ তালিকা চাবলে '%s --help' চলাওক" -+msgstr "" -+"উপলব্ধ কমান্ড শাৰী বিকল্পসমূহৰ এটা সম্পূৰ্ণ তালিকা চাবলে '%s --help' চলাওক" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -380,16 +413,19 @@ msgstr "- ভাৰ্চুৱেল যন্ত্ৰৰ চিত্ৰা - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nব্যৱহাৰপদ্ধতি: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"ব্যৱহাৰপদ্ধতি: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "পুনৰনিৰ্দেশৰ বাবে USB ডিভাইচসমূহ বাছক" - -@@ -398,167 +434,167 @@ msgstr "পুনৰনিৰ্দেশৰ বাবে USB ডিভাইচ - msgid "Unsupported authentication type %d" - msgstr "অসমৰ্থিত প্ৰমাণীকৰণ ধৰণ %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "স্ক্ৰিনশ্বট" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "বিচ্ছিন্ন কৰক" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB ডিভাইছ নিৰ্বাচন" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "চাবি সংযুক্তি পঠাওক" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "পূৰ্ণপৰ্দা ত্যাগ কৰক" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(পোইন্টাৰ এৰিবলে %s টিপক)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "এই সংযোগ সংস্থাপন কৰিবলে অন্তত %s সংস্কৰণ %s ৰ প্ৰয়োজন" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "অতিথি ডমেইন পুনৰাম্ভ হোৱাৰ বাবে অপেক্ষা কৰা হৈ আছে" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "অতিথি %s ৰ বাবে গ্ৰাফিক ধৰণ নিৰ্ধাৰণ কৰিব নোৱাৰি" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "অতিথি %s ৰ বাবে গ্ৰাফিক ঠিকনা নিৰ্ধাৰণ কৰিব নোৱাৰি" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "অতিথি %s ৰ বাবে হস্ট নিৰ্ধাৰণ কৰিব নোৱাৰি" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "libvirt আৰম্ভ হবলে অপেক্ষা কৰা হৈছে" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "অতিথি ডমেইন বিচৰা" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "অতিথি ডমেইন সৃষ্টি হোৱালে অপেক্ষা কৰা হৈ আছে" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "%s অতিথিৰ ডোমেইন পোৱা নাযায়" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "অতিথি ডমেইন অৱস্থা নীৰিক্ষণ কৰা" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "অতিথি ডমেইন আৰম্ভ হোৱালে অপেক্ষা কৰা হৈ আছে" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "অতিথি ডমেইন দ্বাৰা চাৰ্ভাৰ আৰম্ভ কৰিবলে অপেক্ষা কৰা হৈ আছে" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "%s URI ৰে libvirt লৈ সংযোগ কৰিব নোৱাৰি" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[none]" - -@@ -567,7 +603,6 @@ msgstr "[none]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "ফাইল (_F)" -@@ -608,10 +643,6 @@ msgstr "উন্মোচন কাৰ্চাৰ" - msgid "_Send key" - msgstr "কি পঠাওক (_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "প্ৰিন্টস্ক্ৰিন (_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "সহায় (_H)" -diff --git a/po/bn_IN.po b/po/bn_IN.po -index 5987e1d..77bddcf 100644 ---- a/po/bn_IN.po -+++ b/po/bn_IN.po -@@ -5,31 +5,34 @@ - # Translators: - # runab <runab@redhat.com>, 2010,2012 - # runa <runabh@gmail.com>, 2012 -+# sray <sray@redhat.com>, 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-29 17:06+0000\n" --"Last-Translator: Daniel Berrange <dan-transifex@berrange.com>\n" -+"PO-Revision-Date: 2013-10-03 05:48-0400\n" -+"Last-Translator: sray <sray@redhat.com>\n" - "Language-Team: Bengali (India) <anubad@lists.ankur.org.in>\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"Language: bn_IN\n" -+"Language: bn-IN\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "দূরবর্তী প্রদর্শন" - - #: ../data/remote-viewer.desktop.in.h:2 - msgid "Access remote desktops" --msgstr "" -+msgstr "রিমোট ডেস্কটপ অ্যাক্সেস করুন" - - #: ../data/virt-viewer-mime.xml.in.h:1 - msgid "Virt-Viewer connection file" --msgstr "" -+msgstr "Virt-Viewer সংযোগ ফাইল" - - #: ../src/gbinding.c:637 - msgid "Source" -@@ -81,27 +84,32 @@ msgstr "remote-viewer সংস্করণ %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "সম্পূর্ণ পর্দায় প্রদর্শনের অবৈধ আর্গুমেন্ট: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "সংস্করণ সংক্রান্ত তথ্য প্রদর্শন করা হবে" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "ভার্বোস তথ্য প্রদর্শন করা হবে" - - #: ../src/remote-viewer-main.c:127 - msgid "Set window title" --msgstr "" -+msgstr "উইন্ডো টাইটেল সেট করুন" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "স্বয়ংক্রিয় টানেল বিনা কোনো সরাসরি যোগাযোগ নেই" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "উইন্ডোর প্রদর্শনের মাপ, শতাংশে ব্যক্ত" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "ডিবাগ সংক্রান্ত তথ্য প্রদর্শন করা হবে" - -@@ -109,7 +117,9 @@ msgstr "ডিবাগ সংক্রান্ত তথ্য প্রদর - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "সম্পূর্ণ পর্দায় প্রদর্শনের মোডে খোলা হবে (ক্লায়েন্ট সঠিক মাপে প্রদর্শনের জন্য auto-conf দ্বারা গেস্ট সিস্টেমের রেসোলিউশন পরিবর্তন করা হয়)।" -+msgstr "" -+"সম্পূর্ণ পর্দায় প্রদর্শনের মোডে খোলা হবে (ক্লায়েন্ট সঠিক মাপে প্রদর্শনের " -+"জন্য auto-conf দ্বারা গেস্ট সিস্টেমের রেসোলিউশন পরিবর্তন করা হয়)।" - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -119,9 +129,10 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Spice কন্ট্রোলারের যোগাব্যবস্থার মাধ্যমে সংযোগ আরম্ভ করা হবে" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" --msgstr "" -+msgstr "হট-কীগুলি নিজের সুবিধা মতো করুন" - - #. Setup command line options - #: ../src/remote-viewer-main.c:150 -@@ -133,24 +144,31 @@ msgstr "- দূরবর্তী প্রদর্শনব্যবস্থ - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nকমান্ড-লাইন থেকে ব্যবহারযোগ্য সকল বিকল্পের তালিকা দেখার জন্য '%s --help' প্রয়োগ করুন।\n" -+msgstr "" -+"%s\n" -+"কমান্ড-লাইন থেকে ব্যবহারযোগ্য সকল বিকল্পের তালিকা দেখার জন্য '%s --help' " -+"প্রয়োগ করুন।\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format - msgid "Error: extra arguments given while using Spice controller\n" --msgstr "ত্রুটি: Spice কনট্রোলার ব্যবহার করার সময় অতিরিক্ত আর্গুমেন্ট প্রয়োগ করা হয়েছে\n" -+msgstr "" -+"ত্রুটি: Spice কনট্রোলার ব্যবহার করার সময় অতিরিক্ত আর্গুমেন্ট প্রয়োগ করা " -+"হয়েছে\n" - - #: ../src/remote-viewer-main.c:182 - #, c-format - msgid "Error: can't handle multiple URIs\n" - msgstr "ত্রুটি: একাধিক URI পরিচালনা করা সম্ভব নয়\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "প্রদর্শনের মাত্রা ১০-২০০-র মধ্যে হওয়া আবশ্যক\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "সংযোগ আরম্ভ করতে ব্যর্থ" - -@@ -187,7 +205,7 @@ msgstr "Spice-র সেশান প্রস্তুত করা হচ্ - #: ../src/remote-viewer.c:988 - #, c-format - msgid "Invalid file %s" --msgstr "" -+msgstr "অবৈধ ফাইল %s" - - #: ../src/remote-viewer.c:995 - msgid "Cannot determine the connection type from URI" -@@ -195,7 +213,7 @@ msgstr "URI থেকে সংযোগের ধরন নির্ধার - - #: ../src/remote-viewer.c:1001 - msgid "Couldn't open oVirt session" --msgstr "" -+msgstr "oVirt সেশন খুলতে ব্যর্থ" - - #: ../src/remote-viewer.c:1008 - #, c-format -@@ -207,7 +225,6 @@ msgstr "এই ধরনের জন্য সেশান প্রস্ত - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "Glade পরিচিতি" -@@ -216,7 +233,9 @@ msgstr "Glade পরিচিতি" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "স্বত্বাধিকার (C) ২০০৭-২০১২ ড্যানিয়েল পি. বেরাঞ্জ\nস্বত্বাধিকার (C) ২০০৭-২০১২ Red Hat, Inc." -+msgstr "" -+"স্বত্বাধিকার (C) ২০০৭-২০১২ ড্যানিয়েল পি. বেরাঞ্জ\n" -+"স্বত্বাধিকার (C) ২০০৭-২০১২ Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" -@@ -241,77 +260,96 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "এটি একটি মুক্ত সফ্টওয়্যার; Free Software Foundation দ্বারা প্রকাশিত GNU General Public License-র শর্তানুযায়ী এটি বিতরণ ও পরিবর্তন করা যাবে; লাইসেন্সের সংস্করণ ২ অথবা (আপনার সুবিধানুযায়ী) ঊর্ধ্বতন কোনো সংস্করণের অধীন।\n\nএই প্রোগ্রামটি বিতরণ করার মূল উদ্দেশ্য যে ব্যবহারকারীরা এর দ্বারা উপকৃত হবেন, কিন্তু \nএটির জন্য কোনো সুস্পষ্ট ওয়ারেন্টি উপস্থিত নেই; বাণিজ্যিক ও কোনো সুনির্দিষ্ট কর্ম সাধনের \nজন্য অন্তর্নিহীত ওয়ারেন্টিও অনুপস্থিত। অধিক জানতে GNU General Public License পড়ুন।\n\nএই প্রোগ্রামের সাথে GNU General Public License-র একটি প্রতিলিপি উপলব্ধ হওয়া উচিত; \nনা থাকলে নিম্নলিখিত ঠিকানায় লিখে তা সংগ্রহ করুন Free Software Foundation, Inc., \n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"এটি একটি মুক্ত সফ্টওয়্যার; Free Software Foundation দ্বারা প্রকাশিত GNU " -+"General Public License-র শর্তানুযায়ী এটি বিতরণ ও পরিবর্তন করা যাবে; " -+"লাইসেন্সের সংস্করণ ২ অথবা (আপনার সুবিধানুযায়ী) ঊর্ধ্বতন কোনো সংস্করণের " -+"অধীন।\n" -+"\n" -+"এই প্রোগ্রামটি বিতরণ করার মূল উদ্দেশ্য যে ব্যবহারকারীরা এর দ্বারা উপকৃত " -+"হবেন, কিন্তু \n" -+"এটির জন্য কোনো সুস্পষ্ট ওয়ারেন্টি উপস্থিত নেই; বাণিজ্যিক ও কোনো সুনির্দিষ্ট " -+"কর্ম সাধনের \n" -+"জন্য অন্তর্নিহীত ওয়ারেন্টিও অনুপস্থিত। অধিক জানতে GNU General Public " -+"License পড়ুন।\n" -+"\n" -+"এই প্রোগ্রামের সাথে GNU General Public License-র একটি প্রতিলিপি উপলব্ধ হওয়া " -+"উচিত; \n" -+"না থাকলে নিম্নলিখিত ঠিকানায় লিখে তা সংগ্রহ করুন Free Software Foundation, " -+"Inc., \n" -+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora-র অনুবাদকদের দল" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" --msgstr "" -+msgstr "অাপনি কি সেশনটি বন্ধ করতে চান?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" --msgstr "" -+msgstr "আমাকে পুনরায় জিঞ্জাসা করবেন না" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "%d প্রদর্শনের জন্য অপেক্ষা করা হচ্ছে..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "%s গেস্ট মেশিনের জন্য অজানা ধরনের গ্রাফিক" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh-র সাথে সংযোগ করতে ব্যর্থ।" - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "চ্যানেলের সাথে সংযোগ করা যায়নি, শুধুমাত্র SSH সমর্থিত হবে।" - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "সমর্থন বিনা চ্যানেলের সাথে সংযোগ করা হবে।" - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "গ্রাফিক সার্ভারের সাথে সংযোগ স্থাপন করা হচ্ছে" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "গেস্ট ডোমেইন বন্ধ হয়েছে" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "গ্রাফিক সার্ভারের সাথে সংযোগ স্থাপন করা হয়েছে" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "%s গ্রাফিক সার্ভারের সাথে সংযোগ স্থাপন করতে ব্যর্থ" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s-এ উপস্থিত দূরবর্তী ডেস্কটপ সার্ভারে অনুমোদন করতে ব্যর্থ: %s\nপুনরায় সংযোগের প্রচেষ্টা করা হবে কি?" -+msgstr "" -+"%s-এ উপস্থিত দূরবর্তী ডেস্কটপ সার্ভারে অনুমোদন করতে ব্যর্থ: %s\n" -+"পুনরায় সংযোগের প্রচেষ্টা করা হবে কি?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "দূরবর্তী ডেস্কটপ সার্ভারের সাথে অনুমোদন করতে ব্যর্থ: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB পুনর্নির্দেশে সমস্যা: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "প্রদর্শন %d" -@@ -321,7 +359,6 @@ msgstr "প্রদর্শন %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "অনুমোদন প্রয়োজন" -@@ -370,7 +407,9 @@ msgstr "Virt Viewer" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "কমান্ড-লাইন থেকে ব্যবহারযোগ্য সকল বিকল্পের তালিকা দেখার জন্য '%s --help' প্রয়োগ করুন" -+msgstr "" -+"কমান্ড-লাইন থেকে ব্যবহারযোগ্য সকল বিকল্পের তালিকা দেখার জন্য '%s --help' " -+"প্রয়োগ করুন" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -379,16 +418,19 @@ msgstr "- ভার্চুয়াল মেশিনের গ্রাফি - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nব্যবহার পদ্ধতি: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"ব্যবহার পদ্ধতি: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "পুনর্নির্দেশের জন্য USB ডিভাইস নির্বাচন করুন" - -@@ -397,167 +439,167 @@ msgstr "পুনর্নির্দেশের জন্য USB ডিভা - msgid "Unsupported authentication type %d" - msgstr "%d ধরনের অনুমোদন সমর্থিত নয়" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "স্ক্রিন-শট" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "সংযোগ বিচ্ছেদ করুন" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB ডিভাইস নির্বাচন" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "সেন্ড-কি-র সংকলন" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "সম্পূর্ণ পর্দায় প্রদর্শন থেকে প্রস্থান" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(পয়েন্টার মুক্ত করার জন্য %s টিপুন)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" --msgstr "" -+msgstr "এই সংযোগ তৈরি করতে অন্ততপক্ষে %s সংস্করণ %s প্রয়োজন" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "গেস্ট ডোমেইন পুনরায় আরম্ভের অপেক্ষা করা হচ্ছে" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "%s গেস্ট মেশিনের জন্য গ্রাফিকের ধরন নির্ধারণ করা সম্ভব নয়" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "%s গেস্ট মেশিনের জন্য গ্রাফিক ঠিকানা নির্ধারণ করা সম্ভব নয়" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "%s গেস্ট মেশিনের জন্য হোস্ট নির্ধারণ করা সম্ভব নয়" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" --msgstr "" -+msgstr "libvirt শুরু হওয়ার অপেক্ষায় রত" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "গেস্ট ডোমেইন সন্ধান করা হচ্ছে" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "গেস্ট ডোমেইন প্রস্তুতির অপেক্ষা করা হচ্ছে" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "%s গেস্ট ডোমেইন সন্ধান করতে ব্যর্থ" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "গেস্ট ডোমেইনের অবস্থা পরীক্ষা করতে ব্যর্থ" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "গেস্ট ডোমেইন আরম্ভের অপেক্ষা করা হচ্ছে" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "গেস্ট ডোমেইন দ্বারা সার্ভার আরম্ভের অপেক্ষা করা হচ্ছে" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "URI %s সহযোগে libvirt-র সাথে সংযোগ করতে ব্যর্থ" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[শূণ্য]" - -@@ -566,7 +608,6 @@ msgstr "[শূণ্য]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "ফাইল (_F)" -@@ -607,10 +648,6 @@ msgstr "কার্সার মুক্ত করা হবে" - msgid "_Send key" - msgstr "কি পাঠিয়ে দিন (_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "_PrintScreen" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "সহায়তা (_H)" -diff --git a/po/de.po b/po/de.po -index b60e6ab..426ec3c 100644 ---- a/po/de.po -+++ b/po/de.po -@@ -8,31 +8,34 @@ - # hpeters <hpeters@redhat.com>, 2010 - # hpeters <hpeters@redhat.com>, 2012 - # Roman Spirgi <bigant@fedoraproject.org>, 2012 -+# rgromans <rgromans@redhat.com>, 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-29 17:06+0000\n" --"Last-Translator: Daniel Berrange <dan-transifex@berrange.com>\n" -+"PO-Revision-Date: 2013-10-13 07:08-0400\n" -+"Last-Translator: rgromans <rgromans@redhat.com>\n" - "Language-Team: German <trans-de@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Language: de\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "Remote-Viewer" - - #: ../data/remote-viewer.desktop.in.h:2 - msgid "Access remote desktops" --msgstr "" -+msgstr "Auf entfernte Bildschirme zugreifen" - - #: ../data/virt-viewer-mime.xml.in.h:1 - msgid "Virt-Viewer connection file" --msgstr "" -+msgstr "Virt-Viewer Verbindungsdatei" - - #: ../src/gbinding.c:637 - msgid "Source" -@@ -84,27 +87,32 @@ msgstr "Remote-Viewer Version %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "Ungültiger Vollbildparameter: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "Versionsinformationen anzeigen" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "Ausführliche Informationen anzeigen" - - #: ../src/remote-viewer-main.c:127 - msgid "Set window title" --msgstr "" -+msgstr "Fenstertitel festlegen" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "Direkte Verbindung ohne automatische Tunnel" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "Zoomlevel des Fensters in Prozent" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "Debugging-Informationen anzeigen" - -@@ -112,7 +120,9 @@ msgstr "Debugging-Informationen anzeigen" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "Im Vollbildmodus öffnen (auto-conf passt die Auflösung des Gast-Systems entsprechend an)." -+msgstr "" -+"Im Vollbildmodus öffnen (auto-conf passt die Auflösung des Gast-Systems " -+"entsprechend an)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -122,9 +132,10 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Verbindung öffnen unter Verwendung der Spice-Kontroller-Kommunikation" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" --msgstr "" -+msgstr "Tastenkombinationen individualisieren" - - #. Setup command line options - #: ../src/remote-viewer-main.c:150 -@@ -136,24 +147,31 @@ msgstr "- Remote-Viewer Client" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nFühren Sie '%s --help' aus, zum Anzeigen aller verfügbaren Kommandozeilen-Optionen\n" -+msgstr "" -+"%s\n" -+"Führen Sie '%s --help' aus, zum Anzeigen aller verfügbaren Kommandozeilen-" -+"Optionen\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format - msgid "Error: extra arguments given while using Spice controller\n" --msgstr "Fehler: Zusätzliche Parameter bei Verwendung von Spice-Controller angegeben\n" -+msgstr "" -+"Fehler: Zusätzliche Parameter bei Verwendung von Spice-Controller " -+"angegeben\n" - - #: ../src/remote-viewer-main.c:182 - #, c-format - msgid "Error: can't handle multiple URIs\n" - msgstr "Fehler: Multiple URIs können nicht verarbeitet werden\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "Zoom-Level muss zwischen 10 und 200 sein\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "Initiieren der Verbindung fehlgeschlagen" - -@@ -190,7 +208,7 @@ msgstr "Einrichten der Spice-Sitzung ..." - #: ../src/remote-viewer.c:988 - #, c-format - msgid "Invalid file %s" --msgstr "" -+msgstr "Ungültige Datei %s" - - #: ../src/remote-viewer.c:995 - msgid "Cannot determine the connection type from URI" -@@ -198,7 +216,7 @@ msgstr "Verbindungstyp konnte nicht von URI ermittelt werden" - - #: ../src/remote-viewer.c:1001 - msgid "Couldn't open oVirt session" --msgstr "" -+msgstr "oVirt Sitzung konnte nicht geöffnet werden" - - #: ../src/remote-viewer.c:1008 - #, c-format -@@ -210,7 +228,6 @@ msgstr "Sitzung für diesen Typ konnte nicht erstellt werden: %s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "Über Glade" -@@ -219,11 +236,15 @@ msgstr "Über Glade" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" --msgstr "Ein Remote-Desktop-Client erstellt unter Verwendung von GTK-VNC, SPICE-GTK und libvirt" -+msgstr "" -+"Ein Remote-Desktop-Client erstellt unter Verwendung von GTK-VNC, SPICE-GTK " -+"und libvirt" - - #: ../src/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -244,77 +265,93 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"This program is free software; you can redistribute it and/or modify\n" -+"it under the terms of the GNU General Public License as published by\n" -+"the Free Software Foundation; either version 2 of the License, or\n" -+"(at your option) any later version.\n" -+"\n" -+"This program is distributed in the hope that it will be useful,\n" -+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -+"GNU General Public License for more details.\n" -+"\n" -+"You should have received a copy of the GNU General Public License\n" -+"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" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Das Fedora Übersetzungs-Team" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" --msgstr "" -+msgstr "Wollen Sie die Sitzung beenden?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" --msgstr "" -+msgstr "Nicht mehr nachfragen." - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "Warten auf Anzeige %d ..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "Unbekannter Grafiktyp für Gast %s" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "Verbindung über SSH ist fehlgeschlagen." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." --msgstr "Zu dem Kanal konnte nicht verbunden werden, es wird nur SSH unterstützt" -+msgstr "" -+"Zu dem Kanal konnte nicht verbunden werden, es wird nur SSH unterstützt" - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "Verbindung zu dem Kanal wird nicht unterstützt." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "Verbinden mit Grafikserver" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "Gast-Domain wurde beendet" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "Verbunden mit Grafikserver" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, 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:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "Authentifikation beim Remote-Desktop-Server unter %s fehlgeschlagen: %s\nVerbindung erneut versuchen?" -+msgstr "" -+"Authentifikation beim Remote-Desktop-Server unter %s fehlgeschlagen: %s\n" -+"Verbindung erneut versuchen?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "Authentifikation beim Remote-Desktop-Server fehlgeschlagen: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB-Weiterleitungsfehler: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "%d anzeigen" -@@ -324,7 +361,6 @@ msgstr "%d anzeigen" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "Authentifikation erforderlich" -@@ -373,7 +409,9 @@ msgstr "Virt-Viewer" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "Führen Sie '%s --help' aus, zum Anzeigen aller verfügbaren Kommandozeilen-Optionen" -+msgstr "" -+"Führen Sie '%s --help' aus um die volle Liste aller verfügbaren " -+"Kommandozeilen-Optionen anzusehen" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -382,16 +420,19 @@ msgstr "- Grafische Konsole der virtuellen Maschine" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nVerwendung: %s [OPTIONEN] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"Verwendung: %s [OPTIONEN] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "USB-Gerät zur Weiterleitung wählen" - -@@ -400,167 +441,168 @@ msgstr "USB-Gerät zur Weiterleitung wählen" - msgid "Unsupported authentication type %d" - msgstr "Nicht unterstützter Authentifikationsstyp %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Strg+Alt+_Entf" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Strg+Alt+_Rücktaste" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Strg+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Strg+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Strg+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Strg+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Strg+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Strg+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Strg+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Strg+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Strg+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Strg+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Strg+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Strg+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "Screenshot" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "Verbindung trennen" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB-Geräteauswahl" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "Tastenkombination senden" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "Vollbildmodus verlassen" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Strg+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(Drücken Sie %s, um den Mauszeiger freizugeben)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "" -+"Zumindest %s Version %s ist erforderlich, um diese Verbindung einzurichten" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - 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:329 -+#: ../src/virt-viewer.c:318 - #, 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:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "Grafikadresse für den Gast %s konnte nicht ermittelt werden " - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, 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:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" --msgstr "" -+msgstr "Warten auf Start von libvirt" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "Suchen der Gast-Domain" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "Warten auf Erstellung der Gast-Domain" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "Gast-Domain %s konnte nicht gefunden werden" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "Prüfen des Gast-Domain-Status" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "Warten auf Start der Gast-Domain" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "Warten, bis Gast-Domain den Server startet" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "Verbindung zu libvirt mit URI %s konnte nicht hergestellt werden" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[keine]" - -@@ -569,7 +611,6 @@ msgstr "[keine]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "_Datei" -@@ -610,10 +651,6 @@ msgstr "Cursor freigeben" - msgid "_Send key" - msgstr "_Schlüssel senden" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "_Bildschirm drucken" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "_Hilfe" -diff --git a/po/es.po b/po/es.po -index e5507ad..fe4bb2f 100644 ---- a/po/es.po -+++ b/po/es.po -@@ -15,7 +15,7 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-05-06 04:04+0000\n" -+"PO-Revision-Date: 2013-05-06 12:04-0400\n" - "Last-Translator: Gladys Guerrero <gguerrer@redhat.com>\n" - "Language-Team: Spanish <trans-es@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" -@@ -23,8 +23,10 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Language: es\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "Visor remoto" - -@@ -86,11 +88,13 @@ msgstr "remote-viewer versión %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "Argumento inválido de pantalla completa: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "Mostrar información de versión" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "Mostrar información detallada" - -@@ -98,15 +102,18 @@ msgstr "Mostrar información detallada" - msgid "Set window title" - msgstr "Fijar el título de ventana" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "Conexión directa sin túneles automáticos" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "Aumentar acercamiento de ventana, en porcentaje" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "Mostrar información de depuración" - -@@ -114,7 +121,9 @@ msgstr "Mostrar información de depuración" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "Abierto en modo pantalla completa (auto-conf la resolución se ajusta para adaptarse a la del cliente)." -+msgstr "" -+"Abierto en modo pantalla completa (auto-conf la resolución se ajusta para " -+"adaptarse a la del cliente)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -124,7 +133,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Abra la conexión mediante el controlador de comunicación Spice " - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "Personalizar teclas calientes" - -@@ -138,24 +148,33 @@ msgstr "- Cliente de visor remoto" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s Corriendo ‘%s –help’ para ver una lista completa de las opciones disponibles de línea de comando\n" -+msgstr "" -+"%s Corriendo ‘%s –help’ para ver una lista completa de las opciones " -+"disponibles de línea de comando\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format - msgid "Error: extra arguments given while using Spice controller\n" --msgstr "Error: argumentos adicionales proporcionados mediante el controlador de Spice\n\n\n\n" -+msgstr "" -+"Error: argumentos adicionales proporcionados mediante el controlador de " -+"Spice\n" -+"\n" -+"\n" -+"\n" - - #: ../src/remote-viewer-main.c:182 - #, c-format - msgid "Error: can't handle multiple URIs\n" - msgstr "Error: no se puede manipular URl\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "El nivel de amplificación debe ser de 10-200⏎\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "No se pudo inicializar la conexión" - -@@ -212,7 +231,6 @@ msgstr "No se pudo crear una sesión para este tipo: %s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "Acerca de Glade" -@@ -221,11 +239,14 @@ msgstr "Acerca de Glade" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" --msgstr "Un cliente de escritorio remoto creado con GTK-VNC, SPICE-GTK y libvirt" -+msgstr "" -+"Un cliente de escritorio remoto creado con GTK-VNC, SPICE-GTK y libvirt" - - #: ../src/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -246,77 +267,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "Este programa es de software libre; puede distribuirlo y modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versiṕn 2 de la licencia o (su opción) una versión posterior.\n\nEste 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\nDebe 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 Temple Place, Suite 330, Boston, MA 02111-1307 EE.UU. \n" -+msgstr "" -+"Este programa es de software libre; puede distribuirlo y modificarlo bajo " -+"los términos de la Licencia Pública General de GNU publicada por la Free " -+"Software Foundation, ya sea la versiṕn 2 de la licencia o (su opción) una " -+"versión posterior.\n" -+"\n" -+"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" -+"\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 " -+"Temple Place, Suite 330, Boston, MA 02111-1307 EE.UU. \n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "El equipo de traducción de Fedora" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "¿Quiere cerrar la sesión?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "No me pregunte otra vez" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "Esperando la pantalla %d…" - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "Tipo de gráficos desconocido para el huésped %s" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "Falló la conexión a ssh." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - 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:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "La conexión al canal no está soportada." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "Conectando al servidor gráfico" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "Dominio de huéspedes se ha apagado" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "Conectado al servidor gráfico" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, 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:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "No se puede autenticar con el servidor de escritorio remoto en %s: %s⏎ \n¿Reintentar la conexión?" -+msgstr "" -+"No se puede autenticar con el servidor de escritorio remoto en %s: %s⏎ \n" -+"¿Reintentar la conexión?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, 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:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "Error de redirección USB: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "Visualizar %d" -@@ -326,7 +362,6 @@ msgstr "Visualizar %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "Se necesita autenticación" -@@ -375,7 +410,9 @@ msgstr "Virt Viewer" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "Corriendo ‘%s –help’ para ver una lista completa de las opciones disponibles de línea de comando" -+msgstr "" -+"Corriendo ‘%s –help’ para ver una lista completa de las opciones disponibles " -+"de línea de comando" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -384,16 +421,19 @@ msgstr "- Consola gráfica de la máquina virtual" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nUso: %s [OPCIONES] DOMINIO-NOMBRE|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"Uso: %s [OPCIONES] DOMINIO-NOMBRE|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "Seleccione los dispositivos USB para redirigir" - -@@ -402,167 +442,167 @@ msgstr "Seleccione los dispositivos USB para redirigir" - msgid "Unsupported authentication type %d" - msgstr "Tipo de autenticación no compatible %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Supr" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Retroceso" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "Captura de pantalla" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "Desconectar" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "Selección de dispositivos USB" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "Enviar combinación de teclas" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "Salir de pantalla completa" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(Presione %s para liberar el puntero)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "Por lo menos %s versión %s se requiere para configurar esta conexión" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "Esperando a que el dominio de huéspedes reinicie" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, 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:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "No se puede determinar la dirección de gráficos para el huésped %s" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, 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:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "Esperando a libvirt para inicio" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "Buscando dominio de huéspedes" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "Esperando a que el dominio de huéspedes sea creado" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "No se pudo encontrar el dominio huésped %s" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "Comprobando el estatus del dominio de huéspedes" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "Esperando a que dominio de huéspedes inicie" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "Esperando a que el servidor del dominio de huéspedes inicie" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "No se pudo conectar a libvirt con el URI %s" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[ninguno]" - -@@ -571,7 +611,6 @@ msgstr "[ninguno]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "_Archivo" -@@ -612,10 +651,6 @@ msgstr "Libere el cursor" - msgid "_Send key" - msgstr "_Enviar llave" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "_ImprPant" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "Ay_uda" -diff --git a/po/fr.po b/po/fr.po -index e51ebce..3d5de3c 100644 ---- a/po/fr.po -+++ b/po/fr.po -@@ -12,7 +12,7 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-05-01 18:28+0000\n" -+"PO-Revision-Date: 2013-05-01 02:28-0400\n" - "Last-Translator: Jérôme Fenal <jfenal@gmail.com>\n" - "Language-Team: French <trans-fr@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" -@@ -20,8 +20,10 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Language: fr\n" - "Plural-Forms: nplurals=2; plural=(n > 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "Afficheur distant" - -@@ -83,11 +85,13 @@ msgstr "remote-viewer version %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "Argument plein écran invalide : %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "Afficher les informations de version" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "Afficher les informations détaillées" - -@@ -95,15 +99,18 @@ msgstr "Afficher les informations détaillées" - msgid "Set window title" - msgstr "Définir le titre de la fenêtre" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "Connexion directe sans tunnels automatiques" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "Niveau de zoom de la fenêtre, en pourcentage" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "Afficher les informations de débogage" - -@@ -111,7 +118,9 @@ msgstr "Afficher les informations de débogage" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "Ouvrir en mode plein écran (auto-conf ajuste la résolution de l'invité pour s'adapter à celle du client)." -+msgstr "" -+"Ouvrir en mode plein écran (auto-conf ajuste la résolution de l'invité pour " -+"s'adapter à celle du client)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -119,9 +128,11 @@ msgstr "<auto-conf>" - - #: ../src/remote-viewer-main.c:138 - msgid "Open connection using Spice controller communication" --msgstr "Ouvrir la connexion à l'aide d'une communication avec le contrôleur de Spice" -+msgstr "" -+"Ouvrir la connexion à l'aide d'une communication avec le contrôleur de Spice" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "Personnaliser les raccourcis clavier" - -@@ -135,24 +146,31 @@ msgstr "- Client de l'afficheur distant" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nLancer '%s --help' pour voir la liste complète des options de ligne de commande disponibles.\n" -+msgstr "" -+"%s\n" -+"Lancer '%s --help' pour voir la liste complète des options de ligne de " -+"commande disponibles.\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format - msgid "Error: extra arguments given while using Spice controller\n" --msgstr "Erreur : arguments surnuméraires spécifiés lors de l'utilisation du contrôleur Spice\n" -+msgstr "" -+"Erreur : arguments surnuméraires spécifiés lors de l'utilisation du " -+"contrôleur Spice\n" - - #: ../src/remote-viewer-main.c:182 - #, c-format - msgid "Error: can't handle multiple URIs\n" - msgstr "Erreur : impossible de gérer plusieurs URI\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "Le niveau du zoom doit se trouver entre 10 et 200\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "Impossible d'initier la connexion" - -@@ -209,7 +227,6 @@ msgstr "Impossible de créer une session pour ce type : %s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "À propos de Glade" -@@ -218,7 +235,9 @@ msgstr "À propos de Glade" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" -@@ -243,77 +262,95 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"This program is free software; you can redistribute it and/or modify\n" -+"it under the terms of the GNU General Public License as published by\n" -+"the Free Software Foundation; either version 2 of the License, or\n" -+"(at your option) any later version.\n" -+"\n" -+"This program is distributed in the hope that it will be useful,\n" -+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -+"GNU General Public License for more details.\n" -+"\n" -+"You should have received a copy of the GNU General Public License\n" -+"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" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "L'équipe de traduction de Fedora" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "Êtes-vous sûr de vouloir mettre fin à la session?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "Ne plus demander" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "En attente de l'affichage %d..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "Type d'affichage inconnu de l'invité %s" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "Échec de la connexion ssh." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." --msgstr "Impossible d'établir la connexion au canal, seul SSH est pris en charge." -+msgstr "" -+"Impossible d'établir la connexion au canal, seul SSH est pris en charge." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "La connexion au canal n'est pas prise en charge." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "Connexion au serveur d'affichage" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "Le domaine invité est fermé" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "Connecté au serveur d'affichage" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, 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:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "Authentification avec le serveur distant sur %s impossible : %s\nEssayer la connexion à nouveau ?" -+msgstr "" -+"Authentification avec le serveur distant sur %s impossible : %s\n" -+"Essayer la connexion à nouveau ?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" --msgstr "Impossible d'authentifier la connexion avec le serveur de bureau distant : %s" -+msgstr "" -+"Impossible d'authentifier la connexion avec le serveur de bureau distant : " -+"%s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "Erreur de redirection USB : %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "Affichage %d" -@@ -323,7 +360,6 @@ msgstr "Affichage %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "Authentification requise" -@@ -372,7 +408,9 @@ msgstr "Virt Viewer" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "Lancer '%s --help' pour voir la liste complète des options de ligne de commande disponibles." -+msgstr "" -+"Lancer '%s --help' pour voir la liste complète des options de ligne de " -+"commande disponibles." - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -381,16 +419,19 @@ msgstr "- Console graphique de la machine virtuelle" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nUsage : %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"Usage : %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "Sélectionnez les périphériques USB à rediriger" - -@@ -399,167 +440,168 @@ msgstr "Sélectionnez les périphériques USB à rediriger" - msgid "Unsupported authentication type %d" - msgstr "Le type d'authentification %d n'est pas pris en charge" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Suppr" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Effacer" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "Capture d'écran" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "Déconnexion" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "Sélection du périphérique USB" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "Envoyer la combinaison de touches" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "Quitter le plein écran" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(Appuyer sur %s pour libérer la souris)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" --msgstr "La configuration de cette connexion nécessite au minimum %s version %s" -+msgstr "" -+"La configuration de cette connexion nécessite au minimum %s version %s" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "En attente du redémarrage du domaine invité" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, 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:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "Impossible de déterminer l'adresse de l'affichage de l'invité %s" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, 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:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "En attente du démarrage de libvirt" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "Recherche du domaine invité" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "En attente de la création du domaine invité" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "Impossible de trouver le domaine invité %s" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "Vérification du statut du domaine invité" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "En attente du démarrage du domaine invité" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "En attente du démarrage du serveur par le domaine invité" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "Impossible de se connecter à libvirt avec URI %s" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[aucun]" - -@@ -568,7 +610,6 @@ msgstr "[aucun]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "_Fichier" -@@ -609,10 +650,6 @@ msgstr "Libérer le curseur" - msgid "_Send key" - msgstr "_Envoi de touches" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "Im_pressionÉcran" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "_Aide" -diff --git a/po/gu.po b/po/gu.po -index b3550ef..73cf90c 100644 ---- a/po/gu.po -+++ b/po/gu.po -@@ -9,7 +9,7 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-30 06:40+0000\n" -+"PO-Revision-Date: 2013-04-30 02:40-0400\n" - "Last-Translator: sweta <swkothar@redhat.com>\n" - "Language-Team: Gujarati <trans-gu@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" -@@ -17,8 +17,10 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Language: gu\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "દૂરસ્થ દર્શક" - -@@ -80,11 +82,13 @@ msgstr "remote-viewer આવૃત્તિ %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "અમાન્ય પૂર્ણ-સ્ક્રીન દલીલ: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "આવૃત્તિ જાણકારીને બતાવો" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "વર્બોસ જાણકારીને બતાવો" - -@@ -92,15 +96,18 @@ msgstr "વર્બોસ જાણકારીને બતાવો" - msgid "Set window title" - msgstr "વિન્ડો શીર્ષક સુયોજિત કરો" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "સ્વયંસંચાલિત ટનલ સાથે સીધુ જોડાણ નથી" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "નાનામોટાપણાનું સ્તર, ટકામાં" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "ડિબગીંગ જાણકારીને બતાવો" - -@@ -108,7 +115,9 @@ msgstr "ડિબગીંગ જાણકારીને બતાવો" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "સંપૂર્ણ સ્ક્રીન સ્થિતિમાં ખોલો (auto-conf એ ક્લાયન્ટને બંધબેસાડવા માટે મહેમાન રિઝોલ્યુશનને ગોઠવે છે)." -+msgstr "" -+"સંપૂર્ણ સ્ક્રીન સ્થિતિમાં ખોલો (auto-conf એ ક્લાયન્ટને બંધબેસાડવા માટે " -+"મહેમાન રિઝોલ્યુશનને ગોઠવે છે)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -118,7 +127,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Spice નિયંત્રક વાર્તાલાપની મદદથી જોડાણને ખોલો" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "ટૂંકીકીઓ કસ્ટમાઇઝ કરો" - -@@ -132,7 +142,9 @@ msgstr "- દૂરસ્થ દર્શક ક્લાયન્ટ" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nઉપલબ્ધ આદેશ વાક્ય વિકલ્પોની સંપૂર્ણ યાદીને જોવા માટે '%s --help' ચલાવો\n" -+msgstr "" -+"%s\n" -+"ઉપલબ્ધ આદેશ વાક્ય વિકલ્પોની સંપૂર્ણ યાદીને જોવા માટે '%s --help' ચલાવો\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -144,12 +156,14 @@ msgstr "ભૂલ: વધારાની દલીલો આપેલ છે જ - msgid "Error: can't handle multiple URIs\n" - msgstr "ભૂલ: ઘણી URIs ને સંભાળી શકાતી નથી\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "નાનુંમોટુ કરવાનું સ્તર 10-200 માં હોવુ જ જોઇએ\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "જોડાણને પ્રારંભ કરવાનુ નિષ્ફળ" - -@@ -206,7 +220,6 @@ msgstr "આ પ્રકાર માટે સત્રને બનાવી - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "ગલૅડ વિશે" -@@ -215,11 +228,14 @@ msgstr "ગલૅડ વિશે" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.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/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -240,77 +256,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"This program is free software; you can redistribute it and/or modify\n" -+"it under the terms of the GNU General Public License as published by\n" -+"the Free Software Foundation; either version 2 of the License, or\n" -+"(at your option) any later version.\n" -+"\n" -+"This program is distributed in the hope that it will be useful,\n" -+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -+"GNU General Public License for more details.\n" -+"\n" -+"You should have received a copy of the GNU General Public License\n" -+"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" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora અનુવાદ ટીમ" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "શું તમે આ સત્રને બંધ કરવા માંગો છો?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "મને ફરી વાર પૂછશો નહિં" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "%d ને દર્શાવવા માટે રાહ જોઇ રહ્યા છે..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "મહેમાન %s માટે અજ્ઞાત ગ્રાફિક પ્રકાર" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh સાથે જોડાવાનું નિષ્ફળ." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "ચેનલમાં જોડાઇ શકતા નથી, SSH ફક્ત આધારભૂત છે." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "ચેનલમાં જોડાવાનુ બિનઆધારભૂત છે." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "ગ્રાફિક સર્વરમાં જોડાઇ રહ્યા છે" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "મહેમાન ડોમેઇન બંધ થઇ ગયો" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "ગ્રાફિક સર્વરમાં જોડાયેલ છે" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "ગ્રાફિક સર્વર %s માં જોડાવામાં અસમર્થ" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s પર દૂરસ્થ ડેસ્કટોપ સાથે સત્તાધિકરણ કરવાનું અસમર્થ: %s\nફરીથી જોડાણનો પુન:પ્રયત્ન કરો?" -+msgstr "" -+"%s પર દૂરસ્થ ડેસ્કટોપ સાથે સત્તાધિકરણ કરવાનું અસમર્થ: %s\n" -+"ફરીથી જોડાણનો પુન:પ્રયત્ન કરો?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "દૂરસ્થ ડેસ્કટોપ સર્વર સાથે સત્તાધિકરણ કરવાનું અસમર્થ: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB પુનર્નિર્દેશન ભૂલ: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "%d દર્શાવો" -@@ -320,7 +351,6 @@ msgstr "%d દર્શાવો" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "સત્તાધિકરણ જરૂરી છે" -@@ -369,7 +399,8 @@ msgstr "Virt Viewer" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "ઉપલબ્ધ આદેશ વાક્ય વિકલ્પોની સંપૂર્ણ યાદીને જોવા માટે '%s --help' ચલાવો" -+msgstr "" -+"ઉપલબ્ધ આદેશ વાક્ય વિકલ્પોની સંપૂર્ણ યાદીને જોવા માટે '%s --help' ચલાવો" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -378,16 +409,19 @@ msgstr "- વર્ચ્યુઅલ મશીન ગ્રાફિકલ ક - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nવપરાશ: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"વપરાશ: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "પુનર્નિર્દેશન માટે USB ઉપકરણોને પસંદ કરો" - -@@ -396,167 +430,167 @@ msgstr "પુનર્નિર્દેશન માટે USB ઉપકરણ - msgid "Unsupported authentication type %d" - msgstr "બિનઆધારભૂત સત્તાધિકરણ પ્રકાર %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "સ્ક્રીનશોટ" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "જોડાણ તોડી નાંખો" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB ઉપકરણ પસંદગી" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "કી સંયોજન મોકલો" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "પૂર્ણસ્ક્રીન છોડો" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(પોઇંટરને પ્રકાશિત કરવા માટે %s ને દબાવો)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "ઓછામાં ઓછી %s આવૃત્તિ %s ને આ જોડાણને સુયોજિત કરવાની જરૂરિયાત છે" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "પુન:શરૂ કરવા માટે મહેમાન ડોમેઇન માટે રાહ જોઇ રહ્યા છે" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "મહેમાન %s માટે ગ્રાફિક પ્રકારને નક્કી કરી શકાતુ નથી" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "મહેમાન %s માટે ગ્રાફિક સરનામાંને નક્કી કરી શકાતુ નથી" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "મહેમાન %s માટે યજમાનને નક્કી કરી શકાતુ નથી" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "શરૂ થવા libvirt માટે રાહ જોઇ રહ્યા છે" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "મહેમાન ડોમેઇનને શોધી રહ્યા છે" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "બનાવવા માટે મહેમાન ડોમેઇન માટે રાહ જોઇ રહ્યા છે" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "મહેમાન ડોમેઇન %s ને શોધી શકાતુ નથી" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "મહેમાન ડોમેઇન પરિસ્થિતિને ચકાસી રહ્યા છે" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "શરૂ કરવા માટે મહેમાન ડોમેઇન માટે રાહ જોઇ રહ્યા છે" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "સર્વરને શરૂ કરવા માટે મહેમાન ડોમેઇન માટે રાહ જોઇ રહ્યા છે" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "URI %s સાથે libvirt ને જોડવાનું અસમર્થ" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[કંઇ નહિં]" - -@@ -565,7 +599,6 @@ msgstr "[કંઇ નહિં]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "ફાઇલ (_F)" -@@ -606,10 +639,6 @@ msgstr "પ્રકાશન કર્સર" - msgid "_Send key" - msgstr "કી મોકલો (_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "PrintScreen (_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "મદદ (_H)" -diff --git a/po/hi.po b/po/hi.po -index bdfa965..59b2e6b 100644 ---- a/po/hi.po -+++ b/po/hi.po -@@ -12,7 +12,7 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-05-03 08:44+0000\n" -+"PO-Revision-Date: 2013-05-03 04:44-0400\n" - "Last-Translator: Rajesh Ranjan <rranjan@redhat.com>\n" - "Language-Team: Hindi <indlinux-hindi@lists.sourceforge.net>\n" - "MIME-Version: 1.0\n" -@@ -20,8 +20,10 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Language: hi\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "दूरस्थ दर्शक" - -@@ -83,11 +85,13 @@ msgstr "दूरस्थ-दर्शक संस्करण %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "अवैध पूर्ण स्क्रीन आर्गुमेंट. %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "संस्करण की जानकारी दिखाता है" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr " वर्बोज की जानकारी दिखाता है" - -@@ -95,15 +99,18 @@ msgstr " वर्बोज की जानकारी दिखाता ह - msgid "Set window title" - msgstr "विंडो शीर्षक सेट करें" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr " स्वचालित सुरंगों के साथ कोई भी प्रत्यक्ष कनेक्शन नहीं " - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "विंडो का जूम स्तर, प्रतिशत में" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "डिबगिंग सूचना दिखाता है" - -@@ -111,7 +118,9 @@ msgstr "डिबगिंग सूचना दिखाता है" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "पूर्ण स्क्रीन अवस्था में खोलें (auto-conf क्लाइंट में सटीक बैठने के लिए अतिथि रेजोल्यूशन को ऑटोकॉन्फ करें)." -+msgstr "" -+"पूर्ण स्क्रीन अवस्था में खोलें (auto-conf क्लाइंट में सटीक बैठने के लिए " -+"अतिथि रेजोल्यूशन को ऑटोकॉन्फ करें)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -121,7 +130,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "स्पाइस संचार नियंत्रक का उपयोग करते हुए कनेक्शन खोलें" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "हॉटकी मनपसंद बनाएँ" - -@@ -135,7 +145,8 @@ msgstr "-दूरस्थ दर्शक ग्राहक" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\n'%s --help' को उपलब्ध कमांड लाइन की पूरी सूची देखने के लिए देखें.\n" -+msgstr "%s\n" -+"'%s --help' को उपलब्ध कमांड लाइन की पूरी सूची देखने के लिए देखें.\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -147,12 +158,14 @@ msgstr "त्रुटि: स्पाइस कंट्रोलर के - msgid "Error: can't handle multiple URIs\n" - msgstr "त्रुटि: बहुल URI को नियंत्रित नहीं कर सकता है\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "ज़ूम का स्तर 10-200 अंतर्गत होना चाहिए\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "कनेक्शन आरंभ करने में विफल" - -@@ -209,7 +222,6 @@ msgstr "इस प्रकार का सत्र नहीं बना स - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "ग्लेड के बारे में" -@@ -218,11 +230,15 @@ msgstr "ग्लेड के बारे में" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" --msgstr "एक दूरस्थ डेस्कटॉप ग्राहक जीतीके-वीएनसी, स्पाइस-जीटीके और लिब्विर्ट के साथ निर्मित" -+msgstr "" -+"एक दूरस्थ डेस्कटॉप ग्राहक जीतीके-वीएनसी, स्पाइस-जीटीके और लिब्विर्ट के साथ " -+"निर्मित" - - #: ../src/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -243,77 +259,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "यह प्रोग्राम मुफ्त सॉफ्टवेयर का है: आप इसे फ्री सॉफ्टवेयर फाउंडेशन के द्वारा प्रकाशित जीएनयू जनरल पब्लिक लाइसेंस; या तो लाइसेंस का संस्करण 2, या (आपके विकल्प के अनुसार) बाद के किसी संस्करण की शर्तों के तहत पुनर्वितरित और / संशोधित कर सकते हैं .\n\nइस कार्यक्रम को इस उम्मीद से वितरित किया गया है कि यह बिना किसी वारंटी;व्यापारिकता की अप्रत्यक्ष वारंटी या किसी खास उद्देश्य के लिए उपयुक्तता के बिना उपयोगी होगा. अधिक जानकारी के लिए जीएनयू जनरल पब्लिक लाइसेंस देखें.\n\nआप इस प्रोग्राम के साथ जीएनयू जनरल पब्लिक लाइसेंस की एक प्रतिलिपि प्राप्त करेगे; अगर नहीं, फ्री सॉफ्टवेयर फाउंडेशन को लिखे, Inc. 59 मंदिर प्लेस, 330 सूट, बोस्टन, एमए 02111-1307, संयुक्त राज्य अमेरिका\n" -+msgstr "" -+"यह प्रोग्राम मुफ्त सॉफ्टवेयर का है: आप इसे फ्री सॉफ्टवेयर फाउंडेशन के द्वारा " -+"प्रकाशित जीएनयू जनरल पब्लिक लाइसेंस; या तो लाइसेंस का संस्करण 2, या (आपके " -+"विकल्प के अनुसार) बाद के किसी संस्करण की शर्तों के तहत पुनर्वितरित और / " -+"संशोधित कर सकते हैं .\n" -+"\n" -+"इस कार्यक्रम को इस उम्मीद से वितरित किया गया है कि यह बिना किसी " -+"वारंटी;व्यापारिकता की अप्रत्यक्ष वारंटी या किसी खास उद्देश्य के लिए " -+"उपयुक्तता के बिना उपयोगी होगा. अधिक जानकारी के लिए जीएनयू जनरल पब्लिक " -+"लाइसेंस देखें.\n" -+"\n" -+"आप इस प्रोग्राम के साथ जीएनयू जनरल पब्लिक लाइसेंस की एक प्रतिलिपि प्राप्त " -+"करेगे; अगर नहीं, फ्री सॉफ्टवेयर फाउंडेशन को लिखे, Inc. 59 मंदिर प्लेस, 330 " -+"सूट, बोस्टन, एमए 02111-1307, संयुक्त राज्य अमेरिका\n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "फेडोरा अनुवाद टीम" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "क्या आप इस सत्र को आयात बंद करना चाहते हैं?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "मुझे फिर मत पूछें" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr " %d प्रदर्शन के लिए प्रतीक्षा कर रहा है ..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "%s अतिथि के लिए अज्ञात ग्राफ़िक प्रकार" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "सश से कनेक्ट करने में विफल." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "चैनल से कनेक्ट नहीं हो सकता, केवल सश समर्थित." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr " चैनल से कनेक्ट करना असहायक" - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "ग्राफ़िक सर्वर से कनेक्ट हो रहा है." - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "अतिथि के डोमेन को शटडाउन किया है" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "ग्राफ़िक सर्वर से जुड़ा" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "%s ग्राफ़िक सर्वर से कनेक्ट करने में असमर्थ" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s पर दूरस्थ डेस्कटॉप सर्वर के साथ सत्यापन करने में असमर्थ : %s\nफिर से कनेक्शन पुन: प्रयास करें?" -+msgstr "" -+"%s पर दूरस्थ डेस्कटॉप सर्वर के साथ सत्यापन करने में असमर्थ : %s\n" -+"फिर से कनेक्शन पुन: प्रयास करें?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "दूरस्थ डेस्कटॉप सर्वर के साथ सत्यापन करने में असमर्थ : %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "यूएसबी पुनर्निर्देशन त्रुटि : %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "प्रदर्शन %d" -@@ -323,7 +354,6 @@ msgstr "प्रदर्शन %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "सत्यापन की आवश्यकता" -@@ -381,16 +411,19 @@ msgstr "- वर्चुअल मशीन आलेखी कंसोल" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nप्रयोग: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"प्रयोग: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "पुनर्निर्देशन के लिए यूएसबी उपकरणों का चयन करें" - -@@ -399,167 +432,167 @@ msgstr "पुनर्निर्देशन के लिए यूएसब - msgid "Unsupported authentication type %d" - msgstr "असहायक सत्यापन के प्रकार %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "स्क्रीनशॉट" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "डिस्कनेक्ट करें" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "यूएसबी उपकरण चयन" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "कुंजी संयोजन भेजें" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "फुल स्क्रीन छोड़ दें" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(सूचक जारी करने के लिए %s दबाएँ)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "कम से कम %s संस्करण %s इस कनेक्शन के सेटअप के लिए जरूरी है" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "अतिथि डोमेन को फिर से प्रारंभ करने के लिए प्रतीक्षा करे " - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "%s अतिथि के लिए ग्राफ़िक प्रकार निर्धारित नहीं कर सकते है " - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "%s अतिथि के लिए ग्राफ़िक पता निर्धारित नहीं कर सकते है " - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "%s अतिथि के लिए होस्ट का निर्धारण नहीं कर सकते है " - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "libvirt शुरू करने के लिए प्रतीक्षा की जा रही है" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "अतिथि डोमेन को खोज रहा है " - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "अतिथि डोमेन बनाई जाने प्रतीक्षा के लिए की जा रही है" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "अतिथि डोमेन %s नहीं पा सकता है" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "अतिथि डोमेन की स्थिति की जाँच हो रही है" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr " अतिथि डोमेन शुरू करने के लिए प्रतीक्षा की जा रही है " - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "अतिथि डोमेन सर्वर को शुरू करने के लिए प्रतीक्षा कर रहा है" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "URI %s के साथ libvirt से कनेक्ट करने में असमर्थ" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "कुछ नहीं" - -@@ -568,7 +601,6 @@ msgstr "कुछ नहीं" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "फाइल (_F)" -@@ -609,10 +641,6 @@ msgstr "रिलीज कर्सर" - msgid "_Send key" - msgstr "कुंजी भेजें (_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "प्रिंटस्क्रीन (_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "सहायता (_H)" -diff --git a/po/it.po b/po/it.po -index 6e1d130..031ad08 100644 ---- a/po/it.po -+++ b/po/it.po -@@ -14,7 +14,7 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-06-23 16:46+0000\n" -+"PO-Revision-Date: 2013-06-23 12:46-0400\n" - "Last-Translator: Guido Grazioli <guido.grazioli@gmail.com>\n" - "Language-Team: Italian <trans-it@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" -@@ -22,8 +22,10 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Language: it\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "Visualizzatore remoto" - -@@ -85,11 +87,13 @@ msgstr "versione del visualizzatore-remoto %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "Argomento schermo-intero non valido: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "Mostra informazioni sulla versione" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "Mostra informazioni dettagliate" - -@@ -97,15 +101,18 @@ msgstr "Mostra informazioni dettagliate" - msgid "Set window title" - msgstr "Imposta il titolo della finestra" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "Connessione diretta con nessun tunnel automatico" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "Livello di zoom della finestra, in percentuale" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "Mostra le informazioni di debug" - -@@ -113,7 +120,9 @@ msgstr "Mostra le informazioni di debug" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "Apri in modalità schermo intero (auto-conf regola la risoluzione del guest per soddisfare il client)." -+msgstr "" -+"Apri in modalità schermo intero (auto-conf regola la risoluzione del guest " -+"per soddisfare il client)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -123,7 +132,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Apri collegamento usando una comunicazione SPICE" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "Personalizza i tasti di scelta rapida" - -@@ -137,24 +147,30 @@ msgstr "- Client visualizzatore remoto" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nEseguire '%s --help' per avere un elenco completo di opzioni della linea di comando disponibili\n" -+msgstr "" -+"%s\n" -+"Eseguire '%s --help' per avere un elenco completo di opzioni della linea di " -+"comando disponibili\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format - msgid "Error: extra arguments given while using Spice controller\n" --msgstr "Errore: presenti troppi argomenti durante l'uso del controllore Spice\n" -+msgstr "" -+"Errore: presenti troppi argomenti durante l'uso del controllore Spice\n" - - #: ../src/remote-viewer-main.c:182 - #, c-format - msgid "Error: can't handle multiple URIs\n" - msgstr "Errore: impossibile gestire URI multipli\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "Il livello di zoom deve essere tra 10-200\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "Inizializzazione connessione fallita" - -@@ -211,7 +227,6 @@ msgstr "Impossibile creare una sessione per questo tipo: %s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "Informazioni su Glade" -@@ -220,7 +235,9 @@ msgstr "Informazioni su Glade" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" -@@ -245,77 +262,93 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "Questo programma è un sofware libero, è possibile ridistribuirlo e/o modificarlo in conformità alle disposizioni della GNU General Public License come viene pubblicata dalla Free Software Foundation; versione 2 della licenza o (a scelta) tutte le versioni successive.\n\nQuesto programma è distribuito nella speranza che possa essere utile, ma SENZA ALCUNA GARANZIA, e senza garanzia implicita di COMMERCIALIZZAZIONE o di ADATTAMENTO AD UNO SCOPO PARTICOLARE. Per maggiori dettagli consultare la GNU General Public License.\n\nInsieme a questo programma deve essere fornita una copia della GNU General Public License; in caso contrario scrivere alla Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"Questo programma è un sofware libero, è possibile ridistribuirlo e/o " -+"modificarlo in conformità alle disposizioni della GNU General Public License " -+"come viene pubblicata dalla Free Software Foundation; versione 2 della " -+"licenza o (a scelta) tutte le versioni successive.\n" -+"\n" -+"Questo programma è distribuito nella speranza che possa essere utile, ma " -+"SENZA ALCUNA GARANZIA, e senza garanzia implicita di COMMERCIALIZZAZIONE o " -+"di ADATTAMENTO AD UNO SCOPO PARTICOLARE. Per maggiori dettagli consultare la " -+"GNU General Public License.\n" -+"\n" -+"Insieme a questo programma deve essere fornita una copia della GNU General " -+"Public License; in caso contrario scrivere alla Free Software Foundation, " -+"Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Il Fedora Translation Team" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "Desideri terminare la sessione?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "Non chiedermelo più" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "In attesa del display %d..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "Impossibile determinare il tipo grafico per il guest %s" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "Connessione a ssh fallita." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "Impossibile connettersi al canale, è supportato solo SSH." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "Connessione al canale non supportata." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "Connessione al server grafico in corso" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "Il dominio del guest si è arrestato" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "Connesso al server grafico" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "Impossibile connettersi al server grafico %s" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "Impossibile eseguire l'autenticazione con il server desktop remoto su %s: %s\nRiprovare il collegamento?" -+msgstr "" -+"Impossibile eseguire l'autenticazione con il server desktop remoto su %s: %s\n" -+"Riprovare il collegamento?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" --msgstr "Impossibile eseguire l'autenticazione con il server desktop remoto su: %s" -+msgstr "" -+"Impossibile eseguire l'autenticazione con il server desktop remoto su: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "Errore di reindirizzamento USB: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "Visualizza %d" -@@ -325,7 +358,6 @@ msgstr "Visualizza %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "Autenticazione necessaria" -@@ -374,7 +406,9 @@ msgstr "Virt Viewer" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "Eseguire '%s --help' per avere un elenco completo di opzioni della linea di comando disponibili" -+msgstr "" -+"Eseguire '%s --help' per avere un elenco completo di opzioni della linea di " -+"comando disponibili" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -383,16 +417,19 @@ msgstr "- Console grafica della virtual machine" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nUtilizzo: %s [OPZIONI] NOME-DOMINIO|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"Utilizzo: %s [OPZIONI] NOME-DOMINIO|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "Seleziona i dispositivi USB per il reindirizzamento" - -@@ -401,167 +438,167 @@ msgstr "Seleziona i dispositivi USB per il reindirizzamento" - msgid "Unsupported authentication type %d" - msgstr "Tipo di autenticazione %d non supportata" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "Schermata" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "Scollega" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "Selezione dispositivo USB" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "Invia combinazione di tasti" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "Lascia a schermo intero" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(Premere %s per rilasciare il puntatore)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, 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:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "In attesa del riavvio del dominio guest" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, 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:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "Impossibile determinare l'indirizzo grafico per il guest %s" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "Impossibile determinare l'host per il guest %s" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "In attesa dell'avvio di libvirt" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "Ricerca dominio guest in corso" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "In attesa di creazione del dominio guest" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "Impossibile trovare il dominio guest %s" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "Controllo stato del dominio guest in corso" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "In attesa dell'avvio del dominio guest" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "In attesa che il dominio guest avvii il server" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "Impossibile connettersi a libvirt con la URI %s" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[nessuno]" - -@@ -570,7 +607,6 @@ msgstr "[nessuno]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "_File" -@@ -611,10 +647,6 @@ msgstr "Rilascia il cursore" - msgid "_Send key" - msgstr "_Invia combinazione tasti" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "_StampaSchermata" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "_Aiuto" -diff --git a/po/ja.po b/po/ja.po -index a1cb797..438633b 100644 ---- a/po/ja.po -+++ b/po/ja.po -@@ -11,7 +11,7 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-30 09:51+0000\n" -+"PO-Revision-Date: 2013-04-30 05:51-0400\n" - "Last-Translator: Tomoyuki KATO <tomo@dream.daynight.jp>\n" - "Language-Team: Japanese <trans-ja@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" -@@ -19,8 +19,10 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Language: ja\n" - "Plural-Forms: nplurals=1; plural=0;\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "リモートビューアー" - -@@ -82,11 +84,13 @@ msgstr "remote-viewer バージョン %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "無効なフルスクリーン引数: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "バージョン情報を表示します" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "詳細情報を表示します" - -@@ -94,15 +98,18 @@ msgstr "詳細情報を表示します" - msgid "Set window title" - msgstr "ウィンドウタイトルの設定" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "自動的にトンネリングせず直接接続する" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "ウィンドウのズームレベル(パーセント単位)" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "デバッグ情報を表示します" - -@@ -120,7 +127,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Spice コントローラー通信を使用して接続を開く" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "ホットキーのカスタマイズ" - -@@ -134,7 +142,8 @@ msgstr "- リモートビューアークライアント" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\n利用可能なコマンドラインオプションの完全な一覧を確認するには '%s --help' を実行してください\n" -+msgstr "%s\n" -+"利用可能なコマンドラインオプションの完全な一覧を確認するには '%s --help' を実行してください\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -146,12 +155,14 @@ msgstr "エラー: Spice コントローラーを使用しているときに余 - msgid "Error: can't handle multiple URIs\n" - msgstr "Error: 複数の URI を処理できません\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "ズームレベルは 10-200 の範囲内でなければいけません\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "接続の初期化に失敗しました" - -@@ -208,7 +219,6 @@ msgstr "この種類のセッションを作成できませんでした: %s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "Glade について" -@@ -217,7 +227,9 @@ msgstr "Glade について" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" -@@ -242,77 +254,91 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"This program is free software; you can redistribute it and/or modify\n" -+"it under the terms of the GNU General Public License as published by\n" -+"the Free Software Foundation; either version 2 of the License, or\n" -+"(at your option) any later version.\n" -+"\n" -+"This program is distributed in the hope that it will be useful,\n" -+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -+"GNU General Public License for more details.\n" -+"\n" -+"You should have received a copy of the GNU General Public License\n" -+"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" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "The Fedora Translation Team" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "セッションを閉じますか?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "二度と確認しない" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "ディスプレイ %d を待機中..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "仮想マシン %s のグラフィックの種類が未知の種類です" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "SSH への接続に失敗しました。" - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "チャンネルに接続できません、SSH のみがサポートされます。" - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "サポートされないチャネルに接続します。" - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "グラフィックサーバーに接続中" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "仮想マシンがシャットダウンしました" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "グラフィックサーバーに接続" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "グラフィックサーバー %s に接続できません" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s のリモートデスクトップサーバーの認証で失敗しました: %s\n再び接続を試行しますか?" -+msgstr "%s のリモートデスクトップサーバーの認証で失敗しました: %s\n" -+"再び接続を試行しますか?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "リモートデスクトップサーバーの認証で失敗しました: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB リダイレクトエラー: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "ディスプレイ %d" -@@ -322,7 +348,6 @@ msgstr "ディスプレイ %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "認証が必要です" -@@ -380,16 +405,19 @@ msgstr "- 仮想マシングラフィカルコンソール" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\n使用法: %s [オプション] ドメイン名|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"使用法: %s [オプション] ドメイン名|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "リダイレクトする USB デバイスを選択" - -@@ -398,167 +426,167 @@ msgstr "リダイレクトする USB デバイスを選択" - msgid "Unsupported authentication type %d" - msgstr "サポートしていない認証の種類 %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+Del(_D)" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+Backspace(_B)" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F1(_1)" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F2(_2)" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F3(_3)" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F4(_4)" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F5(_5)" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F6(_6)" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F7(_7)" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F8(_8)" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F9(_9)" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F10(_0)" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "スクリーンショット" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "切断" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB デバイスの選択" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "組み合わせキーの送信" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "フルスクリーンの解除" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(ポインターを開放するには %s を押します)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "少なくとも %s バージョン %s がこのセッションをセットアップするために必要です" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "仮想マシンが再起動するのを待機中" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "仮想マシン %s のグラフィックの種類を決定できません" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "仮想マシン %s のグラフィックのアドレスを決定できません" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "仮想マシン %s のホストを決定できません" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "libvirt の起動を待つ" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "仮想マシンを検索中" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "仮想マシンが作成されるのを待機中" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "仮想マシン %s が見つかりません" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "仮想マシンの状態を確認中" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "仮想マシンが開始するのを待機中" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "仮想マシンがサーバーを開始するのを待機中" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "URI %s で libvirt に接続できません" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[なし]" - -@@ -567,7 +595,6 @@ msgstr "[なし]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "ファイル(_F)" -@@ -608,10 +635,6 @@ msgstr "カーソルの開放" - msgid "_Send key" - msgstr "キーを送信(_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "PrintScreen(_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "ヘルプ(_H)" -diff --git a/po/kn.po b/po/kn.po -index cc7daf3..bc9c4da 100644 ---- a/po/kn.po -+++ b/po/kn.po -@@ -11,16 +11,19 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-05-03 11:37+0000\n" -+"PO-Revision-Date: 2013-05-03 07:37-0400\n" - "Last-Translator: shanky <prasad.mvs@gmail.com>\n" --"Language-Team: Kannada (http://www.transifex.com/projects/p/fedora/language/kn/)\n" -+"Language-Team: Kannada (http://www.transifex.com/projects/p/fedora/language/" -+"kn/)\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Language: kn\n" - "Plural-Forms: nplurals=1; plural=0;\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "ದೂರಸ್ಥ ವೀಕ್ಷಕ" - -@@ -82,11 +85,13 @@ msgstr "ದೂರದ-ವೀಕ್ಷಕದ ಆವೃತ್ತಿ %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "ಅಮಾನ್ಯವಾದ ಪೂರ್ಣ-ತೆರೆ ಆರ್ಗ್ಯುಮೆಂಟ್: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "ಪ್ರದರ್ಶನ ಆವೃತ್ತಿ ಮಾಹಿತಿ" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "ವರ್ಬೋಸ್ ಮಾಹಿತಿಯನ್ನು ತೋರಿಸು" - -@@ -94,15 +99,18 @@ msgstr "ವರ್ಬೋಸ್ ಮಾಹಿತಿಯನ್ನು ತೋರಿಸ - msgid "Set window title" - msgstr "ಕಿಟಕಿಯ ಶೀರ್ಷಿಕೆಯನ್ನು ಹೊಂದಿಸು" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "ಯಾವುದೆ ಸ್ವಯಂಚಾಲಿತ ಟನಲ್‌ಗಳ ನೇರವಾದ ಸಂಪರ್ಕ " - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "ಕಿಟಕಿಯ ಗಾತ್ರ ಬದಲಾವಣೆ, ಪ್ರತಿಶತದಲ್ಲಿ" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "ದೋಷನಿದಾನ ಮಾಹಿತಿಯನ್ನು ತೋರಿಸು" - -@@ -110,7 +118,9 @@ msgstr "ದೋಷನಿದಾನ ಮಾಹಿತಿಯನ್ನು ತೋರಿ - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "ಪೂರ್ಣತೆರೆ ಕ್ರಮದಲ್ಲಿ ತೆರೆ (ಕಕ್ಷಿಯ/ಕ್ಲೈಂಟ್‌ನ ರೆಸಲ್ಯೂಶನ್‌ಗೆ ಹೊಂದಿಕೆಯಾಗುವಂತೆ auto-conf ಅತಿಥಿಯನ್ನು ಸರಿಹೊಂದಿಸುತ್ತದೆ)." -+msgstr "" -+"ಪೂರ್ಣತೆರೆ ಕ್ರಮದಲ್ಲಿ ತೆರೆ (ಕಕ್ಷಿಯ/ಕ್ಲೈಂಟ್‌ನ ರೆಸಲ್ಯೂಶನ್‌ಗೆ ಹೊಂದಿಕೆಯಾಗುವಂತೆ " -+"auto-conf ಅತಿಥಿಯನ್ನು ಸರಿಹೊಂದಿಸುತ್ತದೆ)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -120,7 +130,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "ಸ್ಪೈಸ್ ನಿಯಂತ್ರಣ ವ್ಯವಹಾರವನ್ನು ಬಳಸಿಕೊಂಡು ಸಂಪರ್ಕವನ್ನು ತೆರೆ" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "ಹಾಟ್‌ಕೀಲಿಗಳನ್ನು ಅಗತ್ಯಾನುಗುಣಗೊಳಿಸು" - -@@ -134,7 +145,9 @@ msgstr "- ದೂರದ ವೀಕ್ಷಕದ ಆವೃತ್ತಿ" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nಲಭ್ಯವಿರುವ ಆಜ್ಞಾಸಾಲಿನ ಆಯ್ಕೆಗಳ ಸಂಪೂರ್ಣ ಪಟ್ಟಿಗಾಗಿ '%s --help' ಅನ್ನು ಚಲಾಯಿಸಿ\n" -+msgstr "" -+"%s\n" -+"ಲಭ್ಯವಿರುವ ಆಜ್ಞಾಸಾಲಿನ ಆಯ್ಕೆಗಳ ಸಂಪೂರ್ಣ ಪಟ್ಟಿಗಾಗಿ '%s --help' ಅನ್ನು ಚಲಾಯಿಸಿ\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -146,12 +159,14 @@ msgstr "ದೋಷ: ಸ್ಪೈಸ್‌ ನಿಯಂತ್ರಕವನ್ನು - msgid "Error: can't handle multiple URIs\n" - msgstr "ದೋಷ: ಅನೇಕ URLಗಳನ್ನು ನಿಭಾಯಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "ಗಾತ್ರ ಬದಲಾವಣೆ ಮಟ್ಟವು 10-200ರ ನಡುವೆ ಇರಬೇಕು\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "ಸಂಪರ್ಕವನ್ನು ಆರಂಭಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ" - -@@ -208,7 +223,6 @@ msgstr "ಈ ಬಗೆಗಾಗಿ ಒಂದು ಅಧಿವೇಶನವನ್ನ - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "ಗ್ಲೇಡ್ ಕುರಿತು" -@@ -217,11 +231,14 @@ msgstr "ಗ್ಲೇಡ್ ಕುರಿತು" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "ಹಕ್ಕು (C) 2007-2012 Daniel P. Berrange\nಹಕ್ಕು (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"ಹಕ್ಕು (C) 2007-2012 Daniel P. Berrange\n" -+"ಹಕ್ಕು (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.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/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -242,77 +259,93 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"This program is free software; you can redistribute it and/or modify\n" -+"it under the terms of the GNU General Public License as published by\n" -+"the Free Software Foundation; either version 2 of the License, or\n" -+"(at your option) any later version.\n" -+"\n" -+"This program is distributed in the hope that it will be useful,\n" -+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -+"GNU General Public License for more details.\n" -+"\n" -+"You should have received a copy of the GNU General Public License\n" -+"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" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "ಫೆಡೋರ ಟ್ರಾನ್ಸಲೇಶನ್ ಟೀಮ್" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "ನೀವು ಈ ಅಧಿವೇಶನವನ್ನು ಮುಚ್ಚಲು ಬಯಸುವಿರಾ?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "ಪುನಃ ನನ್ನನ್ನು ಕೇಳಬೇಡ" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "%d ಪ್ರದರ್ಶಕಕ್ಕಾಗಿ ಕಾಯಲಾಗುತ್ತಿದೆ..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "%s ಅತಿಥಿಗಾಗಿ ಗೊತ್ತಿರದ ಗ್ರಾಫಿಕ್ ಬಗೆ" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh ಗೆ ಸಂಪರ್ಕವು ವಿಫಲಗೊಂಡಿದೆ." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." --msgstr "ಚಾನಲ್‌ನೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ, SSH ಅನ್ನು ಮಾತ್ರ ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆ." -+msgstr "" -+"ಚಾನಲ್‌ನೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ, SSH ಅನ್ನು ಮಾತ್ರ ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆ." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "ಚಾನಲ್‌ನೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸುವುದನ್ನು ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆ." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "ಗ್ರಾಫಿಕ್ ಪೂರೈಕೆಗಣಕದೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸಲಾಗುತ್ತಿದೆ" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "ಅತಿಥಿ ಡೊಮೈನ್ ಅನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಲಾಗಿದೆ" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "ಗ್ರಾಫಿಕ್ ಪೂರೈಕೆಗಣಕದೊಂದಿಗೆ ಸಂಪರ್ಕಿತಗೊಂಡಿದೆ" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "%s ಎಂಬ ಗ್ರಾಫಿಕ್ ಪೂರೈಕೆಗಣಕದೊಂದಿಗೆ ಸಂಪರ್ಕಿತಗೊಂಡಿದೆ" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s ನಲ್ಲಿನ ದೂರದ ಗಣಕತೆರೆ ಪೂರೈಕೆಗಣಕದೊಂದಿಗೆ ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s\nಸಂಪರ್ಕಕ್ಕಾಗಿ ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಬೇಕೆ?" -+msgstr "" -+"%s ನಲ್ಲಿನ ದೂರದ ಗಣಕತೆರೆ ಪೂರೈಕೆಗಣಕದೊಂದಿಗೆ ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s\n" -+"ಸಂಪರ್ಕಕ್ಕಾಗಿ ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಬೇಕೆ?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "ದೂರದ ಗಣಕತೆರೆ ಪೂರೈಕೆಗಣಕದೊಂದಿಗೆ ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB ಮರುನಿರ್ದೇಶನ ದೋಷ: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "%d ಅನ್ನು ತೋರಿಸು" -@@ -322,7 +355,6 @@ msgstr "%d ಅನ್ನು ತೋರಿಸು" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "ದೃಢೀಕರಣದ ಅಗತ್ಯವಿದೆ" -@@ -371,7 +403,8 @@ msgstr "Virt Viewer" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "ಲಭ್ಯವಿರುವ ಆಜ್ಞಾಸಾಲಿನ ಆಯ್ಕೆಗಳ ಸಂಪೂರ್ಣ ಪಟ್ಟಿಗಾಗಿ '%s --help' ಅನ್ನು ಚಲಾಯಿಸಿ" -+msgstr "" -+"ಲಭ್ಯವಿರುವ ಆಜ್ಞಾಸಾಲಿನ ಆಯ್ಕೆಗಳ ಸಂಪೂರ್ಣ ಪಟ್ಟಿಗಾಗಿ '%s --help' ಅನ್ನು ಚಲಾಯಿಸಿ" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -380,16 +413,19 @@ msgstr "- ವರ್ಚುವಲ್ ಗಣಕದ ಚಿತ್ರಾತ್ಮಕ - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nಬಳಕೆ: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"ಬಳಕೆ: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "ಮರುನಿರ್ದೇಶನಕ್ಕಾಗಿ USB ಸಾಧನಗಳನ್ನು ಆರಿಸಿ" - -@@ -398,167 +434,167 @@ msgstr "ಮರುನಿರ್ದೇಶನಕ್ಕಾಗಿ USB ಸಾಧನಗ - msgid "Unsupported authentication type %d" - msgstr "ಬೆಂಬಲವಿರದ ದೃಢೀಕರಣದ ಬಗೆ %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "ತೆರೆಚಿತ್ರ" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "ಸಂಪರ್ಕ ಕಡಿದುಹಾಕು" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB ಸಾಧನವನ್ನು ಆರಿಸುವಿಕೆ" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "ಕೀಲಿಯ ಸಂಯೋಜನೆಯನ್ನು ಕಳುಹಿಸು" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "ಪೂರ್ಣತೆರೆಯಿಂದ ನಿರ್ಗಮಿಸು" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(ಸೂಚಕವನ್ನು ಮುಕ್ತಗೊಳಿಸಲು %s ಅನ್ನು ಒತ್ತಿ)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "ಈ ಸಂಪರ್ಕವನ್ನು ಸಿದ್ಧಗೊಳಿಸಲು ಕನಿಷ್ಟ %s ಆವೃತ್ತಿ %s ಅಗತ್ಯವಿದೆ" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "ಅತಿಥಿ ಡೊಮೈನ್ ಮರಳಿ-ಆರಂಭಗೊಳ್ಳಲು ಕಾಯಲಾಗುತ್ತಿದೆ" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "%s ಎಂಬ ಅತಿಥಿಗಾಗಿ ಗ್ರಾಫಿಕ್‌ನ ಬಗೆಯನ್ನು ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "%s ಎಂಬ ಅತಿಥಿಗಾಗಿ ಗ್ರಾಫಿಕ್‌ನ ವಿಳಾಸವನ್ನು ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "%s ಎಂಬ ಅತಿಥಿಗಾಗಿ ಆತಿಥೇಯವನ್ನು ನಿರ್ಧರಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "libvirt ಆರಂಭಗೊಳ್ಳುವವರೆಗೆ ಕಾಯಲಾಗುತ್ತಿದೆ" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "ಅತಿಥಿ ಡೊಮೈನ್ ಅನ್ನು ಪತ್ತೆ ಮಾಡಲಾಗುತ್ತಿದೆ" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "ಅತಿಥಿ ಡೊಮೈನ್ ನಿರ್ಮಾಣಗೊಳ್ಳಲು ಕಾಯಲಾಗುತ್ತಿದೆ" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "ಅತಿಥಿ ಡೊಮೈನ್ %s ಕಂಡುಬಂದಿಲ್ಲ" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "ಅತಿಥಿ ಡೊಮೈನ್ ಸ್ಥಿತಿಯನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "ಅತಿಥಿ ಡೊಮೈನ್ ಮರಳಿ-ಆರಂಭಗೊಳ್ಳಲು ಕಾಯಲಾಗುತ್ತಿದೆ" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "ಅತಿಥಿ ಡೊಮೈನ್ ಪೂರೈಕೆಗಣಕವನ್ನು ಆರಂಭಿಸುವವರೆಗೆ ಕಾಯಲಾಗುತ್ತಿದೆ" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "URI %s ಯೊಂದಿಗೆ libvirt ಗೆ ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[ಯಾವುದೂ ಇಲ್ಲ]" - -@@ -567,7 +603,6 @@ msgstr "[ಯಾವುದೂ ಇಲ್ಲ]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "ಕಡತ (_F)" -@@ -608,10 +643,6 @@ msgstr "ತೆರೆಸೂಚಕವನ್ನು ಮುಕ್ತಗೊಳಿಸ - msgid "_Send key" - msgstr "ಕಳುಹಿಸುವ ಕೀಲಿ (_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "ತೆರೆಯನ್ನು ಮುದ್ರಿಸು (_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "ನೆರವು (_H)" -diff --git a/po/ko.po b/po/ko.po -index d10f4ee..81b49ca 100644 ---- a/po/ko.po -+++ b/po/ko.po -@@ -8,21 +8,25 @@ - # eukim <eukim@redhat.com>, 2012 - # eukim <eukim@redhat.com>, 2012 - # Hyunsok Oh <hoh@redhat.com>, 2010 -+# eukim <eukim@redhat.com>, 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-29 17:06+0000\n" --"Last-Translator: Daniel Berrange <dan-transifex@berrange.com>\n" --"Language-Team: Korean (http://www.transifex.com/projects/p/fedora/language/ko/)\n" -+"PO-Revision-Date: 2013-09-26 08:08-0400\n" -+"Last-Translator: eukim <eukim@redhat.com>\n" -+"Language-Team: Korean (http://www.transifex.com/projects/p/fedora/language/" -+"ko/)\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Language: ko\n" - "Plural-Forms: nplurals=1; plural=0;\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "원격 뷰어" - -@@ -84,11 +88,13 @@ msgstr "remote-viewer 버전 %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "잘못된 전체 화면 인수: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "버전 정보 보기 " - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "상세 정보 보기 " - -@@ -96,15 +102,18 @@ msgstr "상세 정보 보기 " - msgid "Set window title" - msgstr "창 제목 설정 " - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "자동으로 터널링하지 않고 직접 연결 " - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "윈도우의 줌 레벨 (백분율) " - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "디버그 정보 보기 " - -@@ -122,7 +131,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Spice 컨트롤러 통신을 사용하여 연결을 오픈합니다 " - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "핫키 사용자 정의 " - -@@ -136,7 +146,8 @@ msgstr "- 원격 뷰어 클라이언트 " - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\n사용 가능한 명령행 옵션의 전체 목록을 보려면 '%s --help'를 실행하십시오\n" -+msgstr "%s\n" -+"사용 가능한 명령행 옵션의 전체 목록을 보려면 '%s --help'를 실행하십시오\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -148,12 +159,14 @@ msgstr "오류: Spice 컨트롤러를 사용하는 도중 불필요한 인수가 - msgid "Error: can't handle multiple URIs\n" - msgstr "오류: 여러 URI를 처리할 수 없습니다\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "줌 레벨은 10-200 범위 내에 있어야 합니다\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "연결 초기화 실패 " - -@@ -198,7 +211,7 @@ msgstr "URI에서 연결 유형을 지정할 수 없음 " - - #: ../src/remote-viewer.c:1001 - msgid "Couldn't open oVirt session" --msgstr "" -+msgstr "oVirt 세션을 열 수 없습니다" - - #: ../src/remote-viewer.c:1008 - #, c-format -@@ -210,7 +223,6 @@ msgstr "이러한 유형의 세션을 생성할 수 없음: %s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "Glade에 관하여 " -@@ -219,7 +231,9 @@ msgstr "Glade에 관하여 " - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" -@@ -244,77 +258,91 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"This program is free software; you can redistribute it and/or modify\n" -+"it under the terms of the GNU General Public License as published by\n" -+"the Free Software Foundation; either version 2 of the License, or\n" -+"(at your option) any later version.\n" -+"\n" -+"This program is distributed in the hope that it will be useful,\n" -+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -+"GNU General Public License for more details.\n" -+"\n" -+"You should have received a copy of the GNU General Public License\n" -+"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" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora 번역팀 " - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "세션을 종료하시겠습니까?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "다시 묻지 않습니다 " - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "디스플레이 %d를 기다리는 중..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "게스트 %s의 그래픽 유형을 알 수 없습니다 " - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh 연결을 실패했습니다. " - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "채널에 연결할 수 없습니다, SSH만 지원됩니다. " - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "지원되지 않는 채널에 연결합니다. " - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "그래픽 서버에 연결 중 " - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "게스트 도메인이 종료되었습니다 " - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "그래픽 서버에 연결 " - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "그래픽 서버 %s에 연결할 수 없음 " - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s의 원격 데스크톱 서버에 인증할 수 없습니다: %s\n연결을 다시 시도 하시겠습니까? " -+msgstr "%s의 원격 데스크톱 서버에 인증할 수 없습니다: %s\n" -+"연결을 다시 시도 하시겠습니까? " - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "원격 데스크탑 서버로 인증할 수 없음: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB 리디렉션 오류: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "디스플레이 %d" -@@ -324,7 +352,6 @@ msgstr "디스플레이 %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "인증이 필요함 " -@@ -382,16 +409,19 @@ msgstr "- 가상 머신 그래픽 콘솔" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\n사용법: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"사용법: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "리디렉션을 위한 USB 장치 선택 " - -@@ -400,167 +430,167 @@ msgstr "리디렉션을 위한 USB 장치 선택 " - msgid "Unsupported authentication type %d" - msgstr "지원되지 않는 인증 유형 %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+Del(_D) " - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+Backspace(_B)" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "스크린샷 " - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "연결 해제 " - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB 장치 선택 " - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "조합 키 전송" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "전체 화면 해제 " - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(포인터를 개방하려면 %s를 누르십시오)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" --msgstr "" -+msgstr "이 연결을 설정하기 위해 최소한 %s 버전 %s이 필요합니다" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "다시 시작할 게스트 도메인을 기다리는 중 " - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "게스트 %s의 그래픽 유형을 지정할 수 없음 " - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "게스트 %s의 그래픽 주소를 지정할 수 없음 " - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "게스트 %s의 호스트를 지정할 수 없음 " - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "libvirt 시작을 기다리는 중 " - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "게스트 도메인 검색 중 " - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "게스트 도메인이 생성되기를 기다리는 중 " - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "게스트 도메인 %s를 찾을 수 없음 " - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "게스트 도메인 상태 확인 중 " - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "시작할 게스트 도메인을 기다리는 중 " - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "서버를 시작할 게스트 도메인을 기다리는 중 " - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "URI %s로 libvirt에 연결할 수 없음 " - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[없음]" - -@@ -569,7 +599,6 @@ msgstr "[없음]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "파일(_F)" -@@ -610,10 +639,6 @@ msgstr "커서 개방 " - msgid "_Send key" - msgstr "키 전송(_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "PrintScreen(_P) " -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "도움말(_H) " -diff --git a/po/ml.po b/po/ml.po -index fd2d6fa..c85472d 100644 ---- a/po/ml.po -+++ b/po/ml.po -@@ -9,7 +9,7 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-05-07 04:04+0000\n" -+"PO-Revision-Date: 2013-05-07 12:04-0400\n" - "Last-Translator: Ani Peter <apeter@redhat.com>\n" - "Language-Team: Malayalam <discuss@lists.smc.org.in>\n" - "MIME-Version: 1.0\n" -@@ -17,8 +17,10 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Language: ml\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "റിമോട്ട് വ്യൂവര്‍" - -@@ -80,11 +82,13 @@ msgstr "remote-viewer പതിപ്പു് %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "തെറ്റായ പൂര്‍ണ്ണസ്ക്രീന്‍ ആര്‍ഗ്യുമെന്റ്: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "പതിപ്പിനെപ്പറ്റിയുള്ള വിവരം കാണിയ്ക്കുക" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "വെര്‍ബോസ് വിവരം കാണിയ്ക്കുക" - -@@ -92,15 +96,18 @@ msgstr "വെര്‍ബോസ് വിവരം കാണിയ്ക്ക - msgid "Set window title" - msgstr "ജാലകത്തിന്റെ തലക്കെട്ട് സജ്ജമാക്കുക" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "ഓട്ടോമാറ്റിക് ടണലുകള്‍ ഇല്ലാത്ത നേരിട്ടുള്ള കണക്ഷന്‍" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "ജാലകത്തിന്റെ സൂം ലവല്‍, ശതമാനത്തില്‍" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "ഡീബഗ്ഗിങ് വിവരം കാണിയ്ക്കുക" - -@@ -108,7 +115,9 @@ msgstr "ഡീബഗ്ഗിങ് വിവരം കാണിയ്ക്ക - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "സ്ക്രീന്‍ പൂര്‍ണ്ണവലിപ്പ മോഡില്‍ തുറക്കുക (ക്ലയന്റിനുള്ള റിസല്യൂഷനു് പാകത്തിനു് auto-conf ഗസ്റ്റിനെ ഉചിതമാക്കുന്നു)." -+msgstr "" -+"സ്ക്രീന്‍ പൂര്‍ണ്ണവലിപ്പ മോഡില്‍ തുറക്കുക (ക്ലയന്റിനുള്ള റിസല്യൂഷനു് " -+"പാകത്തിനു് auto-conf ഗസ്റ്റിനെ ഉചിതമാക്കുന്നു)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -118,7 +127,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "സ്പയിസ് കണ്ട്രോളര്‍ ആശയവിനിമയം ഉപയോഗിച്ചു് കണക്ഷന്‍ തുറക്കുക" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "എഴുപ്പവഴികള്‍ യഥേഷ്ടമാക്കുക" - -@@ -132,24 +142,31 @@ msgstr "- റിമോട്ട് വ്യൂവര്‍ ക്ലയന് - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nലഭ്യമായ കമാന്‍ഡ് ലൈന്‍ ഐച്ഛികങ്ങളുടെ പൂര്‍ണ്ണ പട്ടിക കാണുന്നതിനായി '%s --help' പ്രവര്‍ത്തിപ്പിയ്ക്കുക\n" -+msgstr "" -+"%s\n" -+"ലഭ്യമായ കമാന്‍ഡ് ലൈന്‍ ഐച്ഛികങ്ങളുടെ പൂര്‍ണ്ണ പട്ടിക കാണുന്നതിനായി '%s --" -+"help' പ്രവര്‍ത്തിപ്പിയ്ക്കുക\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format - msgid "Error: extra arguments given while using Spice controller\n" --msgstr "പിശക്: സ്പയിസ് കണ്ട്രോളര്‍ ഉപയോഗിയ്ക്കുമ്പോള്‍ നല്‍കുന്ന അധികമായ ആര്‍ഗ്യുമെന്റുകള്‍\n" -+msgstr "" -+"പിശക്: സ്പയിസ് കണ്ട്രോളര്‍ ഉപയോഗിയ്ക്കുമ്പോള്‍ നല്‍കുന്ന അധികമായ " -+"ആര്‍ഗ്യുമെന്റുകള്‍\n" - - #: ../src/remote-viewer-main.c:182 - #, c-format - msgid "Error: can't handle multiple URIs\n" - msgstr "പിശക്: അനവധി യുആര്‍ഐ കൈകാര്യം ചെയ്യുവാന്‍ സാധ്യമല്ല\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "സൂം ലവല്‍ 10-200 ആയിരിയ്ക്കണം\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "കണക്ഷന്‍ ആരംഭിയ്ക്കുന്നതില്‍ പരാജയം" - -@@ -206,7 +223,6 @@ msgstr "ഈ തരത്തിനുള്ളൊരു സെഷന്‍ തയ - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "ഗ്ലേഡിനെപ്പറ്റി" -@@ -215,11 +231,15 @@ msgstr "ഗ്ലേഡിനെപ്പറ്റി" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "പകര്‍പ്പവകാശം (C) 2007-2012 Daniel P. Berrange\nപകര്‍പ്പവകാശം (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"പകര്‍പ്പവകാശം (C) 2007-2012 Daniel P. Berrange\n" -+"പകര്‍പ്പവകാശം (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.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/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -240,77 +260,97 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "ഈ പ്രോഗ്രാം സ്വതന്ത്ര സോഫ്റ്റ്‌വെയര്‍ ആകുന്നു; നിങ്ങള്‍ക്കിത് ഗ്നു ജനറല്‍ പബ്ലിക്ലൈസന്‍സിന്റെ നിബന്ധനകള്‍ പ്രകാരം (രണ്ടാം ലക്കം അല്ലെങ്കില്‍ നിങ്ങളുടെ താല്‍പര്യമനുസരിച്ച് അതിലും പുതിയ ലക്കം) വീണ്ടും വിതരണം ചെയ്യുകയോ മാറ്റം വരുത്തുകയോ ചെയ്യാം. ഫ്രീ സോഫ്റ്റ്‌വെയര്‍ ഫൌണ്ടേഷന്‍ ആണ് ഈ ലൈസന്‍സ് പ്രസിദ്ധീകരിച്ചിട്ടുള്ളത്.\n\nവളരെ ഫലപ്രദമായ പ്രോഗ്രാം എന്ന പ്രതീക്ഷയിലാകുന്നു ഈ പ്രോഗ്രാം വിതരണം ചെയ്തത്.ഇതിന് വാറന്റി ലഭ്യമല്ല. കൂടുതല്‍ വിവരങ്ങള്‍ക്കായി ഗ്നു ജനറല്‍ പബ്ളിക് ലൈസന്‍സ് കാണുക.\n\nഈ പ്രോഗ്രാമിനൊപ്പം നിങ്ങള്‍ക്ക് ഗ്നു ജനറല്‍ പബ്ലിക് ലൈസന്‍സിന്റെ ഒരു പകര്‍പ്പും ലഭിച്ചിരിക്കണം, ഇല്ലായെങ്കില്‍, ‌താഴെ പറയുന്ന മേല്‍വിലാസത്തിലേക്ക് എഴുതുക: Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"ഈ പ്രോഗ്രാം സ്വതന്ത്ര സോഫ്റ്റ്‌വെയര്‍ ആകുന്നു; നിങ്ങള്‍ക്കിത് ഗ്നു ജനറല്‍ " -+"പബ്ലിക്ലൈസന്‍സിന്റെ നിബന്ധനകള്‍ പ്രകാരം (രണ്ടാം ലക്കം അല്ലെങ്കില്‍ നിങ്ങളുടെ " -+"താല്‍പര്യമനുസരിച്ച് അതിലും പുതിയ ലക്കം) വീണ്ടും വിതരണം ചെയ്യുകയോ മാറ്റം " -+"വരുത്തുകയോ ചെയ്യാം. ഫ്രീ സോഫ്റ്റ്‌വെയര്‍ ഫൌണ്ടേഷന്‍ ആണ് ഈ ലൈസന്‍സ് " -+"പ്രസിദ്ധീകരിച്ചിട്ടുള്ളത്.\n" -+"\n" -+"വളരെ ഫലപ്രദമായ പ്രോഗ്രാം എന്ന പ്രതീക്ഷയിലാകുന്നു ഈ പ്രോഗ്രാം വിതരണം ചെയ്തത്." -+"ഇതിന് വാറന്റി ലഭ്യമല്ല. കൂടുതല്‍ വിവരങ്ങള്‍ക്കായി ഗ്നു ജനറല്‍ പബ്ളിക് " -+"ലൈസന്‍സ് കാണുക.\n" -+"\n" -+"ഈ പ്രോഗ്രാമിനൊപ്പം നിങ്ങള്‍ക്ക് ഗ്നു ജനറല്‍ പബ്ലിക് ലൈസന്‍സിന്റെ ഒരു " -+"പകര്‍പ്പും ലഭിച്ചിരിക്കണം, ഇല്ലായെങ്കില്‍, ‌താഴെ പറയുന്ന " -+"മേല്‍വിലാസത്തിലേക്ക് എഴുതുക: Free Software\n" -+"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "ഫെഡോറാ പ്രാദേശികവത്കരണ സംഘം" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "ഈ സെഷന്‍ അടയ്ക്കണമോ?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "ഇനി ചോദിയ്ക്കരുതു്" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "%d പ്രദര്‍ശനത്തിനായി കാത്തിരിയ്ക്കുന്നു..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "ഗസ്റ്റ് %s-നുള്ള അപരിചിതമായ ഗ്രാഫിക് രീതി" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh-ലേക്കുള്ള കണക്ഷന്‍ പരാജയപ്പെട്ടു." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." --msgstr "ചാനലിലേക്കു് കണക്ട് ചെയ്യുവാന്‍ സാധ്യമല്ല, എസ്എസ്എചിനു് മാത്രം പിന്തുണ ലഭ്യമുള്ളൂ." -+msgstr "" -+"ചാനലിലേക്കു് കണക്ട് ചെയ്യുവാന്‍ സാധ്യമല്ല, എസ്എസ്എചിനു് മാത്രം പിന്തുണ " -+"ലഭ്യമുള്ളൂ." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "ചാനലിലേക്കുള്ള കണക്ഷനു് പിന്തുണയില്ല." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "ഗ്രാഫിക് സര്‍വറിലേക്കു് കണക്ട് ചെയ്യുന്നു" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "ഗസ്റ്റ് ഡൊമെയിന്‍ അടച്ചുപൂട്ടിയിരിയ്ക്കുന്നു" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "ഗ്രാഫിക് സര്‍വറിലേക്കു് കണക്ട് ചെയ്തിരിയ്ക്കുന്നു" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "ഗ്രാഫിക് സര്‍വര്‍ %s-ലേക്കു് കണക്ട് ചെയ്യുവാന്‍ സാധ്യമല്ല" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s-ല്‍ റിമോട്ട് ഡസ്ക്ടോപ്പ് സര്‍വറിലേക്കു് ആധികാരികത ഉറപ്പാക്കുവാന്‍ സാധ്യമല്ല: %s\nവീണ്ടും ശ്രമിയ്ക്കണമോ?" -+msgstr "" -+"%s-ല്‍ റിമോട്ട് ഡസ്ക്ടോപ്പ് സര്‍വറിലേക്കു് ആധികാരികത ഉറപ്പാക്കുവാന്‍ " -+"സാധ്യമല്ല: %s\n" -+"വീണ്ടും ശ്രമിയ്ക്കണമോ?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" --msgstr "റിമോട്ട് ഡസ്ക്ടോപ്പ് സര്‍വറിനൊപ്പം ആധികാരികത ഉറപ്പാക്കുവാന്‍ സാധ്യമല്ല: %s" -+msgstr "" -+"റിമോട്ട് ഡസ്ക്ടോപ്പ് സര്‍വറിനൊപ്പം ആധികാരികത ഉറപ്പാക്കുവാന്‍ സാധ്യമല്ല: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "യുഎസ്ബി റീഡയറക്ഷന്‍ പിശക്: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "%d പ്രദര്‍ശിപ്പിയ്ക്കുക" -@@ -320,7 +360,6 @@ msgstr "%d പ്രദര്‍ശിപ്പിയ്ക്കുക" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "ആധികാരികത ഉറപ്പാക്കല്‍ ആവശ്യമുണ്ടു്" -@@ -369,7 +408,9 @@ msgstr "വിര്‍ട്ട് വ്യൂവര്‍" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "ലഭ്യമായ കമാന്‍ഡ് ലൈന്‍ ഐച്ഛികങ്ങളുടെ പൂര്‍ണ്ണ പട്ടിക കാണുന്നതിനായി '%s --help' പ്രവര്‍ത്തിപ്പിയ്ക്കുക" -+msgstr "" -+"ലഭ്യമായ കമാന്‍ഡ് ലൈന്‍ ഐച്ഛികങ്ങളുടെ പൂര്‍ണ്ണ പട്ടിക കാണുന്നതിനായി '%s --" -+"help' പ്രവര്‍ത്തിപ്പിയ്ക്കുക" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -378,16 +419,19 @@ msgstr "- വിര്‍ച്ച്വല്‍ മഷീന്‍ ഗ്ര - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" -+msgid "\n" -+"Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" -+"%s\n" -+"\n" -+msgstr "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nUsage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "യുഎസ്ബി ഡിവൈസുകള്‍ തെരഞ്ഞെടുക്കുക" - -@@ -396,167 +440,167 @@ msgstr "യുഎസ്ബി ഡിവൈസുകള്‍ തെരഞ്ഞ - msgid "Unsupported authentication type %d" - msgstr "പിന്തുണയില്ലാത്ത ആധികാരികത ഉറപ്പാക്കല്‍ രീതി %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "സ്ക്രീന്‍ഷോട്ട്" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "കണക്ഷന്‍ വിഛേദിയ്ക്കുക" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "യുഎസ്ബി ഡിവൈസ് തെരഞ്ഞെടുക്കല്‍" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "കീ കൂട്ടം അയയ്ക്കുക" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "പൂര്‍ണ്ണസ്ക്രീനില്‍ നിന്നും മാറുക" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(പോയിന്റര്‍ വിടുന്നതിനായി %s അമര്‍ത്തുക)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "ഈ കണക്ഷന്‍ സജ്ജമാക്കുന്നതിനായി കുറഞ്ഞതു് %s പതിപ്പു് %s ആവശ്യമുണ്ടു്" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "ഗസ്റ്റ് ഡൊമെയിന്‍ വീണ്ടും ആരംഭിയ്ക്കുന്നതിനായി കാത്തിരിയ്ക്കുന്നു" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "%s ഗസ്റ്റിനുള്ള ഗ്രാഫിക് രീതി കണ്ടുപിടിയ്ക്കുവാന്‍ സാധ്യമല്ല" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "%s ഗസ്റ്റിനുള്ള ഗ്രാഫിക് വിലാസം കണ്ടുപിടിയ്ക്കുവാന്‍ സാധ്യമല്ല" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "ഗസ്റ്റ് %s-നുള്ള ഹോസ്റ്റ് കണ്ടുപിടിയ്ക്കുവാന്‍ സാധ്യമല്ല" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "ആരംഭിയ്ക്കുന്നതിനായി libvirt-നു് വേണ്ടി കാത്തിരിയ്ക്കുന്നു" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "ഗസ്റ്റ് ഡൊമെയിന്‍ കണ്ടുപിടിയ്ക്കുന്നു" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "ഗസ്റ്റ് ഡൊമെയിന്‍ തയ്യാറാക്കുന്നതിനായി കാത്തിരിയ്ക്കുന്നു" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "ഗസ്റ്റ് ഡൊമെയിന്‍ %s ലഭ്യമാക്കുവാന്‍ സാധ്യമല്ല" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "ഗസ്റ്റ് ഡൊമെയിന്‍ അവസ്ഥ പരിശോധിയ്ക്കുന്നു" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "ഗസ്റ്റ് ഡൊമെയിന്‍ ആരംഭിയ്ക്കുന്നതിനായി കാത്തിരിയ്ക്കുന്നു" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "ഗസ്റ്റ് ഡൊമെയിന്‍ സര്‍വര്‍ ആരംഭിയ്ക്കുന്നതിനായി കാത്തിരിയ്ക്കുന്നു" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "libvrt-ലേക്ക് യുആര്‍ഐ %s ഉപയോഗിച്ചു് കണക്ട് ചെയ്യുവാന്‍ സാധ്യമല്ല" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[ഒന്നുമില്ല]" - -@@ -565,7 +609,6 @@ msgstr "[ഒന്നുമില്ല]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "_ഫയല്‍" -@@ -606,10 +649,6 @@ msgstr "കര്‍സര്‍ റിലീസ് ചെയ്യുക" - msgid "_Send key" - msgstr "കീ _അയയ്ക്കുക" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "_PrintScreen" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "_സഹായം" -diff --git a/po/mr.po b/po/mr.po -index 70b173e..1ca77f8 100644 ---- a/po/mr.po -+++ b/po/mr.po -@@ -10,16 +10,19 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-05-03 07:50+0000\n" -+"PO-Revision-Date: 2013-05-03 03:50-0400\n" - "Last-Translator: sandeeps <sshedmak@redhat.com>\n" --"Language-Team: Marathi (http://www.transifex.com/projects/p/fedora/language/mr/)\n" -+"Language-Team: Marathi (http://www.transifex.com/projects/p/fedora/language/" -+"mr/)\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Language: mr\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "रिमोट व्युअर" - -@@ -81,11 +84,13 @@ msgstr "remote-viewer आवृत्ती %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "अवैध पडदाभर घटक: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "आवृत्तीविषयी माहिती दाखवा" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "शब्दात्मक माहिती दाखवा" - -@@ -93,15 +98,18 @@ msgstr "शब्दात्मक माहिती दाखवा" - msgid "Set window title" - msgstr "पटलाचे शीर्षक सेट करा" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "स्वयं टनल्स् विना प्रत्यक्ष जोडणी" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "पटलाचे झूम स्तर, टक्केवारित" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "डिबगिंग माहिती दाखवत आहे" - -@@ -109,7 +117,9 @@ msgstr "डिबगिंग माहिती दाखवत आहे" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "पूर्ण पडदाभर मोडमध्ये उघडा (auto-conf क्लाएंटच्या रेजोल्युशनलसह घट्ट बसवण्याकरीता अतिथीला समायोजीत करतो)." -+msgstr "" -+"पूर्ण पडदाभर मोडमध्ये उघडा (auto-conf क्लाएंटच्या रेजोल्युशनलसह घट्ट " -+"बसवण्याकरीता अतिथीला समायोजीत करतो)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -119,7 +129,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "स्पाइस कंट्रोलर संपर्काचा वापर करून जोडणी उघडा" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "हॉटकिज पसंतीचे करा" - -@@ -133,7 +144,9 @@ msgstr "- रिमोट व्युअर क्लाएंट" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nउपलब्ध आदेश ओळ पर्यायांची संपूर्ण सूची पहाण्यासाठी '%s --help' चालवा\n" -+msgstr "" -+"%s\n" -+"उपलब्ध आदेश ओळ पर्यायांची संपूर्ण सूची पहाण्यासाठी '%s --help' चालवा\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -145,12 +158,14 @@ msgstr "त्रुटी: स्पाइस् कंट्रोलरचा - msgid "Error: can't handle multiple URIs\n" - msgstr "त्रुटी: एकापेक्षा जास्त URIs हाताळणे अशक्य\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "झूम स्तर 10-200 अंतर्गत पाहिजे\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "जोडणी सुरू करण्यास अपयशी" - -@@ -207,7 +222,6 @@ msgstr "या प्रकारकरीता सत्र निर्मा - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "ग्लेड विषयी" -@@ -216,7 +230,9 @@ msgstr "ग्लेड विषयी" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "सर्वहक्काधिकार (C) 2007-2012 Daniel P. Berrange\nसर्वहक्काधिकार (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"सर्वहक्काधिकार (C) 2007-2012 Daniel P. Berrange\n" -+"सर्वहक्काधिकार (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" -@@ -241,77 +257,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"This program is free software; you can redistribute it and/or modify\n" -+"it under the terms of the GNU General Public License as published by\n" -+"the Free Software Foundation; either version 2 of the License, or\n" -+"(at your option) any later version.\n" -+"\n" -+"This program is distributed in the hope that it will be useful,\n" -+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -+"GNU General Public License for more details.\n" -+"\n" -+"You should have received a copy of the GNU General Public License\n" -+"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" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora भाषांतरन गट" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "सत्र बंद करायचे?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "मला पुन्हा विचारू नका" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "डिस्पले %d करीता प्रतिक्षा करत आहे..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "अतिथी %s करीता अपरिचीत ग्राफिक प्रकार" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh सह जोडणी अपयशी." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "वाहिनीसह जोडणी करणे अशक्य, SSH फक्त याकरीता समर्थन पुरवतो." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "वाहिनीसह जोडणी असमर्थीत आहे." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "ग्राफिक सर्व्हरसह जोडणी करत आहे" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "अतिथी डोमैन बंद झाले" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "ग्राफिक सर्व्हरसह जोडणी केली" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "ग्राफिक सर्व्हर %s सह जोडणी अशक्य" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s: %s येथे रिमोट डेस्कटॉप सर्व्हरसह ओळख पटवणे अशक्य\nजोडणीकरीता पुन्हा प्रयत्न करायचे?" -+msgstr "" -+"%s: %s येथे रिमोट डेस्कटॉप सर्व्हरसह ओळख पटवणे अशक्य\n" -+"जोडणीकरीता पुन्हा प्रयत्न करायचे?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "रिमोट डेस्कटॉप सर्व्हरसह ओळख पटवणे अशक्य: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB पुनःनिर्देशन त्रुटी: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "डिस्पले %d" -@@ -321,7 +352,6 @@ msgstr "डिस्पले %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "ओळख पटवणे आवश्यक" -@@ -379,16 +409,19 @@ msgstr "- वर्च्युअल मशीन ग्राफिकल क - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nवापर: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"वापर: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "रिडायरेक्शनकरीता USB साधने पसंत करा" - -@@ -397,167 +430,167 @@ msgstr "रिडायरेक्शनकरीता USB साधने प - msgid "Unsupported authentication type %d" - msgstr "असमर्थीत ओळखपटवणे प्रकार %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+Del (_D)" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+Backspace (_B)" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F1 (_1)" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F2 (_2)" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F3 (_3)" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F4 (_4)" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F5 (_5)" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F6 (_6)" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F7 (_7)" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F8 (_8)" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F9 (_9)" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F10 (_0)" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "स्क्रीनशॉट" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "जोडणी खंडीत करा" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB साधनची निवड" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "कि जोडणी पाठवा" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "पडदाभर सोडा" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(पॉइंटर सोडण्याकरीता %s दाबा)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "ह्या जोडणीच्या सेटअपकरिता किमान %s आवृत्ती %s आवश्यक आहे" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "अतिथी डोमैनला पुनःसुरू करण्यासाठी वाट पहात आहे" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "अतिथी %s करीता ग्राफिक प्रकार ओळखणे अशक्य" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "अतिथी %s करीता ग्राफिक ॲड्रेस ओळखणे अशक्य" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "अतिथी %s करीता यजमान ओळखणे अशक्य" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "libvirt सुरू होण्याची वाट पहात आहे" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "अतिथी डोमैन शोधत आहे" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "अतिथी डोमैन निर्माण करण्यास वाट पहात आहे" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "अतिथी क्षेत्र %s शोधणे अशक्य" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "अतिथी डोमैन स्थिती तपासत आहे" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "अतिथी डोमैनला पुनःसुरू करण्यास वाट पहात आहे" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "अतिथी डोमैनला पुनःसुरू करण्यास वाट पहात आहे" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "URI %s सह libvirt शी जोडणी करणे अशक्य" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[काहिच नाही]" - -@@ -566,7 +599,6 @@ msgstr "[काहिच नाही]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "फाइल (_F)" -@@ -607,10 +639,6 @@ msgstr "रिलिज् कर्सर" - msgid "_Send key" - msgstr "सेंड कि (_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "प्रिंटस्क्रिन (_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "मदत (_H)" -diff --git a/po/or.po b/po/or.po -index a1c12ab..b5cdf14 100644 ---- a/po/or.po -+++ b/po/or.po -@@ -9,16 +9,19 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-05-06 03:56+0000\n" -+"PO-Revision-Date: 2013-05-05 11:56-0400\n" - "Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n" --"Language-Team: Oriya (http://www.transifex.com/projects/p/fedora/language/or/)\n" -+"Language-Team: Oriya (http://www.transifex.com/projects/p/fedora/language/or/" -+")\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Language: or\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "ସୁଦୂର ପ୍ରଦର୍ଶିକା" - -@@ -80,11 +83,13 @@ msgstr "remote-viewer ସଂସ୍କରଣ %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "ଅବୈଧ ସମ୍ପୂର୍ଣ୍ଣ-ପରଦା ସ୍ୱତନ୍ତ୍ରଚର: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "ସଂସ୍କରଣ ସୂଚନା ଦେଖାନ୍ତୁ" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "ଶବ୍ଦାଡ଼ମ୍ବରପୂର୍ଣ୍ଣ ସୂଚନା ଦର୍ଶାନ୍ତୁ" - -@@ -92,15 +97,18 @@ msgstr "ଶବ୍ଦାଡ଼ମ୍ବରପୂର୍ଣ୍ଣ ସୂଚନା - msgid "Set window title" - msgstr "ୱିଣ୍ଡୋ ଶୀର୍ଷକ ସେଟ କରନ୍ତୁ" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "ସ୍ୱୟଂଚାଳିତ ଟନେଲ ବିନା ସିଧାସଳଖ ସଂଯୋଗ" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "ୱିଣ୍ଡୋର ଆକାର ବୃଦ୍ଧି ସ୍ତର, ଶତକଡ଼ାରେ" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "ତ୍ରୁଟିନିବାରଣ ସୂଚନା ଦର୍ଶାନ୍ତୁ" - -@@ -108,7 +116,9 @@ msgstr "ତ୍ରୁଟିନିବାରଣ ସୂଚନା ଦର୍ଶାନ - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "ସମ୍ପୂର୍ଣ୍ଣ ପରଦା ଧାରାରେ ଖୋଲନ୍ତୁ (ସ୍ୱୟଂ-ସଂରଚନା ଅତିଥି ସମାଧାନକୁ କ୍ଲାଏଣ୍ଟ ସହିତ ମେଳାଇଥାଏ)।" -+msgstr "" -+"ସମ୍ପୂର୍ଣ୍ଣ ପରଦା ଧାରାରେ ଖୋଲନ୍ତୁ (ସ୍ୱୟଂ-ସଂରଚନା ଅତିଥି ସମାଧାନକୁ କ୍ଲାଏଣ୍ଟ ସହିତ " -+"ମେଳାଇଥାଏ)।" - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -118,7 +128,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "ସ୍ପାଇସ ନିୟନ୍ତ୍ରକ ଯୋଗାଯୋଗ ମାଧ୍ଯମରେ ସଂଯୋଗକୁ ଖୋଲନ୍ତୁ" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "ହଟ-କିଗୁଡ଼ିକୁ ଇଚ୍ଛାମୁତାବକ କରନ୍ତୁ" - -@@ -132,24 +143,31 @@ msgstr "- ସୁଦୂର ପ୍ରଦର୍ଶକ କ୍ଲାଏଣ୍ଟ " - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nଉପଲବ୍ଧ ପାଠ୍ଯ ନିର୍ଦ୍ଦେଶ ବିକଳ୍ପର ସଂପୂର୍ଣ୍ଣ ତାଲିକା ଦେଖିବା ପାଇଁ '%s --help' କୁ ଚଳାନ୍ତୁ\n" -+msgstr "" -+"%s\n" -+"ଉପଲବ୍ଧ ପାଠ୍ଯ ନିର୍ଦ୍ଦେଶ ବିକଳ୍ପର ସଂପୂର୍ଣ୍ଣ ତାଲିକା ଦେଖିବା ପାଇଁ '%s --help' କୁ " -+"ଚଳାନ୍ତୁ\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format - msgid "Error: extra arguments given while using Spice controller\n" --msgstr "ତ୍ରୁଟି: ଅତିରିକ୍ତ ସ୍ୱତନ୍ତ୍ରଚରଗୁଡ଼ିକ ଦିଆଯାଇଥାଏ ଯେତେବେଳେ ସ୍ପାଇସ ନିୟନ୍ତ୍ରକ ବ୍ୟବହାର କରାଯାଇଥାଏ\n" -+msgstr "" -+"ତ୍ରୁଟି: ଅତିରିକ୍ତ ସ୍ୱତନ୍ତ୍ରଚରଗୁଡ଼ିକ ଦିଆଯାଇଥାଏ ଯେତେବେଳେ ସ୍ପାଇସ ନିୟନ୍ତ୍ରକ " -+"ବ୍ୟବହାର କରାଯାଇଥାଏ\n" - - #: ../src/remote-viewer-main.c:182 - #, c-format - msgid "Error: can't handle multiple URIs\n" - msgstr "ତ୍ରୁଟି: ଏକାଧିକ URI ଗୁଡ଼ିକୁ ନିୟନ୍ତ୍ରଣ କରିପାରିବେ ନାହିଁ\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "ଆକାର ବୃଦ୍ଧି ସ୍ତର ନିଶ୍ଚିତ ଭାବରେ 10-200 ମଧ୍ଯରେ ରହିବା ଉଚିତ\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr " ସଂଯୋଗ ଆରମ୍ଭ କରିବାରେ ବିଫଳ" - -@@ -206,7 +224,6 @@ msgstr "ଏହି ପ୍ରକାର ପାଇଁ ସ୍ପାଇସ ଅଧି - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "ଗ୍ଲେଡ ବିଷୟରେ" -@@ -215,11 +232,15 @@ msgstr "ଗ୍ଲେଡ ବିଷୟରେ" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.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/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -240,77 +261,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"This program is free software; you can redistribute it and/or modify\n" -+"it under the terms of the GNU General Public License as published by\n" -+"the Free Software Foundation; either version 2 of the License, or\n" -+"(at your option) any later version.\n" -+"\n" -+"This program is distributed in the hope that it will be useful,\n" -+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -+"GNU General Public License for more details.\n" -+"\n" -+"You should have received a copy of the GNU General Public License\n" -+"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" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora ଅନୁବାଦନ ଗୋଷ୍ଠି" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "ଆପଣ ଅଧିବେଶନକୁ ବନ୍ଦ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "ମୋତେ ପୁନର୍ବାର ପଚାରନ୍ତୁ ନାହିଁ" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "%d କୁ ଅପେକ୍ଷା କରିଅଛି..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "ଅତିଥି %s ପାଇଁ ଅଜ୍ଞାତ ଲେଖାଚିତ୍ର ପ୍ରକାର" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh ସହିତ ସଂଯୋଗ ବିଫଳ ହୋଇଛି।" - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "ଚ୍ୟାନେଲ ସହିତ ସଂଯୋଗ କରିପାରିବେ ନାହିଁ, କେବଳ SSH ସମର୍ଥିତ।" - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "ଚ୍ୟାନେଲ ସହିତ ସଂଯୋଗ ଅସମର୍ଥିତ।" - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "ଆଲେଖିକ ସର୍ଭର ସହିତ ସଂଯୋଗ କରୁଅଛି" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "ଅତିଥି ଡମେନ ବନ୍ଦ ଅଛି" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "ଆଲେଖି ସର୍ଭର ସହ ସଂଯୁକ୍ତ" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "ଆଲେଖୀ ସର୍ଭର %s ସହିତ ସଂଯୋଗ କରିବାରେ ଅସମର୍ଥ" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s ରେ ସୁଦୂର ଡେସ୍କଟପ ସର୍ଭର ସହିତ ବୈଧିକରଣ କରିବାରେ ଅସମର୍ଥ: %s\nପୁଣିଥରେ ଚେଷ୍ଟା କରିବେ କି?" -+msgstr "" -+"%s ରେ ସୁଦୂର ଡେସ୍କଟପ ସର୍ଭର ସହିତ ବୈଧିକରଣ କରିବାରେ ଅସମର୍ଥ: %s\n" -+"ପୁଣିଥରେ ଚେଷ୍ଟା କରିବେ କି?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "ସୁଦୂର ଡେସ୍କଟପ ସର୍ଭର ସହିତ ବୈଧିକରଣ କରିବାରେ ଅସମର୍ଥ: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB ଦିଗପରିବର୍ତ୍ତନ ତ୍ରୁଟି: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "%d ଦର୍ଶାଅ" -@@ -320,7 +356,6 @@ msgstr "%d ଦର୍ଶାଅ" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "ବୈଧିକରଣ ଆବଶ୍ଯକ" -@@ -369,7 +404,9 @@ msgstr "Virt ପ୍ରଦର୍ଶିକା" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "ଉପଲବ୍ଧ ନିର୍ଦ୍ଦେଶନାମା ବିକଳ୍ପଗୁଡ଼ିକର ସମ୍ପୂର୍ଣ୍ଣ ତାଲିକା ଦେଖିବା ପାଇଁ '%s --help' ଚଲାନ୍ତୁ" -+msgstr "" -+"ଉପଲବ୍ଧ ନିର୍ଦ୍ଦେଶନାମା ବିକଳ୍ପଗୁଡ଼ିକର ସମ୍ପୂର୍ଣ୍ଣ ତାଲିକା ଦେଖିବା ପାଇଁ '%s --help' " -+"ଚଲାନ୍ତୁ" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -378,16 +415,19 @@ msgstr "-ଆଭାସୀ ଯନ୍ତ୍ରର ଆଲେଖୀକ କୋନସ - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nବ୍ୟବହାର ବିଧି: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"ବ୍ୟବହାର ବିଧି: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "ଦିଗ ପରିବର୍ତ୍ତନ ପାଇଁ USB ଉପକରଣଗୁଡ଼ିକୁ ବାଛନ୍ତୁ" - -@@ -396,167 +436,167 @@ msgstr "ଦିଗ ପରିବର୍ତ୍ତନ ପାଇଁ USB ଉପକର - msgid "Unsupported authentication type %d" - msgstr "ଅସମର୍ଥିତ ପ୍ରାଧିକରଣ ପ୍ରକାର %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "ଆଶୁଚିତ୍ର" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "ସଂଯୋଗ ବିଚ୍ଛିନ୍ନ ହୋଇଛି" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB ଉପକରଣ ଚୟନ" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "କି ଯୁଗଳକୁ ପଠାନ୍ତୁ" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "ସମ୍ପୁର୍ଣ୍ଣ ପରଦା ଛାଡ଼ି ଦିଅନ୍ତୁ" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(ସୂଚକକୁ ଛାଡ଼ିବା ପାଇଁ %s କୁ ଦବାନ୍ତୁ)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "ଏହି ସଂଯୋଗକୁ ବ୍ୟବସ୍ଥା କରିବା ପାଇଁ ଅତିକମରେ %s ସଂସ୍କରଣ %s ଆବଶ୍ୟକ କରିଥାଏ" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "ପୁନଚାଳନ ପାଇଁ ଅତିଥି ଡମେନକୁ ଅପେକ୍ଷା କରିଛି" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "ଅତିଥି %s ପାଇଁ ଆଲେଖିକ ପ୍ରକାରକୁ ନିର୍ଦ୍ଧାରଣ କରିପାରିବେ ନାହିଁ" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "ଅତିଥି %s ପାଇଁ ଆଲେଖିକ ଠିକଣାକୁ ନିର୍ଦ୍ଧାରଣ କରିପାରିବେ ନାହିଁ" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "ଅତିଥି %s ପାଇଁ ହୋଷ୍ଟ ନିର୍ଦ୍ଧାରଣ କରିପାରିବେ ନାହିଁ" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "libvirt କୁ ଆରମ୍ଭ ହେବା ପାଇଁ ଅପେକ୍ଷା କରୁଅଛି" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "ଅତିଥି ଡମେନକୁ ଖୋଜୁଅଛି" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "ନିର୍ମାଣ କରିବା ପାଇଁ ଅତିଥି ଡମେନକୁ ଅପେକ୍ଷା କରିଛି" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "ଅତିଥି ଡମେନ %s କୁ ଖୋଜି ପାଇବେ ନାହିଁ" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "ଅତିଥି ଡମେନ ସ୍ଥିତିକୁ ଯାଞ୍ଚ କରୁଅଛି" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "ଅତିଥି ଡମେନ ଆରମ୍ଭ ହେବାକୁ ଯାଉଛି" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "ସର୍ଭରକୁ ଆରମ୍ଭ କରିବା ପାଇଁ ଅତିଥି ଡମେନକୁ ଅପେକ୍ଷା କରିଛି" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "URI %s ସହାୟତାରେ libvirt ସହିତ ସଂଯୋଗ କରିବାରେ ଅସମର୍ଥ" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[କିଛି ନାହିଁ]" - -@@ -565,7 +605,6 @@ msgstr "[କିଛି ନାହିଁ]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "ଫାଇଲ (_F)" -@@ -606,10 +645,6 @@ msgstr "ସୂଚକକୁ ଛାଡ଼ନ୍ତୁ" - msgid "_Send key" - msgstr "କି ପଠାନ୍ତୁ (_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "ପରଦାକୁ ମୁଦ୍ରଣ କରନ୍ତୁ (_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "ସହାୟତା (_H)" -diff --git a/po/pa.po b/po/pa.po -index 38c6ef1..3cd62ba 100644 ---- a/po/pa.po -+++ b/po/pa.po -@@ -4,31 +4,34 @@ - # - # Translators: - # Jaswinder Singh <jsingh@redhat.com>, 2010,2012 -+# asaini <asaini@redhat.com>, 2013 - 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" --"PO-Revision-Date: 2013-04-29 17:06+0000\n" --"Last-Translator: Daniel Berrange <dan-transifex@berrange.com>\n" -+"POT-Creation-Date: 2013-08-06 14:45+0530\n" -+"PO-Revision-Date: 2013-09-19 02:10-0400\n" -+"Last-Translator: asaini <asaini@redhat.com>\n" - "Language-Team: Panjabi (Punjabi) <punjabi-users@lists.sf.net>\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Language: pa\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" --msgstr "ਰਿਮੋਡ ਦਰਸ਼ਕ" -+msgstr "ਰਿਮੋਟ ਦਰਸ਼ਕ" - - #: ../data/remote-viewer.desktop.in.h:2 - msgid "Access remote desktops" --msgstr "" -+msgstr "ਦੁਰੇਡੇ ਡੈਸਕਟਾਪਾਂ ਵਿੱਚ ਦਖਲ ਦਿਓ" - - #: ../data/virt-viewer-mime.xml.in.h:1 - msgid "Virt-Viewer connection file" --msgstr "" -+msgstr "Virt-Viewer ਸੰਪਰਕ ਫਾਈਲ" - - #: ../src/gbinding.c:637 - msgid "Source" -@@ -40,11 +43,11 @@ msgstr "ਬਾਈਂਡਿੰਗ ਦਾ ਸਰੋਤ" - - #: ../src/gbinding.c:652 - msgid "Target" --msgstr "ਟਾਰਗਿਟ" -+msgstr "ਨਿਸ਼ਾਨਾ" - - #: ../src/gbinding.c:653 - msgid "The target of the binding" --msgstr "ਬਾਈਂਡਿੰਗ ਦਾ ਟਾਰਗਿਟ" -+msgstr "ਬਾਈਂਡਿੰਗ ਦਾ ਨਿਸ਼ਾਨਾ" - - #: ../src/gbinding.c:668 - msgid "Source Property" -@@ -56,11 +59,11 @@ msgstr "ਬਾਈਂਡ ਕਰਨ ਲਈ ਸਰੋਤ ਉੱਪਰ ਪਰਾਪ - - #: ../src/gbinding.c:684 - msgid "Target Property" --msgstr "ਟਾਰਗਿਟ ਪਰਾਪਰਟੀ" -+msgstr "ਨਿਸ਼ਾਨਾ ਪਰਾਪਰਟੀ" - - #: ../src/gbinding.c:685 - msgid "The property on the target to bind" --msgstr "ਬਾਈਂਡ ਕਰਨ ਲਈ ਟਾਰਗਿਟ ਉੱਪਰ ਪਰਾਪਰਟੀ" -+msgstr "ਬਾਈਂਡ ਕਰਨ ਲਈ ਨਿਸ਼ਾਨੇ ਉੱਪਰ ਪਰਾਪਰਟੀ" - - #: ../src/gbinding.c:699 - msgid "Flags" -@@ -73,42 +76,49 @@ msgstr "ਬਾਈਂਡਿੰਗ ਫਲੈਗ" - #: ../src/remote-viewer-main.c:47 - #, c-format - msgid "remote-viewer version %s\n" --msgstr "remote-viewer ਵਰਜਨ %s\n" -+msgstr "remote-viewer ਸੰਸਕਰਣ %s\n" - - #: ../src/remote-viewer-main.c:69 - #, c-format - msgid "Invalid full-screen argument: %s" - msgstr "ਗਲਤ full-screen ਆਗਰੂਮੈਂਟ: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" --msgstr "ਵਰਜਨ ਜਾਣਕਾਰੀ ਵੇਖਾਓ" -+msgstr "ਸੰਸਕਰਣ ਜਾਣਕਾਰੀ ਵਿਖਾਓ" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" --msgstr "ਵਰਬੋਜ਼ ਜਾਣਕਾਰੀ ਵੇਖਾਓ" -+msgstr "ਵਰਬੋਜ਼ ਜਾਣਕਾਰੀ ਵਿਖਾਓ" - - #: ../src/remote-viewer-main.c:127 - msgid "Set window title" --msgstr "" -+msgstr "ਵਿੰਡੋ ਦਾ ਸਿਰਲੇਖ ਨਿਰਧਾਰਿਤ ਕਰੋ" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" --msgstr "ਬਿਨਾਂ ਕਿਸੇ ਆਟੋਮੈਟਿਕ ਟੰਨਲ ਡਾਇਰੈਕਟ ਕੁਨੈਕਸ਼ਨ" -+msgstr "ਬਿਨਾਂ ਕਿਸੇ ਸ੍ਵੈ-ਚਲਿਤ ਸੁਰੰਗ ਦੇ ਸਿੱਧਾ ਸੰਪਰਕ" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" --msgstr "ਵਿੰਡੋ ਦਾ ਜ਼ੂਮ ਲੈਵਲ, ਪ੍ਰਤੀਸ਼ਤ ਵਿੱਚ" -+msgstr "ਵਿੰਡੋ ਦਾ ਜ਼ੂਮ ਪੱਧਰ, ਪ੍ਰਤੀਸ਼ਤ ਵਿੱਚ" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" --msgstr "ਡੀਬੱਗਿੰਗ ਜਾਣਕਾਰੀ ਵੇਖਾਓ" -+msgstr "ਡੀਬੱਗਿੰਗ ਜਾਣਕਾਰੀ ਵਿਖਾਓ" - - #: ../src/remote-viewer-main.c:135 - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "ਪੂਰਾ ਪਰਦਾ ਮੋਡ ਵਿੱਚ ਖੋਲੋ (auto-conf ਗਿਸਟ ਰੈਜ਼ੋਲੂਸ਼ਨ ਨੂੰ ਕਲਾਂਈਟ ਲਈ ਅਨੁਕੂਲ ਕਰਦਾ ਹੈ)।" -+msgstr "" -+"ਪੂਰਾ ਪਰਦਾ ਮੋਡ ਵਿੱਚ ਖੋਲੋ (auto-conf ਗਿਸਟ ਰੈਜ਼ੋਲੂਸ਼ਨ ਨੂੰ ਕਲਾਂਈਟ ਲਈ ਅਨੁਕੂਲ ਕਰਦਾ " -+"ਹੈ)।" - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -116,56 +126,60 @@ msgstr "<auto-conf>" - - #: ../src/remote-viewer-main.c:138 - msgid "Open connection using Spice controller communication" --msgstr "ਸਪਾਈਸ ਕੰਟਰੋਲਰ ਕਮਿਊਨੀਕੇਸ਼ ਵਰਤ ਕੇ ਕੁਨੈਕਸ਼ਨ ਖੋਲੋ" -+msgstr "ਸਪਾਈਸ ਕੰਟਰੋਲਰ ਕਮਿਊਨੀਕੇਸ਼ਨ ਵਰਤ ਕੇ ਸੰਪਰਕ ਖੋਲ੍ਹੋ" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" --msgstr "" -+msgstr "hotkeys ਚੁਣਿੰਦਾਪਨ ਕਰੋ" - - #. Setup command line options - #: ../src/remote-viewer-main.c:150 - msgid "- Remote viewer client" --msgstr "- ਰਿਮੋਟ ਡੈਸਕਟਾਪ ਕਲਾਂਈਟ" -+msgstr "- ਰਿਮੋਟ ਡੈਸਕਟਾਪ ਕਲਾਈਂਟ" - - #: ../src/remote-viewer-main.c:163 - #, c-format - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nਪੂਰੀਆਂ ਕਮਾਂਡ ਲਾਈਨ ਚੋਣਂ ਦੀ ਲਿਸਟ ਵੇਖਣ ਵਾਸਤੇ '%s --help' ਚਲਾਉ\n" -+msgstr "%s\n" -+"ਪੂਰੀਆਂ ਕਮਾਂਡ ਲਾਈਨ ਚੋਣਾਂ ਦੀ ਸੂਚੀ ਵੇਖਣ ਵਾਸਤੇ '%s --help' ਚਲਾਉ\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format - msgid "Error: extra arguments given while using Spice controller\n" --msgstr "ਗਲਤੀ: ਸਪਾਈਸ ਕੰਟਰੋਲਰ ਵਰਤਣ ਵੇਲੇ ਗਲਤ ਆਰਗੂਮੈਂਟ ਦਿੱਤੇ ਸੀ\n" -+msgstr "ਗਲਤੀ: ਸਪਾਈਸ ਕੰਟਰੋਲਰ ਵਰਤਣ ਵੇਲੇ ਜਿਆਦਾ ਆਰਗੂਮੈਂਟ ਦਿੱਤੇ ਸੀ\n" - - #: ../src/remote-viewer-main.c:182 - #, c-format - msgid "Error: can't handle multiple URIs\n" - msgstr "ਗਲਤੀ: ਬਹੁਤੇ URIs ਨਹੀਂ ਲੈ ਸਕਦਾ\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "ਜ਼ੂਮ ਲੈਵਲ 10-200 ਵਿਚਕਾਰ ਹੋਣਾ ਜਰੂਰੀ ਹੈ\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" --msgstr "ਕੁਨੈਕਸ਼ਨ ਚਾਲੂ ਕਰਨ ਵਿੱਚ ਫੇਲ" -+msgstr "ਸੰਪਰਕ ਚਾਲੂ ਕਰਨ ਵਿੱਚ ਅਸਫਲ" - - #: ../src/remote-viewer.c:296 - msgid "Display disabled by controller" --msgstr "ਕੰਟਰੋਲ ਦੁਆਰਾ ਦਰਸ਼ਕ ਅਯੋਗ ਕੀਤਾ ਹੈ" -+msgstr "ਕੰਟਰੋਲਰ ਦੁਆਰਾ ਪ੍ਰਦਰਸ਼ਨ ਅਯੋਗ ਕੀਤਾ ਹੈ" - - #: ../src/remote-viewer.c:596 - #, c-format - msgid "Controller connection failed: %s" --msgstr "ਕੰਟਰੋਲਰ ਕੁਨੈਕਸ਼ਨ ਫੇਲ: %s" -+msgstr "ਕੰਟਰੋਲਰ ਕੁਨੈਕਸ਼ਨ ਅਸਫਲ ਹੋਇਆ: %s" - - #. Create the widgets - #: ../src/remote-viewer.c:876 - msgid "Connection details" --msgstr "ਕੁਨੈਕਸ਼ਨ ਵੇਰਵਾ" -+msgstr "ਕੁਨੈਕਸ਼ਨ ਵੇਰਵੇ" - - #: ../src/remote-viewer.c:891 - msgid "URL:" -@@ -173,20 +187,20 @@ msgstr "URL:" - - #: ../src/remote-viewer.c:899 - msgid "Recent connections:" --msgstr "ਤਾਜ਼ੇ ਕੁਨੈਕਸ਼ਨ:" -+msgstr "ਸੱਜਰੇ ਕੁਨੈਕਸ਼ਨ:" - - #: ../src/remote-viewer.c:952 - msgid "Couldn't create a Spice session" --msgstr "ਸਪਾਈਸ ਕੁਨੈਕਸ਼ਨ ਬਣਾ ਨਹੀਂ ਸਕਿਆ" -+msgstr "ਸਪਾਈਸ ਸੈਸ਼ਨ ਬਣਾ ਨਹੀਂ ਸਕਿਆ" - - #: ../src/remote-viewer.c:966 - msgid "Setting up Spice session..." --msgstr "ਸਪਾਈਸ ਕੁਨੈਕਸ਼ਨ ਬਣਾ ਰਿਹਾ ਹੈ..." -+msgstr "ਸਪਾਈਸ ਸੈਸ਼ਨ ਬਣਾ ਰਿਹਾ ਹੈ..." - - #: ../src/remote-viewer.c:988 - #, c-format - msgid "Invalid file %s" --msgstr "" -+msgstr "ਅਯੋਗ ਫਾਈਲ %s" - - #: ../src/remote-viewer.c:995 - msgid "Cannot determine the connection type from URI" -@@ -194,7 +208,7 @@ msgstr "URI ਤੋਂ ਕੁਨੈਕਸ਼ਨ ਜਾਣਕਾਰੀ ਪ੍ਰਾ - - #: ../src/remote-viewer.c:1001 - msgid "Couldn't open oVirt session" --msgstr "" -+msgstr "oVirt ਸੈਸ਼ਨ ਨਹੀਂ ਖੋਲ੍ਹ ਸਕਿਆ" - - #: ../src/remote-viewer.c:1008 - #, c-format -@@ -206,7 +220,6 @@ msgstr "ਇਸ ਕਿਸਮ ਲਈ ਸ਼ੈਸ਼ਨ ਨਹੀਂ ਬਣਾ ਸਕਿ - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "ਗਲੇਡ ਬਾਰੇ" -@@ -215,11 +228,13 @@ msgstr "ਗਲੇਡ ਬਾਰੇ" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.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/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -240,77 +255,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "ਇਹ ਪਰੋਗਰਾਮ ਫਰੀ ਸਾਫਟਵੇਅਰ ਹੈ; ਤੁਸੀਂ ਇਸਨੂੰ ਮੁੜ-ਵੰਡ ਅਤੇ/ਜਾਂ ਸੋਧ ਕਰ ਸਕਦੇ ਹੋ\nGNU ਜਨਰਲ ਪਬਲਿਕ ਲਾਈਸੰਸ ਦੀਆਂ ਸ਼ਰਤਾਂ ਅਧੀਨ ਜੋ ਫਰੀ\nਸਾਫਟਵੇਅਰ ਫਾਊਂਡੇਸ਼ਨ ਦੁਆਰਾ ਜਾਰੀ ਕੀਤਾ ਗਿਆ ਹੈ; ਲਾਈਸੰਸ ਦਾ ਵਰਜਨ 2, ਜਾਂ\n(ਤੁਹਾਡੀ ਚੋਂ ਮੁਤਾਬਕ) ਕੋਈ ਬਾਅਦ ਵਾਲਾ ਵਰਜਨ\n\nਇਹ ਪਰੋਗਰਾਮ ਇਸ ਉਦੇਸ਼ ਨਾਲ ਜਾਰੀ ਕੀਤਾ ਗਿਆ ਹੈ ਕਿ ਇਹ ਵਰਤਣਯੋਗ ਹੋਵੇਗਾ,\nਪਰ ਕਿਨਾਂ ਕਿਸੇ ਵਾਰੰਟੀ; ਇੱਥੋਂ ਤੱਕ ਕਿ ਬਿਨਾਂ ਕਿਸੇ ਵਪਾਰਿਕਤਾ ਵਾਰੰਟੀ\nਜਾਂ ਕਿਸੇ ਖਾਸ ਉਦੇਸ਼ ਦੀ ਪੂਰਤੀ ਲਈ। ਵਧੇਰੇ ਵਿਸਥਾਰ ਲਈ\nGNU ਜਨਰਲ ਪਬਲਿਕ ਲਾਈਸੰਸ ਵੇਖੋ।\n\nਤੁਹਾਨੂੰ ਇਸ ਪਰੋਗਰਾਮ ਨਾਲ GNU ਜਨਰਲ ਪਬਲਿਕ ਲਾਈਸੰਸ ਦੀ ਕਾਪੀ\nਮਿਲਨੀ ਚਾਹੀਦੀ ਹੈ; ਜੇ ਨਹੀਂ, ਤਾਂ ਫਰੀ ਸਾਫਟਵੇਅਰ ਫਾਈਊਨਡੇਸ਼ਨ,\nInc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ਨੂੰ ਲਿਖੋ\n" -+msgstr "" -+"ਇਹ ਪਰੋਗਰਾਮ ਫਰੀ ਸਾਫਟਵੇਅਰ ਹੈ; ਤੁਸੀਂ ਇਸਨੂੰ ਮੁੜ-ਵੰਡ ਅਤੇ/ਜਾਂ ਸੋਧ ਕਰ ਸਕਦੇ ਹੋ\n" -+"GNU ਜਨਰਲ ਪਬਲਿਕ ਲਾਈਸੰਸ ਦੀਆਂ ਸ਼ਰਤਾਂ ਅਧੀਨ ਜੋ ਫਰੀ\n" -+"ਸਾਫਟਵੇਅਰ ਫਾਊਂਡੇਸ਼ਨ ਦੁਆਰਾ ਜਾਰੀ ਕੀਤਾ ਗਿਆ ਹੈ; ਲਾਈਸੰਸ ਦਾ ਸੰਸਕਰਣ 2, ਜਾਂ\n" -+"(ਤੁਹਾਡੀ ਚੋਣ ਮੁਤਾਬਕ) ਕੋਈ ਬਾਅਦ ਵਾਲਾ ਸੰਸਕਰਣ\n" -+"\n" -+"ਇਹ ਪਰੋਗਰਾਮ ਇਸ ਉਦੇਸ਼ ਨਾਲ ਜਾਰੀ ਕੀਤਾ ਗਿਆ ਹੈ ਕਿ ਇਹ ਵਰਤਣਯੋਗ ਹੋਵੇਗਾ,\n" -+"ਪਰ ਕਿਨਾਂ ਕਿਸੇ ਵਾਰੰਟੀ; ਇੱਥੋਂ ਤੱਕ ਕਿ ਬਿਨਾਂ ਕਿਸੇ ਵਪਾਰਿਕਤਾ ਵਾਰੰਟੀ\n" -+"ਜਾਂ ਕਿਸੇ ਖਾਸ ਉਦੇਸ਼ ਦੀ ਪੂਰਤੀ ਲਈ। ਵਧੇਰੇ ਵਿਸਥਾਰ ਲਈ\n" -+"GNU ਜਨਰਲ ਪਬਲਿਕ ਲਾਈਸੰਸ ਵੇਖੋ।\n" -+"\n" -+"ਤੁਹਾਨੂੰ ਇਸ ਪਰੋਗਰਾਮ ਨਾਲ GNU ਜਨਰਲ ਪਬਲਿਕ ਲਾਈਸੰਸ ਦੀ ਕਾਪੀ\n" -+"ਮਿਲਣੀ ਚਾਹੀਦੀ ਹੈ; ਜੇ ਨਹੀਂ, ਤਾਂ ਫਰੀ ਸਾਫਟਵੇਅਰ ਫਾਈਊਨਡੇਸ਼ਨ,\n" -+"Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ਨੂੰ ਲਿਖੋ\n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "ਫੇਡੋਰਾ ਅਨੁਵਾਦ ਟੀਮ" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" --msgstr "" -+msgstr "ਕੀ ਤੁਸੀਂ ਸੈਸ਼ਨ ਬੰਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" --msgstr "" -+msgstr "ਮੈਨੂੰ ਦੁਬਾਰਾ ਨਾ ਪੁੱਛਿਓ" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "ਝਲਕ %d ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" --msgstr "ਗਿਸਟ %s ਲਈ ਗਰਾਫਿਕਸ ਕਿਸਮ ਅਣਜਾਣ ਹੈ" -+msgstr "ਪ੍ਰਾਹੁਣੇ %s ਲਈ ਗਰਾਫਿਕਸ ਕਿਸਮ ਅਣਪਛਾਤੀ ਹੈ" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." --msgstr "ssh ਨਾਲ ਜੁੜਨ ਤੋਂ ਫੇਲ ਹੋਇਆ।" -+msgstr "ssh ਨਾਲ ਜੁੜਨ ਤੋਂ ਅਸਫਲ ਹੋਇਆ।" - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." --msgstr "ਚੈਨਲ ਨਾਲ ਜੁੜ ਨਹੀਂ ਸਕਦਾ, ਸਿਰਫ SSH ਨੂੰ ਸਹਿਯੋਗ ਹੈ।" -+msgstr "ਚੈਨਲ ਨਾਲ ਜੁੜ ਨਹੀਂ ਸਕਦਾ, ਸਿਰਫ SSH ਸਮਰਥਿਤ ਹੈ।" - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." --msgstr "ਚੈਨਲ ਨਾਲ ਜੁੜਨ ਨੂੰ ਸਹਿਯੋਗ ਨਹੀਂ ਹੈ।" -+msgstr "ਚੈਨਲ ਨਾਲ ਜੁੜਨ ਨੂੰ ਸਮਰਥਨ ਨਹੀਂ ਹੈ।" - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "ਗਰਾਫਿਕਸ ਸਰਵਰ ਨਾਲ ਜੁੜ ਰਿਹਾ ਹੈ" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" --msgstr "ਗਿਸਟ ਡੋਮੇਨ ਸ਼ੱਟ-ਡਾਊਨ ਹੋ ਗਿਆ ਹੈ" -+msgstr "ਪ੍ਰਾਹੁਣਾ ਡੋਮੇਨ ਸ਼ੱਟ-ਡਾਊਨ ਹੋ ਗਿਆ ਹੈ" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" --msgstr "ਗਰਾਫਿਕਸ ਸਰਵਰ ਨਾਲ ਜੁੜ ਗਿਆ ਹੈ" -+msgstr "ਗਰਾਫਿਕਸ ਸਰਵਰ ਨਾਲ ਜੁੜ ਗਿਆ" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "ਗਰਾਫਿਕਸ ਸਰਵਰ %s ਨਾਲ ਜੁੜਨ ਤੋਂ ਅਸਮਰਥ" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s ਤੋਂ ਰਿਮੋਟ ਡੈਸਕਟਾਪ ਸਰਵਰ ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਤੋਂ ਅਸਮਰਥ: %s\nਕੁਨੈਕਸ਼ਨ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨੀ ਹੈ?" -+msgstr "" -+"%s ਤੋਂ ਰਿਮੋਟ ਡੈਸਕਟਾਪ ਸਰਵਰ ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਤੋਂ ਅਸਮਰਥ: %s\n" -+"ਸੰਪਰਕ ਦੀ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨੀ ਹੈ?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "ਰਿਮੋਟ ਸਰਵਰ ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਤੋਂ ਅਸਮਰਥ: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB ਰੀਡਾਇਰੈਕਸ਼ਨ ਗਲਤੀ: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "ਡਿਸਪਲੇਅ %d" -@@ -320,10 +350,9 @@ msgstr "ਡਿਸਪਲੇਅ %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" --msgstr "ਪ੍ਰਮਾਣਕਿਤਾ ਲੋੜੀਦੀ ਹੈ" -+msgstr "ਪ੍ਰਮਾਣਿਕਤਾ ਲੋੜੀਂਦੀ ਹੈ" - - #: ../src/virt-viewer-auth.xml.h:2 - msgid "label" -@@ -331,7 +360,7 @@ msgstr "ਲੇਬਲ" - - #: ../src/virt-viewer-auth.xml.h:3 - msgid "Password:" --msgstr "ਪਾਸਵਰਡ:" -+msgstr "ਗੁਪਤ-ਸ਼ਬਦ:" - - #: ../src/virt-viewer-auth.xml.h:4 - msgid "Username:" -@@ -340,11 +369,11 @@ msgstr "ਯੂਜ਼ਰ ਨਾਂ:" - #: ../src/virt-viewer-main.c:38 - #, c-format - msgid "%s version %s\n" --msgstr "%s ਵਰਜਨ %s\n" -+msgstr "%s ਸੰਸਕਰਣ %s\n" - - #: ../src/virt-viewer-main.c:71 - msgid "Attach to the local display using libvirt" --msgstr "libvirt ਵਰਤ ਕੇ ਲੋਕਲ ਡਿਸਪਲੇਅ ਨਾਲ ਜੁੜੋ" -+msgstr "libvirt ਵਰਤ ਕੇ ਸਥਾਨਕ ਡਿਸਪਲੇਅ ਨਾਲ ਜੁੜੋ" - - #: ../src/virt-viewer-main.c:73 - msgid "Connect to hypervisor" -@@ -356,7 +385,7 @@ msgstr "ਡੋਮੇਲ ਚਾਲੂ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰੋ" - - #: ../src/virt-viewer-main.c:77 - msgid "Reconnect to domain upon restart" --msgstr "ਮੁੜ-ਚਾਲੂ ਹੋਣ ਤੇ ਡੋਮੇਨ ਨਾ ਮੁੜ-ਜੁੜੋ" -+msgstr "ਮੁੜ-ਚਾਲੂ ਹੋਣ ਤੇ ਡੋਮੇਨ ਨਾਲ ਮੁੜ-ਜੁੜੋ" - - #: ../src/virt-viewer-main.c:83 - msgid "Open in full screen mode" -@@ -374,189 +403,192 @@ msgstr "ਪੂਰੀਆਂ ਉਪਲੱਬਧ ਕਮਾਂਡ ਲਾਈਨ ਚ - #. Setup command line options - #: ../src/virt-viewer-main.c:99 - msgid "- Virtual machine graphical console" --msgstr "- ਵਰਚੁਅਲ ਮਸ਼ੀਨ ਗਰਾਫੀਕਲ ਕੰਸੋਲ" -+msgstr "- ਆਭਾਸੀ ਮਸ਼ੀਨ ਗਰਾਫੀਕਲ ਕੰਸੋਲ" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nਵਰਤੋਂ: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"ਵਰਤੋਂ: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "ਰੀਡਾਇਰੈਕਸ਼ਨ ਲਈ USB ਜੰਤਰ ਚੁਣੋ" - - #: ../src/virt-viewer-session-vnc.c:147 - #, c-format - msgid "Unsupported authentication type %d" --msgstr "ਨਾ-ਸਹਿਯੋਗੀ ਪ੍ਰਮਾਣਿਕਤਾ ਕਿਸਮ %d" -+msgstr "ਅਸਮਰਥਿਤ ਪ੍ਰਮਾਣਿਕਤਾ ਕਿਸਮ %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "ਸਕਰੀਨ-ਸ਼ਾਟ" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" --msgstr "ਡਿਸ-ਕੁਨੈਕਟ ਕਰੋ" -+msgstr "ਸੰਪਰਕ ਤੋੜੋ" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB ਜੰਤਰ ਚੋਣ" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" --msgstr "ਸਵਿੱਚ ਮਿਸ਼ਰਨ ਭੇਜੋ" -+msgstr "ਚਾਬੀ ਮਿਸ਼ਰਨ ਭੇਜੋ" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "ਪੂਰੀ ਸਕਰੀਨ ਛੱਡੋ" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(ਪੁਆਇੰਟਰ ਛੱਡਣ ਲਈ %s ਦੱਬੋ)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" --msgstr "" -+msgstr "ਇਸ ਸੰਪਰਕ ਦੇ ਸੈੱਟਅੱਪ ਲਈ ਘੱਟੋ-ਘੱਟ %s ਸੰਸਕਰਣ %s ਲੋੜੀਂਦਾ ਹੈ" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" --msgstr "ਗਿਸਟ ਡੋਮੇਨ ਮੁੜ-ਚਾਲੂ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" -+msgstr "ਪ੍ਰਾਹੁਣਾ ਡੋਮੇਨ ਦੇ ਮੁੜ-ਚਾਲੂ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" --msgstr "ਗਿਸਟ %s ਲਈ ਗਰਾਫਿਕ ਕਿਸਮ ਪਤਾ ਨਹੀਂ ਕਰ ਸਕਦਾ" -+msgstr "ਪ੍ਰਾਹੁਣਾ %s ਲਈ ਗਰਾਫਿਕ ਕਿਸਮ ਪਤਾ ਨਹੀਂ ਕਰ ਸਕਦਾ" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" --msgstr "ਗਿਸਟ %s ਲਈ ਗਰਾਫਿਕਸ ਐਡਰੈੱਸ ਪਤਾ ਨਹੀਂ ਕਰ ਸਕਿਆ" -+msgstr "ਪ੍ਰਾਹੁਣਾ %s ਲਈ ਗਰਾਫਿਕਸ ਸਿਰਨਾਵਾਂ ਪਤਾ ਨਹੀਂ ਕਰ ਸਕਿਆ" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" --msgstr "ਗਿਸਟ %s ਲਈ ਹੋਸਟ ਪਤਾ ਨਹੀਂ ਕਰ ਸਕਦਾ" -+msgstr "ਪ੍ਰਾਹੁਣਾ %s ਲਈ ਹੋਸਟ ਪਤਾ ਨਹੀਂ ਕਰ ਸਕਦਾ" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" --msgstr "" -+msgstr "libvirt ਦੇ ਸ਼ੁਰੂ ਹੋਣ ਦੀ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" --msgstr "ਗਿਸਟ ਡੋਮੇਨ ਲੱਭ ਰਿਹਾ ਹੈ" -+msgstr "ਪ੍ਰਾਹੁਣਾ ਡੋਮੇਨ ਲੱਭ ਰਿਹਾ ਹੈ" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" --msgstr "ਗਿਸਟ ਡੋਮੇਨ ਬਣਨ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" -+msgstr "ਪ੍ਰਾਹੁਣਾ ਡੋਮੇਨ ਦੇ ਬਣਾਏ ਜਾਣ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" --msgstr "ਗਿਸਟ ਡੋਮੇਨ %s ਨਹੀਂ ਲੱਭ ਸਕਿਆ" -+msgstr "ਪ੍ਰਾਹੁਣਾ ਡੋਮੇਨ %s ਨਹੀਂ ਲੱਭ ਸਕਿਆ" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" --msgstr "ਗਿਸਟ ਡੋਮੇਨ ਹਾਲਤ ਜਾਂਚ ਰਿਹਾ ਹੈ" -+msgstr "ਪ੍ਰਾਹੁਣਾ ਡੋਮੇਨ ਦੀ ਹਾਲਤ ਜਾਂਚ ਰਿਹਾ ਹੈ" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" --msgstr "ਗਿਸਟ ਡੋਮੇਨ ਚਾਲੂ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" -+msgstr "ਪ੍ਰਾਹੁਣਾ ਡੋਮੇਨ ਦੇ ਚਾਲੂ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" --msgstr "ਗਿਸਟ ਡੋਮੇਨ ਦੁਆਰਾ ਸਰਵਰ ਚਾਲੂ ਕਰਨ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" -+msgstr "ਗੈੱਸਟ ਡੋਮੇਨ ਦੁਆਰਾ ਸਰਵਰ ਚਾਲੂ ਕਰਨ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "libvirt ਨੂੰ URI %s ਨਾਲ ਜੋੜ ਨਹੀਂ ਸਕਿਆ" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[ਕੋਈ ਨਹੀਂ]" - -@@ -565,14 +597,13 @@ msgstr "[ਕੋਈ ਨਹੀਂ]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" --msgstr "ਫਾਇਲ(_F)" -+msgstr "ਫਾਈਲ (_F)" - - #: ../src/virt-viewer.xml.h:4 - msgid "Smartcard insertion" --msgstr "ਸਮਾਰਟ-ਕਾਰਡ ਜੋੜਨਾ" -+msgstr "ਸਮਾਰਟ-ਕਾਰਡ ਅੰਦਰ ਪਾਉਣਾ" - - #: ../src/virt-viewer.xml.h:5 - msgid "Smartcard removal" -@@ -580,7 +611,7 @@ msgstr "ਸਮਾਰਡ-ਕਾਰਡ ਹਟਾਉਣਾ" - - #: ../src/virt-viewer.xml.h:6 - msgid "_View" --msgstr "ਵੇਖੋ(_V)" -+msgstr "ਵੇਖੋ (_V)" - - #: ../src/virt-viewer.xml.h:7 - msgid "Full screen" -@@ -588,15 +619,15 @@ msgstr "ਪੂਰਾ ਪਰਦਾ" - - #: ../src/virt-viewer.xml.h:8 - msgid "_Zoom" --msgstr "ਜ਼ੂਮ(_Z)" -+msgstr "ਜ਼ੂਮ (_Z)" - - #: ../src/virt-viewer.xml.h:9 - msgid "Automatically resize" --msgstr "ਆਟੋਮੈਟਿਕ ਮੁੜ-ਅਕਾਰ" -+msgstr "ਸ੍ਵੈ-ਚਲਿਤ ਮੁੜ-ਅਕਾਰ" - - #: ../src/virt-viewer.xml.h:10 - msgid "Displays" --msgstr "ਝਲਕ" -+msgstr "ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਦਾ ਹੈ" - - #: ../src/virt-viewer.xml.h:11 - msgid "Release cursor" -@@ -604,12 +635,8 @@ msgstr "ਕਰਸਰ ਛੱਡੋ" - - #: ../src/virt-viewer.xml.h:12 - msgid "_Send key" --msgstr "ਕੁੰਜੀ ਭੇਜੋ(_S)" -- --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "ਪ੍ਰਿੰਟ-ਸਕਰੀਨ(_P)" -+msgstr "ਕੁੰਜੀ ਭੇਜੋ (_S)" - --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" --msgstr "ਮੱਦਦ(_H)" -+msgstr "ਮਦਦ (_H)" -diff --git a/po/pt_BR.po b/po/pt_BR.po -index 829cd5f..2a23f37 100644 ---- a/po/pt_BR.po -+++ b/po/pt_BR.po -@@ -5,31 +5,34 @@ - # Translators: - # Glaucia Freitas <gcintra@redhat.com>, 2012 - # Glaucia Freitas <gcintra@redhat.com>, 2013 -+# gcintra <gcintra@redhat.com>, 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-29 17:06+0000\n" --"Last-Translator: Daniel Berrange <dan-transifex@berrange.com>\n" -+"PO-Revision-Date: 2013-09-30 09:00-0400\n" -+"Last-Translator: gcintra <gcintra@redhat.com>\n" - "Language-Team: Portuguese (Brazil) <trans-pt_br@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"Language: pt_BR\n" -+"Language: pt-BR\n" - "Plural-Forms: nplurals=2; plural=(n > 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "Visualizador remoto" - - #: ../data/remote-viewer.desktop.in.h:2 - msgid "Access remote desktops" --msgstr "" -+msgstr "Acesse áreas de trabalho remotas" - - #: ../data/virt-viewer-mime.xml.in.h:1 - msgid "Virt-Viewer connection file" --msgstr "" -+msgstr "Arquivo de conexão do Virt-Viewer" - - #: ../src/gbinding.c:637 - msgid "Source" -@@ -81,27 +84,32 @@ msgstr "versão remote-viewer %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "Argumento de tela cheia inválido: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "Exibir informações de versão" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "Exibir informações de verbose" - - #: ../src/remote-viewer-main.c:127 - msgid "Set window title" --msgstr "" -+msgstr "Definir título de janela" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "Conexão direta com os túneis automáticos" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "Nível de zoom da janela, em porcentagem" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "Exibir informações de depuração" - -@@ -109,7 +117,9 @@ msgstr "Exibir informações de depuração" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "Abrir em modo de tela plena (auto-conf ajusta resolução de convidado para se encaixar na do cliente)." -+msgstr "" -+"Abrir em modo de tela plena (auto-conf ajusta resolução de convidado para se " -+"encaixar na do cliente)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -119,9 +129,10 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Abrir conexão usando a comunicação do controlador Spice" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" --msgstr "" -+msgstr "Padronizar hotkeys" - - #. Setup command line options - #: ../src/remote-viewer-main.c:150 -@@ -133,7 +144,11 @@ msgstr "-Cliente de visualizador remoto" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nExecute '%s --help' para ver uma lista completa de opções de linhas de comando disponíveis\n\n" -+msgstr "" -+"%s\n" -+"Execute '%s --help' para ver uma lista completa de opções de linhas de " -+"comando disponíveis\n" -+"\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -145,12 +160,14 @@ msgstr "Erro: argumentos extras passados ao usar o controlador Spice\n" - msgid "Error: can't handle multiple URIs\n" - msgstr "Erro: não é possível manipular múltiplas URIs\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "Nível de zoom deve estar entre 10-200\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "Falha ao iniciar a conexão " - -@@ -187,7 +204,7 @@ msgstr "Configurando uma sessão Spice" - #: ../src/remote-viewer.c:988 - #, c-format - msgid "Invalid file %s" --msgstr "" -+msgstr "Arquivo Inválido %s" - - #: ../src/remote-viewer.c:995 - msgid "Cannot determine the connection type from URI" -@@ -195,7 +212,7 @@ msgstr "Não foi possíve determinar o tipo de conexão a partir do URI" - - #: ../src/remote-viewer.c:1001 - msgid "Couldn't open oVirt session" --msgstr "" -+msgstr "Não foi possível abrir a sessão do oVirt" - - #: ../src/remote-viewer.c:1008 - #, c-format -@@ -207,7 +224,6 @@ msgstr "Não foi possível criar uma sessão para este tpo: %s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "Sobre o Glade" -@@ -216,11 +232,14 @@ msgstr "Sobre o Glade" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" --msgstr "Um cliente de desktop remoto construído com o GTK-VNC, SPICE-GTK e libvirt" -+msgstr "" -+"Um cliente de desktop remoto construído com o GTK-VNC, SPICE-GTK e libvirt" - - #: ../src/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -241,77 +260,95 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "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\nEste programa é distribuído esperando que seja útiil, \nmas 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\nVocê 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" -+msgstr "" -+"Este programa é um software livre; você pode redistribuí-lo e/ou modificá-lo " -+"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 \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 \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/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "A equipe de Tradução do Fedora " - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" --msgstr "" -+msgstr "Você deseja fechar a sessão?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" --msgstr "" -+msgstr "Não perguntar novamente." - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "Esperando pelo display %d..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "Tipo de gráfico desconhecido para convidados %s" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "Falha ao conectar com o ssh." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - 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:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "A conexão com o canal não é suportada." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "Conectando ao servidor de gráfico" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "Domínio de convidado precisa ser fechado" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "Conectado ao servidor de gráfico" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, 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:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "Incapaz de autenticar com o servidor de desktop remoto em %s: %s Tentar conexão novamente?" -+msgstr "" -+"Incapaz de autenticar com o servidor de desktop remoto em %s: %s Tentar " -+"conexão novamente?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, 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:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "Erro de redirecionamento do USB:%s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "Exibir %d" -@@ -321,7 +358,6 @@ msgstr "Exibir %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "Autenticação requerida" -@@ -370,7 +406,9 @@ msgstr "Visualizador do Virt" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "Execute '%s --help' para ver uma lista completa das opções de linha de comando disponíveis" -+msgstr "" -+"Execute '%s --help' para ver uma lista completa das opções de linha de " -+"comando disponíveis" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -379,16 +417,19 @@ msgstr "Console gráfico da máquina virtual" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nUso: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"Uso: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "Selecionar os dispositivos do USB para redirecionamento" - -@@ -397,167 +438,167 @@ msgstr "Selecionar os dispositivos do USB para redirecionamento" - msgid "Unsupported authentication type %d" - msgstr "Autenticação não suportada tipo %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "Screenshot" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "Desconectar" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "Seleção de dispositivo de USB" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "Enviar combinação de teclas" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "Deixar tela cheia" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(Pressione %s para liberar o ponteiro)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" --msgstr "" -+msgstr "Ao menos a %s versão %s é requerida para definir esta conexão" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "Esperando pelo domínio do convidado para reiniciar" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, 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:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "Não foi possível determinar o endereço do gráfico para o convidado %s" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, 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:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" --msgstr "" -+msgstr "Esperando o libvirt iniciar" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "Encontrando o domínio do convidado" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "Esperando pelo domínio do convidado a ser criado" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "Não foi possível encontrar o domínio do convidado %s" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "Verificando o status do domínio do convidado" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "Esperando pelo domínio do convidado para iniciar" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "Esperando pelo domínio do convidado para iniciar servidor" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "Incapaz de conectar ao libvirt com o URI %s" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[nenhum]" - -@@ -566,7 +607,6 @@ msgstr "[nenhum]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "_Arquivo" -@@ -607,10 +647,6 @@ msgstr "Liberar o cursor" - msgid "_Send key" - msgstr "_Chave de Envio" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "_PrintScreen" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "_Ajuda" -diff --git a/po/ru.po b/po/ru.po -index 777a0ee..85662e0 100644 ---- a/po/ru.po -+++ b/po/ru.po -@@ -7,21 +7,25 @@ - # triplepointfive <iya777@yandex.ru>, 2012 - # Yulia <ypoyarko@redhat.com>, 2010, 2012 - # Yulia <yulia.poyarkova@redhat.com>, 2013 -+# ypoyarko <ypoyarko@redhat.com>, 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-29 17:06+0000\n" --"Last-Translator: Daniel Berrange <dan-transifex@berrange.com>\n" -+"PO-Revision-Date: 2013-09-22 10:32-0400\n" -+"Last-Translator: ypoyarko <ypoyarko@redhat.com>\n" - "Language-Team: Russian <trans-ru@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\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" -+"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.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "Удаленный просмотр" - -@@ -83,11 +87,13 @@ msgstr "remote-viewer, версия %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "Недопустимый параметр полноэкранного просмотра: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "Показать версию" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "Подробный вывод" - -@@ -95,15 +101,18 @@ msgstr "Подробный вывод" - msgid "Set window title" - msgstr "Изменить заголовок окна" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "прямое подключение без туннелей" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "Масштаб окна в процентах" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "Показать сообщения диагностики" - -@@ -111,7 +120,9 @@ msgstr "Показать сообщения диагностики" - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "Полноэкранный режим (auto-conf откорректирует разрешение экрана гостя в соответствии с разрешением клиента)" -+msgstr "" -+"Полноэкранный режим (auto-conf откорректирует разрешение экрана гостя в " -+"соответствии с разрешением клиента)" - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -121,7 +132,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "Открыть соединение с помощью контроллера Spice" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "Настроить комбинации клавиш" - -@@ -135,7 +147,8 @@ msgstr "— Клиент удаленного просмотра" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nВыполните «%s --help» для просмотра полного списка параметров\n" -+msgstr "%s\n" -+"Выполните «%s --help» для просмотра полного списка параметров\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -147,12 +160,14 @@ msgstr "Ошибка. Лишние аргументы при использов - msgid "Error: can't handle multiple URIs\n" - msgstr "Ошибка. Обработка нескольких URI не допускается.\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "Масштаб должен быть в пределах 10-200\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "Не удалось установить соединение" - -@@ -193,11 +208,11 @@ msgstr "Недопустимый файл %s" - - #: ../src/remote-viewer.c:995 - msgid "Cannot determine the connection type from URI" --msgstr "Не удалось определить тип подключения в URI" -+msgstr "Не удалось определить тип подключения из URI" - - #: ../src/remote-viewer.c:1001 - msgid "Couldn't open oVirt session" --msgstr "" -+msgstr "Не удалось открыть сеанс oVirt" - - #: ../src/remote-viewer.c:1008 - #, c-format -@@ -209,7 +224,6 @@ msgstr "Не удалось создать сеанс этого типа: %s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "О Glade" -@@ -218,11 +232,14 @@ msgstr "О Glade" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "(C) 2007-2012 Daniel P. Berrange\n(C) 2007-2012 Red Hat, Inc." -+msgstr "(C) 2007-2012 Daniel P. Berrange\n" -+"(C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.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/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -243,77 +260,93 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "Эта программа относится к категории свободного программного обеспечения;\nеё можно распространять и изменять в соответствии с условиями \nлицензии GNU General Public License 2 или любой более поздней версии, \nопубликованной фондом свободного программного обеспечения. \n\nПрограмма распространяется в надежде, что она может быть полезной, \nно БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,\nВ ТОМ ЧИСЛЕ БЕЗ ГАРАНТИЙ КОММЕРЧЕСКОЙ ЦЕННОСТИ И \nПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. \nПодробную информацию можно найти в тексте лицензии GNU. \n\nКопия лицензии GNU предоставляется вместе с этой программой.\nАдрес фонда: Free Software Foundation, \nInc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"Эта программа относится к категории свободного программного обеспечения;\n" -+"её можно распространять и изменять в соответствии с условиями \n" -+"лицензии GNU General Public License 2 или любой более поздней версии, \n" -+"опубликованной фондом свободного программного обеспечения. \n" -+"\n" -+"Программа распространяется в надежде, что она может быть полезной, \n" -+"но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,\n" -+"В ТОМ ЧИСЛЕ БЕЗ ГАРАНТИЙ КОММЕРЧЕСКОЙ ЦЕННОСТИ И \n" -+"ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. \n" -+"Подробную информацию можно найти в тексте лицензии GNU. \n" -+"\n" -+"Копия лицензии GNU предоставляется вместе с этой программой.\n" -+"Адрес фонда: Free Software Foundation, \n" -+"Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Команда локализации Fedora" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "Закрыть сеанс?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "Больше не спрашивать" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "Ожидание просмотра %d..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "Неизвестный тип графической подсистемы для гостя %s" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "Ошибка соединения ssh." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "Не удалось подключиться к каналу. Поддерживается только SSH." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "Подключение к каналу не поддерживается." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "Подключение к графическому серверу" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "Гостевой домен завершил работу" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "Установлено соединение с графическим сервером" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "Не удалось установить соединение с сервером %s" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "Не удалось пройти аутентификацию на удаленном сервере: %s: %s\nПовторить попытку подключения?" -+msgstr "" -+"Не удалось пройти аутентификацию на удаленном сервере: %s: %s\n" -+"Повторить попытку подключения?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "Не удалось пройти аутентификацию на удаленном сервере: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "Ошибка перенаправления USB: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "Экран %d" -@@ -323,7 +356,6 @@ msgstr "Экран %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "Требуется проверка подлинности" -@@ -381,16 +413,19 @@ msgstr "— графическая консоль виртуальной маш - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nФормат: %s [ПАРАМЕТРЫ] ДОМЕН|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"Формат: %s [ПАРАМЕТРЫ] ДОМЕН|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "Выбрать устройства USB для перенаправления" - -@@ -399,167 +434,167 @@ msgstr "Выбрать устройства USB для перенаправле - msgid "Unsupported authentication type %d" - msgstr "Неподдерживаемый тип аутентификации %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "Снимок экрана" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "Отключиться" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "Выбор устройства USB" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "Отправить комбинацию клавиш" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "Выйти из полноэкранного режима" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(нажмите %s для освобождения курсора)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" --msgstr "" -+msgstr "Для настройки подключения необходимо наличие %s версии %s " - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "Ожидание перезапуска гостевого домена" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "Не удалось определить тип графической подсистемы для гостя %s" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "Не удалось определить адрес графического интерфейса для гостя %s" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "Не удалось определить хост для гостя %s" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "Ожидание запуска libvirt" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "Поиск гостевого домена" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "Ожидание создания гостевого домена" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "Гостевой домен %s не найден" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "Проверка статуса гостевого домена" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "Ожидание запуска гостевого домена" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "Ожидание запуска сервера гостевого домена" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "Не удалось подключиться к libvirt на URI %s" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[нет]" - -@@ -568,7 +603,6 @@ msgstr "[нет]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "_Файл" -@@ -609,10 +643,6 @@ msgstr "Освободить курсор" - msgid "_Send key" - msgstr "О_тправить клавишу" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "_PrintScreen" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "_Справка" -diff --git a/po/ta.po b/po/ta.po -index 4b7e752..b2576dd 100644 ---- a/po/ta.po -+++ b/po/ta.po -@@ -8,12 +8,13 @@ - # shkumar <shkumar@redhat.com>, 2012 - # shkumar <shkumar@redhat.com>, 2013 - # shkumar <shkumar@redhat.com>, 2012-2013 -+# shkumar <shkumar@redhat.com>, 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-30 10:04+0000\n" -+"PO-Revision-Date: 2013-11-12 01:20-0500\n" - "Last-Translator: shkumar <shkumar@redhat.com>\n" - "Language-Team: Tamil <tamil-users@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" -@@ -21,8 +22,10 @@ msgstr "" - "Content-Transfer-Encoding: 8bit\n" - "Language: ta\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "தொலைநிலை காட்டி" - -@@ -56,7 +59,7 @@ msgstr "மூல பண்பு" - - #: ../src/gbinding.c:669 - msgid "The property on the source to bind" --msgstr "பிணைக்க மூலத்தின் குணம்" -+msgstr "பிணைக்க வேண்டிய மூலத்தில் உள்ள பண்பு" - - #: ../src/gbinding.c:684 - msgid "Target Property" -@@ -64,7 +67,7 @@ msgstr "இலக்கு பண்பு" - - #: ../src/gbinding.c:685 - msgid "The property on the target to bind" --msgstr "பிணைக்க இலக்கின் குணம்" -+msgstr "பிணைக்க வேண்டிய இலக்கில் உள்ள் பண்பு" - - #: ../src/gbinding.c:699 - msgid "Flags" -@@ -84,11 +87,13 @@ msgstr "remote-viewer பதிப்பு %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "தவறான முழுத்திரை அளவுரு: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "காட்சி பதிப்பு தகவல்" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "காட்சி வெர்போஸ் தகவல்" - -@@ -96,15 +101,18 @@ msgstr "காட்சி வெர்போஸ் தகவல்" - msgid "Set window title" - msgstr "சாளர தலைப்பை அமைக்கவும்" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "தானியக்க டனல்கள் இல்லாமல் நேரடி இணைப்பு" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "சாளரத்தின் அளவிடும் நிலை, சதவீதத்தில்" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "பிழைத்திருத்த தகவலை காட்டவும்" - -@@ -112,7 +120,10 @@ msgstr "பிழைத்திருத்த தகவலை காட்ட - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "முழுத்திரை பயன்முறையில் திறக்கவும் (auto-conf ஆனது கிளையன்ட்டின் தெளிவுத்திறனுக்குப் பொருந்தும் விதத்தில் விருந்தினரின் தெளிவுத்திறனை சரி செய்யும்)." -+msgstr "" -+"முழுத்திரை பயன்முறையில் திறக்கவும் (auto-conf ஆனது கிளையன்ட்டின் " -+"தெளிவுத்திறனுக்குப் பொருந்தும் விதத்தில் விருந்தினரின் தெளிவுத்திறனை சரி " -+"செய்யும்)." - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -122,7 +133,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "ஸ்பைஸ் கட்டுப்படுத்தி தொடர்பை பயன்படுத்தி இணைப்பை திறக்கவும்" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "குறுக்குவிசைகளை தனிப்பயனாக்கவும்" - -@@ -136,24 +148,31 @@ msgstr "- Remote viewer client" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nகிடைக்கும் கட்டளை வரி விருப்பங்களின் முழு பட்டியலைக் காண '%s --help' கட்டளையை இயக்கவும்\n" -+msgstr "" -+"%s\n" -+"கிடைக்கும் கட்டளை வரி விருப்பங்களின் முழு பட்டியலைக் காண '%s --help' " -+"கட்டளையை இயக்கவும்\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format - msgid "Error: extra arguments given while using Spice controller\n" --msgstr "பிழை: ஸ்பைஸ் கன்ட்ரோலரைப் பயன்படுத்தும் போது கூடுதல் அளவுருக்கள் கொடுக்கப்பட்டன\n" -+msgstr "" -+"பிழை: ஸ்பைஸ் கன்ட்ரோலரைப் பயன்படுத்தும் போது கூடுதல் அளவுருக்கள் " -+"கொடுக்கப்பட்டன\n" - - #: ../src/remote-viewer-main.c:182 - #, c-format - msgid "Error: can't handle multiple URIs\n" - msgstr "பிழை: பல URIகளைக் கையாள முடியாது\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "அளவிடும் நிலை 10-200-க்குள் இருக்க வேண்டும்\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "இணைப்பை துவக்க முடியவில்லை" - -@@ -210,7 +229,6 @@ msgstr "இந்த வகைக்கு ஒரு அமர்வை உர - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "Glade பற்றி" -@@ -219,7 +237,9 @@ msgstr "Glade பற்றி" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" -@@ -244,77 +264,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"This program is free software; you can redistribute it and/or modify\n" -+"it under the terms of the GNU General Public License as published by\n" -+"the Free Software Foundation; either version 2 of the License, or\n" -+"(at your option) any later version.\n" -+"\n" -+"This program is distributed in the hope that it will be useful,\n" -+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -+"GNU General Public License for more details.\n" -+"\n" -+"You should have received a copy of the GNU General Public License\n" -+"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" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora மொழிபெயர்ப்பு குழு" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "அமர்வை மூட வேண்டுமா?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "மீண்டும் என்னிடம் கேட்க வேண்டாம்" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "காட்சி %d-க்கு காத்திருக்கிறது..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "விருந்தினர் %sக்கான தெரியாத வரைகலை வகை" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh-உடன் இணைக்க முடியவில்லை." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "சேனலுடன் இணைக்க வேண்டாம், SSH மட்டும் துணைபுரிகிறது." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "சேனலுடன் இணைப்பு துணைபுரியவில்லை." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "வரைகலை சேவையகத்துடன் இணைக்கிறது" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "விருந்தினர் டொமைன் நிறுத்தப்பட்டது" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "வரைகலை சேவையகத்துடன் இணைக்கப்பட்டது" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "வரைகலை சேவையகம் %s-க்கு இணைக்க முடியவில்லை" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "தொலை பணிமேடை சேவையகம் %s-இலில் அங்கீகரிக்க முடியவில்லை: %s\nஇணைப்பை மீண்டும் முயற்சிக்கவும்?" -+msgstr "" -+"தொலை பணிமேடை சேவையகம் %s-இலில் அங்கீகரிக்க முடியவில்லை: %s\n" -+"இணைப்பை மீண்டும் முயற்சிக்கவும்?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "தொலை பணிமேடை சேவையகத்துடன் அங்கீகரிக்க முடியவில்லை: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB மறுதிசையிடல் பிழை: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "%d ஐக் காண்பி" -@@ -324,7 +359,6 @@ msgstr "%d ஐக் காண்பி" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "அங்கீகாரம் தேவை" -@@ -373,7 +407,9 @@ msgstr "Virt Viewer" - #: ../src/virt-viewer-main.c:94 - #, c-format - msgid "Run '%s --help' to see a full list of available command line options" --msgstr "கிடைக்கும் கட்டளை வரி விருப்பங்களின் முழு பட்டியலைக் காண '%s --help' கட்டளையை இயக்கவும்" -+msgstr "" -+"கிடைக்கும் கட்டளை வரி விருப்பங்களின் முழு பட்டியலைக் காண '%s --help' " -+"கட்டளையை இயக்கவும்" - - #. Setup command line options - #: ../src/virt-viewer-main.c:99 -@@ -382,16 +418,19 @@ msgstr "- உள்ளமை கணினி வரைகலை பணியக - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nபயன்பாடு: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"பயன்பாடு: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "மறுதிசையிட USB சாதனங்களை தேர்ந்தெடுக்கவும்" - -@@ -400,167 +439,167 @@ msgstr "மறுதிசையிட USB சாதனங்களை தேர - msgid "Unsupported authentication type %d" - msgstr "துணைபுரியாத அங்கீகார வகை %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "திரைப்பிடிப்பு" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "துண்டி" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB சாதன தேர்வு" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "விசைச் சேர்க்கையை அனுப்பு" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "முழுத்திரையை விட்டுவிலகு" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(சுட்டியை விடுவிக்க %s ஐ அழுத்தவும்)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "இந்த இணைப்பை அமைக்க குறைந்தது %s பதிப்பு %s தேவை" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "மறுதுவக்க விருந்தினர் டொமைனுக்காக காத்திருக்கிறது" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "விருந்தினர் %s-க்கு வரைகலை வகையை வரையறுக்க முடியாது" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "விருந்தினர் %s-க்கு வரைகலை முகவரியை வரையறுக்க முடியாது" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "விருந்தினர் %s-க்கு புரவலனை வரையறுக்க முடியாது" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "libvirt தொடங்கக் காத்திருக்கிறது" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "விருந்தினர் டொமைனை தேடுகிறது" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "விருந்தினர் டொமைன் உருவாக்க காத்திருக்கிறது" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "விருந்தினர் டொமைன் %sஐ தேட முடியவில்லை" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "விருந்தினர் நிலையை சரிபார்க்கிறது" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "துவக்க விருந்தினர் டொமைனுக்காக காத்திருக்கிறது" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "சேவையகத்தை துவக்க விருந்தினர் டொமைனுக்காக காத்திருக்கிறது" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "libvirt ஐ URI %s உடன் இணைக்க முடியவில்லை" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[ஒன்றுமில்லாத]" - -@@ -569,7 +608,6 @@ msgstr "[ஒன்றுமில்லாத]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "கோப்பு (_F)" -@@ -610,10 +648,6 @@ msgstr "கர்சரை விடு" - msgid "_Send key" - msgstr "விசையை அனுப்பு (_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "திரைஅச்சு (_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "உதவி (_H)" -diff --git a/po/te.po b/po/te.po -index b829411..a29b19a 100644 ---- a/po/te.po -+++ b/po/te.po -@@ -10,16 +10,19 @@ msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-30 16:16+0000\n" -+"PO-Revision-Date: 2013-04-30 12:16-0400\n" - "Last-Translator: sudheesh001 <sudheesh1995@outlook.com>\n" --"Language-Team: Telugu (http://www.transifex.com/projects/p/fedora/language/te/)\n" -+"Language-Team: Telugu (http://www.transifex.com/projects/p/fedora/language/" -+"te/)\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Language: te\n" - "Plural-Forms: nplurals=2; plural=(n != 1);\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "దూరస్థ దర్శని" - -@@ -81,11 +84,13 @@ msgstr "రిమోట్-వ్యూయర్ వర్షన్ %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "చెల్లని నిండు-తెర ఆర్గుమెంట్: %s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "వర్షన్ సమాచారం ప్రదర్శించు" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "వెర్బోస్ సమాచారమును ప్రదర్శించుము" - -@@ -93,15 +98,18 @@ msgstr "వెర్బోస్ సమాచారమును ప్రదర - msgid "Set window title" - msgstr "విండోలో శీర్షిక సెట్ చెయ్యండి" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "ఎటువంటి స్వయంచాలక టన్నెల్సు లేకుండా నేరుగా అనుసంధానము" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "విండో యొక్క జూమ్ స్థాయి, శాతంలో" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "డీబగ్గింగ్ సమాచారమును ప్రదర్శించుము" - -@@ -109,7 +117,9 @@ msgstr "డీబగ్గింగ్ సమాచారమును ప్ర - msgid "" - "Open in full screen mode (auto-conf adjusts guest resolution to fit the " - "client's)." --msgstr "నిండుతెర రీతినందు తెరువుము (auto-conf అనునది అతిథి రిజొల్యూషన్‌ను క్లైంట్‌కు తగ్గట్లు సర్దుబాటు చేయును)" -+msgstr "" -+"నిండుతెర రీతినందు తెరువుము (auto-conf అనునది అతిథి రిజొల్యూషన్‌ను క్లైంట్‌కు " -+"తగ్గట్లు సర్దుబాటు చేయును)" - - #: ../src/remote-viewer-main.c:135 - msgid "<auto-conf>" -@@ -119,7 +129,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "స్పైస్ కంట్రోలర్ కమ్యునికేషన్ వుపయోగించి అనుసంధానం తెరువుము" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "అనుకూలీకరించి హాట్కీస్" - -@@ -133,7 +144,9 @@ msgstr "- దూరస్థ దర్శని క్లైంట్" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\nఅందుబాటులోని కమాండ్ లైన్ ఐచ్చికాల జాబితా కొరకు '%s --help' నడుపుము\n" -+msgstr "" -+"%s\n" -+"అందుబాటులోని కమాండ్ లైన్ ఐచ్చికాల జాబితా కొరకు '%s --help' నడుపుము\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -145,12 +158,14 @@ msgstr "దోషం: స్పైస్ నియంత్రణి వుప - msgid "Error: can't handle multiple URIs\n" - msgstr "దోషం: బహుళ URIలను సంభాలించలేదు\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "జూమ్ స్థాయి తప్పకుండా 10-200 మద్య వుండాలి\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "అనుసంధానం సిద్దపరచుటకు విఫలమైంది" - -@@ -207,7 +222,6 @@ msgstr "ఈ రకము కొరకు సెషన్ సృష్టిం - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "గ్లేడ్ గురించి" -@@ -216,11 +230,15 @@ msgstr "గ్లేడ్ గురించి" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.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/virt-viewer-about.xml.h:5 - msgid "virt-manager.org" -@@ -241,77 +259,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "ఈ ప్రోగ్రామ్ ఉచిత సాఫ్టువేర్; ఉచిత సాఫ్టువేర్ సంస్థ తరుపున ప్రచురితమైన\nGNU జనరల్ పబ్లిక్ లైసెన్సు కు లోబడి దీనిని మీరు పునఃపంపిణి మరియు/లేదా\nసవరణ చేయవచ్చు; మీరు అనుసరించవలిసినది లైసెన్సు యొక్క వర్షన్ 2, లేదా\n(మీ ఐచ్చికం వద్ద) దాని తరువాతి వర్షన్ కాని.\n\nపవర్ నిర్వాహకి అది ఉపయోగపడుతుందనే నమ్మకం తో పంపిణీ చేయబడింది,\nఅయితే ఏ హామి లేదు; వ్యాపారసంబంధితంగా కాని లేదా ప్రతిపాదిత ప్రయోజనం కొరకు\nకాని హామీ లేదు. అధికవివరములకొరకు GNU జనరల్ పబ్లిక్ లైసెన్సు ను\nచూడండి.\n\nఈ ప్రోగ్రామ్ తో మీరు GNU జనరల్ పబ్లిక్ లైసెన్సు నకలు ను పొంది ఉంటారు;\nపొందకపోతే, Free Software Foundation, Inc., Temple Place,\nSuite 330, Boston, MA 02111-1307 USAకు వ్రాయండి.\n" -+msgstr "" -+"ఈ ప్రోగ్రామ్ ఉచిత సాఫ్టువేర్; ఉచిత సాఫ్టువేర్ సంస్థ తరుపున ప్రచురితమైన\n" -+"GNU జనరల్ పబ్లిక్ లైసెన్సు కు లోబడి దీనిని మీరు పునఃపంపిణి మరియు/లేదా\n" -+"సవరణ చేయవచ్చు; మీరు అనుసరించవలిసినది లైసెన్సు యొక్క వర్షన్ 2, లేదా\n" -+"(మీ ఐచ్చికం వద్ద) దాని తరువాతి వర్షన్ కాని.\n" -+"\n" -+"పవర్ నిర్వాహకి అది ఉపయోగపడుతుందనే నమ్మకం తో పంపిణీ చేయబడింది,\n" -+"అయితే ఏ హామి లేదు; వ్యాపారసంబంధితంగా కాని లేదా ప్రతిపాదిత ప్రయోజనం కొరకు\n" -+"కాని హామీ లేదు. అధికవివరములకొరకు GNU జనరల్ పబ్లిక్ లైసెన్సు ను\n" -+"చూడండి.\n" -+"\n" -+"ఈ ప్రోగ్రామ్ తో మీరు GNU జనరల్ పబ్లిక్ లైసెన్సు నకలు ను పొంది ఉంటారు;\n" -+"పొందకపోతే, Free Software Foundation, Inc., Temple Place,\n" -+"Suite 330, Boston, MA 02111-1307 USAకు వ్రాయండి.\n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora అనువాద సమూహం" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "సెషన్ మూసివేయాలనుకుంటున్నారా ?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "నన్ను మళ్ళీ అడగవద్దు" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "ప్రదర్శన %d కొరకు వేచివుంది..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "అతిథి %s కొరకు తెలియని గ్రాఫిక్ రకం" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "ssh క్షేత్రముకు అనుసంధానించు." - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "చానల్‌కు అనుసంధానం కాలేదు, SSH కు మాత్రమే తోడ్పాటు నిస్తోంది." - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "చానల్ అనుసంధానంకు తోడ్పాటులేదు." - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "గ్రాఫిక్ సేవికకు అనుసంధానమౌతోంది" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "అతిథి డొమైన్ మూసివేసింది" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "గ్రాఫిక్ సేవికకు అనుసంధానమైంది" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "గ్రాఫిక్ సేవిక %sకు అనుసంధానం కాలేక పోయింది" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "%s వద్ద రిమోట్ డెస్కుటాప్ సేవికతో ధృవీకరించలేక పోయింది: %s\nఅనుసంధానముకు మరలా ప్రయత్నించాలా?" -+msgstr "" -+"%s వద్ద రిమోట్ డెస్కుటాప్ సేవికతో ధృవీకరించలేక పోయింది: %s\n" -+"అనుసంధానముకు మరలా ప్రయత్నించాలా?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "రిమోట్ డెస్కుటాప్ సేవికతో ధృవీకరించలేక పోయింది: %s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB రీడైరెక్షన్ దోషం: %s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "%d ప్రదర్శించు" -@@ -321,7 +354,6 @@ msgstr "%d ప్రదర్శించు" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "ధృవీకరణము అవసరమైంది" -@@ -379,16 +411,19 @@ msgstr "- వర్చ్యువల్ మిషన్ గ్రాఫిక - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\nవినియోగము: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"వినియోగము: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "రీడైరెక్షన్ కొరకు USB పరికరాలను యెంపికచేయి" - -@@ -397,167 +432,167 @@ msgstr "రీడైరెక్షన్ కొరకు USB పరికరా - msgid "Unsupported authentication type %d" - msgstr "మద్దతీయని దృవీకరణ రకము %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "స్క్రీన్‌షాట్" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "అననుసంధానించు" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB పరికర యెంపిక" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "కీ జోడీను పంపు" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "నిండుతెర విడు" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(సూచీను విడుదల చేయుటకు %s వత్తండి)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" - msgstr "కనీసం% s వెర్షన్% s వద్ద ఈ కనెక్షన్ని సెటప్ చెయ్యడానికి అవసరం" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "అతిథి డొమైన్ పునఃప్రారంభం కొరకు వేచివుంది" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "అతిథి %s కొరకు గ్రాఫిక్ రకంను నిర్థారించలేక పోయింది" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "అతిథి %s కొరకు గ్రాఫిక్ చిరునామా నిర్ధారించలేదు" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "అతిథి %s కొరకు అతిథేయను నిర్ధారించలేదు" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "libvirt ప్రారంభించడానికి కోసం వేచి ఉన్నారు" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "అతిథి డొమైన్‌ కనుగొనుచున్నది" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "అతిథి డొమైన్ సృష్టించబడుటకు వేచివుంది" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "అతిథి డొమైన్‌ %sను కనుగొనలేక పోయింది" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "అతిథి డొమైన్‌ స్థితి పరిశీలిస్తోంది" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "అతిథి డొమైన్ ప్రారంభమగుటకు వేచివుంది" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "అతిథి డొమైన్ సేవికను ప్రారంభించుట కొరకు వేచివుంది" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "URI %sతో libvirtకు అనుసంధానం కాలేదు" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[ఏదీకాదు]" - -@@ -566,7 +601,6 @@ msgstr "[ఏదీకాదు]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "ఫైలు (_F)" -@@ -607,10 +641,6 @@ msgstr "సూచీ విడుదలచేయి" - msgid "_Send key" - msgstr "పంపు కీ(_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "ప్రింట్‌స్క్రీన్ (_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "సహాయము(_H)" -diff --git a/po/zh_CN.po b/po/zh_CN.po -index e24a5f9..01d72cf 100644 ---- a/po/zh_CN.po -+++ b/po/zh_CN.po -@@ -8,21 +8,24 @@ - # Leah Liu <lliu@redhat.com>, 2010 - # Tommy He <lovenemesis@gmail.com>, 2013 - # Wei Liu <LLIU@REDHAT.COM>, 2012-2013 -+# Leah Liu <lliu@redhat.com>, 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-29 17:06+0000\n" --"Last-Translator: Daniel Berrange <dan-transifex@berrange.com>\n" -+"PO-Revision-Date: 2013-09-25 06:19-0400\n" -+"Last-Translator: Leah Liu <lliu@redhat.com>\n" - "Language-Team: Chinese (China) <trans-zh_cn@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"Language: zh_CN\n" -+"Language: zh-CN\n" - "Plural-Forms: nplurals=1; plural=0;\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "远程查看程序" - -@@ -84,11 +87,13 @@ msgstr "remote-viewer 版本 %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "无效的全屏参数:%s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "显示版本信息" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "显示详细信息" - -@@ -96,15 +101,18 @@ msgstr "显示详细信息" - msgid "Set window title" - msgstr "设置窗口标题" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "无自动通道的直接连接" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "窗口缩放级别,以百分比计" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "显示调试信息" - -@@ -122,7 +130,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "使用 Spice 控制器沟通打开连接" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "自定义快捷键" - -@@ -136,7 +145,8 @@ msgstr "远程 viewer 客户端" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\n运行 '%s --help' 来查看可用命令行选项的完整列表\n" -+msgstr "%s\n" -+"运行 '%s --help' 来查看可用命令行选项的完整列表\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -148,12 +158,14 @@ msgstr "错误:使用 Spice 控制器时给出额外参数\n" - msgid "Error: can't handle multiple URIs\n" - msgstr "错误:无法控制多个 URI\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "缩放等级必须在 10-200 之间\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "初始化连接失败" - -@@ -198,7 +210,7 @@ msgstr "无法确定 URI 的连接类型" - - #: ../src/remote-viewer.c:1001 - msgid "Couldn't open oVirt session" --msgstr "" -+msgstr "无法打开 oVirt 会话" - - #: ../src/remote-viewer.c:1008 - #, c-format -@@ -210,7 +222,6 @@ msgstr "无法为此类型生成会话:%s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "关于 Glade" -@@ -219,7 +230,9 @@ msgstr "关于 Glade" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "版权所有 (C) 2007-2012 Daniel P. Berrange\n版权所有 (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"版权所有 (C) 2007-2012 Daniel P. Berrange\n" -+"版权所有 (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" -@@ -244,77 +257,88 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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\n发布本程序是希望它\n对您有帮助,但不做任何保证,\n也不保证可用于商业或适合特定目的。\n详情请查看 GNU 通用公共许可证。\n\n本程序附带 GNU 通用公共许可证;\n如果没有,请致电自由软件基金\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA⏎ \n" -+msgstr "" -+"本程序是免费软件,您可以根据自由软件基金发布的 GNU 通用公共许可证版本 2 或(您认为合适的)之后的版本重新发布和(/或)修改这个软件。\n" -+"\n" -+"发布本程序是希望它\n" -+"对您有帮助,但不做任何保证,\n" -+"也不保证可用于商业或适合特定目的。\n" -+"详情请查看 GNU 通用公共许可证。\n" -+"\n" -+"本程序附带 GNU 通用公共许可证;\n" -+"如果没有,请致电自由软件基金\n" -+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA⏎ \n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora 翻译团队" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "您要关闭这个会话吗?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "不要再问我" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "等待画面 %d......" - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "虚拟机 %s 的未知图形类型" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "连接到 ssh 失败" - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "无法连接到通道,只支持 SSH。" - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "无法连接到不支持的通道。" - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "正在连接到图形服务器" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "已关闭虚拟机域" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "已连接到图形服务器" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "无法连接到图形服务器 %s" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "无法使用 %s 中的远程桌面服务器验证:%s\n重新尝试连接?" -+msgstr "无法使用 %s 中的远程桌面服务器验证:%s\n" -+"重新尝试连接?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "无法使用远程桌面服务器验证:%s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB 重新定向错误:%s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "显示 %d" -@@ -324,7 +348,6 @@ msgstr "显示 %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "所需验证" -@@ -382,16 +405,19 @@ msgstr "- 虚拟机图形控制台" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\n用法:%s [选项] 域名|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"用法:%s [选项] 域名|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "为重新定向选择 USB 设备" - -@@ -400,167 +426,167 @@ msgstr "为重新定向选择 USB 设备" - msgid "Unsupported authentication type %d" - msgstr "不支持的验证类型 %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "截屏" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "断开连接" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB 设备选择" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "发送按键组合" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "离开全屏" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(按 %s 释放光标)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" --msgstr "" -+msgstr "设置这个连接至少需要 %s 版本 %s" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "等待虚拟机域重启" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "无法确定虚拟机 %s 的图形类型" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "无法确定虚拟机 %s 的图形地址" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "无法确定虚拟机 %s 的主机" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "等待 libvirt 启动" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "正在查找虚拟机域" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "正在等待生成虚拟机域" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "无法找到客户端域 %s" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "正在检查虚拟机域状态" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "正在等待虚拟机域启动" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "正在等待虚拟机域启动服务器" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "无法使用 URI %s 连接到 libvirt" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[无]" - -@@ -569,7 +595,6 @@ msgstr "[无]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "文件(_F)" -@@ -610,10 +635,6 @@ msgstr "释放光标" - msgid "_Send key" - msgstr "发送按键(_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "打印屏幕(_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "帮助(_H)" -diff --git a/po/zh_TW.po b/po/zh_TW.po -index 8a3b131..303b64a 100644 ---- a/po/zh_TW.po -+++ b/po/zh_TW.po -@@ -8,21 +8,24 @@ - # Terry Chuang <tchuang at redhat>, 2010 - # Terry Chuang <tchuang@redhat.com>, 2012-2013 - # Walter Cheuk <wwycheuk@gmail.com>, 2012 -+# ccheng <ccheng@redhat.com>, 2013. #zanata - msgid "" - msgstr "" - "Project-Id-Version: virt-viewer\n" - "Report-Msgid-Bugs-To: \n" - "POT-Creation-Date: 2013-07-09 21:09+0100\n" --"PO-Revision-Date: 2013-04-29 17:06+0000\n" --"Last-Translator: Daniel Berrange <dan-transifex@berrange.com>\n" -+"PO-Revision-Date: 2013-09-30 09:24-0400\n" -+"Last-Translator: ccheng <ccheng@redhat.com>\n" - "Language-Team: Chinese (Taiwan) <trans-zh_TW@lists.fedoraproject.org>\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"Language: zh_TW\n" -+"Language: zh-TW\n" - "Plural-Forms: nplurals=1; plural=0;\n" -+"X-Generator: Zanata 3.1.2\n" - --#: ../data/remote-viewer.desktop.in.h:1 ../src/remote-viewer-main.c:147 -+#: ../data/remote-viewer.desktop.in.h:1 -+#: ../src/remote-viewer-main.c:147 - msgid "Remote Viewer" - msgstr "遠端檢視器" - -@@ -84,11 +87,13 @@ msgstr "remote-viewer 版本 %s\n" - msgid "Invalid full-screen argument: %s" - msgstr "無效的全螢幕引數:%s" - --#: ../src/remote-viewer-main.c:123 ../src/virt-viewer-main.c:65 -+#: ../src/remote-viewer-main.c:123 -+#: ../src/virt-viewer-main.c:65 - msgid "Display version information" - msgstr "顯示版本資訊" - --#: ../src/remote-viewer-main.c:125 ../src/virt-viewer-main.c:67 -+#: ../src/remote-viewer-main.c:125 -+#: ../src/virt-viewer-main.c:67 - msgid "Display verbose information" - msgstr "顯示詳細資訊" - -@@ -96,15 +101,18 @@ msgstr "顯示詳細資訊" - msgid "Set window title" - msgstr "設定視窗標題" - --#: ../src/remote-viewer-main.c:129 ../src/virt-viewer-main.c:69 -+#: ../src/remote-viewer-main.c:129 -+#: ../src/virt-viewer-main.c:69 - msgid "Direct connection with no automatic tunnels" - msgstr "無自動穿隧的直接連線" - --#: ../src/remote-viewer-main.c:131 ../src/virt-viewer-main.c:79 -+#: ../src/remote-viewer-main.c:131 -+#: ../src/virt-viewer-main.c:79 - msgid "Zoom level of window, in percentage" - msgstr "視窗放大等級,單位為百分比" - --#: ../src/remote-viewer-main.c:133 ../src/virt-viewer-main.c:81 -+#: ../src/remote-viewer-main.c:133 -+#: ../src/virt-viewer-main.c:81 - msgid "Display debugging information" - msgstr "顯示除錯資訊" - -@@ -122,7 +130,8 @@ msgstr "<auto-conf>" - msgid "Open connection using Spice controller communication" - msgstr "透過 Spice 控制器通訊來開啟連線" - --#: ../src/remote-viewer-main.c:141 ../src/virt-viewer-main.c:85 -+#: ../src/remote-viewer-main.c:141 -+#: ../src/virt-viewer-main.c:85 - msgid "Customise hotkeys" - msgstr "自訂快速鍵" - -@@ -136,7 +145,8 @@ msgstr "- 遠端檢視器客戶端" - msgid "" - "%s\n" - "Run '%s --help' to see a full list of available command line options\n" --msgstr "%s\n請執行「%s --help」以檢視可用指令選項的完整清單\n" -+msgstr "%s\n" -+"請執行「%s --help」以檢視可用指令選項的完整清單\n" - - #: ../src/remote-viewer-main.c:175 - #, c-format -@@ -148,12 +158,14 @@ msgstr "錯誤:額使用 Spice 控制器時給定額外引數\n" - msgid "Error: can't handle multiple URIs\n" - msgstr "錯誤:無法處理 URI\n" - --#: ../src/remote-viewer-main.c:190 ../src/virt-viewer-main.c:124 -+#: ../src/remote-viewer-main.c:190 -+#: ../src/virt-viewer-main.c:124 - #, c-format - msgid "Zoom level must be within 10-200\n" - msgstr "放大等級必須介於 10-200 之間\n" - --#: ../src/remote-viewer.c:281 ../src/remote-viewer.c:1017 -+#: ../src/remote-viewer.c:281 -+#: ../src/remote-viewer.c:1017 - msgid "Failed to initiate connection" - msgstr "初始化連線失敗" - -@@ -198,7 +210,7 @@ msgstr "無法從 URI 判斷連線類型" - - #: ../src/remote-viewer.c:1001 - msgid "Couldn't open oVirt session" --msgstr "" -+msgstr "無法開啟 oVirt session" - - #: ../src/remote-viewer.c:1008 - #, c-format -@@ -210,7 +222,6 @@ msgstr "無法為此類型建立作業階段:%s" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-about.xml.h:1 - msgid "About Glade" - msgstr "關於 Glade" -@@ -219,7 +230,9 @@ msgstr "關於 Glade" - msgid "" - "Copyright (C) 2007-2012 Daniel P. Berrange\n" - "Copyright (C) 2007-2012 Red Hat, Inc." --msgstr "Copyright (C) 2007-2012 Daniel P. Berrange\nCopyright (C) 2007-2012 Red Hat, Inc." -+msgstr "" -+"Copyright (C) 2007-2012 Daniel P. Berrange\n" -+"Copyright (C) 2007-2012 Red Hat, Inc." - - #: ../src/virt-viewer-about.xml.h:4 - msgid "A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt" -@@ -244,77 +257,92 @@ msgid "" - "You should have received a copy of the GNU General Public License\n" - "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 "此程式為自由軟體;您可將它重新發佈與/或對它進行修改,\n您必須同意自由軟體基金會 (Free Software Foundation) 的 GNU 通用\n公共許可證 (GNU General Public License) 的授權條款;許可證\n版本 2 或任何更新的版本。\n\n此程式乃為了方便社群使用,不過\n卻不含任何使用上的保証;甚至沒有任何適銷性上\n以及特定使用對象的保証。 欲取得更多詳細\n資訊,請參閱 GNU 通用公共許可證。\n\n當您取得此程式時,您應同時取得了\n一份 GNU 通用公共許可證。若沒有的話,請聯絡自由軟體\n基金會(Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" -+msgstr "" -+"此程式為自由軟體;您可將它重新發佈與/或對它進行修改,\n" -+"您必須同意自由軟體基金會 (Free Software Foundation) 的 GNU 通用\n" -+"公共許可證 (GNU General Public License) 的授權條款;許可證\n" -+"版本 2 或任何更新的版本。\n" -+"\n" -+"此程式乃為了方便社群使用,不過\n" -+"卻不含任何使用上的保証;甚至沒有任何適銷性上\n" -+"以及特定使用對象的保証。 欲取得更多詳細\n" -+"資訊,請參閱 GNU 通用公共許可證。\n" -+"\n" -+"當您取得此程式時,您應同時取得了\n" -+"一份 GNU 通用公共許可證。若沒有的話,請聯絡自由軟體\n" -+"基金會(Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA " -+"02111-1307 USA\n" - - #: ../src/virt-viewer-about.xml.h:20 - msgid "The Fedora Translation Team" - msgstr "Fedora 翻譯團隊" - --#: ../src/virt-viewer-app.c:279 -+#: ../src/virt-viewer-app.c:285 - msgid "Do you want to close the session?" - msgstr "您是否希望關閉本作業階段?" - --#: ../src/virt-viewer-app.c:281 -+#: ../src/virt-viewer-app.c:287 - msgid "Do not ask me again" - msgstr "不再詢問我" - --#: ../src/virt-viewer-app.c:695 -+#: ../src/virt-viewer-app.c:706 - #, c-format - msgid "Waiting for display %d..." - msgstr "正在等候顯示器 %d..." - --#: ../src/virt-viewer-app.c:787 -+#: ../src/virt-viewer-app.c:805 - #, c-format - msgid "Unknown graphic type for the guest %s" - msgstr "客端 %s 的圖形類型不明" - --#: ../src/virt-viewer-app.c:866 -+#: ../src/virt-viewer-app.c:886 - msgid "Connect to ssh failed." - msgstr "連至 ssh 的連線失敗。" - --#: ../src/virt-viewer-app.c:868 -+#: ../src/virt-viewer-app.c:888 - msgid "Can't connect to channel, SSH only supported." - msgstr "無法連至頻道,僅支援 SSH。" - --#: ../src/virt-viewer-app.c:880 -+#: ../src/virt-viewer-app.c:900 - msgid "Connect to channel unsupported." - msgstr "不支援頻道的連接。" - --#: ../src/virt-viewer-app.c:962 -+#: ../src/virt-viewer-app.c:982 - msgid "Connecting to graphic server" - msgstr "正在連接圖形化伺服器" - --#: ../src/virt-viewer-app.c:1095 -+#: ../src/virt-viewer-app.c:1115 - msgid "Guest domain has shutdown" - msgstr "客端網域已關閉" - --#: ../src/virt-viewer-app.c:1150 -+#: ../src/virt-viewer-app.c:1170 - msgid "Connected to graphic server" - msgstr "已連上圖形化伺服器" - --#: ../src/virt-viewer-app.c:1174 -+#: ../src/virt-viewer-app.c:1194 - #, c-format - msgid "Unable to connect to the graphic server %s" - msgstr "無法連接圖形化伺服器 %s" - --#: ../src/virt-viewer-app.c:1203 -+#: ../src/virt-viewer-app.c:1223 - #, c-format - msgid "" - "Unable to authenticate with remote desktop server at %s: %s\n" - "Retry connection again?" --msgstr "無法在位於 %s 的遠端桌面伺服器上驗證:%s\n重新嘗試連線?" -+msgstr "無法在位於 %s 的遠端桌面伺服器上驗證:%s\n" -+"重新嘗試連線?" - --#: ../src/virt-viewer-app.c:1223 -+#: ../src/virt-viewer-app.c:1243 - #, c-format - msgid "Unable to authenticate with remote desktop server: %s" - msgstr "無法在遠端桌面伺服器驗證:%s" - --#: ../src/virt-viewer-app.c:1231 -+#: ../src/virt-viewer-app.c:1251 - #, c-format - msgid "USB redirection error: %s" - msgstr "USB 重新導引錯誤:%s" - --#: ../src/virt-viewer-app.c:1817 -+#: ../src/virt-viewer-app.c:1891 - #, c-format - msgid "Display %d" - msgstr "顯示 %d" -@@ -324,7 +352,6 @@ msgstr "顯示 %d" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer-auth.xml.h:1 - msgid "Authentication required" - msgstr "須要通過驗證" -@@ -382,16 +409,19 @@ msgstr "- 虛擬機圖形化主控臺" - - #: ../src/virt-viewer-main.c:119 - #, c-format --msgid "" --"\n" -+msgid "\n" - "Usage: %s [OPTIONS] DOMAIN-NAME|ID|UUID\n" - "\n" - "%s\n" - "\n" --msgstr "\n用法:%s [OPTIONS] DOMAIN-NAME|ID|UUID\n\n%s\n\n" -+msgstr "\n" -+"用法:%s [OPTIONS] DOMAIN-NAME|ID|UUID\n" -+"\n" -+"%s\n" -+"\n" - - #. Create the widgets --#: ../src/virt-viewer-session-spice.c:479 -+#: ../src/virt-viewer-session-spice.c:542 - msgid "Select USB devices for redirection" - msgstr "選擇欲重新導引的 USB 裝置" - -@@ -400,167 +430,167 @@ msgstr "選擇欲重新導引的 USB 裝置" - msgid "Unsupported authentication type %d" - msgstr "不支援的認證類型 %d" - --#: ../src/virt-viewer-window.c:551 ../src/virt-viewer.xml.h:13 -+#: ../src/virt-viewer-window.c:567 - msgid "Ctrl+Alt+_Del" - msgstr "Ctrl+Alt+_Del" - --#: ../src/virt-viewer-window.c:552 ../src/virt-viewer.xml.h:14 -+#: ../src/virt-viewer-window.c:568 - msgid "Ctrl+Alt+_Backspace" - msgstr "Ctrl+Alt+_Backspace" - --#: ../src/virt-viewer-window.c:554 ../src/virt-viewer.xml.h:15 -+#: ../src/virt-viewer-window.c:570 - msgid "Ctrl+Alt+F_1" - msgstr "Ctrl+Alt+F_1" - --#: ../src/virt-viewer-window.c:555 ../src/virt-viewer.xml.h:16 -+#: ../src/virt-viewer-window.c:571 - msgid "Ctrl+Alt+F_2" - msgstr "Ctrl+Alt+F_2" - --#: ../src/virt-viewer-window.c:556 ../src/virt-viewer.xml.h:17 -+#: ../src/virt-viewer-window.c:572 - msgid "Ctrl+Alt+F_3" - msgstr "Ctrl+Alt+F_3" - --#: ../src/virt-viewer-window.c:557 ../src/virt-viewer.xml.h:18 -+#: ../src/virt-viewer-window.c:573 - msgid "Ctrl+Alt+F_4" - msgstr "Ctrl+Alt+F_4" - --#: ../src/virt-viewer-window.c:558 ../src/virt-viewer.xml.h:19 -+#: ../src/virt-viewer-window.c:574 - msgid "Ctrl+Alt+F_5" - msgstr "Ctrl+Alt+F_5" - --#: ../src/virt-viewer-window.c:559 ../src/virt-viewer.xml.h:20 -+#: ../src/virt-viewer-window.c:575 - msgid "Ctrl+Alt+F_6" - msgstr "Ctrl+Alt+F_6" - --#: ../src/virt-viewer-window.c:560 ../src/virt-viewer.xml.h:21 -+#: ../src/virt-viewer-window.c:576 - msgid "Ctrl+Alt+F_7" - msgstr "Ctrl+Alt+F_7" - --#: ../src/virt-viewer-window.c:561 ../src/virt-viewer.xml.h:22 -+#: ../src/virt-viewer-window.c:577 - msgid "Ctrl+Alt+F_8" - msgstr "Ctrl+Alt+F_8" - --#: ../src/virt-viewer-window.c:562 ../src/virt-viewer.xml.h:23 -+#: ../src/virt-viewer-window.c:578 - msgid "Ctrl+Alt+F_9" - msgstr "Ctrl+Alt+F_9" - --#: ../src/virt-viewer-window.c:563 ../src/virt-viewer.xml.h:24 -+#: ../src/virt-viewer-window.c:579 - msgid "Ctrl+Alt+F1_0" - msgstr "Ctrl+Alt+F1_0" - --#: ../src/virt-viewer-window.c:564 ../src/virt-viewer.xml.h:25 -+#: ../src/virt-viewer-window.c:580 - msgid "Ctrl+Alt+F11" - msgstr "Ctrl+Alt+F11" - --#: ../src/virt-viewer-window.c:565 ../src/virt-viewer.xml.h:26 -+#: ../src/virt-viewer-window.c:581 - msgid "Ctrl+Alt+F12" - msgstr "Ctrl+Alt+F12" - --#: ../src/virt-viewer-window.c:861 ../src/virt-viewer.xml.h:2 -+#: ../src/virt-viewer-window.c:964 -+#: ../src/virt-viewer.xml.h:2 - msgid "Screenshot" - msgstr "螢幕快照" - --#: ../src/virt-viewer-window.c:937 -+#: ../src/virt-viewer-window.c:1040 - msgid "Disconnect" - msgstr "中斷連接" - --#: ../src/virt-viewer-window.c:944 ../src/virt-viewer-window.c:945 -+#: ../src/virt-viewer-window.c:1047 -+#: ../src/virt-viewer-window.c:1048 - #: ../src/virt-viewer.xml.h:3 - msgid "USB device selection" - msgstr "USB 裝置選取" - --#: ../src/virt-viewer-window.c:953 -+#: ../src/virt-viewer-window.c:1056 - msgid "Send key combination" - msgstr "傳送按鍵組合" - --#: ../src/virt-viewer-window.c:962 ../src/virt-viewer-window.c:963 -+#: ../src/virt-viewer-window.c:1065 -+#: ../src/virt-viewer-window.c:1066 - msgid "Leave fullscreen" - msgstr "離開全螢幕" - --#: ../src/virt-viewer-window.c:1042 -+#: ../src/virt-viewer-window.c:1145 - msgid "Ctrl+Alt" - msgstr "Ctrl+Alt" - --#: ../src/virt-viewer-window.c:1045 -+#: ../src/virt-viewer-window.c:1148 - #, c-format - msgid "(Press %s to release pointer)" - msgstr "(按下 %s 以釋放游標)" - - #. translators: --#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - --#. <appname>" --#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt --#. Viewer" --#. --#: ../src/virt-viewer-window.c:1056 -+#. * This is "<ungrab (or empty)><space (or empty)><subtitle (or empty)> - <appname>" -+#. * Such as: "(Press Ctrl+Alt to release pointer) BigCorpTycoon MOTD - Virt Viewer" -+#: ../src/virt-viewer-window.c:1159 - #, c-format - msgid "%s%s%s - %s" - msgstr "%s%s%s - %s" - - #. translators: <space> --#: ../src/virt-viewer-window.c:1060 -+#: ../src/virt-viewer-window.c:1163 - msgid " " - msgstr " " - --#: ../src/virt-viewer-file.c:610 -+#: ../src/virt-viewer-file.c:611 - #, c-format - msgid "At least %s version %s is required to setup this connection" --msgstr "" -+msgstr "至少 %s 版本 %s 需要用於設定此連線" - --#: ../src/virt-viewer.c:144 -+#: ../src/virt-viewer.c:133 - msgid "Waiting for guest domain to re-start" - msgstr "正在等候客端網域重新啓用" - --#: ../src/virt-viewer.c:329 -+#: ../src/virt-viewer.c:318 - #, c-format - msgid "Cannot determine the graphic type for the guest %s" - msgstr "無法判斷客端 %s 的圖形化類型為何" - --#: ../src/virt-viewer.c:342 -+#: ../src/virt-viewer.c:341 - #, c-format - msgid "Cannot determine the graphic address for the guest %s" - msgstr "無法判斷客端 %s 的圖形化位址為何" - --#: ../src/virt-viewer.c:365 -+#: ../src/virt-viewer.c:354 - #, c-format - msgid "Cannot determine the host for the guest %s" - msgstr "無法判斷客端 %s 的主機為何" - --#: ../src/virt-viewer.c:531 -+#: ../src/virt-viewer.c:538 - msgid "Waiting for libvirt to start" - msgstr "等候 libvirt 啟動" - --#: ../src/virt-viewer.c:535 -+#: ../src/virt-viewer.c:542 - msgid "Finding guest domain" - msgstr "正在尋找客端網域" - --#: ../src/virt-viewer.c:539 -+#: ../src/virt-viewer.c:546 - msgid "Waiting for guest domain to be created" - msgstr "正在等候客端網域被建立" - --#: ../src/virt-viewer.c:544 -+#: ../src/virt-viewer.c:551 - #, c-format - msgid "Cannot find guest domain %s" - msgstr "找不到客端網域 %s" - --#: ../src/virt-viewer.c:551 -+#: ../src/virt-viewer.c:558 - msgid "Checking guest domain status" - msgstr "正在檢查客端網域狀態" - --#: ../src/virt-viewer.c:558 -+#: ../src/virt-viewer.c:565 - msgid "Waiting for guest domain to start" - msgstr "正在等候客端網域啟動" - --#: ../src/virt-viewer.c:565 -+#: ../src/virt-viewer.c:572 - msgid "Waiting for guest domain to start server" - msgstr "正在等候客端網域啟動伺服器" - --#: ../src/virt-viewer.c:679 -+#: ../src/virt-viewer.c:686 - #, c-format - msgid "Unable to connect to libvirt with URI %s" - msgstr "無法透過 %s URI 與 libvirt 連線" - --#: ../src/virt-viewer.c:680 -+#: ../src/virt-viewer.c:687 - msgid "[none]" - msgstr "[無]" - -@@ -569,7 +599,6 @@ msgstr "[無]" - #. * c-basic-offset: 4 - #. * indent-tabs-mode: nil - #. * End: --#. - #: ../src/virt-viewer.xml.h:1 - msgid "_File" - msgstr "檔案(_F)" -@@ -610,10 +639,6 @@ msgstr "釋放游標" - msgid "_Send key" - msgstr "傳送按鍵(_S)" - --#: ../src/virt-viewer.xml.h:27 --msgid "_PrintScreen" --msgstr "列印畫面(_P)" -- --#: ../src/virt-viewer.xml.h:28 -+#: ../src/virt-viewer.xml.h:13 - msgid "_Help" - msgstr "求助(_H)" diff --git a/SOURCES/0021-Fix-tiny-window-when-resetting-zoom-factor-in-gtk2-b.patch b/SOURCES/0021-Fix-tiny-window-when-resetting-zoom-factor-in-gtk2-b.patch new file mode 100644 index 0000000..2c09efd --- /dev/null +++ b/SOURCES/0021-Fix-tiny-window-when-resetting-zoom-factor-in-gtk2-b.patch @@ -0,0 +1,46 @@ +From fcf77734a86732417142e81140f681233a4ef0da Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Wed, 11 Jun 2014 13:09:30 -0500 +Subject: [PATCH] Fix tiny window when resetting zoom factor in gtk2 build + +rhbz#1104064 had a couple of symptoms. The first was fixed in +6edde57862ac30e74ce6412c93a2fa925ae4ea67. + +The second symptom is that displays could also become tiny when clicking 'View > +Zoom > Normal Size'. This was because VirtViewerDisplay returned early from +_display_set_zoom_level() if the zoom level was being set to the current zoom +setting. However, the calling function (_window_set_zoom_level()) also tries to +queue a resize event for itself after setting the zoom level on the display. If +the display doesn't queue a resize event for itself, its size request will only +be 50x50 during the window resize negotiation. This causes the display to become +tiny and zoomed out. Queueing a resize on the display widget ensures that it +will request the proper size during the next allocation. +--- + src/virt-viewer-display.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c +index 48b7090..52e6962 100644 +--- a/src/virt-viewer-display.c ++++ b/src/virt-viewer-display.c +@@ -605,12 +605,19 @@ void virt_viewer_display_set_zoom_level(VirtViewerDisplay *display, + if (zoom > MAX_ZOOM_LEVEL) + zoom = MAX_ZOOM_LEVEL; + ++ // For the gtk2 build, we need to queue a resize even if the zoom level ++ // hasn't changed. This is due to the fact that VirtViewerWindow will queue ++ // a resize event for itself immediately after calling this function (in ++ // order to shrink the window to fit the new display size if necessary). If ++ // we don't queue a resize here, the window will become tiny because we will ++ // only request 50x50 during the window resize ++ virt_viewer_display_queue_resize(display); ++ + if (priv->zoom_level == zoom) + return; + + priv->zoom_level = zoom; + +- virt_viewer_display_queue_resize(display); + g_object_notify(G_OBJECT(display), "zoom-level"); + } + diff --git a/SOURCES/0021-hotkeys-send-modifiers-before-non-modifier-key.patch b/SOURCES/0021-hotkeys-send-modifiers-before-non-modifier-key.patch deleted file mode 100644 index 8545492..0000000 --- a/SOURCES/0021-hotkeys-send-modifiers-before-non-modifier-key.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 0c7e70e4d9b57bcaa26922051d9fc49ebed20af8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Thu, 26 Sep 2013 16:29:51 +0200 -Subject: [PATCH] hotkeys: send modifiers before non-modifier key - -This fixes the "send menu" for hotkeys set with non-modifiers keys. The -current order of press events is wrong, as it sends first non-modifiers -keys, and in general ctrl+t will work, t+ctrl will not. - -https://bugzilla.redhat.com/show_bug.cgi?id=922716 -(cherry picked from commit b80e7f0f2d59dabc6d0e969e8d481e624fa8f67c) ---- - src/virt-viewer-window.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c -index abe3aa9..2a91fba 100644 ---- a/src/virt-viewer-window.c -+++ b/src/virt-viewer-window.c -@@ -629,12 +629,10 @@ accel_key_to_keys(const GtkAccelKey *key) - guint val; - GArray *a = g_array_new(FALSE, FALSE, sizeof(guint)); - -- val = key->accel_key; -- g_array_append_val(a, val); -- - g_warn_if_fail((key->accel_mods & - ~(GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)) == 0); - -+ /* first, send the modifiers */ - if (key->accel_mods & GDK_SHIFT_MASK) { - val = GDK_Shift_L; - g_array_append_val(a, val); -@@ -650,6 +648,10 @@ accel_key_to_keys(const GtkAccelKey *key) - g_array_append_val(a, val); - } - -+ /* only after, the non-modifier key (ctrl-t, not t-ctrl) */ -+ val = key->accel_key; -+ g_array_append_val(a, val); -+ - val = GDK_VoidSymbol; - g_array_append_val(a, val); - diff --git a/SOURCES/0022-Set-Spice-display-to-fullscreen-if-owning-window-is-.patch b/SOURCES/0022-Set-Spice-display-to-fullscreen-if-owning-window-is-.patch deleted file mode 100644 index 824b0ea..0000000 --- a/SOURCES/0022-Set-Spice-display-to-fullscreen-if-owning-window-is-.patch +++ /dev/null @@ -1,48 +0,0 @@ -From dbd70fcab24cdb32d3849349d133b9803511281a Mon Sep 17 00:00:00 2001 -From: Jonathon Jongsma <jjongsma@redhat.com> -Date: Fri, 18 Oct 2013 11:18:37 -0500 -Subject: [PATCH] Set Spice display to fullscreen if owning window is pending - fullscreen - -When you call virt_viewer_window_enter_fullscreen() on a hidden window, it -didn't actually change its fullscreen state. Instead, it sets up a map-event -handler to enter fullscreen after it is shown. When _set_display() is called on -a window that is pending fullscreen status, it initially sets the fullscreen -state of the display to FALSE, which can cause an unwanted resize to be sent -down to the guest. This patch changes the behavior to set its fullscreen state -to TRUE even before the window is shown. - -(cherry picked from commit 34bbb275a6d2e10d69fe5eb919d0351185c1b5f0) -https://bugzilla.redhat.com/show_bug.cgi?id=920988 ---- - src/virt-viewer-window.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c -index 2a91fba..2bb5986 100644 ---- a/src/virt-viewer-window.c -+++ b/src/virt-viewer-window.c -@@ -516,6 +516,7 @@ mapped(GtkWidget *widget, GdkEvent *event G_GNUC_UNUSED, - VirtViewerWindow *self) - { - g_signal_handlers_disconnect_by_func(widget, mapped, self); -+ self->priv->fullscreen = FALSE; - virt_viewer_window_enter_fullscreen(self, self->priv->fullscreen_monitor); - return FALSE; - } -@@ -531,14 +532,13 @@ virt_viewer_window_enter_fullscreen(VirtViewerWindow *self, gint monitor) - return; - - priv->fullscreen_monitor = monitor; -+ priv->fullscreen = TRUE; - - if (!gtk_widget_get_mapped(priv->window)) { - g_signal_connect(priv->window, "map-event", G_CALLBACK(mapped), self); - return; - } - -- priv->fullscreen = TRUE; -- - gtk_check_menu_item_set_active(check, TRUE); - gtk_widget_hide(menu); - gtk_widget_show(priv->toolbar); diff --git a/SOURCES/0022-window-take-zoom-level-into-account-for-display-limi.patch b/SOURCES/0022-window-take-zoom-level-into-account-for-display-limi.patch new file mode 100644 index 0000000..6841784 --- /dev/null +++ b/SOURCES/0022-window-take-zoom-level-into-account-for-display-limi.patch @@ -0,0 +1,50 @@ +From 32fb35b3c682b197238387fdd576dfb96571e6aa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com> +Date: Wed, 11 Jun 2014 20:56:39 +0300 +Subject: [PATCH] window: take zoom-level into account for display limits + +Fixes guest can not be resized to expected window size after zoom out. + +https://bugzilla.redhat.com/show_bug.cgi?id=1105528 +--- + src/virt-viewer-window.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 6f6f9a4..b44c5cb 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -405,8 +405,8 @@ virt_viewer_window_resize(VirtViewerWindow *self, gboolean keep_win_size) + int width, height; + double desktopAspect; + double screenAspect; +- guint desktopWidth; +- guint desktopHeight; ++ guint desktopWidth, display_width; ++ guint desktopHeight, display_height; + VirtViewerWindowPrivate *priv = self->priv; + + if (priv->fullscreen) +@@ -433,8 +433,11 @@ virt_viewer_window_resize(VirtViewerWindow *self, gboolean keep_win_size) + desktopAspect = (double)desktopWidth / (double)desktopHeight; + screenAspect = (double)fullscreen.width / (double)fullscreen.height; + +- if ((desktopWidth > fullscreen.width) || +- (desktopHeight > fullscreen.height)) { ++ display_width = desktopWidth * priv->zoomlevel / 100.0; ++ display_height = desktopHeight * priv->zoomlevel / 100.0; ++ ++ if ((display_width > fullscreen.width) || ++ (display_height > fullscreen.height)) { + /* Doesn't fit native res, so go as large as possible + maintaining aspect ratio */ + if (screenAspect > desktopAspect) { +@@ -444,6 +447,8 @@ virt_viewer_window_resize(VirtViewerWindow *self, gboolean keep_win_size) + width = fullscreen.width; + height = fullscreen.width / desktopAspect; + } ++ width *= 100.0 / priv->zoomlevel; ++ height *= 100.0 / priv->zoomlevel; + } else { + width = desktopWidth; + height = desktopHeight; diff --git a/SOURCES/0023-Clear-global-zoom-reset-hotkey-too.patch b/SOURCES/0023-Clear-global-zoom-reset-hotkey-too.patch deleted file mode 100644 index e4c4f20..0000000 --- a/SOURCES/0023-Clear-global-zoom-reset-hotkey-too.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 3eff00bdcb8d68bc7fb0e88fb0b66d864d0f4648 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> -Date: Tue, 7 Jan 2014 14:31:28 +0100 -Subject: [PATCH] Clear global zoom-reset hotkey too - -(cherry picked from commit 9e2d9ba8574cdf8983930f6e35a56b3f32082f40) - -Conflicts: - src/virt-viewer-app.c ---- - src/virt-viewer-app.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c -index dbd7101..2d061a4 100644 ---- a/src/virt-viewer-app.c -+++ b/src/virt-viewer-app.c -@@ -1780,6 +1780,7 @@ virt_viewer_app_set_hotkeys(VirtViewerApp *self, const gchar *hotkeys_str) - /* Disable default bindings and replace them with our own */ - gtk_accel_map_change_entry("<virt-viewer>/view/fullscreen", 0, 0, TRUE); - gtk_accel_map_change_entry("<virt-viewer>/view/release-cursor", 0, 0, TRUE); -+ gtk_accel_map_change_entry("<virt-viewer>/view/zoom-reset", 0, 0, TRUE); - virt_viewer_set_insert_smartcard_accel(self, 0, 0); - virt_viewer_set_remove_smartcard_accel(self, 0, 0); - diff --git a/SOURCES/0023-Remove-warning-when-removing-display.patch b/SOURCES/0023-Remove-warning-when-removing-display.patch new file mode 100644 index 0000000..9b322d7 --- /dev/null +++ b/SOURCES/0023-Remove-warning-when-removing-display.patch @@ -0,0 +1,33 @@ +From b8b4a32f2f5ad6ac8d7aeff6bd23a779e99bc63a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com> +Date: Tue, 10 Jun 2014 14:25:16 +0300 +Subject: [PATCH] Remove warning when removing display + +Some display have no associated window (for ex, if it doesn't fit +on client monitors). + +(remote-viewer:22275): remote-viewer-CRITICAL **: virt_viewer_window_set_display: assertion `VIRT_VIEWER_IS_WINDOW(self)' failed + +(remote-viewer:22275): remote-viewer-CRITICAL **: virt_viewer_app_remove_nth_window: assertion `win != NULL' failed + +https://bugzilla.redhat.com/show_bug.cgi?id=1107518 +--- + src/virt-viewer-app.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index e4e2eeb..5f7b85a 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -856,8 +856,10 @@ virt_viewer_app_display_removed(VirtViewerSession *session G_GNUC_UNUSED, + gtk_widget_hide(GTK_WIDGET(display)); + g_object_get(display, "nth-display", &nth, NULL); + win = virt_viewer_app_get_nth_window(self, nth); +- virt_viewer_window_set_display(win, NULL); ++ if (!win) ++ return; + ++ virt_viewer_window_set_display(win, NULL); + if (nth != 0) + virt_viewer_app_remove_nth_window(self, nth); + } diff --git a/SOURCES/0024-Replace-DEBUG_LOG-with-g_debug.patch b/SOURCES/0024-Replace-DEBUG_LOG-with-g_debug.patch new file mode 100644 index 0000000..7f4be68 --- /dev/null +++ b/SOURCES/0024-Replace-DEBUG_LOG-with-g_debug.patch @@ -0,0 +1,821 @@ +From efadf4908fd76435b5d3476221edb89c426e64a6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com> +Date: Tue, 10 Jun 2014 14:30:01 +0300 +Subject: [PATCH] Replace DEBUG_LOG with g_debug + +https://bugzilla.redhat.com/show_bug.cgi?id=1107518 +--- + src/remote-viewer.c | 6 +++--- + src/virt-viewer-app.c | 22 ++++++++++---------- + src/virt-viewer-auth.c | 12 +++++------ + src/virt-viewer-display-vnc.c | 2 +- + src/virt-viewer-display.c | 6 +++--- + src/virt-viewer-events.c | 28 ++++++++++++------------- + src/virt-viewer-notebook.c | 6 +++--- + src/virt-viewer-session-spice.c | 46 ++++++++++++++++++++--------------------- + src/virt-viewer-session-vnc.c | 4 ++-- + src/virt-viewer-util.h | 1 - + src/virt-viewer-window.c | 12 +++++------ + src/virt-viewer.c | 38 +++++++++++++++++----------------- + 12 files changed, 91 insertions(+), 92 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 5fa4ee4..fac8915 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -413,7 +413,7 @@ spice_ctrl_menu_updated(RemoteViewer *self) + { + GHashTable *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); + +- DEBUG_LOG("Spice controller menu updated"); ++ g_debug("Spice controller menu updated"); + + g_hash_table_foreach(windows, spice_menu_update_each, self); + } +@@ -462,7 +462,7 @@ spice_foreign_menu_updated(RemoteViewer *self) + { + GHashTable *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); + +- DEBUG_LOG("Spice foreign menu updated"); ++ g_debug("Spice foreign menu updated"); + + g_hash_table_foreach(windows, foreign_menu_update_each, self); + } +@@ -986,7 +986,7 @@ retry_dialog: + + g_return_val_if_fail(guri != NULL, FALSE); + +- DEBUG_LOG("Opening display to %s", guri); ++ g_debug("Opening display to %s", guri); + if ((virt_viewer_app_get_title(app) == NULL) || priv->default_title) { + priv->default_title = TRUE; + virt_viewer_app_set_title(app, guri); +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 5f7b85a..e584e9b 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -297,7 +297,7 @@ app_window_try_fullscreen(VirtViewerApp *self G_GNUC_UNUSED, + GdkScreen *screen = gdk_screen_get_default(); + + if (nth >= gdk_screen_get_n_monitors(screen)) { +- DEBUG_LOG("skipping display %d", nth); ++ g_debug("skipping display %d", nth); + return; + } + +@@ -313,7 +313,7 @@ void virt_viewer_app_set_uuid_string(VirtViewerApp* self, const gchar* uuid_stri + gint* displays = NULL; + gint nmonitors = gdk_screen_get_n_monitors(gdk_screen_get_default()); + +- DEBUG_LOG("%s: UUID changed to %s", G_STRFUNC, uuid_string); ++ g_debug("%s: UUID changed to %s", G_STRFUNC, uuid_string); + + displays = g_key_file_get_integer_list(self->priv->config, + uuid_string, "monitor-mapping", &ndisplays, &error); +@@ -681,7 +681,7 @@ virt_viewer_app_remove_nth_window(VirtViewerApp *self, gint nth) + win = virt_viewer_app_get_nth_window(self, nth); + g_return_val_if_fail(win != NULL, FALSE); + +- DEBUG_LOG("Remove window %d %p", nth, win); ++ g_debug("Remove window %d %p", nth, win); + g_object_ref(win); + removed = g_hash_table_remove(self->priv->windows, &nth); + g_warn_if_fail(removed); +@@ -703,7 +703,7 @@ virt_viewer_app_set_nth_window(VirtViewerApp *self, gint nth, VirtViewerWindow * + g_return_if_fail(virt_viewer_app_get_nth_window(self, nth) == NULL); + key = g_malloc(sizeof(gint)); + *key = nth; +- DEBUG_LOG("Insert window %d %p", nth, win); ++ g_debug("Insert window %d %p", nth, win); + g_hash_table_insert(self->priv->windows, key, win); + virt_viewer_app_set_window_subtitle(self, win, nth); + virt_viewer_app_update_menu_displays(self); +@@ -988,7 +988,7 @@ virt_viewer_app_channel_open(VirtViewerSession *session, + if (!virt_viewer_app_open_connection(self, &fd)) + return; + +- DEBUG_LOG("After open connection callback fd=%d", fd); ++ g_debug("After open connection callback fd=%d", fd); + + priv = self->priv; + if (priv->transport && g_ascii_strcasecmp(priv->transport, "ssh") == 0 && +@@ -1022,7 +1022,7 @@ virt_viewer_app_default_activate(VirtViewerApp *self, GError **error) + if (!virt_viewer_app_open_connection(self, &fd)) + return FALSE; + +- DEBUG_LOG("After open connection callback fd=%d", fd); ++ g_debug("After open connection callback fd=%d", fd); + + #if defined(HAVE_SOCKETPAIR) && defined(HAVE_FORK) + if (priv->transport && +@@ -1190,7 +1190,7 @@ virt_viewer_app_connect_timer(void *opaque) + VirtViewerApp *self = opaque; + VirtViewerAppPrivate *priv = self->priv; + +- DEBUG_LOG("Connect timer fired"); ++ g_debug("Connect timer fired"); + + if (!priv->active && + virt_viewer_app_initial_connect(self, NULL) < 0) +@@ -1210,7 +1210,7 @@ virt_viewer_app_start_reconnect_poll(VirtViewerApp *self) + g_return_if_fail(VIRT_VIEWER_IS_APP(self)); + VirtViewerAppPrivate *priv = self->priv; + +- DEBUG_LOG("reconnect_poll: %d", priv->reconnect_poll); ++ g_debug("reconnect_poll: %d", priv->reconnect_poll); + + if (priv->reconnect_poll != 0) + return; +@@ -1581,7 +1581,7 @@ virt_viewer_app_init (VirtViewerApp *self) + G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, &error); + + if (g_error_matches(error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) +- DEBUG_LOG("No configuration file %s", self->priv->config_file); ++ g_debug("No configuration file %s", self->priv->config_file); + else if (error) + g_warning("Couldn't load configuration: %s", error->message); + +@@ -1967,7 +1967,7 @@ static void fullscreen_cb(gpointer key, + gint nth = virt_viewer_app_get_initial_monitor_for_display(options->app, *(gint*)key); + VirtViewerWindow *vwin = VIRT_VIEWER_WINDOW(value); + +- DEBUG_LOG("fullscreen display %d: %d", nth, options->fullscreen); ++ g_debug("fullscreen display %d: %d", nth, options->fullscreen); + if (options->fullscreen) + app_window_try_fullscreen(options->app, vwin, nth); + else +@@ -2136,7 +2136,7 @@ virt_viewer_app_set_connect_info(VirtViewerApp *self, + g_return_if_fail(VIRT_VIEWER_IS_APP(self)); + VirtViewerAppPrivate *priv = self->priv; + +- DEBUG_LOG("Set connect info: %s,%s,%s,%s,%s,%s,%s,%d", ++ g_debug("Set connect info: %s,%s,%s,%s,%s,%s,%s,%d", + host, ghost, gport, gtlsport ? gtlsport : "-1", transport, unixsock, user, port); + + g_free(priv->host); +diff --git a/src/virt-viewer-auth.c b/src/virt-viewer-auth.c +index 79c8589..1fb670d 100644 +--- a/src/virt-viewer-auth.c ++++ b/src/virt-viewer-auth.c +@@ -106,7 +106,7 @@ virt_viewer_auth_vnc_credentials(VirtViewerSession *session, + gboolean wantPassword = FALSE, wantUsername = FALSE; + int i; + +- DEBUG_LOG("Got VNC credential request for %d credential(s)", credList->n_values); ++ g_debug("Got VNC credential request for %d credential(s)", credList->n_values); + + for (i = 0 ; i < credList->n_values ; i++) { + GValue *cred = g_value_array_get_nth(credList, i); +@@ -120,7 +120,7 @@ virt_viewer_auth_vnc_credentials(VirtViewerSession *session, + case VNC_DISPLAY_CREDENTIAL_CLIENTNAME: + break; + default: +- DEBUG_LOG("Unsupported credential type %d", g_value_get_enum(cred)); ++ g_debug("Unsupported credential type %d", g_value_get_enum(cred)); + vnc_display_close(VNC_DISPLAY(vnc)); + goto cleanup; + } +@@ -158,7 +158,7 @@ virt_viewer_auth_vnc_credentials(VirtViewerSession *session, + vnc_display_set_credential(VNC_DISPLAY(vnc), + g_value_get_enum(cred), + username)) { +- DEBUG_LOG("Failed to set credential type %d", g_value_get_enum(cred)); ++ g_debug("Failed to set credential type %d", g_value_get_enum(cred)); + vnc_display_close(VNC_DISPLAY(vnc)); + } + break; +@@ -167,7 +167,7 @@ virt_viewer_auth_vnc_credentials(VirtViewerSession *session, + vnc_display_set_credential(VNC_DISPLAY(vnc), + g_value_get_enum(cred), + password)) { +- DEBUG_LOG("Failed to set credential type %d", g_value_get_enum(cred)); ++ g_debug("Failed to set credential type %d", g_value_get_enum(cred)); + vnc_display_close(VNC_DISPLAY(vnc)); + } + break; +@@ -175,12 +175,12 @@ virt_viewer_auth_vnc_credentials(VirtViewerSession *session, + if (vnc_display_set_credential(VNC_DISPLAY(vnc), + g_value_get_enum(cred), + "libvirt")) { +- DEBUG_LOG("Failed to set credential type %d", g_value_get_enum(cred)); ++ g_debug("Failed to set credential type %d", g_value_get_enum(cred)); + vnc_display_close(VNC_DISPLAY(vnc)); + } + break; + default: +- DEBUG_LOG("Unsupported credential type %d", g_value_get_enum(cred)); ++ g_debug("Unsupported credential type %d", g_value_get_enum(cred)); + vnc_display_close(VNC_DISPLAY(vnc)); + } + } +diff --git a/src/virt-viewer-display-vnc.c b/src/virt-viewer-display-vnc.c +index 32119bc..2222158 100644 +--- a/src/virt-viewer-display-vnc.c ++++ b/src/virt-viewer-display-vnc.c +@@ -150,7 +150,7 @@ virt_viewer_display_vnc_resize_desktop(VncDisplay *vnc G_GNUC_UNUSED, + int width, int height, + VirtViewerDisplay *display) + { +- DEBUG_LOG("desktop resize %dx%d", width, height); ++ g_debug("desktop resize %dx%d", width, height); + + virt_viewer_display_set_desktop_size(display, width, height); + } +diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c +index 52e6962..c5170c4 100644 +--- a/src/virt-viewer-display.c ++++ b/src/virt-viewer-display.c +@@ -429,7 +429,7 @@ virt_viewer_display_size_request(GtkWidget *widget, + requisition->height = 50; + } + +- DEBUG_LOG("Display size request %dx%d (desktop %dx%d)", ++ g_debug("Display size request %dx%d (desktop %dx%d)", + requisition->width, requisition->height, + priv->desktopWidth, priv->desktopHeight); + } +@@ -512,7 +512,7 @@ virt_viewer_display_size_allocate(GtkWidget *widget, + double actualAspect; + GtkWidget *child = gtk_bin_get_child(bin); + +- DEBUG_LOG("Allocated %dx%d", allocation->width, allocation->height); ++ g_debug("Allocated %dx%d", allocation->width, allocation->height); + gtk_widget_set_allocation(widget, allocation); + + if (priv->desktopWidth == 0 || +@@ -543,7 +543,7 @@ virt_viewer_display_size_allocate(GtkWidget *widget, + child_allocation.x = 0.5 * (width - child_allocation.width) + allocation->x + border_width; + child_allocation.y = 0.5 * (height - child_allocation.height) + allocation->y + border_width; + +- DEBUG_LOG("Child allocate %dx%d", child_allocation.width, child_allocation.height); ++ g_debug("Child allocate %dx%d", child_allocation.width, child_allocation.height); + gtk_widget_size_allocate(child, &child_allocation); + } + +diff --git a/src/virt-viewer-events.c b/src/virt-viewer-events.c +index 6d7fe9e..f7ad3a7 100644 +--- a/src/virt-viewer-events.c ++++ b/src/virt-viewer-events.c +@@ -67,7 +67,7 @@ virt_viewer_events_dispatch_handle(GIOChannel *source G_GNUC_UNUSED, + if (condition & G_IO_ERR) + events |= VIR_EVENT_HANDLE_ERROR; + +- DEBUG_LOG("Dispatch handler %d %d %p", data->fd, events, data->opaque); ++ g_debug("Dispatch handler %d %d %p", data->fd, events, data->opaque); + + (data->cb)(data->watch, data->fd, events, data->opaque); + +@@ -100,14 +100,14 @@ int virt_viewer_events_add_handle(int fd, + data->cb = cb; + data->opaque = opaque; + #ifdef G_OS_WIN32 +- DEBUG_LOG("Converted fd %d to handle %d", fd, _get_osfhandle(fd)); ++ g_debug("Converted fd %d to handle %d", fd, _get_osfhandle(fd)); + data->channel = g_io_channel_win32_new_socket(_get_osfhandle(fd)); + #else + data->channel = g_io_channel_unix_new(fd); + #endif + data->ff = ff; + +- DEBUG_LOG("Add handle %d %d %p", data->fd, events, data->opaque); ++ g_debug("Add handle %d %d %p", data->fd, events, data->opaque); + + data->source = g_io_add_watch(data->channel, + cond, +@@ -137,7 +137,7 @@ virt_viewer_events_update_handle(int watch, + struct virt_viewer_events_handle *data = virt_viewer_events_find_handle(watch); + + if (!data) { +- DEBUG_LOG("Update for missing handle watch %d", watch); ++ g_debug("Update for missing handle watch %d", watch); + return; + } + +@@ -175,7 +175,7 @@ virt_viewer_events_cleanup_handle(gpointer user_data) + { + struct virt_viewer_events_handle *data = user_data; + +- DEBUG_LOG("Cleanup of handle %p", data); ++ g_debug("Cleanup of handle %p", data); + g_return_val_if_fail(data != NULL, FALSE); + + if (data->ff) +@@ -192,11 +192,11 @@ virt_viewer_events_remove_handle(int watch) + struct virt_viewer_events_handle *data = virt_viewer_events_find_handle(watch); + + if (!data) { +- DEBUG_LOG("Remove of missing watch %d", watch); ++ g_debug("Remove of missing watch %d", watch); + return -1; + } + +- DEBUG_LOG("Remove handle %d %d", watch, data->fd); ++ g_debug("Remove handle %d %d", watch, data->fd); + + if (!data->source) + return -1; +@@ -228,7 +228,7 @@ static gboolean + virt_viewer_events_dispatch_timeout(void *opaque) + { + struct virt_viewer_events_timeout *data = opaque; +- DEBUG_LOG("Dispatch timeout %p %p %d %p", data, data->cb, data->timer, data->opaque); ++ g_debug("Dispatch timeout %p %p %d %p", data, data->cb, data->timer, data->opaque); + (data->cb)(data->timer, data->opaque); + + return TRUE; +@@ -258,7 +258,7 @@ virt_viewer_events_add_timeout(int interval, + + timeouts[ntimeouts++] = data; + +- DEBUG_LOG("Add timeout %p %d %p %p %d", data, interval, cb, opaque, data->timer); ++ g_debug("Add timeout %p %d %p %p %d", data, interval, cb, opaque, data->timer); + + return data->timer; + } +@@ -283,11 +283,11 @@ virt_viewer_events_update_timeout(int timer, + struct virt_viewer_events_timeout *data = virt_viewer_events_find_timeout(timer); + + if (!data) { +- DEBUG_LOG("Update of missing timer %d", timer); ++ g_debug("Update of missing timer %d", timer); + return; + } + +- DEBUG_LOG("Update timeout %p %d %d", data, timer, interval); ++ g_debug("Update timeout %p %d %d", data, timer, interval); + + if (interval >= 0) { + if (data->source) +@@ -312,7 +312,7 @@ virt_viewer_events_cleanup_timeout(gpointer user_data) + { + struct virt_viewer_events_timeout *data = user_data; + +- DEBUG_LOG("Cleanup of timeout %p", data); ++ g_debug("Cleanup of timeout %p", data); + g_return_val_if_fail(data != NULL, FALSE); + + if (data->ff) +@@ -329,11 +329,11 @@ virt_viewer_events_remove_timeout(int timer) + struct virt_viewer_events_timeout *data = virt_viewer_events_find_timeout(timer); + + if (!data) { +- DEBUG_LOG("Remove of missing timer %d", timer); ++ g_debug("Remove of missing timer %d", timer); + return -1; + } + +- DEBUG_LOG("Remove timeout %p %d", data, timer); ++ g_debug("Remove timeout %p %d", data, timer); + + if (!data->source) + return -1; +diff --git a/src/virt-viewer-notebook.c b/src/virt-viewer-notebook.c +index cc7136b..07497e3 100644 +--- a/src/virt-viewer-notebook.c ++++ b/src/virt-viewer-notebook.c +@@ -98,7 +98,7 @@ virt_viewer_notebook_show_status_va(VirtViewerNotebook *self, const gchar *fmt, + VirtViewerNotebookPrivate *priv; + gchar *text; + +- DEBUG_LOG("notebook show status %p", self); ++ g_debug("notebook show status %p", self); + g_return_if_fail(VIRT_VIEWER_IS_NOTEBOOK(self)); + + text = g_strdup_vprintf(fmt, args); +@@ -126,12 +126,12 @@ virt_viewer_notebook_show_display(VirtViewerNotebook *self) + { + GtkWidget *display; + +- DEBUG_LOG("notebook show display %p", self); ++ g_debug("notebook show display %p", self); + g_return_if_fail(VIRT_VIEWER_IS_NOTEBOOK(self)); + + display = gtk_notebook_get_nth_page(GTK_NOTEBOOK(self), 1); + if (display == NULL) +- DEBUG_LOG("FIXME: showing display although it's not ready yet"); ++ g_debug("FIXME: showing display although it's not ready yet"); + else + gtk_widget_grab_focus(display); + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index d87fcd7..fedde18 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -409,7 +409,7 @@ fill_session(VirtViewerFile *file, SpiceSession *session) + } + + if (virt_viewer_file_is_set(file, "disable-channels")) { +- DEBUG_LOG("FIXME: disable-channels is not supported atm"); ++ g_debug("FIXME: disable-channels is not supported atm"); + } + } + +@@ -478,21 +478,21 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED + + switch (event) { + case SPICE_CHANNEL_OPENED: +- DEBUG_LOG("main channel: opened"); ++ g_debug("main channel: opened"); + g_signal_emit_by_name(session, "session-connected"); + break; + case SPICE_CHANNEL_CLOSED: +- DEBUG_LOG("main channel: closed"); ++ g_debug("main channel: closed"); + /* Ensure the other channels get closed too */ + virt_viewer_session_clear_displays(session); + if (self->priv->session) + spice_session_disconnect(self->priv->session); + break; + case SPICE_CHANNEL_SWITCHING: +- DEBUG_LOG("main channel: switching host"); ++ g_debug("main channel: switching host"); + break; + case SPICE_CHANNEL_ERROR_AUTH: +- DEBUG_LOG("main channel: auth failure (wrong password?)"); ++ g_debug("main channel: auth failure (wrong password?)"); + + if (self->priv->pass_try > 0) + g_signal_emit_by_name(session, "session-auth-failed", +@@ -518,7 +518,7 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED + } + break; + case SPICE_CHANNEL_ERROR_CONNECT: +- DEBUG_LOG("main channel: failed to connect"); ++ g_debug("main channel: failed to connect"); + g_signal_emit_by_name(session, "session-disconnected"); + break; + case SPICE_CHANNEL_ERROR_IO: +@@ -591,7 +591,7 @@ destroy_display(gpointer data) + VirtViewerDisplay *display = VIRT_VIEWER_DISPLAY(data); + VirtViewerSession *session = virt_viewer_display_get_session(display); + +- DEBUG_LOG("Destroying spice display %p", display); ++ g_debug("Destroying spice display %p", display); + virt_viewer_session_remove_display(session, display); + g_object_unref(display); + } +@@ -627,7 +627,7 @@ virt_viewer_session_spice_display_monitors(SpiceChannel *channel, + display = g_ptr_array_index(displays, i); + if (display == NULL) { + display = virt_viewer_display_spice_new(self, channel, i); +- DEBUG_LOG("creating spice display (#:%d)", i); ++ g_debug("creating spice display (#:%d)", i); + g_ptr_array_index(displays, i) = g_object_ref(display); + } + +@@ -667,7 +667,7 @@ virt_viewer_session_spice_channel_new(SpiceSession *s, + + g_object_get(channel, "channel-id", &id, NULL); + +- DEBUG_LOG("New spice channel %p %s %d", channel, g_type_name(G_OBJECT_TYPE(channel)), id); ++ g_debug("New spice channel %p %s %d", channel, g_type_name(G_OBJECT_TYPE(channel)), id); + + if (SPICE_IS_MAIN_CHANNEL(channel)) { + if (self->priv->main_channel != NULL) +@@ -695,17 +695,17 @@ virt_viewer_session_spice_channel_new(SpiceSession *s, + } + + if (SPICE_IS_INPUTS_CHANNEL(channel)) { +- DEBUG_LOG("new inputs channel"); ++ g_debug("new inputs channel"); + } + + if (SPICE_IS_PLAYBACK_CHANNEL(channel)) { +- DEBUG_LOG("new audio channel"); ++ g_debug("new audio channel"); + if (self->priv->audio == NULL) + self->priv->audio = spice_audio_get(s, NULL); + } + + if (SPICE_IS_USBREDIR_CHANNEL(channel)) { +- DEBUG_LOG("new usbredir channel"); ++ g_debug("new usbredir channel"); + self->priv->usbredir_channel_count++; + if (spice_usb_device_manager_get(self->priv->session, NULL)) + virt_viewer_session_set_has_usbredir(session, TRUE); +@@ -736,7 +736,7 @@ virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self) + /* only do auto-conf once at startup. Avoid repeating auto-conf later due to + * agent disconnection/re-connection, etc */ + if (self->priv->did_auto_conf) { +- DEBUG_LOG("Already did auto-conf, skipping"); ++ g_debug("Already did auto-conf, skipping"); + return FALSE; + } + +@@ -744,16 +744,16 @@ virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self) + g_return_val_if_fail(VIRT_VIEWER_IS_APP(app), TRUE); + + if (!virt_viewer_app_get_fullscreen(app)) { +- DEBUG_LOG("app is not in full screen"); ++ g_debug("app is not in full screen"); + return FALSE; + } + if (cmain == NULL) { +- DEBUG_LOG("no main channel yet"); ++ g_debug("no main channel yet"); + return FALSE; + } + g_object_get(cmain, "agent-connected", &agent_connected, NULL); + if (!agent_connected) { +- DEBUG_LOG("Agent not connected, skipping autoconf"); ++ g_debug("Agent not connected, skipping autoconf"); + g_signal_connect(cmain, "notify::agent-connected", G_CALLBACK(property_notify_do_auto_conf), self); + return FALSE; + } +@@ -761,12 +761,12 @@ virt_viewer_session_spice_fullscreen_auto_conf(VirtViewerSessionSpice *self) + spice_main_set_display_enabled(cmain, -1, FALSE); + + ndisplays = virt_viewer_app_get_n_initial_displays(app); +- DEBUG_LOG("Performing full screen auto-conf, %zd host monitors", ndisplays); ++ g_debug("Performing full screen auto-conf, %zd host monitors", ndisplays); + + for (i = 0; i < ndisplays; i++) { + gint j = virt_viewer_app_get_initial_monitor_for_display(app, i); + gdk_screen_get_monitor_geometry(screen, j, &dest); +- DEBUG_LOG("Set SPICE display %d to (%d,%d)-(%dx%d)", ++ g_debug("Set SPICE display %d to (%d,%d)-(%dx%d)", + i, dest.x, dest.y, dest.width, dest.height); + spice_main_set_display(cmain, i, dest.x, dest.y, dest.width, dest.height); + spice_main_set_display_enabled(cmain, i, TRUE); +@@ -788,26 +788,26 @@ virt_viewer_session_spice_channel_destroy(G_GNUC_UNUSED SpiceSession *s, + g_return_if_fail(self != NULL); + + g_object_get(channel, "channel-id", &id, NULL); +- DEBUG_LOG("Destroy SPICE channel %s %d", g_type_name(G_OBJECT_TYPE(channel)), id); ++ g_debug("Destroy SPICE channel %s %d", g_type_name(G_OBJECT_TYPE(channel)), id); + + if (SPICE_IS_MAIN_CHANNEL(channel)) { +- DEBUG_LOG("zap main channel"); ++ g_debug("zap main channel"); + if (channel == SPICE_CHANNEL(self->priv->main_channel)) + self->priv->main_channel = NULL; + } + + if (SPICE_IS_DISPLAY_CHANNEL(channel)) { +- DEBUG_LOG("zap display channel (#%d)", id); ++ g_debug("zap display channel (#%d)", id); + g_object_set_data(G_OBJECT(channel), "virt-viewer-displays", NULL); + } + + if (SPICE_IS_PLAYBACK_CHANNEL(channel) && self->priv->audio) { +- DEBUG_LOG("zap audio channel"); ++ g_debug("zap audio channel"); + self->priv->audio = NULL; + } + + if (SPICE_IS_USBREDIR_CHANNEL(channel)) { +- DEBUG_LOG("zap usbredir channel"); ++ g_debug("zap usbredir channel"); + self->priv->usbredir_channel_count--; + if (self->priv->usbredir_channel_count == 0) + virt_viewer_session_set_has_usbredir(session, FALSE); +diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c +index 50fa11f..545caaa 100644 +--- a/src/virt-viewer-session-vnc.c ++++ b/src/virt-viewer-session-vnc.c +@@ -114,7 +114,7 @@ virt_viewer_session_vnc_disconnected(VncDisplay *vnc G_GNUC_UNUSED, + + virt_viewer_session_clear_displays(VIRT_VIEWER_SESSION(session)); + display = virt_viewer_display_vnc_new(session->priv->vnc); +- DEBUG_LOG("Disconnected"); ++ g_debug("Disconnected"); + g_signal_emit_by_name(session, "session-disconnected"); + virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(display), + VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, FALSE); +@@ -275,7 +275,7 @@ virt_viewer_session_vnc_close(VirtViewerSession* session) + + g_return_if_fail(self != NULL); + +- DEBUG_LOG("close vnc=%p", self->priv->vnc); ++ g_debug("close vnc=%p", self->priv->vnc); + if (self->priv->vnc != NULL) { + virt_viewer_session_clear_displays(session); + vnc_display_close(self->priv->vnc); +diff --git a/src/virt-viewer-util.h b/src/virt-viewer-util.h +index 8157df5..4f40116 100644 +--- a/src/virt-viewer-util.h ++++ b/src/virt-viewer-util.h +@@ -32,7 +32,6 @@ enum { + VIRT_VIEWER_ERROR_FAILED, + }; + +-#define DEBUG_LOG(s, ...) do { if (doDebug) g_debug(s, ## __VA_ARGS__); } while (0) + #define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array)) + + #define VIRT_VIEWER_ERROR virt_viewer_error_quark () +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index b44c5cb..22326e8 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -169,7 +169,7 @@ virt_viewer_window_dispose (GObject *object) + priv->display = NULL; + } + +- DEBUG_LOG("Disposing window %p\n", object); ++ g_debug("Disposing window %p\n", object); + + if (priv->window) { + gtk_widget_destroy(priv->window); +@@ -412,9 +412,9 @@ virt_viewer_window_resize(VirtViewerWindow *self, gboolean keep_win_size) + if (priv->fullscreen) + return; + +- DEBUG_LOG("Preparing main window resize"); ++ g_debug("Preparing main window resize"); + if (!priv->display) { +- DEBUG_LOG("Skipping inactive resize"); ++ g_debug("Skipping inactive resize"); + return; + } + +@@ -454,7 +454,7 @@ virt_viewer_window_resize(VirtViewerWindow *self, gboolean keep_win_size) + height = desktopHeight; + } + +- DEBUG_LOG("Decided todo %dx%d (desktop is %dx%d, fullscreen is %dx%d", ++ g_debug("Decided todo %dx%d (desktop is %dx%d, fullscreen is %dx%d", + width, height, desktopWidth, desktopHeight, + fullscreen.width, fullscreen.height); + +@@ -809,7 +809,7 @@ virt_viewer_window_delete(GtkWidget *src G_GNUC_UNUSED, + void *dummy G_GNUC_UNUSED, + VirtViewerWindow *self) + { +- DEBUG_LOG("Window closed"); ++ g_debug("Window closed"); + virt_viewer_app_maybe_quit(self->priv->app, self); + return TRUE; + } +@@ -1152,7 +1152,7 @@ virt_viewer_window_update_title(VirtViewerWindow *self) + gtk_accel_map_lookup_entry("<virt-viewer>/view/release-cursor", &key); + + if (key.accel_key || key.accel_mods) { +- DEBUG_LOG("release-cursor accel key: key=%u, mods=%x, flags=%u", key.accel_key, key.accel_mods, key.accel_flags); ++ g_debug("release-cursor accel key: key=%u, mods=%x, flags=%u", key.accel_key, key.accel_mods, key.accel_flags); + label = gtk_accelerator_get_label(key.accel_key, key.accel_mods); + } else { + label = g_strdup(_("Ctrl+Alt")); +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index e1553fd..01a9a51 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -126,7 +126,7 @@ virt_viewer_deactivated(VirtViewerApp *app, gboolean connect_error) + + if (priv->reconnect) { + if (!priv->withEvents) { +- DEBUG_LOG("No domain events, falling back to polling"); ++ g_debug("No domain events, falling back to polling"); + virt_viewer_app_start_reconnect_poll(app); + } + +@@ -345,9 +345,9 @@ virt_viewer_extract_connect_info(VirtViewer *self, + } + + if (ghost && gport) +- DEBUG_LOG("Guest graphics address is %s:%s", ghost, gport); ++ g_debug("Guest graphics address is %s:%s", ghost, gport); + else if (unixsock) +- DEBUG_LOG("Guest graphics address is %s", unixsock); ++ g_debug("Guest graphics address is %s", unixsock); + + uri = virConnectGetURI(priv->conn); + if (virt_viewer_util_extract_host(uri, NULL, &host, &transport, &user, &port) < 0) { +@@ -370,7 +370,7 @@ virt_viewer_extract_connect_info(VirtViewer *self, + } else { + replacement_host = g_strdup(host); + } +- DEBUG_LOG("Guest graphics listen '%s' is NULL or a wildcard, replacing with '%s'", ++ g_debug("Guest graphics listen '%s' is NULL or a wildcard, replacing with '%s'", + ghost ? ghost : "", replacement_host); + g_free(ghost); + ghost = replacement_host; +@@ -438,7 +438,7 @@ virt_viewer_open_connection(VirtViewerApp *self G_GNUC_UNUSED, int *fd) + if (virDomainOpenGraphics(priv->dom, 0, pair[0], + VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH) < 0) { + virErrorPtr err = virGetLastError(); +- DEBUG_LOG("Error %s", err && err->message ? err->message : "Unknown"); ++ g_debug("Error %s", err && err->message ? err->message : "Unknown"); + close(pair[0]); + close(pair[1]); + return TRUE; +@@ -460,7 +460,7 @@ virt_viewer_domain_event(virConnectPtr conn G_GNUC_UNUSED, + VirtViewerApp *app = VIRT_VIEWER_APP(self); + GError *error = NULL; + +- DEBUG_LOG("Got domain event %d %d", event, detail); ++ g_debug("Got domain event %d %d", event, detail); + + if (!virt_viewer_matches_domain(self, dom)) + return 0; +@@ -494,7 +494,7 @@ virt_viewer_conn_event(virConnectPtr conn G_GNUC_UNUSED, + VirtViewerApp *app = VIRT_VIEWER_APP(self); + VirtViewerPrivate *priv = self->priv; + +- DEBUG_LOG("Got connection event %d", reason); ++ g_debug("Got connection event %d", reason); + + virConnectClose(priv->conn); + priv->conn = NULL; +@@ -532,7 +532,7 @@ virt_viewer_initial_connect(VirtViewerApp *app, GError **error) + VirtViewerPrivate *priv = self->priv; + char uuid_string[VIR_UUID_STRING_BUFLEN]; + +- DEBUG_LOG("initial connect"); ++ g_debug("initial connect"); + + if (!priv->conn && + virt_viewer_connect(app) < 0) { +@@ -551,20 +551,20 @@ virt_viewer_initial_connect(VirtViewerApp *app, GError **error) + } else { + virt_viewer_app_simple_message_dialog(app, _("Cannot find guest domain %s"), + priv->domkey); +- DEBUG_LOG("Cannot find guest %s", priv->domkey); ++ g_debug("Cannot find guest %s", priv->domkey); + goto cleanup; + } + } + + if (virDomainGetUUIDString(dom, uuid_string) < 0) { +- DEBUG_LOG("Couldn't get uuid from libvirt"); ++ g_debug("Couldn't get uuid from libvirt"); + } else { + virt_viewer_app_set_uuid_string(app, uuid_string); + } + + virt_viewer_app_show_status(app, _("Checking guest domain status")); + if (virDomainGetInfo(dom, &info) < 0) { +- DEBUG_LOG("Cannot get guest state"); ++ g_debug("Cannot get guest state"); + goto cleanup; + } + +@@ -580,7 +580,7 @@ virt_viewer_initial_connect(VirtViewerApp *app, GError **error) + virt_viewer_app_trace(app, "Guest %s has not activated its display yet, waiting for it to start", + priv->domkey); + } else { +- DEBUG_LOG("Failed to activate viewer"); ++ g_debug("Failed to activate viewer"); + goto cleanup; + } + } +@@ -613,7 +613,7 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + int i; + int ret = -1; + +- DEBUG_LOG("Got libvirt credential request for %d credential(s)", ncred); ++ g_debug("Got libvirt credential request for %d credential(s)", ncred); + + for (i = 0 ; i < ncred ; i++) { + switch (cred[i].type) { +@@ -625,7 +625,7 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + password = &cred[i].result; + break; + default: +- DEBUG_LOG("Unsupported libvirt credential %d", cred[i].type); ++ g_debug("Unsupported libvirt credential %d", cred[i].type); + return -1; + } + } +@@ -652,13 +652,13 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + cred[i].resultlen = strlen(cred[i].result); + else + cred[i].resultlen = 0; +- DEBUG_LOG("Got '%s' %d %d", cred[i].result, cred[i].resultlen, cred[i].type); ++ g_debug("Got '%s' %d %d", cred[i].result, cred[i].resultlen, cred[i].type); + break; + } + } + + cleanup: +- DEBUG_LOG("Return %d", ret); ++ g_debug("Return %d", ret); + return ret; + } + +@@ -681,7 +681,7 @@ virt_viewer_connect(VirtViewerApp *app) + if (!virt_viewer_app_get_attach(app)) + oflags |= VIR_CONNECT_RO; + +- DEBUG_LOG("connecting ..."); ++ g_debug("connecting ..."); + + virt_viewer_app_trace(app, "Opening connection to libvirt with URI %s", + priv->uri ? priv->uri : "<null>"); +@@ -712,7 +712,7 @@ virt_viewer_connect(VirtViewerApp *app) + + if (!priv->withEvents && + !virt_viewer_app_is_active(app)) { +- DEBUG_LOG("No domain events, falling back to polling"); ++ g_debug("No domain events, falling back to polling"); + virt_viewer_app_start_reconnect_poll(app); + } + +@@ -720,7 +720,7 @@ virt_viewer_connect(VirtViewerApp *app) + virt_viewer_conn_event, + self, + NULL) < 0) { +- DEBUG_LOG("Unable to register close callback on libvirt connection"); ++ g_debug("Unable to register close callback on libvirt connection"); + } + + return 0; diff --git a/SOURCES/0025-kiosk-don-t-attempt-to-hide-windows-when-disconnecti.patch b/SOURCES/0025-kiosk-don-t-attempt-to-hide-windows-when-disconnecti.patch new file mode 100644 index 0000000..d5d32e5 --- /dev/null +++ b/SOURCES/0025-kiosk-don-t-attempt-to-hide-windows-when-disconnecti.patch @@ -0,0 +1,28 @@ +From b9b188ca00aa60e4ebf35bde4dba68f75c0ae226 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com> +Date: Tue, 10 Jun 2014 15:14:20 +0300 +Subject: [PATCH] kiosk: don't attempt to hide windows when disconnecting + +Get rid of the following warning: +(virt-viewer:7262): virt-viewer-WARNING **: Can't hide windows in kiosk mode + +https://bugzilla.redhat.com/show_bug.cgi?id=1107518 +--- + src/virt-viewer-app.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index e584e9b..956aecb 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1304,7 +1304,9 @@ virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED, + VirtViewerAppPrivate *priv = self->priv; + gboolean connect_error = !priv->connected && !priv->cancelled; + +- virt_viewer_app_hide_all_windows(self); ++ if (!priv->kiosk) ++ virt_viewer_app_hide_all_windows(self); ++ + if (priv->quitting) + gtk_main_quit(); + diff --git a/SOURCES/0026-Use-a-custom-log-handler-to-silence-debug-messages.patch b/SOURCES/0026-Use-a-custom-log-handler-to-silence-debug-messages.patch new file mode 100644 index 0000000..4f062f8 --- /dev/null +++ b/SOURCES/0026-Use-a-custom-log-handler-to-silence-debug-messages.patch @@ -0,0 +1,49 @@ +From c1e2e3603e5d76e6fd78a8a2d26d42acc1afd99f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Tue, 10 Jun 2014 17:37:33 +0200 +Subject: [PATCH] Use a custom log handler to silence debug messages + +On RHEL6, with old glib, all g_log messages are printed. +Filter the messages with a custom handler instead. + +https://bugzilla.redhat.com/show_bug.cgi?id=1107518 + +util: fix glib_check_version() condition + +glib_check_version() returns NULL if version is higher or equal. +--- + src/virt-viewer-util.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/src/virt-viewer-util.c b/src/virt-viewer-util.c +index 9deddad..464a3d0 100644 +--- a/src/virt-viewer-util.c ++++ b/src/virt-viewer-util.c +@@ -273,6 +273,18 @@ gulong virt_viewer_signal_connect_object(gpointer instance, + return ctx->handler_id; + } + ++static void log_handler(const gchar *log_domain, ++ GLogLevelFlags log_level, ++ const gchar *message, ++ gpointer unused_data) ++{ ++ if (glib_check_version(2, 32, 0) != NULL) ++ if (log_level >= G_LOG_LEVEL_DEBUG && !doDebug) ++ return; ++ ++ g_log_default_handler(log_domain, log_level, message, unused_data); ++} ++ + void virt_viewer_util_init(const char *appname) + { + #ifdef G_OS_WIN32 +@@ -305,6 +317,8 @@ void virt_viewer_util_init(const char *appname) + textdomain(GETTEXT_PACKAGE); + + g_set_application_name(appname); ++ ++ g_log_set_default_handler(log_handler, NULL); + } + + static gchar * diff --git a/SOURCES/0027-kiosk-remove-invalid-unref.patch b/SOURCES/0027-kiosk-remove-invalid-unref.patch new file mode 100644 index 0000000..77393d2 --- /dev/null +++ b/SOURCES/0027-kiosk-remove-invalid-unref.patch @@ -0,0 +1,24 @@ +From 5f86cca0c8e9006213e936adf9a6ea79132a052d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Mon, 16 Jun 2014 19:57:06 +0200 +Subject: [PATCH] kiosk: remove invalid unref + +This unref doesn't seem to be related to any reference, although it +was probably introduced in the first place to clear the floating ref, +wrongly. See following commit for a working solution. +--- + src/virt-viewer-app.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 956aecb..5dc7697 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -829,7 +829,6 @@ virt_viewer_app_display_added(VirtViewerSession *session G_GNUC_UNUSED, + if (priv->kiosk) { + /* don't show extra monitors that don't fit on client */ + g_debug("kiosk mode: skip extra monitors that don't fit on client"); +- g_object_unref(display); + return; + } + diff --git a/SOURCES/0028-Fix-a-floating-display-warning.patch b/SOURCES/0028-Fix-a-floating-display-warning.patch new file mode 100644 index 0000000..b799e26 --- /dev/null +++ b/SOURCES/0028-Fix-a-floating-display-warning.patch @@ -0,0 +1,60 @@ +From 0c40a610483824f649561f9b171112aba2971519 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Mon, 16 Jun 2014 19:55:39 +0200 +Subject: [PATCH] Fix a floating display warning + +You can reproduce the error by starting the client in kiosk and shuting +down the guest. + + #0 0x000000317e432915 in raise (sig=6) at + ../nptl/sysdeps/unix/sysv/linux/raise.c:64 + #1 0x000000317e4340f5 in abort () at abort.c:92 + #2 0x000000317fc4a98a in g_logv (log_domain=0x318730e657 "Gtk", + log_level=<value optimized out>, format= + 0x31873a50a8 "A floating object was finalized. This means that + someone\ncalled g_object_unref() on an object that had only a + floating\nreference; the initial floating reference is not owned by + anyone\nand must be remo"..., args1=0x7fffffffd5f0) + at gmessages.c:557 + #3 0x000000317fc4aa23 in g_log (log_domain=<value optimized out>, + log_level=<value optimized out>, + format=<value optimized out>) at gmessages.c:577 + #4 0x000000318717ba72 in ?? () from /usr/lib64/libgtk-x11-2.0.so.0 + #5 0x0000000000426eb5 in + virt_viewer_display_spice_finalize (obj=0x6fec20 + [VirtViewerDisplaySpice]) + at virt-viewer-display-spice.c:67 + #6 0x0000003180c106a4 in g_object_unref (_object=0x6fec20) at + gobject.c:2712 + #7 0x0000000000425b5d in destroy_display (data=0x6fec20) at + virt-viewer-session-spice.c:596 + #8 0x000000317fc1667b in g_ptr_array_foreach (array=0x74a040, + func=0x425ae7 <destroy_display>, user_data=0x0) + at garray.c:1306 + #9 0x000000317fc16e7b in g_ptr_array_free (farray=0x74a040, + free_segment=1) at garray.c:938 + #10 0x000000317fc2906a in g_data_set_internal (datalist=<value optimized + out>, key_id=1297, data=0x0, destroy_func=0) + at gdataset.c:351 + #11 g_datalist_id_set_data_full (datalist=<value optimized out>, + key_id=1297, data=0x0, destroy_func=0) at gdataset.c:598 + #12 0x00000000004268d0 in + virt_viewer_session_spice_channel_destroy (s=0x800000 [SpiceSession], + channel= +--- + 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 fedde18..cb62444 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -628,7 +628,7 @@ virt_viewer_session_spice_display_monitors(SpiceChannel *channel, + if (display == NULL) { + display = virt_viewer_display_spice_new(self, channel, i); + g_debug("creating spice display (#:%d)", i); +- g_ptr_array_index(displays, i) = g_object_ref(display); ++ g_ptr_array_index(displays, i) = g_object_ref_sink(display); + } + + virt_viewer_session_add_display(VIRT_VIEWER_SESSION(self), diff --git a/SOURCES/0029-man-fix-zoom-level-range.patch b/SOURCES/0029-man-fix-zoom-level-range.patch new file mode 100644 index 0000000..06438b0 --- /dev/null +++ b/SOURCES/0029-man-fix-zoom-level-range.patch @@ -0,0 +1,37 @@ +From 0c56ca21815a8cfa37cb7e75a1083912ac6f86ad Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Fri, 20 Jun 2014 13:35:51 +0200 +Subject: [PATCH] man: fix zoom level range + +https://bugzilla.redhat.com/show_bug.cgi?id=1111428 +--- + man/remote-viewer.pod | 2 +- + man/virt-viewer.pod | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod +index 63216e3..bb7ede3 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -38,7 +38,7 @@ Display information about the connection + + =item -z PCT, --zoom=PCT + +-Zoom level of the display window in percentage. Range 10-200. ++Zoom level of the display window in percentage. Range 10-400. + + =item -f, --full-screen + +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index 8b52377..937a891 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -50,7 +50,7 @@ Automatically reconnect to the domain if it shuts down and restarts + + =item -z PCT, --zoom=PCT + +-Zoom level of the display window in percentage. Range 10-200. ++Zoom level of the display window in percentage. Range 10-400. + + =item -d, --direct + diff --git a/SOURCES/0030-rhbz-1111514-Fix-un-shrinkable-displays-on-windows-g.patch b/SOURCES/0030-rhbz-1111514-Fix-un-shrinkable-displays-on-windows-g.patch new file mode 100644 index 0000000..d56d280 --- /dev/null +++ b/SOURCES/0030-rhbz-1111514-Fix-un-shrinkable-displays-on-windows-g.patch @@ -0,0 +1,66 @@ +From b8ea8ef031e83fd1144bfc529c30d8804d92b749 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 20 Jun 2014 14:39:12 -0500 +Subject: [PATCH] rhbz#1111514: Fix un-shrinkable displays on windows guests + +Commit 6edde5786 introduced a regression wrt shrinking windows on windows +guests. This seems to be because resizing a display often causes the notebook +widget to switch to the status page temporarily (often so quickly that it's not +noticeable to the eye). This causes a quick 'unmap' and 'map' event sequence on +the display widget. Apparently the timing of these events varies enough between +linux and windows guests that it is only noticeable on windows gueststhe timing +of these events varies enough between linux and windows guests that it is only +noticeable on windows guests. The exact sequence that causes the bug appears to +be as follows: + +1 user resizes window smaller +2 display widget gets a new allocation, which causes it to send a display + reconfiguration to the guest +3 client receives a new show-hint for the display which causes it to switch + temporarily to the 'status' notebook page +4 display widget gets unmapped +5 Client receives another new show-hint, which causes the display widget to get + re- mapped, which causes client to send a display reconfiguration to the guest + (using the old size) +6 client receives new (smaller, from step 2) display size and temporarily + changes to the new size +7 client receives new (larger, from step 5) display size and changes back to + original size. + +To fix the issue, we only explicitly request a resize in response to the very +first map event, and for any subsequent map events, we simply call +_make_resizable() as before. +--- + src/virt-viewer-display.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c +index c5170c4..e91450f 100644 +--- a/src/virt-viewer-display.c ++++ b/src/virt-viewer-display.c +@@ -38,6 +38,7 @@ struct _VirtViewerDisplayPrivate + { + #if !GTK_CHECK_VERSION(3, 0, 0) + gboolean dirty; ++ gboolean mapped_once; + #endif + guint desktopWidth; + guint desktopHeight; +@@ -452,9 +453,16 @@ virt_viewer_display_make_resizable(VirtViewerDisplay *self) + static void + virt_viewer_display_map(GtkWidget *widget) + { ++ VirtViewerDisplay* self = VIRT_VIEWER_DISPLAY(widget); ++ + GTK_WIDGET_CLASS(virt_viewer_display_parent_class)->map(widget); + +- virt_viewer_display_queue_resize(VIRT_VIEWER_DISPLAY(widget)); ++ if (!self->priv->mapped_once) ++ virt_viewer_display_queue_resize(self); ++ else ++ virt_viewer_display_make_resizable(self); ++ ++ self->priv->mapped_once = TRUE; + } + + #else diff --git a/SOURCES/0031-remote-viewer-mention-vv-file-in-help-output.patch b/SOURCES/0031-remote-viewer-mention-vv-file-in-help-output.patch new file mode 100644 index 0000000..d34295f --- /dev/null +++ b/SOURCES/0031-remote-viewer-mention-vv-file-in-help-output.patch @@ -0,0 +1,26 @@ +From 1d458688d31c29028f7efa8efc1502230f428b29 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Tue, 1 Jul 2014 15:10:48 -0500 +Subject: [PATCH] remote-viewer: mention vv-file in help output + +The man page already has a description of the vv-file format, but the +--help output didn't mention it how to use it. + +References: rhbz#970825 +--- + src/remote-viewer-main.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/remote-viewer-main.c b/src/remote-viewer-main.c +index 505074e..5533098 100644 +--- a/src/remote-viewer-main.c ++++ b/src/remote-viewer-main.c +@@ -104,7 +104,7 @@ main(int argc, char **argv) + N_("Open connection using Spice controller communication"), NULL }, + #endif + { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &args, +- NULL, "-- URI" }, ++ NULL, "URI|VV-FILE" }, + { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } + }; + diff --git a/SOURCES/0032-Make-ctrl-zoom-in-out-in-fullscreen.patch b/SOURCES/0032-Make-ctrl-zoom-in-out-in-fullscreen.patch new file mode 100644 index 0000000..2e8dfd1 --- /dev/null +++ b/SOURCES/0032-Make-ctrl-zoom-in-out-in-fullscreen.patch @@ -0,0 +1,86 @@ +From 35a61bdeb62a4f2228a3c2d66a196bd32eb21706 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Mon, 7 Jul 2014 00:14:41 +0200 +Subject: [PATCH] Make ctrl-[+-] zoom in/out in fullscreen + +Make ctrl-[+-] zoom in/out in fullscreen +with mouse over the control bar. + +https://bugzilla.redhat.com/show_bug.cgi?id=987549 +--- + src/virt-gtk-compat.h | 2 ++ + src/virt-viewer-app.c | 4 ++++ + src/virt-viewer-window.c | 4 ++++ + src/virt-viewer.xml | 2 ++ + 4 files changed, 12 insertions(+) + +diff --git a/src/virt-gtk-compat.h b/src/virt-gtk-compat.h +index 67ac768..110c17a 100644 +--- a/src/virt-gtk-compat.h ++++ b/src/virt-gtk-compat.h +@@ -55,6 +55,8 @@ G_BEGIN_DECLS + #define GDK_F11 GDK_KEY_F11 + #define GDK_F12 GDK_KEY_F12 + #define GDK_0 GDK_KEY_0 ++#define GDK_plus GDK_KEY_plus ++#define GDK_minus GDK_KEY_minus + #endif + + #if !GTK_CHECK_VERSION(3, 0, 0) +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 5dc7697..033a594 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1667,6 +1667,8 @@ virt_viewer_app_constructor (GType gtype, + gtk_accel_map_add_entry("<virt-viewer>/view/toggle-fullscreen", GDK_F11, 0); + gtk_accel_map_add_entry("<virt-viewer>/view/release-cursor", GDK_F12, GDK_SHIFT_MASK); + gtk_accel_map_add_entry("<virt-viewer>/view/zoom-reset", GDK_0, GDK_CONTROL_MASK); ++ gtk_accel_map_add_entry("<virt-viewer>/view/zoom-out", GDK_minus, GDK_CONTROL_MASK); ++ gtk_accel_map_add_entry("<virt-viewer>/view/zoom-in", GDK_plus, GDK_CONTROL_MASK); + gtk_accel_map_add_entry("<virt-viewer>/send/secure-attention", GDK_End, GDK_CONTROL_MASK | GDK_MOD1_MASK); + + virt_viewer_app_set_fullscreen(self, opt_fullscreen); +@@ -1843,6 +1845,8 @@ virt_viewer_app_clear_hotkeys(VirtViewerApp *self) + gtk_accel_map_change_entry("<virt-viewer>/view/toggle-fullscreen", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/release-cursor", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/zoom-reset", 0, 0, TRUE); ++ gtk_accel_map_change_entry("<virt-viewer>/view/zoom-in", 0, 0, TRUE); ++ gtk_accel_map_change_entry("<virt-viewer>/view/zoom-out", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/send/secure-attention", 0, 0, TRUE); + virt_viewer_set_insert_smartcard_accel(self, 0, 0); + virt_viewer_set_remove_smartcard_accel(self, 0, 0); +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 22326e8..fadf0bb 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -315,6 +315,10 @@ virt_viewer_window_init (VirtViewerWindow *self) + "can-activate-accel", G_CALLBACK(can_activate_cb), self); + g_signal_connect(gtk_builder_get_object(priv->builder, "menu-view-zoom-reset"), + "can-activate-accel", G_CALLBACK(can_activate_cb), self); ++ g_signal_connect(gtk_builder_get_object(priv->builder, "menu-view-zoom-in"), ++ "can-activate-accel", G_CALLBACK(can_activate_cb), self); ++ g_signal_connect(gtk_builder_get_object(priv->builder, "menu-view-zoom-out"), ++ "can-activate-accel", G_CALLBACK(can_activate_cb), self); + + vbox = GTK_WIDGET(gtk_builder_get_object(priv->builder, "viewer-box")); + virt_viewer_window_toolbar_setup(self); +diff --git a/src/virt-viewer.xml b/src/virt-viewer.xml +index 8a3d3c0..fd8295f 100644 +--- a/src/virt-viewer.xml ++++ b/src/virt-viewer.xml +@@ -127,6 +127,7 @@ + <property name="accel_group">accelgroup</property> + <child> + <object class="GtkImageMenuItem" id="menu-view-zoom-in"> ++ <property name="accel_path"><virt-viewer>/view/zoom-in</property> + <property name="label">gtk-zoom-in</property> + <property name="visible">True</property> + <property name="can_focus">False</property> +@@ -139,6 +140,7 @@ + </child> + <child> + <object class="GtkImageMenuItem" id="menu-view-zoom-out"> ++ <property name="accel_path"><virt-viewer>/view/zoom-out</property> + <property name="label">gtk-zoom-out</property> + <property name="visible">True</property> + <property name="can_focus">False</property> diff --git a/SOURCES/0033-Don-t-connect-to-localhost-when-using-direct.patch b/SOURCES/0033-Don-t-connect-to-localhost-when-using-direct.patch new file mode 100644 index 0000000..6f10cc3 --- /dev/null +++ b/SOURCES/0033-Don-t-connect-to-localhost-when-using-direct.patch @@ -0,0 +1,70 @@ +From 7d8b1c5665e9f27533bea7c1e0876ffb784cd1b6 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Thu, 3 Apr 2014 14:06:22 +0200 +Subject: [PATCH] Don't connect to localhost when using --direct + +Trying to connect to a remote virtual machine using +virt-viewer -c qemu+ssh://example.com/system --direct $vm_name +will currently fail with an error message saying it's not possible to +localhost. This happens with VMs which listen on a wildcard address (eg +'0.0.0.0'). +This was introduced by commit 74b1b62 which changes the host to connect to +to 'localhost' when trying to connect through ssh to a VM listening on a +wildcard address. This is only valid when using a ssh tunnel, and should +not be done with --direct. The fallback code which uses the hostname from +the libvirt URI is what makes the most sense in this situation (wildcard +listen address + --direct). +This commit introduces a virt_viewer_app_get_direct() so that this can be +implemented. + +Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1079211 +--- + src/virt-viewer-app.c | 7 +++++++ + src/virt-viewer-app.h | 1 + + src/virt-viewer.c | 3 ++- + 3 files changed, 10 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 033a594..27e5164 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1838,6 +1838,13 @@ virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct) + self->priv->direct = direct; + } + ++gboolean virt_viewer_app_get_direct(VirtViewerApp *self) ++{ ++ g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), FALSE); ++ ++ return self->priv->direct; ++} ++ + void + virt_viewer_app_clear_hotkeys(VirtViewerApp *self) + { +diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h +index 7c77957..f03369b 100644 +--- a/src/virt-viewer-app.h ++++ b/src/virt-viewer-app.h +@@ -75,6 +75,7 @@ gboolean virt_viewer_app_activate(VirtViewerApp *self, GError **error); + gboolean virt_viewer_app_initial_connect(VirtViewerApp *self, GError **error); + void virt_viewer_app_start_reconnect_poll(VirtViewerApp *self); + void virt_viewer_app_set_zoom_level(VirtViewerApp *self, gint zoom_level); ++gboolean virt_viewer_app_get_direct(VirtViewerApp *self); + void virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct); + void virt_viewer_app_set_hotkeys(VirtViewerApp *self, const gchar *hotkeys); + void virt_viewer_app_set_attach(VirtViewerApp *self, gboolean attach); +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 01a9a51..739b817 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -365,7 +365,8 @@ virt_viewer_extract_connect_info(VirtViewer *self, + */ + if (virt_viewer_replace_host(ghost)) { + gchar *replacement_host = NULL; +- if (g_strcmp0(transport, "ssh") == 0) { ++ if ((g_strcmp0(transport, "ssh") == 0) ++ && !virt_viewer_app_get_direct(app)) { + replacement_host = g_strdup("localhost"); + } else { + replacement_host = g_strdup(host); diff --git a/SOURCES/0034-Improve-docs-for-attach-flag-in-virt-viewer.patch b/SOURCES/0034-Improve-docs-for-attach-flag-in-virt-viewer.patch new file mode 100644 index 0000000..f23d730 --- /dev/null +++ b/SOURCES/0034-Improve-docs-for-attach-flag-in-virt-viewer.patch @@ -0,0 +1,35 @@ +From 87e32602e117d922f531fda93bad984665a655d9 Mon Sep 17 00:00:00 2001 +From: "Daniel P. Berrange" <berrange@redhat.com> +Date: Wed, 29 Jan 2014 16:22:09 +0000 +Subject: [PATCH] Improve docs for --attach flag in virt-viewer + +People seem to have a hard time understanding the --attach flag. +Rewrite the docs in the hope that people figure it out this time. + +Signed-off-by: Daniel P. Berrange <berrange@redhat.com> +--- + man/virt-viewer.pod | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index 937a891..ac9b268 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -59,10 +59,13 @@ used SSH. + + =item -a, --attach + +-Use libvirt to directly attach to a local display, instead of making a +-TCP/UNIX socket connection. This avoids the need to authentication with +-the remote display, if authentication with libvirt is already allowed. +-This option does not work with remote displays. ++Instead of making a direct TCP/UNIX socket connection to the remote display, ++ask libvirt to provide a pre-connected socket for the display. This avoids ++the need to authenticate with the remote display server directly. This option ++will only work when connecting to a guest that is running on the same host ++as the virt-viewer program. If attaching to the guest via libvirt fails, ++virt-viewer will automatically fallback to trying a regular direct TCP/UNIX ++socket connection. + + =item -f, --full-screen + diff --git a/SOURCES/0035-Fix-silentely-typo-in-remote-viewer-man-page.patch b/SOURCES/0035-Fix-silentely-typo-in-remote-viewer-man-page.patch new file mode 100644 index 0000000..e77bfeb --- /dev/null +++ b/SOURCES/0035-Fix-silentely-typo-in-remote-viewer-man-page.patch @@ -0,0 +1,22 @@ +From 5c192f0f0f97409c5fb48043d251446d9f36553e Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Wed, 12 Mar 2014 09:29:23 +0100 +Subject: [PATCH] Fix 'silentely' typo in remote-viewer man page + +--- + 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 bb7ede3..2c84432 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -253,7 +253,7 @@ The current SPICE channels are: main, display, inputs, cursor, playback, record, + + =item C<delete-this-file> (boolean) + +-Set to 1 for the client to remove this connection file (if it can't, it will fail silentely) ++Set to 1 for the client to remove this connection file (if it can't, it will fail silently) + + =item C<proxy> (string) + diff --git a/SOURCES/0036-virt-viewer.xml-remove-zoom-in-out-accelerators.patch b/SOURCES/0036-virt-viewer.xml-remove-zoom-in-out-accelerators.patch new file mode 100644 index 0000000..3fe7487 --- /dev/null +++ b/SOURCES/0036-virt-viewer.xml-remove-zoom-in-out-accelerators.patch @@ -0,0 +1,31 @@ +From 8e093e18406f6781a95bd49f6da5946562cb1a68 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Tue, 22 Jul 2014 13:22:02 +0200 +Subject: [PATCH] virt-viewer.xml: remove zoom-{in,out} accelerators + +The XML menu accelerators conflict with accelerator set in the code and +prevent using them. This is a regression from d29fc63d. +--- + src/virt-viewer.xml | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/virt-viewer.xml b/src/virt-viewer.xml +index fd8295f..e2b836c 100644 +--- a/src/virt-viewer.xml ++++ b/src/virt-viewer.xml +@@ -134,7 +134,6 @@ + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> +- <accelerator key="plus" signal="activate" modifiers="GDK_CONTROL_MASK"/> + <signal name="activate" handler="virt_viewer_window_menu_view_zoom_in" swapped="no"/> + </object> + </child> +@@ -147,7 +146,6 @@ + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> +- <accelerator key="minus" signal="activate" modifiers="GDK_CONTROL_MASK"/> + <signal name="activate" handler="virt_viewer_window_menu_view_zoom_out" swapped="no"/> + </object> + </child> diff --git a/SOURCES/0037-Add-a-dialog-showing-details-of-the-current-guest.patch b/SOURCES/0037-Add-a-dialog-showing-details-of-the-current-guest.patch new file mode 100644 index 0000000..de444b4 --- /dev/null +++ b/SOURCES/0037-Add-a-dialog-showing-details-of-the-current-guest.patch @@ -0,0 +1,396 @@ +From d3cd399f4379d4c635fbd88cc83773cffaafd1b3 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 17 Jan 2014 13:39:29 -0600 +Subject: [PATCH] Add a dialog showing details of the current guest + +This allows the user to obtain the GUID and vm name of the currently-connected +guest. Obviously, this only works with spice. In the future, it will allow them +to set guest-specific configuration options (using a GUID as a key) +--- + src/Makefile.am | 1 + + src/virt-viewer-app.c | 25 ++++++++ + src/virt-viewer-app.h | 1 - + src/virt-viewer-guest-details.xml | 120 ++++++++++++++++++++++++++++++++++++++ + src/virt-viewer-session-spice.c | 19 +++++- + src/virt-viewer-window.c | 45 ++++++++++++++ + src/virt-viewer.c | 2 +- + src/virt-viewer.xml | 10 ++++ + 8 files changed, 219 insertions(+), 4 deletions(-) + create mode 100644 src/virt-viewer-guest-details.xml + +diff --git a/src/Makefile.am b/src/Makefile.am +index b3a9637..d4163c8 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -8,6 +8,7 @@ builderxml_DATA = \ + virt-viewer.xml \ + virt-viewer-about.xml \ + virt-viewer-auth.xml \ ++ virt-viewer-guest-details.xml \ + $(NULL) + + EXTRA_DIST = \ +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 27e5164..8f5aa2b 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -139,6 +139,7 @@ struct _VirtViewerAppPrivate { + gchar *guest_name; + gboolean grabbed; + char *title; ++ char *uuid; + + gint focused; + GKeyFile *config; +@@ -168,6 +169,7 @@ enum { + PROP_HAS_FOCUS, + PROP_KIOSK, + PROP_QUIT_ON_DISCONNECT, ++ PROP_UUID, + }; + + enum { +@@ -305,6 +307,7 @@ app_window_try_fullscreen(VirtViewerApp *self G_GNUC_UNUSED, + } + + ++static + void virt_viewer_app_set_uuid_string(VirtViewerApp* self, const gchar* uuid_string) + { + GArray* mapping = NULL; +@@ -315,6 +318,8 @@ void virt_viewer_app_set_uuid_string(VirtViewerApp* self, const gchar* uuid_stri + + g_debug("%s: UUID changed to %s", G_STRFUNC, uuid_string); + ++ g_free(self->priv->uuid); ++ self->priv->uuid = g_strdup(uuid_string); + displays = g_key_file_get_integer_list(self->priv->config, + uuid_string, "monitor-mapping", &ndisplays, &error); + if (error) { +@@ -1443,6 +1448,10 @@ virt_viewer_app_get_property (GObject *object, guint property_id, + g_value_set_boolean(value, priv->quit_on_disconnect); + break; + ++ case PROP_UUID: ++ g_value_set_string(value, priv->uuid); ++ break; ++ + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +@@ -1492,6 +1501,10 @@ virt_viewer_app_set_property (GObject *object, guint property_id, + priv->quit_on_disconnect = g_value_get_boolean(value); + break; + ++ case PROP_UUID: ++ virt_viewer_app_set_uuid_string(self, g_value_get_string(value)); ++ break; ++ + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +@@ -1524,6 +1537,8 @@ virt_viewer_app_dispose (GObject *object) + priv->guri = NULL; + g_free(priv->title); + priv->title = NULL; ++ g_free(priv->uuid); ++ priv->uuid = NULL; + g_free(priv->config_file); + priv->config_file = NULL; + g_clear_pointer(&priv->config, g_key_file_free); +@@ -1791,6 +1806,16 @@ virt_viewer_app_class_init (VirtViewerAppClass *klass) + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + ++ g_object_class_install_property(object_class, ++ PROP_UUID, ++ g_param_spec_string("uuid", ++ "uuid", ++ "uuid", ++ NULL, ++ G_PARAM_READABLE | ++ G_PARAM_WRITABLE | ++ G_PARAM_STATIC_STRINGS)); ++ + signals[SIGNAL_WINDOW_ADDED] = + g_signal_new("window-added", + G_OBJECT_CLASS_TYPE(object_class), +diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h +index f03369b..804e076 100644 +--- a/src/virt-viewer-app.h ++++ b/src/virt-viewer-app.h +@@ -102,7 +102,6 @@ const GOptionEntry* virt_viewer_app_get_options(void); + void virt_viewer_app_clear_hotkeys(VirtViewerApp *app); + gint virt_viewer_app_get_n_initial_displays(VirtViewerApp* self); + gint virt_viewer_app_get_initial_monitor_for_display(VirtViewerApp* self, gint display); +-void virt_viewer_app_set_uuid_string(VirtViewerApp* self, const gchar* uuid_string); + void virt_viewer_app_set_enable_accel(VirtViewerApp *app, gboolean enable); + + G_END_DECLS +diff --git a/src/virt-viewer-guest-details.xml b/src/virt-viewer-guest-details.xml +new file mode 100644 +index 0000000..7f00567 +--- /dev/null ++++ b/src/virt-viewer-guest-details.xml +@@ -0,0 +1,120 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<!-- Generated with glade 3.16.0 on Thu Jan 16 16:13:38 2014 --> ++<interface> ++ <!-- interface-requires gtk+ 3.0 --> ++ <object class="GtkDialog" id="guestdetailsdialog"> ++ <property name="can_focus">False</property> ++ <property name="title" translatable="yes">Guest Details</property> ++ <property name="resizable">True</property> ++ <property name="default_width">400</property> ++ <property name="type_hint">dialog</property> ++ <signal name="response" handler="virt_viewer_window_guest_details_response" swapped="no"/> ++ <child internal-child="vbox"> ++ <object class="GtkBox" id="dialog-vbox2"> ++ <property name="can_focus">False</property> ++ <property name="orientation">vertical</property> ++ <property name="spacing">2</property> ++ <child internal-child="action_area"> ++ <object class="GtkButtonBox" id="dialog-action_area2"> ++ <property name="can_focus">False</property> ++ <property name="layout_style">end</property> ++ <child> ++ <object class="GtkButton" id="button1"> ++ <property name="label">gtk-close</property> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="receives_default">True</property> ++ <property name="use_stock">True</property> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">True</property> ++ <property name="position">0</property> ++ </packing> ++ </child> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">True</property> ++ <property name="pack_type">end</property> ++ <property name="position">0</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkTable" id="grid1"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="border_width">6</property> ++ <property name="row_spacing">6</property> ++ <property name="column_spacing">6</property> ++ <property name="n_rows">2</property> ++ <child> ++ <object class="GtkLabel" id="label1"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="xalign">1</property> ++ <property name="label" translatable="yes">Name:</property> ++ </object> ++ <packing> ++ <property name="x_options">GTK_SHRINK | GTK_FILL</property> ++ <property name="y_options">GTK_FILL</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="label2"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="xalign">1</property> ++ <property name="label" translatable="yes">GUID:</property> ++ </object> ++ <packing> ++ <property name="top_attach">1</property> ++ <property name="bottom_attach">2</property> ++ <property name="x_options">GTK_SHRINK | GTK_FILL</property> ++ <property name="y_options">GTK_FILL</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="namevaluelabel"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="xalign">0</property> ++ <property name="label" translatable="yes">label</property> ++ <property name="selectable">True</property> ++ </object> ++ <packing> ++ <property name="left_attach">1</property> ++ <property name="right_attach">2</property> ++ <property name="y_options">GTK_FILL</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="guidvaluelabel"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="xalign">0</property> ++ <property name="label" translatable="yes">label</property> ++ <property name="selectable">True</property> ++ </object> ++ <packing> ++ <property name="left_attach">1</property> ++ <property name="right_attach">2</property> ++ <property name="top_attach">1</property> ++ <property name="bottom_attach">2</property> ++ <property name="y_options">GTK_FILL</property> ++ </packing> ++ </child> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">True</property> ++ <property name="position">1</property> ++ </packing> ++ </child> ++ </object> ++ </child> ++ <action-widgets> ++ <action-widget response="-7">button1</action-widget> ++ </action-widgets> ++ </object> ++</interface> +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index cb62444..c286fd9 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -840,8 +840,8 @@ uuid_changed(GObject *gobject G_GNUC_UNUSED, + } + + if (!uuid_empty) { +- gchar* uuid_str = spice_uuid_to_string(uuid); +- virt_viewer_app_set_uuid_string(app, uuid_str); ++ gchar *uuid_str = spice_uuid_to_string(uuid); ++ g_object_set(app, "uuid", uuid_str, NULL); + g_free(uuid_str); + } + } +@@ -849,6 +849,20 @@ uuid_changed(GObject *gobject G_GNUC_UNUSED, + virt_viewer_session_spice_fullscreen_auto_conf(self); + } + ++static void ++name_changed(GObject *gobject G_GNUC_UNUSED, ++ GParamSpec *pspec G_GNUC_UNUSED, ++ VirtViewerSessionSpice *self) ++{ ++ gchar *name = NULL; ++ VirtViewerApp* app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self)); ++ ++ g_object_get(self->priv->session, "name", &name, NULL); ++ ++ g_object_set(app, "guest-name", name, NULL); ++ g_free(name); ++} ++ + VirtViewerSession * + virt_viewer_session_spice_new(VirtViewerApp *app, GtkWindow *main_window) + { +@@ -864,6 +878,7 @@ virt_viewer_session_spice_new(VirtViewerApp *app, GtkWindow *main_window) + /* notify::uuid is guaranteed to be emitted during connection startup even + * if the server is too old to support sending uuid */ + g_signal_connect(self->priv->session, "notify::uuid", G_CALLBACK(uuid_changed), self); ++ g_signal_connect(self->priv->session, "notify::name", G_CALLBACK(name_changed), self); + + return VIRT_VIEWER_SESSION(self); + } +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index fadf0bb..f74f17f 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -49,6 +49,7 @@ void virt_viewer_window_menu_view_zoom_reset(GtkWidget *menu, VirtViewerWindow * + gboolean virt_viewer_window_delete(GtkWidget *src, void *dummy, VirtViewerWindow *self); + void virt_viewer_window_menu_file_quit(GtkWidget *src, VirtViewerWindow *self); + void virt_viewer_window_menu_help_about(GtkWidget *menu, VirtViewerWindow *self); ++void virt_viewer_window_menu_help_guest_details(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_view_fullscreen(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_send(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_file_screenshot(GtkWidget *menu, VirtViewerWindow *self); +@@ -1016,6 +1017,50 @@ virt_viewer_window_menu_view_release_cursor(GtkWidget *menu G_GNUC_UNUSED, + } + + G_MODULE_EXPORT void ++virt_viewer_window_menu_help_guest_details(GtkWidget *menu G_GNUC_UNUSED, ++ VirtViewerWindow *self) ++{ ++ GtkBuilder *ui = virt_viewer_util_load_ui("virt-viewer-guest-details.xml"); ++ char *name = NULL; ++ char *uuid = NULL; ++ ++ g_return_if_fail(ui != NULL); ++ ++ GtkWidget *dialog = GTK_WIDGET(gtk_builder_get_object(ui, "guestdetailsdialog")); ++ GtkWidget *namelabel = GTK_WIDGET(gtk_builder_get_object(ui, "namevaluelabel")); ++ GtkWidget *guidlabel = GTK_WIDGET(gtk_builder_get_object(ui, "guidvaluelabel")); ++ ++ g_return_if_fail(dialog && namelabel && guidlabel); ++ ++ g_object_get(self->priv->app, "guest-name", &name, "uuid", &uuid, NULL); ++ ++ if (!name || *name == '\0') ++ name = g_strdup(_("Unknown")); ++ if (!uuid || *uuid == '\0') ++ uuid = g_strdup(_("Unknown")); ++ gtk_label_set_text(GTK_LABEL(namelabel), name); ++ gtk_label_set_text(GTK_LABEL(guidlabel), uuid); ++ g_free(name); ++ g_free(uuid); ++ ++ gtk_window_set_transient_for(GTK_WINDOW(dialog), ++ GTK_WINDOW(self->priv->window)); ++ ++ gtk_builder_connect_signals(ui, self); ++ ++ gtk_widget_show_all(dialog); ++ ++ g_object_unref(G_OBJECT(ui)); ++} ++ ++G_MODULE_EXPORT void ++virt_viewer_window_guest_details_response(GtkDialog *dialog, gint response_id, gpointer user_data) ++{ ++ if (response_id == GTK_RESPONSE_CLOSE) ++ gtk_widget_hide(GTK_WIDGET(dialog)); ++} ++ ++G_MODULE_EXPORT void + virt_viewer_window_menu_help_about(GtkWidget *menu G_GNUC_UNUSED, + VirtViewerWindow *self) + { +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 739b817..076611c 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -560,7 +560,7 @@ virt_viewer_initial_connect(VirtViewerApp *app, GError **error) + if (virDomainGetUUIDString(dom, uuid_string) < 0) { + g_debug("Couldn't get uuid from libvirt"); + } else { +- virt_viewer_app_set_uuid_string(app, uuid_string); ++ g_object_set(app, "uuid", uuid_string, NULL); + } + + virt_viewer_app_show_status(app, _("Checking guest domain status")); +diff --git a/src/virt-viewer.xml b/src/virt-viewer.xml +index e2b836c..d489653 100644 +--- a/src/virt-viewer.xml ++++ b/src/virt-viewer.xml +@@ -215,6 +215,16 @@ + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> ++ <object class="GtkMenuItem" id="menu-help-guest-details"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="use_action_appearance">False</property> ++ <property name="label" translatable="yes">_Guest Details</property> ++ <property name="use_underline">True</property> ++ <signal name="activate" handler="virt_viewer_window_menu_help_guest_details" swapped="no"/> ++ </object> ++ </child> ++ <child> + <object class="GtkImageMenuItem" id="imagemenuitem10"> + <property name="label">gtk-about</property> + <property name="visible">True</property> diff --git a/SOURCES/0038-Change-per-guest-fullscreen-config-format.patch b/SOURCES/0038-Change-per-guest-fullscreen-config-format.patch new file mode 100644 index 0000000..54f25fa --- /dev/null +++ b/SOURCES/0038-Change-per-guest-fullscreen-config-format.patch @@ -0,0 +1,214 @@ +From 9c5cb3367b05ab32c9ecd88842736639e5b17328 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Mon, 20 Jan 2014 10:26:10 -0600 +Subject: [PATCH] Change per-guest fullscreen config format + +use <display>:<monitor>;<display>:<monitor> instead of simply implying the +display from the array index (e.g. <monitor>;<monitor>). This allows you to set +up sparse guest displays (e.g. display 1 + 3). + +For example, to configure display 1 to be fullscreen on monitor 2 and display 2 +to be fullscreen on monitor 3: + + monitor-mapping=1:2;2:3 +--- + src/virt-viewer-app.c | 133 +++++++++++++++++++++++++++++----------- + src/virt-viewer-session-spice.c | 2 +- + 2 files changed, 99 insertions(+), 36 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 8f5aa2b..9182fe4 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -108,7 +108,7 @@ struct _VirtViewerAppPrivate { + VirtViewerWindow *main_window; + GtkWidget *main_notebook; + GHashTable *windows; +- GArray *initial_display_map; ++ GHashTable *initial_display_map; + gchar *clipboard; + + gboolean direct; +@@ -273,20 +273,19 @@ virt_viewer_app_quit(VirtViewerApp *self) + gint virt_viewer_app_get_n_initial_displays(VirtViewerApp* self) + { + if (self->priv->initial_display_map) +- return self->priv->initial_display_map->len; ++ return g_hash_table_size(self->priv->initial_display_map); + + return gdk_screen_get_n_monitors(gdk_screen_get_default()); + } + + gint virt_viewer_app_get_initial_monitor_for_display(VirtViewerApp* self, gint display) + { +- gint monitor = -1; ++ gint monitor = display; + + if (self->priv->initial_display_map) { +- if (display < self->priv->initial_display_map->len) +- monitor = g_array_index(self->priv->initial_display_map, gint, display); +- } else { +- monitor = display; ++ gpointer value = NULL; ++ if (g_hash_table_lookup_extended(self->priv->initial_display_map, GINT_TO_POINTER(display), NULL, &value)) ++ monitor = GPOINTER_TO_INT(value); + } + + return monitor; +@@ -307,43 +306,107 @@ app_window_try_fullscreen(VirtViewerApp *self G_GNUC_UNUSED, + } + + +-static +-void virt_viewer_app_set_uuid_string(VirtViewerApp* self, const gchar* uuid_string) ++static GHashTable* ++virt_viewer_app_parse_monitor_mappings(gchar **mappings, gsize nmappings) + { +- GArray* mapping = NULL; +- GError* error = NULL; +- gsize ndisplays = 0; +- gint* displays = NULL; + gint nmonitors = gdk_screen_get_n_monitors(gdk_screen_get_default()); ++ GHashTable *displaymap = g_hash_table_new(g_direct_hash, g_direct_equal); ++ GHashTable *monitormap = g_hash_table_new(g_direct_hash, g_direct_equal); ++ int i = 0; ++ gchar **tokens = NULL; ++ ++ for (i = 0; i < nmappings; i++) { ++ gchar *endptr = NULL; ++ gint display = 0, monitor = 0; ++ ++ tokens = g_strsplit(mappings[i], ":", 2); ++ if (g_strv_length(tokens) != 2) { ++ g_warning("Invalid monitor-mapping configuration: '%s'. Expected format is '<DISPLAY-ID>:<MONITOR-ID>'. Got %lu elements", mappings[i], G_N_ELEMENTS(tokens)); ++ g_strfreev(tokens); ++ goto configerror; ++ } + +- g_debug("%s: UUID changed to %s", G_STRFUNC, uuid_string); ++ display = strtol(tokens[0], &endptr, 10); ++ if ((endptr && *endptr != '\0') || display < 1) { ++ g_warning("Invalid monitor-mapping configuration: display id is invalid: %s %p='%s'", tokens[0], endptr, endptr); ++ g_strfreev(tokens); ++ goto configerror; ++ } ++ monitor = strtol(tokens[1], &endptr, 10); ++ if ((endptr && *endptr != '\0') || monitor < 1) { ++ g_warning("Invalid monitor-mapping configuration: monitor id '%s' is invalid", tokens[1]); ++ g_strfreev(tokens); ++ goto configerror; ++ } ++ g_strfreev(tokens); ++ ++ if (monitor > nmonitors) ++ g_warning("Initial monitor #%i for display #%i does not exist, skipping...", monitor, display); ++ else { ++ /* config file format is 1-based, not 0-based */ ++ display--; ++ monitor--; ++ ++ if (g_hash_table_lookup_extended(displaymap, GINT_TO_POINTER(display), NULL, NULL) || ++ g_hash_table_lookup_extended(monitormap, GINT_TO_POINTER(monitor), NULL, NULL)) { ++ g_warning("Invalid monitor-mapping configuration: a display or monitor id was specified twice"); ++ goto configerror; ++ } ++ g_debug("Fullscreen config: mapping guest display %i to monitor %i", display, monitor); ++ g_hash_table_insert(displaymap, GINT_TO_POINTER(display), GINT_TO_POINTER(monitor)); ++ g_hash_table_insert(monitormap, GINT_TO_POINTER(monitor), GINT_TO_POINTER(display)); ++ } ++ } + +- g_free(self->priv->uuid); +- self->priv->uuid = g_strdup(uuid_string); +- displays = g_key_file_get_integer_list(self->priv->config, +- uuid_string, "monitor-mapping", &ndisplays, &error); ++ g_hash_table_unref(monitormap); ++ return displaymap; ++ ++configerror: ++ g_hash_table_unref(monitormap); ++ g_hash_table_unref(displaymap); ++ return NULL; ++} ++ ++static GHashTable* ++virt_viewer_app_get_monitor_mapping_for_section(VirtViewerApp *self, const gchar *section) ++{ ++ GError *error = NULL; ++ gsize nmappings = 0; ++ gchar **mappings = NULL; ++ GHashTable *mapping = NULL; ++ ++ mappings = g_key_file_get_string_list(self->priv->config, ++ section, "monitor-mapping", &nmappings, &error); + if (error) { +- if (error->code != G_KEY_FILE_ERROR_GROUP_NOT_FOUND) +- g_warning("Error reading monitor assignments: %s", error->message); ++ if (error->code != G_KEY_FILE_ERROR_GROUP_NOT_FOUND ++ && error->code != G_KEY_FILE_ERROR_KEY_NOT_FOUND) ++ g_warning("Error reading monitor assignments for %s: %s", section, error->message); + g_clear_error(&error); + } else { +- int i = 0; +- mapping = g_array_sized_new(FALSE, FALSE, sizeof(displays[0]), ndisplays); +- // config file format is 1-based, not 0-based +- for (i = 0; i < ndisplays; i++) { +- gint val = displays[i] - 1; +- +- // sanity check +- if (val >= nmonitors) +- g_warning("Initial monitor #%i for display #%i does not exist, skipping...", val, i); +- else +- g_array_append_val(mapping, val); +- } +- g_free(displays); ++ mapping = virt_viewer_app_parse_monitor_mappings(mappings, nmappings); ++ } ++ g_strfreev(mappings); ++ ++ return mapping; ++} ++ ++static ++void virt_viewer_app_set_uuid_string(VirtViewerApp *self, const gchar *uuid_string) ++{ ++ GHashTable *mapping = NULL; ++ ++ g_debug("%s: UUID changed to %s", G_STRFUNC, uuid_string); ++ ++ g_free(self->priv->uuid); ++ self->priv->uuid = g_strdup(uuid_string); ++ mapping = virt_viewer_app_get_monitor_mapping_for_section(self, uuid_string); ++ if (!mapping) { ++ g_debug("No guest-specific fullscreen config, using fallback"); ++ mapping = virt_viewer_app_get_monitor_mapping_for_section(self, "fallback"); + } + + if (self->priv->initial_display_map) +- g_array_unref(self->priv->initial_display_map); ++ g_hash_table_unref(self->priv->initial_display_map); + + self->priv->initial_display_map = mapping; + +@@ -1542,7 +1605,7 @@ virt_viewer_app_dispose (GObject *object) + g_free(priv->config_file); + priv->config_file = NULL; + g_clear_pointer(&priv->config, g_key_file_free); +- g_clear_pointer(&priv->initial_display_map, g_array_unref); ++ g_clear_pointer(&priv->initial_display_map, g_hash_table_unref); + + virt_viewer_app_free_connect_info(self); + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index c286fd9..097c9d7 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -855,7 +855,7 @@ name_changed(GObject *gobject G_GNUC_UNUSED, + VirtViewerSessionSpice *self) + { + gchar *name = NULL; +- VirtViewerApp* app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self)); ++ VirtViewerApp *app = virt_viewer_session_get_app(VIRT_VIEWER_SESSION(self)); + + g_object_get(self->priv->session, "name", &name, NULL); + diff --git a/SOURCES/0039-Write-vm-name-to-config-file-as-comment.patch b/SOURCES/0039-Write-vm-name-to-config-file-as-comment.patch new file mode 100644 index 0000000..3702b5b --- /dev/null +++ b/SOURCES/0039-Write-vm-name-to-config-file-as-comment.patch @@ -0,0 +1,34 @@ +From 894ca98a86fb56b5dd0fae2631a5ad1a5db64416 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Mon, 20 Jan 2014 10:27:36 -0600 +Subject: [PATCH] Write vm name to config file as comment + +--- + src/virt-viewer-app.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 9182fe4..aa574be 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -242,6 +242,20 @@ virt_viewer_app_save_config(VirtViewerApp *self) + g_warning("failed to create config directory"); + g_free(dir); + ++ if (priv->uuid && priv->guest_name) { ++ // if there's no comment for this uuid settings group, add a comment ++ // with the vm name so user can make sense of it later. ++ gchar *comment = g_key_file_get_comment(priv->config, priv->uuid, NULL, &error); ++ if (error) { ++ g_warning("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); ++ } ++ g_free(comment); ++ } ++ + if ((data = g_key_file_to_data(priv->config, NULL, &error)) == NULL || + !g_file_set_contents(priv->config_file, data, -1, &error)) { + g_warning("Couldn't save configuration: %s", error->message); diff --git a/SOURCES/0040-Don-t-print-warning-for-missing-comment-in-config-fi.patch b/SOURCES/0040-Don-t-print-warning-for-missing-comment-in-config-fi.patch new file mode 100644 index 0000000..31abb67 --- /dev/null +++ b/SOURCES/0040-Don-t-print-warning-for-missing-comment-in-config-fi.patch @@ -0,0 +1,23 @@ +From e6afb98c0ed4aa45a77e84bea412b283a9b87789 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 5 Sep 2014 11:15:52 -0500 +Subject: [PATCH] Don't print warning for missing comment in config file + +Change g_warning to g_debug as suggested by Marc-Andre +--- + src/virt-viewer-app.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index aa574be..b8b5c9c 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -247,7 +247,7 @@ virt_viewer_app_save_config(VirtViewerApp *self) + // with the vm name so user can make sense of it later. + gchar *comment = g_key_file_get_comment(priv->config, priv->uuid, NULL, &error); + if (error) { +- g_warning("Unable to get comment from key file: %s", error->message); ++ g_debug("Unable to get comment from key file: %s", error->message); + g_clear_error(&error); + } else { + if (!comment || *comment == '\0') diff --git a/SOURCES/0041-remote-viewer-allow-username-in-ovirt-URIs.patch b/SOURCES/0041-remote-viewer-allow-username-in-ovirt-URIs.patch new file mode 100644 index 0000000..1f519c6 --- /dev/null +++ b/SOURCES/0041-remote-viewer-allow-username-in-ovirt-URIs.patch @@ -0,0 +1,122 @@ +From 7053d0bcbe47163fbc427aa8eff7e4892330c295 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 18 Jul 2014 16:51:05 -0500 +Subject: [PATCH] remote-viewer: allow username in ovirt URIs + +When the user launches remote-viewer with an ovirt URI of the form + + ovirt://user@host/vmname + +Pre-populate the authentication dialog with the specified username. We +don't support specifying the password on the commandline, since that is +a potential security risk. + +Resolves: rhbz#1061826 + +(cherry picked from commit 49abd71dae12d2b284aee7d6c9c8213b22738b19) +--- + src/remote-viewer.c | 20 ++++++++++++++++---- + src/virt-viewer-auth.c | 10 +++++++++- + 2 files changed, 25 insertions(+), 5 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index fac8915..2782ad3 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -631,7 +631,7 @@ remote_viewer_window_added(VirtViewerApp *app G_GNUC_UNUSED, + + #ifdef HAVE_OVIRT + static gboolean +-parse_ovirt_uri(const gchar *uri_str, char **rest_uri, char **name) ++parse_ovirt_uri(const gchar *uri_str, char **rest_uri, char **name, char** username) + { + char *vm_name = NULL; + char *rel_path; +@@ -669,6 +669,9 @@ parse_ovirt_uri(const gchar *uri_str, char **rest_uri, char **name) + vm_name = path_elements[element_count-1]; + path_elements[element_count-1] = NULL; + ++ if (username && uri->user) ++ *username = g_strdup(uri->user); ++ + /* build final URI */ + rel_path = g_strjoinv("/", path_elements); + /* FIXME: how to decide between http and https? */ +@@ -688,10 +691,14 @@ static gboolean + authenticate_cb(RestProxy *proxy, G_GNUC_UNUSED RestProxyAuth *auth, + G_GNUC_UNUSED gboolean retrying, gpointer user_data) + { +- gchar *username; +- gchar *password; ++ gchar *username = NULL; ++ gchar *password = NULL; + VirtViewerWindow *window; + ++ g_object_get(proxy, ++ "username", &username, ++ NULL); ++ + window = virt_viewer_app_get_main_window(VIRT_VIEWER_APP(user_data)); + int ret = virt_viewer_auth_collect_credentials(virt_viewer_window_get_window(window), + "oVirt", +@@ -723,6 +730,7 @@ create_ovirt_session(VirtViewerApp *app, const char *uri) + GError *error = NULL; + char *rest_uri = NULL; + char *vm_name = NULL; ++ char* username = NULL; + gboolean success = FALSE; + guint port; + guint secure_port; +@@ -737,11 +745,15 @@ create_ovirt_session(VirtViewerApp *app, const char *uri) + + g_return_val_if_fail(VIRT_VIEWER_IS_APP(app), FALSE); + +- if (!parse_ovirt_uri(uri, &rest_uri, &vm_name)) ++ if (!parse_ovirt_uri(uri, &rest_uri, &vm_name, &username)) + goto error; + proxy = ovirt_proxy_new(rest_uri); + if (proxy == NULL) + goto error; ++ ++ g_object_set(proxy, ++ "username", username, ++ NULL); + ovirt_set_proxy_options(proxy); + g_signal_connect(G_OBJECT(proxy), "authenticate", + G_CALLBACK(authenticate_cb), app); +diff --git a/src/virt-viewer-auth.c b/src/virt-viewer-auth.c +index 1fb670d..c4ea693 100644 +--- a/src/virt-viewer-auth.c ++++ b/src/virt-viewer-auth.c +@@ -32,6 +32,10 @@ + #include "virt-viewer-auth.h" + + ++/* NOTE: if username is provided, and *username is non-NULL, the user input ++ * field will be pre-filled with this value. The existing string will be freed ++ * before setting the output parameter to the user-entered value. ++ */ + int + virt_viewer_auth_collect_credentials(GtkWindow *window, + const char *type, +@@ -60,6 +64,8 @@ virt_viewer_auth_collect_credentials(GtkWindow *window, + promptPassword = GTK_WIDGET(gtk_builder_get_object(creds, "prompt-password")); + + gtk_widget_set_sensitive(credUsername, username != NULL); ++ if (username && *username) ++ gtk_entry_set_text(GTK_ENTRY(credUsername), *username); + gtk_widget_set_sensitive(promptUsername, username != NULL); + gtk_widget_set_sensitive(credPassword, password != NULL); + gtk_widget_set_sensitive(promptPassword, password != NULL); +@@ -82,8 +88,10 @@ virt_viewer_auth_collect_credentials(GtkWindow *window, + gtk_widget_hide(dialog); + + if (response == GTK_RESPONSE_OK) { +- if (username) ++ if (username) { ++ g_free(*username); + *username = g_strdup(gtk_entry_get_text(GTK_ENTRY(credUsername))); ++ } + if (password) + *password = g_strdup(gtk_entry_get_text(GTK_ENTRY(credPassword))); + } diff --git a/SOURCES/0042-remote-viewer-oVirt-username-review-fixes.patch b/SOURCES/0042-remote-viewer-oVirt-username-review-fixes.patch new file mode 100644 index 0000000..9fab72b --- /dev/null +++ b/SOURCES/0042-remote-viewer-oVirt-username-review-fixes.patch @@ -0,0 +1,61 @@ +From 71241ea3d9643a1d735d68b2a9670ccd060a1df8 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 18 Jul 2014 16:45:58 -0500 +Subject: [PATCH] remote-viewer: oVirt username review fixes + +Minor fixes from patch review + +Resolves: rhbz#1061826 +(cherry picked from commit ad8966ccf93d10ee21d43328b3970e8857570584) +--- + src/remote-viewer.c | 5 +++-- + src/virt-viewer-auth.c | 5 ++++- + 2 files changed, 7 insertions(+), 3 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 2782ad3..d9d7baf 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -631,7 +631,7 @@ remote_viewer_window_added(VirtViewerApp *app G_GNUC_UNUSED, + + #ifdef HAVE_OVIRT + static gboolean +-parse_ovirt_uri(const gchar *uri_str, char **rest_uri, char **name, char** username) ++parse_ovirt_uri(const gchar *uri_str, char **rest_uri, char **name, char **username) + { + char *vm_name = NULL; + char *rel_path; +@@ -730,7 +730,7 @@ create_ovirt_session(VirtViewerApp *app, const char *uri) + GError *error = NULL; + char *rest_uri = NULL; + char *vm_name = NULL; +- char* username = NULL; ++ char *username = NULL; + gboolean success = FALSE; + guint port; + guint secure_port; +@@ -836,6 +836,7 @@ create_ovirt_session(VirtViewerApp *app, const char *uri) + success = TRUE; + + error: ++ g_free(username); + g_free(rest_uri); + g_free(vm_name); + g_free(ticket); +diff --git a/src/virt-viewer-auth.c b/src/virt-viewer-auth.c +index c4ea693..bb03516 100644 +--- a/src/virt-viewer-auth.c ++++ b/src/virt-viewer-auth.c +@@ -64,8 +64,11 @@ virt_viewer_auth_collect_credentials(GtkWindow *window, + promptPassword = GTK_WIDGET(gtk_builder_get_object(creds, "prompt-password")); + + gtk_widget_set_sensitive(credUsername, username != NULL); +- if (username && *username) ++ if (username && *username) { + gtk_entry_set_text(GTK_ENTRY(credUsername), *username); ++ /* if username is pre-filled, move focus to password field */ ++ gtk_widget_grab_focus(credPassword); ++ } + gtk_widget_set_sensitive(promptUsername, username != NULL); + gtk_widget_set_sensitive(credPassword, password != NULL); + gtk_widget_set_sensitive(promptPassword, password != NULL); diff --git a/SOURCES/0043-Auth-fix-leak-of-username.patch b/SOURCES/0043-Auth-fix-leak-of-username.patch new file mode 100644 index 0000000..018062d --- /dev/null +++ b/SOURCES/0043-Auth-fix-leak-of-username.patch @@ -0,0 +1,41 @@ +From 7e2d056bd8db3068d1660ad934feae4f3787fc9f Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Tue, 12 Aug 2014 11:01:46 -0500 +Subject: [PATCH] Auth: fix leak of username + +When collect_credentials() returns a failure status, 'username' was +potentially leaked. + +Resolves: rhbz#1061826 +(cherry picked from commit b7c80494606c0dbfbae305411ad0080a5ef9282c) +--- + src/remote-viewer.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index d9d7baf..2d398c8 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -704,17 +704,16 @@ authenticate_cb(RestProxy *proxy, G_GNUC_UNUSED RestProxyAuth *auth, + "oVirt", + NULL, + &username, &password); +- if (ret < 0) { +- return FALSE; +- } else { ++ if (ret == 0) { + g_object_set(G_OBJECT(proxy), + "username", username, + "password", password, + NULL); +- g_free(username); +- g_free(password); +- return TRUE; + } ++ ++ g_free(username); ++ g_free(password); ++ return (ret == 0); + } + + diff --git a/SOURCES/0044-ovirt-Remove-extra-from-oVirt-URI.patch b/SOURCES/0044-ovirt-Remove-extra-from-oVirt-URI.patch new file mode 100644 index 0000000..0293e8b --- /dev/null +++ b/SOURCES/0044-ovirt-Remove-extra-from-oVirt-URI.patch @@ -0,0 +1,42 @@ +From 85f1cf2f74e2f5dc18a57eded07faed148e4fec2 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Wed, 16 Apr 2014 13:56:48 +0200 +Subject: [PATCH] ovirt: Remove extra '/' from oVirt URI + +The 'path' part of the URI will always start with a '/' when present as +this is what separates it from the hostname. When rebuilding the final +URI, the current code inserts a '/' by itself between the hostname and +the path, which results in URIs with an extra '/': +https://ovirt.example.com//some/path/api + +This is not only cosmetic as this can cause issues with cookie handling +if libgovirt accesses //some/path/api while the cookie is set for +/some/path/api. + +Resolves: rhbz#1127156 +(cherry picked from commit 914f75ee8d2264cb2fd4276a3a935f2f7bbfbc82) +--- + src/remote-viewer.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 2d398c8..26f0634 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -656,6 +656,7 @@ parse_ovirt_uri(const gchar *uri_str, char **rest_uri, char **name, char **usern + xmlFreeURI(uri); + return FALSE; + } ++ g_return_val_if_fail(*uri->path == '/', FALSE); + + /* extract VM name from path */ + path_elements = g_strsplit(uri->path, "/", -1); +@@ -675,7 +676,7 @@ parse_ovirt_uri(const gchar *uri_str, char **rest_uri, char **name, char **usern + /* build final URI */ + rel_path = g_strjoinv("/", path_elements); + /* FIXME: how to decide between http and https? */ +- *rest_uri = g_strdup_printf("https://%s/%s/api/", uri->server, rel_path); ++ *rest_uri = g_strdup_printf("https://%s%s/api/", uri->server, rel_path); + *name = vm_name; + g_free(rel_path); + g_strfreev(path_elements); diff --git a/SOURCES/0045-ovirt-Add-OvirtForeignMenu-class.patch b/SOURCES/0045-ovirt-Add-OvirtForeignMenu-class.patch new file mode 100644 index 0000000..a265e6e --- /dev/null +++ b/SOURCES/0045-ovirt-Add-OvirtForeignMenu-class.patch @@ -0,0 +1,837 @@ +From 790fa32424a9192e8d9feb3c501c7159e746e881 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Fri, 27 Sep 2013 13:17:55 +0200 +Subject: [PATCH] ovirt: Add OvirtForeignMenu class + +This class is used to implement the so-called oVirt 'foreign menu' +which is a menu populated with ISO images available on the +oVirt instance that the user can dynamically insert into the +virtual machine he is currently viewing. + +Resolves: rhbz#1127156 +(cherry picked from commit 894396d6b5e80ead9f04c28b859a111ed5b27ba5) +--- + configure.ac | 3 +- + src/Makefile.am | 4 + + src/ovirt-foreign-menu.c | 686 +++++++++++++++++++++++++++++++++++++++++++++++ + src/ovirt-foreign-menu.h | 82 ++++++ + 4 files changed, 774 insertions(+), 1 deletion(-) + create mode 100644 src/ovirt-foreign-menu.c + create mode 100644 src/ovirt-foreign-menu.h + +diff --git a/configure.ac b/configure.ac +index f966688..0515b37 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -21,7 +21,7 @@ GTK_VNC1_REQUIRED="0.3.8" + GTK_VNC2_REQUIRED="0.4.0" + SPICE_GTK_REQUIRED="0.22" + SPICE_PROTOCOL_REQUIRED="0.10.1" +-GOVIRT_REQUIRED="0.3.0" ++GOVIRT_REQUIRED="0.3.1" + + AC_SUBST([GLIB2_REQUIRED]) + AC_SUBST([LIBXML2_REQUIRED]) +@@ -200,6 +200,7 @@ AS_IF([test "x$have_ovirt" = "xyes"], + [AC_MSG_ERROR([oVirt support requested but libgovirt not found]) + ]) + ]) ++AM_CONDITIONAL([HAVE_OVIRT], [test "x$have_ovirt" = "xyes"]) + + dnl Decide if this platform can support the SSH tunnel feature. + AC_CHECK_HEADERS([sys/socket.h sys/un.h windows.h]) +diff --git a/src/Makefile.am b/src/Makefile.am +index d4163c8..c425522 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -68,6 +68,10 @@ COMMON_SOURCES += \ + $(NULL) + endif + ++if HAVE_OVIRT ++COMMON_SOURCES += \ ++ ovirt-foreign-menu.h ovirt-foreign-menu.c ++endif + + if HAVE_LIBVIRT + bin_PROGRAMS += virt-viewer +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +new file mode 100644 +index 0000000..0453ca1 +--- /dev/null ++++ b/src/ovirt-foreign-menu.c +@@ -0,0 +1,686 @@ ++/* ++ * Virt Viewer: A virtual machine console viewer ++ * ++ * Copyright (C) 2007-2014 Red Hat, Inc. ++ * Copyright (C) 2009-2012 Daniel P. Berrange ++ * Copyright (C) 2010 Marc-André Lureau ++ * ++ * 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: Daniel P. Berrange <berrange@redhat.com> ++ * Christope Fergeau <cfergeau@redhat.com> ++ */ ++ ++#include <config.h> ++ ++#include "ovirt-foreign-menu.h" ++#include "virt-glib-compat.h" ++#include "virt-viewer-util.h" ++ ++typedef enum { ++ STATE_0, ++ STATE_STORAGE_DOMAIN, ++ STATE_VM_CDROM, ++ STATE_CDROM_FILE, ++ STATE_ISOS ++} OvirtForeignMenuState; ++ ++static void ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, OvirtForeignMenuState state); ++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); ++ ++G_DEFINE_TYPE (OvirtForeignMenu, ovirt_foreign_menu, G_TYPE_OBJECT) ++ ++ ++struct _OvirtForeignMenuPrivate { ++ OvirtProxy *proxy; ++ OvirtApi *api; ++ OvirtVm *vm; ++ ++ OvirtCollection *files; ++ OvirtCdrom *cdrom; ++ ++ /* The next 2 members are used when changing the ISO image shown in ++ * a VM */ ++ /* Name of the ISO which is currently used by the VM OvirtCdrom */ ++ char *current_iso_name; ++ /* Name of the ISO we are trying to insert in the VM OvirtCdrom */ ++ char *next_iso_name; ++ ++ GList *iso_names; ++}; ++ ++ ++#define OVIRT_FOREIGN_MENU_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), OVIRT_TYPE_FOREIGN_MENU, OvirtForeignMenuPrivate)) ++ ++ ++enum { ++ PROP_0, ++ PROP_PROXY, ++ PROP_API, ++ PROP_VM, ++ PROP_FILE, ++ PROP_FILES, ++}; ++ ++ ++static char * ++ovirt_foreign_menu_get_current_iso_name(OvirtForeignMenu *foreign_menu) ++{ ++ char *name; ++ ++ if (foreign_menu->priv->cdrom == NULL) { ++ return NULL; ++ } ++ ++ g_object_get(foreign_menu->priv->cdrom, "file", &name, NULL); ++ ++ return name; ++} ++ ++ ++static void ++ovirt_foreign_menu_get_property(GObject *object, guint property_id, ++ GValue *value, GParamSpec *pspec) ++{ ++ OvirtForeignMenu *self = OVIRT_FOREIGN_MENU(object); ++ OvirtForeignMenuPrivate *priv = self->priv; ++ ++ switch (property_id) { ++ case PROP_PROXY: ++ g_value_set_object(value, priv->proxy); ++ break; ++ case PROP_API: ++ g_value_set_object(value, priv->api); ++ break; ++ case PROP_VM: ++ g_value_set_object(value, priv->vm); ++ break; ++ case PROP_FILE: ++ g_value_take_string(value, ++ ovirt_foreign_menu_get_current_iso_name(self)); ++ break; ++ case PROP_FILES: ++ g_value_set_pointer(value, priv->iso_names); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++ } ++} ++ ++ ++static void ++ovirt_foreign_menu_set_property(GObject *object, guint property_id, ++ const GValue *value G_GNUC_UNUSED, GParamSpec *pspec) ++{ ++ OvirtForeignMenu *self = OVIRT_FOREIGN_MENU(object); ++ OvirtForeignMenuPrivate *priv = self->priv; ++ ++ switch (property_id) { ++ case PROP_PROXY: ++ if (priv->proxy != NULL) { ++ g_object_unref(priv->proxy); ++ } ++ priv->proxy = g_value_dup_object(value); ++ break; ++ case PROP_API: ++ if (priv->api != NULL) { ++ g_object_unref(priv->api); ++ } ++ priv->api = g_value_dup_object(value); ++ break; ++ case PROP_VM: ++ if (priv->vm != NULL) { ++ g_object_unref(priv->vm); ++ } ++ priv->vm = g_value_dup_object(value); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++ } ++} ++ ++ ++static void ++ovirt_foreign_menu_dispose(GObject *obj) ++{ ++ OvirtForeignMenu *self = OVIRT_FOREIGN_MENU(obj); ++ ++ if (self->priv->proxy) { ++ g_object_unref(self->priv->proxy); ++ self->priv->proxy = NULL; ++ } ++ ++ if (self->priv->api != NULL) { ++ g_object_unref(self->priv->api); ++ self->priv->api = NULL; ++ } ++ ++ if (self->priv->vm) { ++ g_object_unref(self->priv->vm); ++ self->priv->vm = NULL; ++ } ++ ++ if (self->priv->files) { ++ g_object_unref(self->priv->files); ++ self->priv->files = NULL; ++ } ++ ++ if (self->priv->cdrom) { ++ g_object_unref(self->priv->cdrom); ++ self->priv->cdrom = NULL; ++ } ++ ++ if (self->priv->iso_names) { ++ g_list_free_full(self->priv->iso_names, (GDestroyNotify)g_free); ++ self->priv->iso_names = NULL; ++ } ++ ++ g_free(self->priv->current_iso_name); ++ self->priv->current_iso_name = NULL; ++ ++ g_free(self->priv->next_iso_name); ++ self->priv->next_iso_name = NULL; ++ ++ G_OBJECT_CLASS(ovirt_foreign_menu_parent_class)->dispose(obj); ++} ++ ++ ++static void ++ovirt_foreign_menu_class_init(OvirtForeignMenuClass *klass) ++{ ++ GObjectClass *oclass = G_OBJECT_CLASS(klass); ++ ++ oclass->get_property = ovirt_foreign_menu_get_property; ++ oclass->set_property = ovirt_foreign_menu_set_property; ++ oclass->dispose = ovirt_foreign_menu_dispose; ++ ++ g_type_class_add_private(klass, sizeof(OvirtForeignMenuPrivate)); ++ ++ g_object_class_install_property(oclass, ++ PROP_PROXY, ++ g_param_spec_object("proxy", ++ "OvirtProxy instance", ++ "OvirtProxy instance", ++ OVIRT_TYPE_PROXY, ++ G_PARAM_READWRITE | ++ G_PARAM_CONSTRUCT_ONLY | ++ G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property(oclass, ++ PROP_API, ++ g_param_spec_object("api", ++ "OvirtApi instance", ++ "Ovirt api root", ++ OVIRT_TYPE_API, ++ G_PARAM_READWRITE | ++ G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property(oclass, ++ PROP_VM, ++ g_param_spec_object("vm", ++ "OvirtVm instance", ++ "OvirtVm being handled", ++ OVIRT_TYPE_VM, ++ G_PARAM_READWRITE | ++ G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property(oclass, ++ PROP_FILE, ++ g_param_spec_string("file", ++ "File", ++ "Name of the image currently inserted in the virtual CDROM", ++ NULL, ++ G_PARAM_READABLE | ++ G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property(oclass, ++ PROP_FILES, ++ g_param_spec_pointer("files", ++ "ISO names", ++ "GSList of ISO names for this oVirt VM", ++ G_PARAM_READABLE | ++ G_PARAM_STATIC_STRINGS)); ++} ++ ++ ++static void ++ovirt_foreign_menu_init(OvirtForeignMenu *self) ++{ ++ self->priv = OVIRT_FOREIGN_MENU_GET_PRIVATE(self); ++} ++ ++ ++OvirtForeignMenu* ovirt_foreign_menu_new(OvirtProxy *proxy) ++{ ++ return g_object_new(OVIRT_TYPE_FOREIGN_MENU, ++ "proxy", proxy, ++ NULL); ++} ++ ++ ++static void ++ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, ++ OvirtForeignMenuState current_state) ++{ ++ g_return_if_fail(current_state >= STATE_0); ++ g_return_if_fail(current_state < STATE_ISOS); ++ ++ current_state++; ++ ++ if (current_state == STATE_STORAGE_DOMAIN) { ++ if (menu->priv->files == NULL) { ++ ovirt_foreign_menu_fetch_storage_domain_async(menu); ++ } else { ++ current_state++; ++ } ++ } ++ ++ if (current_state == STATE_VM_CDROM) { ++ if (menu->priv->cdrom == NULL) { ++ ovirt_foreign_menu_fetch_vm_cdrom_async(menu); ++ } else { ++ current_state++; ++ } ++ } ++ ++ if (current_state == STATE_CDROM_FILE) { ++ ovirt_foreign_menu_refresh_cdrom_file_async(menu); ++ } ++ ++ if (current_state == STATE_ISOS) { ++ g_warn_if_fail(menu->priv->api != NULL); ++ g_warn_if_fail(menu->priv->vm != NULL); ++ g_warn_if_fail(menu->priv->files != NULL); ++ g_warn_if_fail(menu->priv->cdrom != NULL); ++ ++ ovirt_foreign_menu_refresh_iso_list(menu); ++ } ++} ++ ++ ++void ++ovirt_foreign_menu_start(OvirtForeignMenu *menu) ++{ ++ ovirt_foreign_menu_next_async_step(menu, STATE_0); ++} ++ ++ ++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 updated_cdrom_cb(GObject *source_object, ++ GAsyncResult *result, ++ G_GNUC_UNUSED gpointer user_data) ++{ ++ GError *error = NULL; ++ OvirtForeignMenu *foreign_menu; ++ 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_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"); ++ } 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; ++ ++ 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); ++ } ++ g_free(foreign_menu->priv->next_iso_name); ++ foreign_menu->priv->next_iso_name = NULL; ++} ++ ++ ++static void ++ovirt_foreign_menu_activate_item_cb(GtkMenuItem *menuitem, gpointer user_data) ++{ ++ OvirtForeignMenu *foreign_menu; ++ const char *iso_name; ++ 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); ++ 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; ++ /* FIXME: No idea how to remove a CDRom from a VM through ovirt REST ++ * API for now, so return early. ++ */ ++ return; ++ } ++ 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); ++} ++ ++ ++GtkWidget *ovirt_foreign_menu_get_gtk_menu(OvirtForeignMenu *foreign_menu) ++{ ++ GtkWidget *gtk_menu; ++ GList *it; ++ char *current_iso; ++ ++ 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) ++{ ++ GList *sorted_files = NULL; ++ const GList *it; ++ GList *it2; ++ ++ for (it = files; it != NULL; it = it->next) { ++ char *name; ++ g_object_get(it->data, "name", &name, NULL); ++ /* The oVirt REST API is supposed to have a 'type' node ++ * associated with file resources , but as of 3.2, this node ++ * is not present, so we do an extension check instead ++ * to differentiate between ISOs and floppy images */ ++ if (g_str_has_suffix(name, ".vfd")) { ++ g_free(name); ++ continue; ++ } ++ sorted_files = g_list_insert_sorted(sorted_files, name, ++ (GCompareFunc)g_strcmp0); ++ } ++ ++ for (it = sorted_files, it2 = menu->priv->iso_names; ++ (it != NULL) && (it2 != NULL); ++ it = it->next, it2 = it2->next) { ++ if (g_strcmp0(it->data, it2->data) != 0) { ++ break; ++ } ++ } ++ ++ if ((it == NULL) && (it2 == NULL)) { ++ /* sorted_files and menu->priv->files content was the same */ ++ g_list_free_full(sorted_files, (GDestroyNotify)g_free); ++ return; ++ } ++ ++ g_list_free_full(menu->priv->iso_names, (GDestroyNotify)g_free); ++ menu->priv->iso_names = sorted_files; ++ g_object_notify(G_OBJECT(menu), "files"); ++} ++ ++ ++static void cdrom_file_refreshed_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ 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); ++ return; ++ } ++ ++ /* Content of OvirtCdrom is now current */ ++ g_free(menu->priv->current_iso_name); ++ if (menu->priv->cdrom != NULL) { ++ g_object_get(G_OBJECT(menu->priv->cdrom), ++ "file", &menu->priv->current_iso_name, ++ NULL); ++ } else { ++ 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, STATE_CDROM_FILE); ++ } else { ++ g_debug("Could not find VM cdrom through oVirt REST API"); ++ } ++} ++ ++ ++static void ovirt_foreign_menu_refresh_cdrom_file_async(OvirtForeignMenu *menu) ++{ ++ 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); ++} ++ ++ ++static void cdroms_fetched_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ GHashTable *cdroms; ++ OvirtCollection *cdrom_collection = OVIRT_COLLECTION(source_object); ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(user_data); ++ GHashTableIter iter; ++ OvirtCdrom *cdrom; ++ GError *error = NULL; ++ ++ 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); ++ return; ++ } ++ ++ cdroms = ovirt_collection_get_resources(cdrom_collection); ++ ++ g_warn_if_fail(g_hash_table_size(cdroms) <= 1); ++ ++ g_hash_table_iter_init(&iter, cdroms); ++ /* Set CDROM drive. If we have multiple ones, only the first ++ * one will be kept, but currently oVirt only adds one CDROM ++ * device per-VM ++ */ ++ if (g_hash_table_iter_next(&iter, NULL, (gpointer *)&cdrom)) { ++ if (menu->priv->cdrom != NULL) { ++ g_object_unref(G_OBJECT(menu->priv->cdrom)); ++ } ++ menu->priv->cdrom = g_object_ref(G_OBJECT(cdrom)); ++ g_debug("Set VM cdrom to %p", menu->priv->cdrom); ++ } ++ ++ if (menu->priv->cdrom != NULL) { ++ ovirt_foreign_menu_next_async_step(menu, STATE_VM_CDROM); ++ } else { ++ g_debug("Could not find VM cdrom through oVirt REST API"); ++ } ++} ++ ++ ++static void ovirt_foreign_menu_fetch_vm_cdrom_async(OvirtForeignMenu *menu) ++{ ++ 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); ++} ++ ++ ++static void storage_domains_fetched_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ GError *error = NULL; ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(user_data); ++ OvirtCollection *collection = OVIRT_COLLECTION(source_object); ++ GHashTableIter iter; ++ OvirtStorageDomain *domain; ++ ++ ovirt_collection_fetch_finish(collection, result, &error); ++ if (error != NULL) { ++ g_warning("failed to fetch storage domains: %s", error->message); ++ g_clear_error(&error); ++ return; ++ } ++ ++ g_hash_table_iter_init(&iter, ovirt_collection_get_resources(collection)); ++ while (g_hash_table_iter_next(&iter, NULL, (gpointer *)&domain)) { ++ OvirtCollection *file_collection; ++ int type; ++ ++ g_object_get(domain, "type", &type, NULL); ++ if (type != OVIRT_STORAGE_DOMAIN_TYPE_ISO) { ++ continue; ++ } ++ ++ file_collection = ovirt_storage_domain_get_files(domain); ++ if (file_collection != NULL) { ++ if (menu->priv->files) { ++ g_object_unref(G_OBJECT(menu->priv->files)); ++ } ++ menu->priv->files = g_object_ref(G_OBJECT(file_collection)); ++ g_debug("Set VM files to %p", menu->priv->files); ++ break; ++ } ++ } ++ ++ if (menu->priv->files != NULL) { ++ ovirt_foreign_menu_next_async_step(menu, STATE_STORAGE_DOMAIN); ++ } else { ++ g_debug("Could not find iso file collection"); ++ } ++} ++ ++ ++static void ovirt_foreign_menu_fetch_storage_domain_async(OvirtForeignMenu *menu) ++{ ++ OvirtCollection *collection; ++ ++ 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); ++} ++ ++ ++static void iso_list_fetched_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ OvirtCollection *collection = OVIRT_COLLECTION(source_object); ++ GError *error = NULL; ++ GList *files; ++ ++ ovirt_collection_fetch_finish(collection, result, &error); ++ if (error != NULL) { ++ g_warning("failed to fetch files for ISO storage domain: %s", ++ error->message); ++ g_clear_error(&error); ++ return; ++ } ++ ++ files = g_hash_table_get_values(ovirt_collection_get_resources(collection)); ++ ovirt_foreign_menu_set_files(OVIRT_FOREIGN_MENU(user_data), files); ++ g_list_free(files); ++ ++ g_timeout_add_seconds(15, ovirt_foreign_menu_refresh_iso_list, user_data); ++} ++ ++ ++static void ovirt_foreign_menu_fetch_iso_list_async(OvirtForeignMenu *menu) ++{ ++ 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; ++} +diff --git a/src/ovirt-foreign-menu.h b/src/ovirt-foreign-menu.h +new file mode 100644 +index 0000000..7d28f0b +--- /dev/null ++++ b/src/ovirt-foreign-menu.h +@@ -0,0 +1,82 @@ ++/* ++ * Virt Viewer: A virtual machine console viewer ++ * ++ * Copyright (C) 2007-2014 Red Hat, Inc. ++ * Copyright (C) 2009-2012 Daniel P. Berrange ++ * Copyright (C) 2010 Marc-André Lureau ++ * ++ * 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: Daniel P. Berrange <berrange@redhat.com> ++ * Christophe Fergeau <cfergeau@redhat.com> ++ */ ++#ifndef _OVIRT_FOREIGN_MENU_H ++#define _OVIRT_FOREIGN_MENU_H ++ ++#include <glib-object.h> ++#include <govirt/govirt.h> ++#include <gtk/gtk.h> ++ ++ ++G_BEGIN_DECLS ++ ++#define OVIRT_TYPE_FOREIGN_MENU ovirt_foreign_menu_get_type() ++ ++#define OVIRT_FOREIGN_MENU(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST ((obj), OVIRT_TYPE_FOREIGN_MENU, OvirtForeignMenu)) ++ ++#define OVIRT_FOREIGN_MENU_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_CAST ((klass), OVIRT_TYPE_FOREIGN_MENU, OvirtForeignMenuClass)) ++ ++#define OVIRT_IS_FOREIGN_MENU(obj) \ ++ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OVIRT_TYPE_FOREIGN_MENU)) ++ ++#define OVIRTIS_FOREIGN_MENU_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_TYPE ((klass), OVIRT_TYPE_FOREIGN_MENU)) ++ ++#define OVIRT_FOREIGN_MENU_GET_CLASS(obj) \ ++ (G_TYPE_INSTANCE_GET_CLASS ((obj), OVIRT_TYPE_FOREIGN_MENU, OvirtForeignMenuClass)) ++ ++typedef struct _OvirtForeignMenu OvirtForeignMenu; ++typedef struct _OvirtForeignMenuClass OvirtForeignMenuClass; ++typedef struct _OvirtForeignMenuPrivate OvirtForeignMenuPrivate; ++ ++struct _OvirtForeignMenu { ++ GObject parent; ++ ++ OvirtForeignMenuPrivate *priv; ++}; ++ ++struct _OvirtForeignMenuClass { ++ GObjectClass parent_class; ++}; ++ ++GType ovirt_foreign_menu_get_type(void); ++ ++OvirtForeignMenu* ovirt_foreign_menu_new(OvirtProxy *proxy); ++void ovirt_foreign_menu_start(OvirtForeignMenu *menu); ++ ++GtkWidget *ovirt_foreign_menu_get_gtk_menu(OvirtForeignMenu *foreign_menu); ++ ++G_END_DECLS ++ ++#endif /* _OVIRT_FOREIGN_MENU_H */ ++/* ++ * Local variables: ++ * c-indent-level: 4 ++ * c-basic-offset: 4 ++ * indent-tabs-mode: nil ++ * End: ++ */ diff --git a/SOURCES/0046-ovirt-Use-OvirtForeignMenu-class.patch b/SOURCES/0046-ovirt-Use-OvirtForeignMenu-class.patch new file mode 100644 index 0000000..108cc7a --- /dev/null +++ b/SOURCES/0046-ovirt-Use-OvirtForeignMenu-class.patch @@ -0,0 +1,156 @@ +From 448989f9c46bbc4ec54627f6cf4c9648c919cc12 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Fri, 27 Sep 2013 17:53:04 +0200 +Subject: [PATCH] ovirt: Use OvirtForeignMenu class + +After the previous commit which introduced the OvirtForeignMenu +class, we can now make use of it in the remote-viewer UI code. + +Resolves: rhbz#1127156 +(cherry picked from commit 3df1e5a17a315d1421f3b34df3f078f0c1505d9d) +--- + src/remote-viewer.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 82 insertions(+) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 26f0634..2b9b24d 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -30,6 +30,7 @@ + + #ifdef HAVE_OVIRT + #include <govirt/govirt.h> ++#include "ovirt-foreign-menu.h" + #endif + + #ifdef HAVE_SPICE_GTK +@@ -56,6 +57,9 @@ struct _RemoteViewerPrivate { + #endif + GtkWidget *controller_menu; + GtkWidget *foreign_menu; ++#ifdef HAVE_OVIRT ++ OvirtForeignMenu *ovirt_foreign_menu; ++#endif + gboolean open_recent_dialog; + + gboolean default_title; /* Whether the window title was set by the user, or +@@ -99,6 +103,13 @@ remote_viewer_dispose (GObject *object) + priv->ctrl_foreign_menu = NULL; + } + ++#ifdef HAVE_OVIRT ++ if (priv->ovirt_foreign_menu) { ++ g_object_unref(priv->ovirt_foreign_menu); ++ priv->ovirt_foreign_menu = NULL; ++ } ++#endif ++ + G_OBJECT_CLASS(remote_viewer_parent_class)->dispose (object); + } + #endif +@@ -418,6 +429,34 @@ spice_ctrl_menu_updated(RemoteViewer *self) + g_hash_table_foreach(windows, spice_menu_update_each, self); + } + ++#ifdef HAVE_OVIRT ++static void ++ovirt_foreign_menu_update(RemoteViewer *app, VirtViewerWindow *win) ++{ ++ GtkWidget *menu = g_object_get_data(G_OBJECT(win), "foreign-menu"); ++ GtkWidget *submenu; ++ GtkMenuShell *shell = GTK_MENU_SHELL(gtk_builder_get_object(virt_viewer_window_get_builder(win), "top-menu")); ++ ++ if (app->priv->ovirt_foreign_menu == NULL) { ++ /* nothing to do */ ++ return; ++ } ++ if (menu == NULL) { ++ menu = gtk_menu_item_new_with_label(_("_Change CD")); ++ gtk_menu_item_set_use_underline(GTK_MENU_ITEM(menu), TRUE); ++ gtk_menu_shell_append(shell, menu); ++ g_object_set_data_full(G_OBJECT(win), "foreign-menu", ++ g_object_ref(menu), ++ (GDestroyNotify)gtk_widget_destroy); ++ } ++ ++ submenu = ovirt_foreign_menu_get_gtk_menu(app->priv->ovirt_foreign_menu); ++ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu); ++ ++ gtk_widget_show_all(menu); ++} ++#endif ++ + static void + foreign_menu_update(RemoteViewer *self, VirtViewerWindow *win) + { +@@ -455,6 +494,10 @@ foreign_menu_update_each(gpointer key G_GNUC_UNUSED, + gpointer user_data) + { + foreign_menu_update(REMOTE_VIEWER(user_data), VIRT_VIEWER_WINDOW(value)); ++#ifdef HAVE_OVIRT ++ ovirt_foreign_menu_update(REMOTE_VIEWER(user_data), ++ VIRT_VIEWER_WINDOW(value)); ++#endif + } + + static void +@@ -626,6 +669,9 @@ remote_viewer_window_added(VirtViewerApp *app G_GNUC_UNUSED, + { + spice_menu_update(REMOTE_VIEWER(app), win); + foreign_menu_update(REMOTE_VIEWER(app), win); ++#ifdef HAVE_OVIRT ++ ovirt_foreign_menu_update(REMOTE_VIEWER(app), win); ++#endif + } + #endif + +@@ -718,6 +764,36 @@ authenticate_cb(RestProxy *proxy, G_GNUC_UNUSED RestProxyAuth *auth, + } + + ++static void ++ovirt_foreign_menu_changed(OvirtForeignMenu *foreign_menu G_GNUC_UNUSED, ++ GParamSpec *pspec G_GNUC_UNUSED, ++ VirtViewerApp *app) ++{ ++ spice_foreign_menu_updated(REMOTE_VIEWER(app)); ++} ++ ++ ++static void ++virt_viewer_app_set_ovirt_foreign_menu(VirtViewerApp *app, ++ OvirtForeignMenu *foreign_menu) ++{ ++ RemoteViewer *self; ++ g_return_if_fail(REMOTE_VIEWER_IS(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)); ++ } ++ 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); ++ ovirt_foreign_menu_start(foreign_menu); ++} ++ ++ + static gboolean + create_ovirt_session(VirtViewerApp *app, const char *uri) + { +@@ -807,6 +883,12 @@ create_ovirt_session(VirtViewerApp *app, const char *uri) + goto error; + } + ++ { ++ OvirtForeignMenu *ovirt_menu = ovirt_foreign_menu_new(proxy); ++ g_object_set(G_OBJECT(ovirt_menu), "api", api, "vm", vm, NULL); ++ virt_viewer_app_set_ovirt_foreign_menu(app, ovirt_menu); ++ } ++ + virt_viewer_app_set_connect_info(app, NULL, ghost, gport, gtlsport, + session_type, NULL, NULL, 0, NULL); + diff --git a/SOURCES/0047-Add-group-argument-to-VirtViewerFile-helpers.patch b/SOURCES/0047-Add-group-argument-to-VirtViewerFile-helpers.patch new file mode 100644 index 0000000..c61b896 --- /dev/null +++ b/SOURCES/0047-Add-group-argument-to-VirtViewerFile-helpers.patch @@ -0,0 +1,555 @@ +From a5acd159c463000a5474439eec826824d931342a Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Thu, 12 Dec 2013 16:08:42 +0100 +Subject: [PATCH] Add 'group' argument to VirtViewerFile helpers + +For foreign menu support, we'll need a way to pass oVirt-specific +information in the .vv file. This will be done through an additional +[ovirt] section, this commit is in preparation for that. + +Resolves: rhbz#1127156 +(cherry picked from commit c7a8bcdb6328f595d456c96084e8c23999f6aee6) +--- + src/virt-viewer-file.c | 153 +++++++++++++++++++++++++++---------------------- + 1 file changed, 84 insertions(+), 69 deletions(-) + +diff --git a/src/virt-viewer-file.c b/src/virt-viewer-file.c +index 639d96e..3ead36d 100644 +--- a/src/virt-viewer-file.c ++++ b/src/virt-viewer-file.c +@@ -78,7 +78,7 @@ G_DEFINE_TYPE(VirtViewerFile, virt_viewer_file, G_TYPE_OBJECT); + + #define VIRT_VIEWER_FILE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_FILE, VirtViewerFilePrivate)) + +-#define GROUP "virt-viewer" ++#define MAIN_GROUP "virt-viewer" + + enum { + PROP_DUMMY_PROPERTY, +@@ -128,7 +128,7 @@ virt_viewer_file_new(const gchar* location, GError** error) + return NULL; + } + +- if (!g_key_file_has_group (keyfile, GROUP) || ++ if (!g_key_file_has_group (keyfile, MAIN_GROUP) || + !virt_viewer_file_is_set(self, "type")) { + inner_error = g_error_new_literal(G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_NOT_FOUND, "Invalid file"); +@@ -155,7 +155,7 @@ virt_viewer_file_is_set(VirtViewerFile* self, const gchar* key) + g_return_val_if_fail(VIRT_VIEWER_IS_FILE(self), FALSE); + g_return_val_if_fail(key != NULL, FALSE); + +- set = g_key_file_has_key(self->priv->keyfile, GROUP, key, &inner_error); ++ set = g_key_file_has_key(self->priv->keyfile, MAIN_GROUP, key, &inner_error); + if (inner_error == NULL) + return set; + else { +@@ -165,17 +165,20 @@ virt_viewer_file_is_set(VirtViewerFile* self, const gchar* key) + } + + static void +-virt_viewer_file_set_string(VirtViewerFile* self, const gchar* key, const gchar* value) ++virt_viewer_file_set_string(VirtViewerFile* self, const char *group, ++ const gchar* key, const gchar* value) + { + g_return_if_fail(VIRT_VIEWER_IS_FILE(self)); + g_return_if_fail(key != NULL); + g_return_if_fail(value != NULL); + +- g_key_file_set_string(self->priv->keyfile, GROUP, key, value); ++ g_key_file_set_string(self->priv->keyfile, group, key, value); + } + + static gchar* +-virt_viewer_file_get_string(VirtViewerFile* self, const gchar* key) ++virt_viewer_file_get_string(VirtViewerFile* self, ++ const char *group, ++ const gchar* key) + { + GError* inner_error = NULL; + gchar* result = NULL; +@@ -183,7 +186,7 @@ virt_viewer_file_get_string(VirtViewerFile* self, const gchar* key) + g_return_val_if_fail(VIRT_VIEWER_IS_FILE(self), NULL); + g_return_val_if_fail(key != NULL, NULL); + +- result = g_key_file_get_string(self->priv->keyfile, GROUP, key, &inner_error); ++ result = g_key_file_get_string(self->priv->keyfile, group, key, &inner_error); + if (inner_error && inner_error->domain != G_KEY_FILE_ERROR) + g_critical("%s", inner_error->message); + g_clear_error(&inner_error); +@@ -192,16 +195,19 @@ virt_viewer_file_get_string(VirtViewerFile* self, const gchar* key) + } + + static void +-virt_viewer_file_set_string_list(VirtViewerFile* self, const gchar* key, const gchar* const* value, gsize length) ++virt_viewer_file_set_string_list(VirtViewerFile* self, const char *group, ++ const gchar* key, const gchar* const* value, ++ gsize length) + { + g_return_if_fail(VIRT_VIEWER_IS_FILE(self)); + g_return_if_fail(key != NULL); + +- g_key_file_set_string_list(self->priv->keyfile, GROUP, key, value, length); ++ g_key_file_set_string_list(self->priv->keyfile, group, key, value, length); + } + + static gchar** +-virt_viewer_file_get_string_list(VirtViewerFile* self, const gchar* key, gsize* length) ++virt_viewer_file_get_string_list(VirtViewerFile* self, const char *group, ++ const gchar* key, gsize* length) + { + GError* inner_error = NULL; + gchar** result = NULL; +@@ -209,7 +215,7 @@ virt_viewer_file_get_string_list(VirtViewerFile* self, const gchar* key, gsize* + g_return_val_if_fail(VIRT_VIEWER_IS_FILE(self), NULL); + g_return_val_if_fail(key != NULL, NULL); + +- result = g_key_file_get_string_list(self->priv->keyfile, GROUP, key, length, &inner_error); ++ result = g_key_file_get_string_list(self->priv->keyfile, group, key, length, &inner_error); + if (inner_error && inner_error->domain != G_KEY_FILE_ERROR) + g_critical("%s", inner_error->message); + g_clear_error(&inner_error); +@@ -218,16 +224,19 @@ virt_viewer_file_get_string_list(VirtViewerFile* self, const gchar* key, gsize* + } + + static void +-virt_viewer_file_set_int(VirtViewerFile* self, const gchar* key, gint value) ++virt_viewer_file_set_int(VirtViewerFile* self, const char *group, ++ const gchar* key, gint value) + { + g_return_if_fail(VIRT_VIEWER_IS_FILE(self)); + g_return_if_fail(key != NULL); + +- g_key_file_set_integer(self->priv->keyfile, GROUP, key, value); ++ g_key_file_set_integer(self->priv->keyfile, group, key, value); + } + + static gint +-virt_viewer_file_get_int(VirtViewerFile* self, const gchar* key) ++virt_viewer_file_get_int(VirtViewerFile* self, ++ const char *group, ++ const gchar* key) + { + GError* inner_error = NULL; + gint result; +@@ -235,7 +244,7 @@ virt_viewer_file_get_int(VirtViewerFile* self, const gchar* key) + g_return_val_if_fail(VIRT_VIEWER_IS_FILE(self), -1); + g_return_val_if_fail(key != NULL, -1); + +- result = g_key_file_get_integer(self->priv->keyfile, GROUP, key, &inner_error); ++ result = g_key_file_get_integer(self->priv->keyfile, group, key, &inner_error); + if (inner_error && inner_error->domain != G_KEY_FILE_ERROR) + g_critical("%s", inner_error->message); + g_clear_error(&inner_error); +@@ -246,351 +255,357 @@ virt_viewer_file_get_int(VirtViewerFile* self, const gchar* key) + gchar* + virt_viewer_file_get_ca(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "ca"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "ca"); + } + + void + virt_viewer_file_set_ca(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "ca", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "ca", value); + g_object_notify(G_OBJECT(self), "ca"); + } + + gchar* + virt_viewer_file_get_host(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "host"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "host"); + } + + void + virt_viewer_file_set_host(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "host", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "host", value); + g_object_notify(G_OBJECT(self), "host"); + } + + gchar* + virt_viewer_file_get_file_type(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "type"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "type"); + } + + void + virt_viewer_file_set_type(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "type", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "type", value); + g_object_notify(G_OBJECT(self), "type"); + } + + gint + virt_viewer_file_get_port(VirtViewerFile* self) + { +- return virt_viewer_file_get_int(self, "port"); ++ return virt_viewer_file_get_int(self, MAIN_GROUP, "port"); + } + + void + virt_viewer_file_set_port(VirtViewerFile* self, gint value) + { +- virt_viewer_file_set_int(self, "port", value); ++ virt_viewer_file_set_int(self, MAIN_GROUP, "port", value); + g_object_notify(G_OBJECT(self), "port"); + } + + gint + virt_viewer_file_get_tls_port(VirtViewerFile* self) + { +- return virt_viewer_file_get_int(self, "tls-port"); ++ return virt_viewer_file_get_int(self, MAIN_GROUP, "tls-port"); + } + + void + virt_viewer_file_set_tls_port(VirtViewerFile* self, gint value) + { +- virt_viewer_file_set_int(self, "tls-port", value); ++ virt_viewer_file_set_int(self, MAIN_GROUP, "tls-port", value); + g_object_notify(G_OBJECT(self), "tls-port"); + } + + gchar* + virt_viewer_file_get_username(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "username"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "username"); + } + + gchar* + virt_viewer_file_get_password(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "password"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "password"); + } + + void + virt_viewer_file_set_username(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "username", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "username", value); + g_object_notify(G_OBJECT(self), "username"); + } + + void + virt_viewer_file_set_password(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "password", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "password", value); + g_object_notify(G_OBJECT(self), "password"); + } + + gchar** + virt_viewer_file_get_disable_channels(VirtViewerFile* self, gsize* length) + { +- return virt_viewer_file_get_string_list(self, "disable-channels", length); ++ return virt_viewer_file_get_string_list(self, MAIN_GROUP, ++ "disable-channels", length); + } + + void + virt_viewer_file_set_disable_channels(VirtViewerFile* self, const gchar* const* value, gsize length) + { +- virt_viewer_file_set_string_list(self, "disable-channels", value, length); ++ virt_viewer_file_set_string_list(self, MAIN_GROUP, ++ "disable-channels", value, length); + g_object_notify(G_OBJECT(self), "disable-channels"); + } + + gchar** + virt_viewer_file_get_disable_effects(VirtViewerFile* self, gsize* length) + { +- return virt_viewer_file_get_string_list(self, "disable-effects", length); ++ return virt_viewer_file_get_string_list(self, MAIN_GROUP, ++ "disable-effects", length); + } + + void + virt_viewer_file_set_disable_effects(VirtViewerFile* self, const gchar* const* value, gsize length) + { +- virt_viewer_file_set_string_list(self, "disable-effects", value, length); ++ virt_viewer_file_set_string_list(self, MAIN_GROUP, ++ "disable-effects", value, length); + g_object_notify(G_OBJECT(self), "disable-effects"); + } + + gchar* + virt_viewer_file_get_tls_ciphers(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "tls-ciphers"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "tls-ciphers"); + } + + void + virt_viewer_file_set_tls_ciphers(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "tls-ciphers", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "tls-ciphers", value); + g_object_notify(G_OBJECT(self), "tls-ciphers"); + } + + gchar* + virt_viewer_file_get_host_subject(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "host-subject"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, ++ "host-subject"); + } + + void + virt_viewer_file_set_host_subject(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "host-subject", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, ++ "host-subject", value); + g_object_notify(G_OBJECT(self), "host-subject"); + } + + gint + virt_viewer_file_get_fullscreen(VirtViewerFile* self) + { +- return virt_viewer_file_get_int(self, "fullscreen"); ++ return virt_viewer_file_get_int(self, MAIN_GROUP, "fullscreen"); + } + + void + virt_viewer_file_set_fullscreen(VirtViewerFile* self, gint value) + { +- virt_viewer_file_set_int(self, "fullscreen", !!value); ++ virt_viewer_file_set_int(self, MAIN_GROUP, "fullscreen", !!value); + g_object_notify(G_OBJECT(self), "fullscreen"); + } + + gchar* + virt_viewer_file_get_title(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "title"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "title"); + } + + void + virt_viewer_file_set_title(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "title", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "title", value); + g_object_notify(G_OBJECT(self), "title"); + } + + gchar* + virt_viewer_file_get_toggle_fullscreen(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "toggle-fullscreen"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "toggle-fullscreen"); + } + + void + virt_viewer_file_set_toggle_fullscreen(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "toggle-fullscreen", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "toggle-fullscreen", value); + g_object_notify(G_OBJECT(self), "toggle-fullscreen"); + } + + gchar* + virt_viewer_file_get_release_cursor(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "release-cursor"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "release-cursor"); + } + + void + virt_viewer_file_set_release_cursor(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "release-cursor", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "release-cursor", value); + g_object_notify(G_OBJECT(self), "release-cursor"); + } + + gchar* + virt_viewer_file_get_secure_attention(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "secure-attention"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "secure-attention"); + } + + void + virt_viewer_file_set_secure_attention(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "secure-attention", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "secure-attention", value); + g_object_notify(G_OBJECT(self), "secure-attention"); + } + + gchar* + virt_viewer_file_get_smartcard_remove(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "smartcard-remove"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "smartcard-remove"); + } + + void + virt_viewer_file_set_smartcard_remove(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "smartcard-remove", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "smartcard-remove", value); + g_object_notify(G_OBJECT(self), "smartcard-remove"); + } + + gchar* + virt_viewer_file_get_smartcard_insert(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "smartcard-insert"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "smartcard-insert"); + } + + void + virt_viewer_file_set_smartcard_insert(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "smartcard-insert", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "smartcard-insert", value); + g_object_notify(G_OBJECT(self), "smartcard-insert"); + } + + gint + virt_viewer_file_get_enable_smartcard(VirtViewerFile* self) + { +- return virt_viewer_file_get_int(self, "enable-smartcard"); ++ return virt_viewer_file_get_int(self, MAIN_GROUP, "enable-smartcard"); + } + + void + virt_viewer_file_set_enable_smartcard(VirtViewerFile* self, gint value) + { +- virt_viewer_file_set_int(self, "enable-smartcard", !!value); ++ virt_viewer_file_set_int(self, MAIN_GROUP, "enable-smartcard", !!value); + g_object_notify(G_OBJECT(self), "enable-smartcard"); + } + + gint + virt_viewer_file_get_enable_usbredir(VirtViewerFile* self) + { +- return virt_viewer_file_get_int(self, "enable-usbredir"); ++ return virt_viewer_file_get_int(self, MAIN_GROUP, "enable-usbredir"); + } + + void + virt_viewer_file_set_enable_usbredir(VirtViewerFile* self, gint value) + { +- virt_viewer_file_set_int(self, "enable-usbredir", !!value); ++ virt_viewer_file_set_int(self, MAIN_GROUP, "enable-usbredir", !!value); + g_object_notify(G_OBJECT(self), "enable-usbredir"); + } + + gint + virt_viewer_file_get_delete_this_file(VirtViewerFile* self) + { +- return virt_viewer_file_get_int(self, "delete-this-file"); ++ return virt_viewer_file_get_int(self, MAIN_GROUP, "delete-this-file"); + } + + void + virt_viewer_file_set_delete_this_file(VirtViewerFile* self, gint value) + { +- virt_viewer_file_set_int(self, "delete-this-file", !!value); ++ virt_viewer_file_set_int(self, MAIN_GROUP, "delete-this-file", !!value); + g_object_notify(G_OBJECT(self), "delete-this-file"); + } + + gint + virt_viewer_file_get_color_depth(VirtViewerFile* self) + { +- return virt_viewer_file_get_int(self, "color-depth"); ++ return virt_viewer_file_get_int(self, MAIN_GROUP, "color-depth"); + } + + void + virt_viewer_file_set_color_depth(VirtViewerFile* self, gint value) + { +- virt_viewer_file_set_int(self, "color-depth", value); ++ virt_viewer_file_set_int(self, MAIN_GROUP, "color-depth", value); + g_object_notify(G_OBJECT(self), "color-depth"); + } + + gint + virt_viewer_file_get_enable_usb_autoshare(VirtViewerFile* self) + { +- return virt_viewer_file_get_int(self, "enable-usb-autoshare"); ++ return virt_viewer_file_get_int(self, MAIN_GROUP, "enable-usb-autoshare"); + } + + void + virt_viewer_file_set_enable_usb_autoshare(VirtViewerFile* self, gint value) + { +- virt_viewer_file_set_int(self, "enable-usb-autoshare", !!value); ++ virt_viewer_file_set_int(self, MAIN_GROUP, "enable-usb-autoshare", !!value); + g_object_notify(G_OBJECT(self), "enable-usb-autoshare"); + } + + gchar* + virt_viewer_file_get_usb_filter(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "usb-filter"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "usb-filter"); + } + + void + virt_viewer_file_set_usb_filter(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "usb-filter", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "usb-filter", value); + g_object_notify(G_OBJECT(self), "usb-filter"); + } + + gchar* + virt_viewer_file_get_proxy(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "proxy"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "proxy"); + } + + void + virt_viewer_file_set_proxy(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "proxy", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "proxy", value); + g_object_notify(G_OBJECT(self), "proxy"); + } + + gchar* + virt_viewer_file_get_version(VirtViewerFile* self) + { +- return virt_viewer_file_get_string(self, "version"); ++ return virt_viewer_file_get_string(self, MAIN_GROUP, "version"); + } + + void + virt_viewer_file_set_version(VirtViewerFile* self, const gchar* value) + { +- virt_viewer_file_set_string(self, "version", value); ++ virt_viewer_file_set_string(self, MAIN_GROUP, "version", value); + g_object_notify(G_OBJECT(self), "version"); + } + + gchar** + virt_viewer_file_get_secure_channels(VirtViewerFile* self, gsize* length) + { +- return virt_viewer_file_get_string_list(self, "secure-channels", length); ++ return virt_viewer_file_get_string_list(self, MAIN_GROUP, "secure-channels", length); + } + + void + virt_viewer_file_set_secure_channels(VirtViewerFile* self, const gchar* const* value, gsize length) + { +- virt_viewer_file_set_string_list(self, "secure-channels", value, length); ++ virt_viewer_file_set_string_list(self, MAIN_GROUP, "secure-channels", value, length); + g_object_notify(G_OBJECT(self), "secure-channels"); + } + diff --git a/SOURCES/0048-Add-ovirt-specific-properties-to-VirtViewerFile.patch b/SOURCES/0048-Add-ovirt-specific-properties-to-VirtViewerFile.patch new file mode 100644 index 0000000..0acd1c0 --- /dev/null +++ b/SOURCES/0048-Add-ovirt-specific-properties-to-VirtViewerFile.patch @@ -0,0 +1,193 @@ +From ef33efbc6425b6243b1a39995f13d6fbce90bf54 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Thu, 12 Dec 2013 16:26:44 +0100 +Subject: [PATCH] Add ovirt-specific properties to VirtViewerFile + +They will be useful to implement foreign menu support through +oVirt REST API + +Resolves: rhbz#1127156 +(cherry picked from commit eb4a7e4a840e4fb71eb499d4288eb4092f038e2d) +--- + src/virt-viewer-file.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++++ + src/virt-viewer-file.h | 8 ++++ + 2 files changed, 116 insertions(+) + +diff --git a/src/virt-viewer-file.c b/src/virt-viewer-file.c +index 3ead36d..8c618c7 100644 +--- a/src/virt-viewer-file.c ++++ b/src/virt-viewer-file.c +@@ -66,6 +66,17 @@ + * - delete-this-file: int (0 or 1 atm) + * - proxy: proxy URL, like http://user:pass@foobar:8080 + * ++ * There is an optional [ovirt] section which can be used to specify ++ * the connection parameters to interact with the remote oVirt REST API. ++ * This is currently used to present a list of CDRom images which can be ++ * inserted in the VM. ++ * ++ * - host: string containing the URL of the oVirt engine ++ * - vm-guid: string containing the guid of the oVirt VM we are connecting to ++ * - jsessionid: string containing an authentication cookie to be used to ++ * connect to the oVirt engine without being asked for credentials ++ * - ca: string PEM data (use \n to seperate the lines) ++ * + * (the file can be extended with extra groups or keys, which should + * be prefixed with x- to avoid later conflicts) + */ +@@ -79,6 +90,7 @@ G_DEFINE_TYPE(VirtViewerFile, virt_viewer_file, G_TYPE_OBJECT); + #define VIRT_VIEWER_FILE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_FILE, VirtViewerFilePrivate)) + + #define MAIN_GROUP "virt-viewer" ++#define OVIRT_GROUP "ovirt" + + enum { + PROP_DUMMY_PROPERTY, +@@ -107,6 +119,10 @@ enum { + PROP_SECURE_CHANNELS, + PROP_DELETE_THIS_FILE, + PROP_SECURE_ATTENTION, ++ PROP_OVIRT_HOST, ++ PROP_OVIRT_VM_GUID, ++ PROP_OVIRT_JSESSIONID, ++ PROP_OVIRT_CA, + }; + + VirtViewerFile* +@@ -609,6 +625,58 @@ virt_viewer_file_set_secure_channels(VirtViewerFile* self, const gchar* const* v + g_object_notify(G_OBJECT(self), "secure-channels"); + } + ++gchar* ++virt_viewer_file_get_ovirt_host(VirtViewerFile* self) ++{ ++ return virt_viewer_file_get_string(self, OVIRT_GROUP, "host"); ++} ++ ++void ++virt_viewer_file_set_ovirt_host(VirtViewerFile* self, const gchar* value) ++{ ++ virt_viewer_file_set_string(self, OVIRT_GROUP, "host", value); ++ g_object_notify(G_OBJECT(self), "ovirt-host"); ++} ++ ++gchar* ++virt_viewer_file_get_ovirt_vm_guid(VirtViewerFile* self) ++{ ++ return virt_viewer_file_get_string(self, OVIRT_GROUP, "vm-guid"); ++} ++ ++void ++virt_viewer_file_set_ovirt_vm_guid(VirtViewerFile* self, const gchar* value) ++{ ++ virt_viewer_file_set_string(self, OVIRT_GROUP, "vm-guid", value); ++ g_object_notify(G_OBJECT(self), "ovirt-vm-guid"); ++} ++ ++gchar* ++virt_viewer_file_get_ovirt_jsessionid(VirtViewerFile* self) ++{ ++ return virt_viewer_file_get_string(self, OVIRT_GROUP, "jsessionid"); ++} ++ ++void ++virt_viewer_file_set_ovirt_jsessionid(VirtViewerFile* self, const gchar* value) ++{ ++ virt_viewer_file_set_string(self, OVIRT_GROUP, "jsessionid", value); ++ g_object_notify(G_OBJECT(self), "ovirt-jsessionid"); ++} ++ ++gchar* ++virt_viewer_file_get_ovirt_ca(VirtViewerFile* self) ++{ ++ return virt_viewer_file_get_string(self, OVIRT_GROUP, "ca"); ++} ++ ++void ++virt_viewer_file_set_ovirt_ca(VirtViewerFile* self, const gchar* value) ++{ ++ virt_viewer_file_set_string(self, OVIRT_GROUP, "ca", value); ++ g_object_notify(G_OBJECT(self), "ovirt-ca"); ++} ++ + static void + spice_hotkey_set_accel(const gchar *accel_path, const gchar *key) + { +@@ -770,6 +838,18 @@ virt_viewer_file_set_property(GObject* object, guint property_id, + case PROP_DELETE_THIS_FILE: + virt_viewer_file_set_delete_this_file(self, g_value_get_int(value)); + break; ++ case PROP_OVIRT_HOST: ++ virt_viewer_file_set_ovirt_host(self, g_value_get_string(value)); ++ break; ++ case PROP_OVIRT_VM_GUID: ++ virt_viewer_file_set_ovirt_vm_guid(self, g_value_get_string(value)); ++ break; ++ case PROP_OVIRT_JSESSIONID: ++ virt_viewer_file_set_ovirt_jsessionid(self, g_value_get_string(value)); ++ break; ++ case PROP_OVIRT_CA: ++ virt_viewer_file_set_ovirt_ca(self, g_value_get_string(value)); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; +@@ -858,6 +938,18 @@ virt_viewer_file_get_property(GObject* object, guint property_id, + case PROP_DELETE_THIS_FILE: + g_value_set_int(value, virt_viewer_file_get_delete_this_file(self)); + break; ++ case PROP_OVIRT_HOST: ++ g_value_take_string(value, virt_viewer_file_get_ovirt_host(self)); ++ break; ++ case PROP_OVIRT_VM_GUID: ++ g_value_take_string(value, virt_viewer_file_get_ovirt_vm_guid(self)); ++ break; ++ case PROP_OVIRT_JSESSIONID: ++ g_value_take_string(value, virt_viewer_file_get_ovirt_jsessionid(self)); ++ break; ++ case PROP_OVIRT_CA: ++ g_value_take_string(value, virt_viewer_file_get_ovirt_ca(self)); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec); + break; +@@ -992,4 +1084,20 @@ virt_viewer_file_class_init(VirtViewerFileClass* klass) + g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_DELETE_THIS_FILE, + g_param_spec_int("delete-this-file", "delete-this-file", "delete-this-file", 0, 1, 0, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); ++ ++ g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_OVIRT_HOST, ++ g_param_spec_string("ovirt-host", "ovirt-host", "ovirt-host", NULL, ++ G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); ++ ++ g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_OVIRT_VM_GUID, ++ g_param_spec_string("ovirt-vm-guid", "ovirt-vm-guid", "ovirt-vm-guid", NULL, ++ G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); ++ ++ g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_OVIRT_JSESSIONID, ++ g_param_spec_string("ovirt-jsessionid", "ovirt-jsessionid", "ovirt-jsessionid", NULL, ++ G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); ++ ++ g_object_class_install_property(G_OBJECT_CLASS(klass), PROP_OVIRT_CA, ++ g_param_spec_string("ovirt-ca", "ovirt-ca", "ovirt-ca", NULL, ++ G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)); + } +diff --git a/src/virt-viewer-file.h b/src/virt-viewer-file.h +index 9507bf9..f4b030c 100644 +--- a/src/virt-viewer-file.h ++++ b/src/virt-viewer-file.h +@@ -108,6 +108,14 @@ gint virt_viewer_file_get_delete_this_file(VirtViewerFile* self); + void virt_viewer_file_set_delete_this_file(VirtViewerFile* self, gint value); + gchar* virt_viewer_file_get_secure_attention(VirtViewerFile* self); + void virt_viewer_file_set_secure_attention(VirtViewerFile* self, const gchar* value); ++gchar* virt_viewer_file_get_ovirt_host(VirtViewerFile* self); ++void virt_viewer_file_set_ovirt_host(VirtViewerFile* self, const gchar* value); ++gchar* virt_viewer_file_get_ovirt_vm_guid(VirtViewerFile* self); ++void virt_viewer_file_set_ovirt_vm_guid(VirtViewerFile* self, const gchar* value); ++gchar* virt_viewer_file_get_ovirt_jsessionid(VirtViewerFile* self); ++void virt_viewer_file_set_ovirt_jsessionid(VirtViewerFile* self, const gchar* value); ++gchar* virt_viewer_file_get_ovirt_ca(VirtViewerFile* self); ++void virt_viewer_file_set_ovirt_ca(VirtViewerFile* self, const gchar* value); + + G_END_DECLS + diff --git a/SOURCES/0049-Create-foreign-menu-from-.vv-file-information.patch b/SOURCES/0049-Create-foreign-menu-from-.vv-file-information.patch new file mode 100644 index 0000000..062b1c8 --- /dev/null +++ b/SOURCES/0049-Create-foreign-menu-from-.vv-file-information.patch @@ -0,0 +1,334 @@ +From da9529ca4c5bb4424f258275c5678a9190444b78 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Thu, 17 Apr 2014 21:00:28 +0200 +Subject: [PATCH] Create foreign menu from .vv file information + +When the .vv file has an [ovirt] section, we should try to create a foreign +menu out of it. This will allow remote-viewer to offer a menu to change the +currenty inserted cdrom. + +Contrary to the ovirt:// case when we already have fetched an OvirtAPI +and OvirtVm instance in order to get the SPICE/VNC connection details, +when working from a .vv file, we'll need to get them from the REST API. +Authentication should happen through the JSESSIONID cookie, if that +fails we want to give up on using the foreign menu, so we don't need to +set up authentication callbacks. + +Resolves: rhbz#1127156 +(cherry picked from commit 6ab5444c81a8f6a15012a55283e2737406fb08b1) +--- + src/ovirt-foreign-menu.c | 186 +++++++++++++++++++++++++++++++++++++++++++++++ + src/ovirt-foreign-menu.h | 2 + + src/remote-viewer.c | 9 +++ + 3 files changed, 197 insertions(+) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index 0453ca1..6fc9577 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -25,12 +25,16 @@ + + #include <config.h> + ++#include <string.h> ++ + #include "ovirt-foreign-menu.h" + #include "virt-glib-compat.h" + #include "virt-viewer-util.h" + + typedef enum { + STATE_0, ++ STATE_API, ++ STATE_VM, + STATE_STORAGE_DOMAIN, + STATE_VM_CDROM, + STATE_CDROM_FILE, +@@ -38,6 +42,8 @@ typedef enum { + } 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); +@@ -50,6 +56,7 @@ struct _OvirtForeignMenuPrivate { + OvirtProxy *proxy; + OvirtApi *api; + OvirtVm *vm; ++ char *vm_guid; + + OvirtCollection *files; + OvirtCdrom *cdrom; +@@ -75,6 +82,7 @@ enum { + PROP_VM, + PROP_FILE, + PROP_FILES, ++ PROP_VM_GUID, + }; + + +@@ -117,6 +125,10 @@ ovirt_foreign_menu_get_property(GObject *object, guint property_id, + case PROP_FILES: + g_value_set_pointer(value, priv->iso_names); + break; ++ case PROP_VM_GUID: ++ g_value_set_string(value, priv->vm_guid); ++ break; ++ + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +@@ -148,6 +160,19 @@ ovirt_foreign_menu_set_property(GObject *object, guint property_id, + g_object_unref(priv->vm); + } + priv->vm = g_value_dup_object(value); ++ g_free(priv->vm_guid); ++ priv->vm_guid = NULL; ++ if (priv->vm != NULL) { ++ g_object_get(G_OBJECT(priv->vm), "guid", &priv->vm_guid, NULL); ++ } ++ break; ++ case PROP_VM_GUID: ++ if (priv->vm != NULL) { ++ g_object_unref(priv->vm); ++ priv->vm = NULL; ++ } ++ g_free(priv->vm_guid); ++ priv->vm_guid = g_value_dup_string(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +@@ -175,6 +200,9 @@ ovirt_foreign_menu_dispose(GObject *obj) + self->priv->vm = NULL; + } + ++ g_free(self->priv->vm_guid); ++ self->priv->vm_guid = NULL; ++ + if (self->priv->files) { + g_object_unref(self->priv->files); + self->priv->files = NULL; +@@ -251,6 +279,15 @@ ovirt_foreign_menu_class_init(OvirtForeignMenuClass *klass) + "GSList of ISO names for this oVirt VM", + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property(oclass, ++ PROP_VM_GUID, ++ g_param_spec_string("vm-guid", ++ "VM GUID", ++ "GUID of the virtual machine to provide a foreign menu for", ++ NULL, ++ G_PARAM_READWRITE | ++ G_PARAM_CONSTRUCT_ONLY | ++ G_PARAM_STATIC_STRINGS)); + } + + +@@ -278,6 +315,22 @@ ovirt_foreign_menu_next_async_step(OvirtForeignMenu *menu, + + current_state++; + ++ if (current_state == STATE_API) { ++ if (menu->priv->api == NULL) { ++ ovirt_foreign_menu_fetch_api_async(menu); ++ } else { ++ current_state++; ++ } ++ } ++ ++ if (current_state == STATE_VM) { ++ if (menu->priv->vm == NULL) { ++ ovirt_foreign_menu_fetch_vm_async(menu); ++ } else { ++ current_state++; ++ } ++ } ++ + if (current_state == STATE_STORAGE_DOMAIN) { + if (menu->priv->files == NULL) { + ovirt_foreign_menu_fetch_storage_domain_async(menu); +@@ -635,6 +688,90 @@ static void ovirt_foreign_menu_fetch_storage_domain_async(OvirtForeignMenu *menu + } + + ++static void vms_fetched_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ GError *error = NULL; ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(user_data); ++ OvirtCollection *collection; ++ 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); ++ return; ++ } ++ ++ g_hash_table_iter_init(&iter, ovirt_collection_get_resources(collection)); ++ while (g_hash_table_iter_next(&iter, NULL, (gpointer *)&vm)) { ++ char *guid; ++ ++ g_object_get(G_OBJECT(vm), "guid", &guid, NULL); ++ if (g_strcmp0(guid, menu->priv->vm_guid) == 0) { ++ menu->priv->vm = g_object_ref(vm); ++ g_free(guid); ++ break; ++ } ++ g_free(guid); ++ } ++ if (menu->priv->vm != NULL) { ++ ovirt_foreign_menu_next_async_step(menu, STATE_VM); ++ } else { ++ g_warning("failed to find a VM with guid \"%s\"", menu->priv->vm_guid); ++ } ++} ++ ++ ++static void ovirt_foreign_menu_fetch_vm_async(OvirtForeignMenu *menu) ++{ ++ OvirtCollection *vms; ++ ++ 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_API(menu->priv->api)); ++ ++ vms = ovirt_api_get_vms(menu->priv->api); ++ ovirt_collection_fetch_async(vms, menu->priv->proxy, ++ NULL, vms_fetched_cb, menu); ++} ++ ++ ++static void api_fetched_cb(GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ GError *error = NULL; ++ OvirtProxy *proxy; ++ OvirtForeignMenu *menu = OVIRT_FOREIGN_MENU(user_data); ++ ++ 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); ++ return; ++ } ++ g_return_if_fail(OVIRT_IS_API(menu->priv->api)); ++ ++ ovirt_foreign_menu_next_async_step(menu, STATE_API); ++} ++ ++ ++static void ovirt_foreign_menu_fetch_api_async(OvirtForeignMenu *menu) ++{ ++ 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); ++} ++ ++ + static void iso_list_fetched_cb(GObject *source_object, + GAsyncResult *result, + gpointer user_data) +@@ -684,3 +821,52 @@ static gboolean ovirt_foreign_menu_refresh_iso_list(gpointer user_data) + */ + return G_SOURCE_REMOVE; + } ++ ++ ++OvirtForeignMenu *ovirt_foreign_menu_new_from_file(VirtViewerFile *file) ++{ ++ OvirtProxy *proxy = NULL; ++ OvirtForeignMenu *menu = NULL; ++ char *ca_str = NULL; ++ char *jsessionid = NULL; ++ char *url = NULL; ++ char *vm_guid = NULL; ++ GByteArray *ca = NULL; ++ ++ url = virt_viewer_file_get_ovirt_host(file); ++ vm_guid = virt_viewer_file_get_ovirt_vm_guid(file); ++ jsessionid = virt_viewer_file_get_ovirt_jsessionid(file); ++ ca_str = virt_viewer_file_get_ovirt_ca(file); ++ ++ if ((url == NULL) || (vm_guid == NULL)) ++ goto end; ++ ++ proxy = ovirt_proxy_new(url); ++ if (proxy == NULL) ++ goto end; ++ ++ if (ca_str != NULL) { ++ ca = g_byte_array_new_take((guint8 *)ca_str, strlen(ca_str) + 1); ++ ca_str = NULL; ++ } ++ ++ g_object_set(G_OBJECT(proxy), ++ "session-id", jsessionid, ++ "ca-cert", ca, ++ NULL); ++ menu = g_object_new(OVIRT_TYPE_FOREIGN_MENU, ++ "proxy", proxy, ++ "vm-guid", vm_guid, ++ NULL); ++ ++end: ++ g_free(url); ++ g_free(vm_guid); ++ g_free(jsessionid); ++ g_free(ca_str); ++ if (ca != NULL) { ++ g_byte_array_unref(ca); ++ } ++ ++ return menu; ++} +diff --git a/src/ovirt-foreign-menu.h b/src/ovirt-foreign-menu.h +index 7d28f0b..cf18b52 100644 +--- a/src/ovirt-foreign-menu.h ++++ b/src/ovirt-foreign-menu.h +@@ -29,6 +29,7 @@ + #include <govirt/govirt.h> + #include <gtk/gtk.h> + ++#include "virt-viewer-file.h" + + G_BEGIN_DECLS + +@@ -66,6 +67,7 @@ struct _OvirtForeignMenuClass { + 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); + + GtkWidget *ovirt_foreign_menu_get_gtk_menu(OvirtForeignMenu *foreign_menu); +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 2b9b24d..11b3136 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -1119,6 +1119,15 @@ retry_dialog: + } + + virt_viewer_session_set_file(virt_viewer_app_get_session(app), vvfile); ++#ifdef HAVE_OVIRT ++ if (vvfile != NULL) { ++ OvirtForeignMenu *ovirt_menu; ++ ovirt_menu = ovirt_foreign_menu_new_from_file(vvfile); ++ if (ovirt_menu != NULL) { ++ virt_viewer_app_set_ovirt_foreign_menu(app, ovirt_menu); ++ } ++ } ++#endif + + if (!virt_viewer_app_initial_connect(app, &error)) { + const gchar *msg = error ? error->message : diff --git a/SOURCES/0050-Fix-without-spice-gtk-with-ovirt-build.patch b/SOURCES/0050-Fix-without-spice-gtk-with-ovirt-build.patch new file mode 100644 index 0000000..f7ac2f6 --- /dev/null +++ b/SOURCES/0050-Fix-without-spice-gtk-with-ovirt-build.patch @@ -0,0 +1,225 @@ +From 7b2b5e8467fc36c7115a1e942daba071d110e0d4 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Mon, 8 Sep 2014 18:23:08 +0200 +Subject: [PATCH] Fix --without-spice-gtk --with-ovirt build + +The oVirt foreign menu support reused some existing bits from the older +SPICE controller foreign menu code. However, this controller code is +only built when spice-gtk support is built, while the oVirt foreign menu +code could be used with VNC as well. Trying to build the ovirt foreign +menu code without spice-gtk causes build issues due to missing +functions, or missing declarations, ... + +The libgovirt/spice-gtk code which is entangled is the code to update +the foreign menu when its content changes, or when a new window is +opened. Making the oVirt-specific code independant from the +spice-gtk-specific code is not too complicated, but this comes at the +expense of a bit of code duplication, but this is only simple code +iterating over the GHashTable storing the opened windows. + +Resolves: rhbz#1127156 +(cherry picked from commit 69eccb59f99ebdd3f4a90d59e2dd99e92f540b7b) +--- + src/remote-viewer.c | 107 +++++++++++++++++++++++++++++----------------------- + 1 file changed, 60 insertions(+), 47 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 11b3136..237e6a3 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -86,13 +86,17 @@ static gboolean remote_viewer_activate(VirtViewerApp *self, GError **error); + static void remote_viewer_window_added(VirtViewerApp *self, VirtViewerWindow *win); + static void spice_foreign_menu_updated(RemoteViewer *self); + static gint connect_dialog(gchar **uri); ++#endif + + static void + remote_viewer_dispose (GObject *object) + { ++#if defined(HAVE_SPICE_GTK) || 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; +@@ -102,6 +106,7 @@ remote_viewer_dispose (GObject *object) + g_object_unref(priv->ctrl_foreign_menu); + priv->ctrl_foreign_menu = NULL; + } ++#endif + + #ifdef HAVE_OVIRT + if (priv->ovirt_foreign_menu) { +@@ -112,7 +117,6 @@ remote_viewer_dispose (GObject *object) + + G_OBJECT_CLASS(remote_viewer_parent_class)->dispose (object); + } +-#endif + + static void + remote_viewer_get_property (GObject *object, guint property_id, +@@ -192,13 +196,11 @@ remote_viewer_class_init (RemoteViewerClass *klass) + + app_class->start = remote_viewer_start; + app_class->deactivated = remote_viewer_deactivated; +-#ifdef HAVE_SPICE_GTK + object_class->dispose = remote_viewer_dispose; ++#ifdef HAVE_SPICE_GTK + app_class->activate = remote_viewer_activate; + app_class->window_added = remote_viewer_window_added; +-#endif + +-#ifdef HAVE_SPICE_GTK + g_object_class_install_property(object_class, + PROP_CONTROLLER, + g_param_spec_object("controller", +@@ -429,36 +431,8 @@ spice_ctrl_menu_updated(RemoteViewer *self) + g_hash_table_foreach(windows, spice_menu_update_each, self); + } + +-#ifdef HAVE_OVIRT + static void +-ovirt_foreign_menu_update(RemoteViewer *app, VirtViewerWindow *win) +-{ +- GtkWidget *menu = g_object_get_data(G_OBJECT(win), "foreign-menu"); +- GtkWidget *submenu; +- GtkMenuShell *shell = GTK_MENU_SHELL(gtk_builder_get_object(virt_viewer_window_get_builder(win), "top-menu")); +- +- if (app->priv->ovirt_foreign_menu == NULL) { +- /* nothing to do */ +- return; +- } +- if (menu == NULL) { +- menu = gtk_menu_item_new_with_label(_("_Change CD")); +- gtk_menu_item_set_use_underline(GTK_MENU_ITEM(menu), TRUE); +- gtk_menu_shell_append(shell, menu); +- g_object_set_data_full(G_OBJECT(win), "foreign-menu", +- g_object_ref(menu), +- (GDestroyNotify)gtk_widget_destroy); +- } +- +- submenu = ovirt_foreign_menu_get_gtk_menu(app->priv->ovirt_foreign_menu); +- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu); +- +- gtk_widget_show_all(menu); +-} +-#endif +- +-static void +-foreign_menu_update(RemoteViewer *self, VirtViewerWindow *win) ++spice_foreign_menu_update(RemoteViewer *self, VirtViewerWindow *win) + { + GtkWidget *menuitem = g_object_get_data(G_OBJECT(win), "foreign-menu"); + SpiceCtrlMenu *menu; +@@ -489,15 +463,11 @@ foreign_menu_update(RemoteViewer *self, VirtViewerWindow *win) + } + + static void +-foreign_menu_update_each(gpointer key G_GNUC_UNUSED, +- gpointer value, +- gpointer user_data) ++spice_foreign_menu_update_each(gpointer key G_GNUC_UNUSED, ++ gpointer value, ++ gpointer user_data) + { +- foreign_menu_update(REMOTE_VIEWER(user_data), VIRT_VIEWER_WINDOW(value)); +-#ifdef HAVE_OVIRT +- ovirt_foreign_menu_update(REMOTE_VIEWER(user_data), +- VIRT_VIEWER_WINDOW(value)); +-#endif ++ spice_foreign_menu_update(REMOTE_VIEWER(user_data), VIRT_VIEWER_WINDOW(value)); + } + + static void +@@ -507,7 +477,7 @@ spice_foreign_menu_updated(RemoteViewer *self) + + g_debug("Spice foreign menu updated"); + +- g_hash_table_foreach(windows, foreign_menu_update_each, self); ++ g_hash_table_foreach(windows, spice_foreign_menu_update_each, self); + } + + static SpiceSession * +@@ -668,10 +638,7 @@ remote_viewer_window_added(VirtViewerApp *app G_GNUC_UNUSED, + VirtViewerWindow *win) + { + spice_menu_update(REMOTE_VIEWER(app), win); +- foreign_menu_update(REMOTE_VIEWER(app), win); +-#ifdef HAVE_OVIRT +- ovirt_foreign_menu_update(REMOTE_VIEWER(app), win); +-#endif ++ spice_foreign_menu_update(REMOTE_VIEWER(app), win); + } + #endif + +@@ -763,13 +730,57 @@ authenticate_cb(RestProxy *proxy, G_GNUC_UNUSED RestProxyAuth *auth, + return (ret == 0); + } + ++static void ++ovirt_foreign_menu_update(RemoteViewer *app, VirtViewerWindow *win) ++{ ++ GtkWidget *menu = g_object_get_data(G_OBJECT(win), "foreign-menu"); ++ GtkWidget *submenu; ++ GtkMenuShell *shell = GTK_MENU_SHELL(gtk_builder_get_object(virt_viewer_window_get_builder(win), "top-menu")); ++ ++ if (app->priv->ovirt_foreign_menu == NULL) { ++ /* nothing to do */ ++ return; ++ } ++ if (menu == NULL) { ++ menu = gtk_menu_item_new_with_label(_("_Change CD")); ++ gtk_menu_item_set_use_underline(GTK_MENU_ITEM(menu), TRUE); ++ gtk_menu_shell_append(shell, menu); ++ g_object_set_data_full(G_OBJECT(win), "foreign-menu", ++ g_object_ref(menu), ++ (GDestroyNotify)gtk_widget_destroy); ++ } ++ ++ submenu = ovirt_foreign_menu_get_gtk_menu(app->priv->ovirt_foreign_menu); ++ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), submenu); ++ ++ gtk_widget_show_all(menu); ++} ++ ++static void ++ovirt_foreign_menu_update_each(gpointer key G_GNUC_UNUSED, ++ gpointer value, ++ gpointer user_data) ++{ ++ ovirt_foreign_menu_update(REMOTE_VIEWER(user_data), ++ VIRT_VIEWER_WINDOW(value)); ++} ++ ++static void ++ovirt_foreign_menu_updated(RemoteViewer *self) ++{ ++ GHashTable *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); ++ ++ g_debug("Spice foreign menu updated"); ++ ++ g_hash_table_foreach(windows, ovirt_foreign_menu_update_each, self); ++} + + static void + ovirt_foreign_menu_changed(OvirtForeignMenu *foreign_menu G_GNUC_UNUSED, + GParamSpec *pspec G_GNUC_UNUSED, + VirtViewerApp *app) + { +- spice_foreign_menu_updated(REMOTE_VIEWER(app)); ++ ovirt_foreign_menu_updated(REMOTE_VIEWER(app)); + } + + +@@ -790,6 +801,8 @@ virt_viewer_app_set_ovirt_foreign_menu(VirtViewerApp *app, + (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); + } + diff --git a/SOURCES/0051-Fix-gcc-warning-missing-prototypes.patch b/SOURCES/0051-Fix-gcc-warning-missing-prototypes.patch new file mode 100644 index 0000000..11f004a --- /dev/null +++ b/SOURCES/0051-Fix-gcc-warning-missing-prototypes.patch @@ -0,0 +1,23 @@ +From 540b0c5cefa480dcf4ff6d5732c7ff8c2b7e950d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Fri, 8 Aug 2014 16:26:27 +0200 +Subject: [PATCH] Fix gcc warning (missing-prototypes) + +Related: rhbz#1129477 +(cherry picked from commit 729ce99023e48eb70ed49a27729a20111f3a3f53) +--- + src/virt-viewer-window.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index f74f17f..668a980 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -48,6 +48,7 @@ void virt_viewer_window_menu_view_zoom_in(GtkWidget *menu, VirtViewerWindow *sel + void virt_viewer_window_menu_view_zoom_reset(GtkWidget *menu, VirtViewerWindow *self); + gboolean virt_viewer_window_delete(GtkWidget *src, void *dummy, VirtViewerWindow *self); + void virt_viewer_window_menu_file_quit(GtkWidget *src, VirtViewerWindow *self); ++void virt_viewer_window_guest_details_response(GtkDialog *dialog, gint response_id, gpointer user_data); + void virt_viewer_window_menu_help_about(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_help_guest_details(GtkWidget *menu, VirtViewerWindow *self); + void virt_viewer_window_menu_view_fullscreen(GtkWidget *menu, VirtViewerWindow *self); diff --git a/SOURCES/0052-Fix-gcc-warning-unused-parameter.patch b/SOURCES/0052-Fix-gcc-warning-unused-parameter.patch new file mode 100644 index 0000000..1ddca2e --- /dev/null +++ b/SOURCES/0052-Fix-gcc-warning-unused-parameter.patch @@ -0,0 +1,26 @@ +From 77a43a8efdf6a02f25ff7ea8c0560b84f5ce66e4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Fri, 8 Aug 2014 16:27:31 +0200 +Subject: [PATCH] Fix gcc warning (unused-parameter) + +Related: rhbz#1129477 +(cherry picked from commit 4767491532da81acddf48ade32eb7b8b621952b5) +--- + src/virt-viewer-window.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 668a980..c8d5722 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -1055,7 +1055,9 @@ virt_viewer_window_menu_help_guest_details(GtkWidget *menu G_GNUC_UNUSED, + } + + G_MODULE_EXPORT void +-virt_viewer_window_guest_details_response(GtkDialog *dialog, gint response_id, gpointer user_data) ++virt_viewer_window_guest_details_response(GtkDialog *dialog, ++ gint response_id, ++ gpointer user_data G_GNUC_UNUSED) + { + if (response_id == GTK_RESPONSE_CLOSE) + gtk_widget_hide(GTK_WIDGET(dialog)); diff --git a/SOURCES/0053-virt-viewer-Don-t-connect-to-localhost-displays-with.patch b/SOURCES/0053-virt-viewer-Don-t-connect-to-localhost-displays-with.patch new file mode 100644 index 0000000..2c3c77e --- /dev/null +++ b/SOURCES/0053-virt-viewer-Don-t-connect-to-localhost-displays-with.patch @@ -0,0 +1,94 @@ +From c075e62f55cfbcb8ac4a73f0aec665c990075d7a Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Thu, 12 Jun 2014 11:59:51 +0200 +Subject: [PATCH] virt-viewer: Don't connect to localhost displays with + qemu+tcp:// + +When connecting to a remote libvirt instance, a VM may only be listening +on localhost for SPICE/VNC connections. In such a situation, virt-viewer +then tries to connect to localhost, which is not correct as this +'localhost' referred to the remote libvirt host it connected to. +This commit adds a couple of tests on the libvirt URI used and the +<graphics> listen address to error out in this situation. + +Resolves: rhbz#1108523 +(cherry picked from commit a4dde5e6185776b9cd0a0ced2e9257c7d0192d2f) +--- + src/virt-viewer.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 57 insertions(+) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 076611c..8d3e6fb 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -292,6 +292,55 @@ virt_viewer_replace_host(const gchar *host) + return ret; + } + ++ ++static gboolean ++virt_viewer_is_loopback(const char *host) ++{ ++ GInetAddress *addr = NULL; ++ gboolean is_loopback = FALSE; ++ ++ g_return_val_if_fail(host != NULL, FALSE); ++ ++ addr = g_inet_address_new_from_string(host); ++ if (!addr) /* Parsing error means it was probably a hostname */ ++ return (strcmp(host, "localhost") == 0); ++ ++ is_loopback = g_inet_address_get_is_loopback(addr); ++ g_object_unref(addr); ++ ++ return is_loopback; ++} ++ ++ ++static gboolean ++virt_viewer_is_reachable(const gchar *host, const char *transport, ++ const char *transport_host) ++{ ++ gboolean host_is_loopback; ++ gboolean transport_is_loopback; ++ ++ if (!host) ++ return FALSE; ++ ++ if (!transport) ++ return TRUE; ++ ++ if (strcmp(transport, "ssh") == 0) ++ return TRUE; ++ ++ if (strcmp(transport, "unix") == 0) ++ return TRUE; ++ ++ host_is_loopback = virt_viewer_is_loopback(host); ++ transport_is_loopback = virt_viewer_is_loopback(transport_host); ++ ++ if (transport_is_loopback && host_is_loopback) ++ return TRUE; ++ else ++ return !host_is_loopback; ++} ++ ++ + static gboolean + virt_viewer_extract_connect_info(VirtViewer *self, + virDomainPtr dom) +@@ -377,6 +426,14 @@ virt_viewer_extract_connect_info(VirtViewer *self, + ghost = replacement_host; + } + ++ if (!virt_viewer_is_reachable(ghost, transport, host)) { ++ g_debug("graphics listen '%s' is not reachable from this machine", ++ ghost ? ghost : ""); ++ virt_viewer_app_simple_message_dialog(app, _("Guest '%s' is not reachable"), ++ priv->domkey); ++ goto cleanup; ++ } ++ + virt_viewer_app_set_connect_info(app, host, ghost, gport, gtlsport,transport, unixsock, user, port, NULL); + + retval = TRUE; diff --git a/SOURCES/0054-app-add-virt_viewer_app_make_dialog.patch b/SOURCES/0054-app-add-virt_viewer_app_make_dialog.patch new file mode 100644 index 0000000..110fba0 --- /dev/null +++ b/SOURCES/0054-app-add-virt_viewer_app_make_dialog.patch @@ -0,0 +1,85 @@ +From 9411e11af06fbb24a68d2dca7dcb55267606d09d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Thu, 3 Jul 2014 18:41:08 +0200 +Subject: [PATCH] app: add virt_viewer_app_make_dialog() + +Add a function to create an application dialog. In the following +commit, we will add more details for connection failures. + +Resolves: rhbz#1115986 +(cherry picked from commit df28177c679e8ba0a7cf069c5f816167a0a96904) +--- + src/virt-viewer-app.c | 37 +++++++++++++++++++++++++++---------- + 1 file changed, 27 insertions(+), 10 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index b8b5c9c..0110a9f 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -199,20 +199,18 @@ virt_viewer_app_set_debug(gboolean debug) + doDebug = debug; + } + +-void +-virt_viewer_app_simple_message_dialog(VirtViewerApp *self, +- const char *fmt, ...) ++static GtkWidget* ++virt_viewer_app_make_message_dialog(VirtViewerApp *self, ++ const char *fmt, ...) + { +- g_return_if_fail(VIRT_VIEWER_IS_APP(self)); ++ g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), NULL); + GtkWindow *window = GTK_WINDOW(virt_viewer_window_get_window(self->priv->main_window)); + GtkWidget *dialog; + char *msg; + va_list vargs; + + va_start(vargs, fmt); +- + msg = g_strdup_vprintf(fmt, vargs); +- + va_end(vargs); + + dialog = gtk_message_dialog_new(window, +@@ -223,8 +221,25 @@ virt_viewer_app_simple_message_dialog(VirtViewerApp *self, + "%s", + msg); + ++ g_free(msg); ++ ++ return dialog; ++} ++ ++void ++virt_viewer_app_simple_message_dialog(VirtViewerApp *self, ++ const char *fmt, ...) ++{ ++ GtkWidget *dialog; ++ char *msg; ++ va_list vargs; ++ ++ va_start(vargs, fmt); ++ msg = g_strdup_vprintf(fmt, vargs); ++ va_end(vargs); ++ ++ dialog = virt_viewer_app_make_message_dialog(self, msg); + gtk_dialog_run(GTK_DIALOG(dialog)); +- + gtk_widget_destroy(dialog); + + g_free(msg); +@@ -1392,9 +1407,11 @@ virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED, + gtk_main_quit(); + + if (connect_error) { +- virt_viewer_app_simple_message_dialog(self, +- _("Unable to connect to the graphic server %s"), +- priv->pretty_address); ++ GtkWidget *dialog = virt_viewer_app_make_message_dialog(self, ++ _("Unable to connect to the graphic server %s"), priv->pretty_address); ++ ++ gtk_dialog_run(GTK_DIALOG(dialog)); ++ gtk_widget_destroy(dialog); + } + virt_viewer_app_set_usb_options_sensitive(self, FALSE); + virt_viewer_app_deactivate(self, connect_error); diff --git a/SOURCES/0055-app-report-disconnection-error-details.patch b/SOURCES/0055-app-report-disconnection-error-details.patch new file mode 100644 index 0000000..4ccd69a --- /dev/null +++ b/SOURCES/0055-app-report-disconnection-error-details.patch @@ -0,0 +1,126 @@ +From 259dff25a78a23ee35dfc9a7ae20ca1013b1f9fa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Thu, 3 Jul 2014 18:42:37 +0200 +Subject: [PATCH] app: report disconnection error details + +It may be useful to provide more detailed reason for disconnection. + +Resolves: rhbz#1115986 +(cherry picked from commit 225dff3cb068d8920d647d1e0a07f3f352bbc8d4) +--- + src/virt-viewer-app.c | 6 ++++-- + src/virt-viewer-session-spice.c | 6 +++--- + src/virt-viewer-session-vnc.c | 2 +- + src/virt-viewer-session.c | 5 +++-- + src/virt-viewer-session.h | 2 +- + 5 files changed, 12 insertions(+), 9 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 0110a9f..b05e966 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -75,6 +75,7 @@ static void virt_viewer_app_connected(VirtViewerSession *session, + static void virt_viewer_app_initialized(VirtViewerSession *session, + VirtViewerApp *self); + static void virt_viewer_app_disconnected(VirtViewerSession *session, ++ const gchar *msg, + VirtViewerApp *self); + static void virt_viewer_app_auth_refused(VirtViewerSession *session, + const char *msg, +@@ -1394,7 +1395,7 @@ virt_viewer_app_initialized(VirtViewerSession *session G_GNUC_UNUSED, + } + + static void +-virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED, ++virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED, const gchar *msg, + VirtViewerApp *self) + { + VirtViewerAppPrivate *priv = self->priv; +@@ -1410,6 +1411,7 @@ virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED, + GtkWidget *dialog = virt_viewer_app_make_message_dialog(self, + _("Unable to connect to the graphic server %s"), priv->pretty_address); + ++ g_object_set(dialog, "secondary-text", msg, NULL); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + } +@@ -1422,7 +1424,7 @@ static void virt_viewer_app_cancelled(VirtViewerSession *session, + { + VirtViewerAppPrivate *priv = self->priv; + priv->cancelled = TRUE; +- virt_viewer_app_disconnected(session, self); ++ virt_viewer_app_disconnected(session, NULL, self); + } + + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index 097c9d7..ad3028a 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -519,12 +519,12 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED + break; + case SPICE_CHANNEL_ERROR_CONNECT: + g_debug("main channel: failed to connect"); +- g_signal_emit_by_name(session, "session-disconnected"); ++ g_signal_emit_by_name(session, "session-disconnected", NULL); + break; + case SPICE_CHANNEL_ERROR_IO: + case SPICE_CHANNEL_ERROR_LINK: + case SPICE_CHANNEL_ERROR_TLS: +- g_signal_emit_by_name(session, "session-disconnected"); ++ g_signal_emit_by_name(session, "session-disconnected", NULL); + break; + default: + g_warning("unhandled spice main channel event: %d", event); +@@ -815,7 +815,7 @@ virt_viewer_session_spice_channel_destroy(G_GNUC_UNUSED SpiceSession *s, + + self->priv->channel_count--; + if (self->priv->channel_count == 0) +- g_signal_emit_by_name(self, "session-disconnected"); ++ g_signal_emit_by_name(self, "session-disconnected", NULL); + } + + #define UUID_LEN 16 +diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c +index 545caaa..e4a6c93 100644 +--- a/src/virt-viewer-session-vnc.c ++++ b/src/virt-viewer-session-vnc.c +@@ -115,7 +115,7 @@ virt_viewer_session_vnc_disconnected(VncDisplay *vnc G_GNUC_UNUSED, + virt_viewer_session_clear_displays(VIRT_VIEWER_SESSION(session)); + display = virt_viewer_display_vnc_new(session->priv->vnc); + g_debug("Disconnected"); +- g_signal_emit_by_name(session, "session-disconnected"); ++ g_signal_emit_by_name(session, "session-disconnected", NULL); + virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(display), + VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, FALSE); + } +diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c +index 20d5fb1..9410004 100644 +--- a/src/virt-viewer-session.c ++++ b/src/virt-viewer-session.c +@@ -220,9 +220,10 @@ virt_viewer_session_class_init(VirtViewerSessionClass *class) + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(VirtViewerSessionClass, session_disconnected), + NULL, NULL, +- g_cclosure_marshal_VOID__VOID, ++ g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, +- 0); ++ 1, ++ G_TYPE_STRING); + + g_signal_new("session-channel-open", + G_OBJECT_CLASS_TYPE(object_class), +diff --git a/src/virt-viewer-session.h b/src/virt-viewer-session.h +index 388d675..316fdf0 100644 +--- a/src/virt-viewer-session.h ++++ b/src/virt-viewer-session.h +@@ -78,7 +78,7 @@ struct _VirtViewerSessionClass { + /* signals */ + void (*session_connected)(VirtViewerSession *session); + void (*session_initialized)(VirtViewerSession *session); +- void (*session_disconnected)(VirtViewerSession *session); ++ void (*session_disconnected)(VirtViewerSession *session, const gchar *msg); + void (*session_auth_refused)(VirtViewerSession *session, const gchar *msg); + void (*session_auth_failed)(VirtViewerSession *session, const gchar *msg); + void (*session_usb_failed)(VirtViewerSession *session, const gchar *msg); diff --git a/SOURCES/0056-Don-t-check-for-NULL-when-it-never-can-happen.patch b/SOURCES/0056-Don-t-check-for-NULL-when-it-never-can-happen.patch new file mode 100644 index 0000000..fae0469 --- /dev/null +++ b/SOURCES/0056-Don-t-check-for-NULL-when-it-never-can-happen.patch @@ -0,0 +1,24 @@ +From 48cec1e3cafbb204b9b07357b58db09277f2b984 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Fri, 25 Jul 2014 00:39:19 +0200 +Subject: [PATCH] Don't check for NULL when it never can happen + +Resolves: rhbz#885108 +(cherry picked from commit dc3db6302e6d6e2411911ae7bc3fd885676fe40d) +--- + src/virt-viewer-util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/virt-viewer-util.c b/src/virt-viewer-util.c +index 464a3d0..6dd048d 100644 +--- a/src/virt-viewer-util.c ++++ b/src/virt-viewer-util.c +@@ -112,7 +112,7 @@ virt_viewer_util_extract_host(const char *uristr, + g_return_val_if_fail(uri != NULL, 1); + + if (host) { +- if (!uri || !uri->server) { ++ if (!uri->server) { + *host = g_strdup("localhost"); + } else { + if (uri->server[0] == '[') { diff --git a/SOURCES/0057-app-report-disconnection-error-details.patch b/SOURCES/0057-app-report-disconnection-error-details.patch new file mode 100644 index 0000000..7535efa --- /dev/null +++ b/SOURCES/0057-app-report-disconnection-error-details.patch @@ -0,0 +1,32 @@ +From 008e5c245c201a645504593132ea75b33af84839 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Thu, 18 Sep 2014 11:45:52 +0200 +Subject: [PATCH] app: report disconnection error details + +This RHEL-only patch backports bits from upstream commit 4c658485, +225dff3c, b6d2744b and d1d53d0c. + +Related: rhbz#1115986 +--- + 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 ad3028a..58a1dd7 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -518,9 +518,12 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED + } + break; + case SPICE_CHANNEL_ERROR_CONNECT: +- g_debug("main channel: failed to connect"); +- g_signal_emit_by_name(session, "session-disconnected", NULL); ++ { ++ const GError *error = spice_channel_get_error(channel); ++ g_debug("main channel: failed to connect %s", error ? error->message : NULL); ++ g_signal_emit_by_name(session, "session-disconnected", error ? error->message : NULL); + break; ++ } + case SPICE_CHANNEL_ERROR_IO: + case SPICE_CHANNEL_ERROR_LINK: + case SPICE_CHANNEL_ERROR_TLS: diff --git a/SOURCES/0058-Add-support-to-use-numpad-accelarators-for-zoom-in.o.patch b/SOURCES/0058-Add-support-to-use-numpad-accelarators-for-zoom-in.o.patch new file mode 100644 index 0000000..1264792 --- /dev/null +++ b/SOURCES/0058-Add-support-to-use-numpad-accelarators-for-zoom-in.o.patch @@ -0,0 +1,121 @@ +From 37bd26f92d220a26cba68055d66d44cbeedbb875 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Thu, 18 Sep 2014 12:21:11 +0200 +Subject: [PATCH] Add support to use numpad accelarators for + zoom-{in.out,reset} + +As virt-viewer uses GtkAccelMap for shortcuts and that GTK only can have +one key binding per accelerator (in accel_map_add_entry), let's also add +support specificly for the numpad keys in the virt-viewer code + +https://bugzilla.redhat.com/show_bug.cgi?id=883433 +(cherry picked from commit 3a168815b738076526ba0f3e9a82e6fb1db482e9) +--- + src/virt-gtk-compat.h | 3 +++ + src/virt-viewer-app.c | 6 ++++++ + src/virt-viewer.xml | 36 ++++++++++++++++++++++++++++++++++++ + 3 files changed, 45 insertions(+) + +diff --git a/src/virt-gtk-compat.h b/src/virt-gtk-compat.h +index 110c17a..aca38b1 100644 +--- a/src/virt-gtk-compat.h ++++ b/src/virt-gtk-compat.h +@@ -57,6 +57,9 @@ G_BEGIN_DECLS + #define GDK_0 GDK_KEY_0 + #define GDK_plus GDK_KEY_plus + #define GDK_minus GDK_KEY_minus ++#define GDK_KP_Add GDK_KEY_KP_Add ++#define GDK_KP_Subtract GDK_KEY_KP_Subtract ++#define GDK_KP_0 GDK_KEY_KP_0 + #endif + + #if !GTK_CHECK_VERSION(3, 0, 0) +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index b05e966..2fb430f 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1778,8 +1778,11 @@ virt_viewer_app_constructor (GType gtype, + gtk_accel_map_add_entry("<virt-viewer>/view/toggle-fullscreen", GDK_F11, 0); + gtk_accel_map_add_entry("<virt-viewer>/view/release-cursor", GDK_F12, GDK_SHIFT_MASK); + gtk_accel_map_add_entry("<virt-viewer>/view/zoom-reset", GDK_0, GDK_CONTROL_MASK); ++ gtk_accel_map_add_entry("<virt-viewer>/view/kp-zoom-reset", GDK_KP_0, GDK_CONTROL_MASK); + gtk_accel_map_add_entry("<virt-viewer>/view/zoom-out", GDK_minus, GDK_CONTROL_MASK); ++ gtk_accel_map_add_entry("<virt-viewer>/view/kp-zoom-out", GDK_KP_Subtract, GDK_CONTROL_MASK); + gtk_accel_map_add_entry("<virt-viewer>/view/zoom-in", GDK_plus, GDK_CONTROL_MASK); ++ gtk_accel_map_add_entry("<virt-viewer>/view/kp-zoom-in", GDK_KP_Add, GDK_CONTROL_MASK); + gtk_accel_map_add_entry("<virt-viewer>/send/secure-attention", GDK_End, GDK_CONTROL_MASK | GDK_MOD1_MASK); + + virt_viewer_app_set_fullscreen(self, opt_fullscreen); +@@ -1973,8 +1976,11 @@ virt_viewer_app_clear_hotkeys(VirtViewerApp *self) + gtk_accel_map_change_entry("<virt-viewer>/view/toggle-fullscreen", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/release-cursor", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/zoom-reset", 0, 0, TRUE); ++ gtk_accel_map_change_entry("<virt-viewer>/view/kp-zoom-reset", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/zoom-in", 0, 0, TRUE); ++ gtk_accel_map_change_entry("<virt-viewer>/view/kp-zoom-in", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/zoom-out", 0, 0, TRUE); ++ gtk_accel_map_change_entry("<virt-viewer>/view/kp-zoom-out", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/send/secure-attention", 0, 0, TRUE); + virt_viewer_set_insert_smartcard_accel(self, 0, 0); + virt_viewer_set_remove_smartcard_accel(self, 0, 0); +diff --git a/src/virt-viewer.xml b/src/virt-viewer.xml +index d489653..760550e 100644 +--- a/src/virt-viewer.xml ++++ b/src/virt-viewer.xml +@@ -138,6 +138,18 @@ + </object> + </child> + <child> ++ <object class="GtkImageMenuItem" id="menu-view-kp-zoom-in"> ++ <property name="accel_path"><virt-viewer>/view/kp-zoom-in</property> ++ <property name="label">gtk-zoom-in</property> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="use_action_appearance">False</property> ++ <property name="use_underline">True</property> ++ <property name="use_stock">True</property> ++ <signal name="activate" handler="virt_viewer_window_menu_view_zoom_in" swapped="no"/> ++ </object> ++ </child> ++ <child> + <object class="GtkImageMenuItem" id="menu-view-zoom-out"> + <property name="accel_path"><virt-viewer>/view/zoom-out</property> + <property name="label">gtk-zoom-out</property> +@@ -150,6 +162,18 @@ + </object> + </child> + <child> ++ <object class="GtkImageMenuItem" id="menu-view-kp-zoom-out"> ++ <property name="accel_path"><virt-viewer>/view/kp-zoom-out</property> ++ <property name="label">gtk-zoom-out</property> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="use_action_appearance">False</property> ++ <property name="use_underline">True</property> ++ <property name="use_stock">True</property> ++ <signal name="activate" handler="virt_viewer_window_menu_view_zoom_out" swapped="no"/> ++ </object> ++ </child> ++ <child> + <object class="GtkSeparatorMenuItem" id="separatormenuitem4"> + <property name="visible">True</property> + <property name="can_focus">False</property> +@@ -167,6 +191,18 @@ + <signal name="activate" handler="virt_viewer_window_menu_view_zoom_reset" swapped="no"/> + </object> + </child> ++ <child> ++ <object class="GtkImageMenuItem" id="menu-view-kp-zoom-reset"> ++ <property name="accel_path"><virt-viewer>/view/kp-zoom-reset</property> ++ <property name="label">gtk-zoom-100</property> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="use_action_appearance">False</property> ++ <property name="use_underline">True</property> ++ <property name="use_stock">True</property> ++ <signal name="activate" handler="virt_viewer_window_menu_view_zoom_reset" swapped="no"/> ++ </object> ++ </child> + </object> + </child> + </object> diff --git a/SOURCES/0059-Do-not-show-duplicated-menu-items.patch b/SOURCES/0059-Do-not-show-duplicated-menu-items.patch new file mode 100644 index 0000000..330f60e --- /dev/null +++ b/SOURCES/0059-Do-not-show-duplicated-menu-items.patch @@ -0,0 +1,46 @@ +From c6f69143bb5a6c95f812f9d71d7a78f6b2c2eaeb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Thu, 18 Sep 2014 12:21:12 +0200 +Subject: [PATCH] Do not show duplicated menu items + +When the support to use numpad accelerators for zoom-{in,out,reset} +was added (3a168815), by mistake, we have added duplicated buttons +in View -> Zoom. + +https://bugzilla.redhat.com/show_bug.cgi?id=883433 +(cherry picked from commit 55cdb9867df05f1c4f6c8e569a6f0c1e0bc28d99) +--- + src/virt-viewer.xml | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/virt-viewer.xml b/src/virt-viewer.xml +index 760550e..6f2eebb 100644 +--- a/src/virt-viewer.xml ++++ b/src/virt-viewer.xml +@@ -141,7 +141,7 @@ + <object class="GtkImageMenuItem" id="menu-view-kp-zoom-in"> + <property name="accel_path"><virt-viewer>/view/kp-zoom-in</property> + <property name="label">gtk-zoom-in</property> +- <property name="visible">True</property> ++ <property name="visible">False</property> + <property name="can_focus">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> +@@ -165,7 +165,7 @@ + <object class="GtkImageMenuItem" id="menu-view-kp-zoom-out"> + <property name="accel_path"><virt-viewer>/view/kp-zoom-out</property> + <property name="label">gtk-zoom-out</property> +- <property name="visible">True</property> ++ <property name="visible">False</property> + <property name="can_focus">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> +@@ -195,7 +195,7 @@ + <object class="GtkImageMenuItem" id="menu-view-kp-zoom-reset"> + <property name="accel_path"><virt-viewer>/view/kp-zoom-reset</property> + <property name="label">gtk-zoom-100</property> +- <property name="visible">True</property> ++ <property name="visible">False</property> + <property name="can_focus">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> diff --git a/SOURCES/0060-Revert-changes-related-to-numpad-accelerators.patch b/SOURCES/0060-Revert-changes-related-to-numpad-accelerators.patch new file mode 100644 index 0000000..ee90b9e --- /dev/null +++ b/SOURCES/0060-Revert-changes-related-to-numpad-accelerators.patch @@ -0,0 +1,133 @@ +From 044d1d0cdc67ae6d131baf8c26fc6a903cf41f2a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Tue, 23 Sep 2014 01:32:16 +0200 +Subject: [PATCH] Revert changes related to numpad accelerators + +Due to a GTK+ limitation and bad testing from my side, I've pushed +two patches trying to add support to use Ctrl + {+, -, 0} from numpad +to control zoom-in, zoom-out and zoom-reset. +Unfortunately, with the first patch (3a168815) I've duplicated the menu +items related to the zoom functions. With the second one (55cdb986), +provided to not show the duplicated menu items, we came back to the +initial state, where the numpad accelerators don't work. + +So, in resume, multiple accelerators in a GTK+ widget are only supported +on applications using GApplication, what is not our case and won't be +till we drop the GTK+2 support. + +Revert "Do not show duplicated menu items" and +Revert "Add support to use numpad accelarators for zoom-{in.out,reset}" + +This reverts commits 55cdb9867df05f1c4f6c8e569a6f0c1e0bc28d99 and +3a168815b738076526ba0f3e9a82e6fb1db482e9. + +(cherry picked from commit e86e8853807f9026c62ef36f56e03d8eda7ce4e1) +--- + src/virt-gtk-compat.h | 3 --- + src/virt-viewer-app.c | 6 ------ + src/virt-viewer.xml | 36 ------------------------------------ + 3 files changed, 45 deletions(-) + +diff --git a/src/virt-gtk-compat.h b/src/virt-gtk-compat.h +index aca38b1..110c17a 100644 +--- a/src/virt-gtk-compat.h ++++ b/src/virt-gtk-compat.h +@@ -57,9 +57,6 @@ G_BEGIN_DECLS + #define GDK_0 GDK_KEY_0 + #define GDK_plus GDK_KEY_plus + #define GDK_minus GDK_KEY_minus +-#define GDK_KP_Add GDK_KEY_KP_Add +-#define GDK_KP_Subtract GDK_KEY_KP_Subtract +-#define GDK_KP_0 GDK_KEY_KP_0 + #endif + + #if !GTK_CHECK_VERSION(3, 0, 0) +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 2fb430f..b05e966 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -1778,11 +1778,8 @@ virt_viewer_app_constructor (GType gtype, + gtk_accel_map_add_entry("<virt-viewer>/view/toggle-fullscreen", GDK_F11, 0); + gtk_accel_map_add_entry("<virt-viewer>/view/release-cursor", GDK_F12, GDK_SHIFT_MASK); + gtk_accel_map_add_entry("<virt-viewer>/view/zoom-reset", GDK_0, GDK_CONTROL_MASK); +- gtk_accel_map_add_entry("<virt-viewer>/view/kp-zoom-reset", GDK_KP_0, GDK_CONTROL_MASK); + gtk_accel_map_add_entry("<virt-viewer>/view/zoom-out", GDK_minus, GDK_CONTROL_MASK); +- gtk_accel_map_add_entry("<virt-viewer>/view/kp-zoom-out", GDK_KP_Subtract, GDK_CONTROL_MASK); + gtk_accel_map_add_entry("<virt-viewer>/view/zoom-in", GDK_plus, GDK_CONTROL_MASK); +- gtk_accel_map_add_entry("<virt-viewer>/view/kp-zoom-in", GDK_KP_Add, GDK_CONTROL_MASK); + gtk_accel_map_add_entry("<virt-viewer>/send/secure-attention", GDK_End, GDK_CONTROL_MASK | GDK_MOD1_MASK); + + virt_viewer_app_set_fullscreen(self, opt_fullscreen); +@@ -1976,11 +1973,8 @@ virt_viewer_app_clear_hotkeys(VirtViewerApp *self) + gtk_accel_map_change_entry("<virt-viewer>/view/toggle-fullscreen", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/release-cursor", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/zoom-reset", 0, 0, TRUE); +- gtk_accel_map_change_entry("<virt-viewer>/view/kp-zoom-reset", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/zoom-in", 0, 0, TRUE); +- gtk_accel_map_change_entry("<virt-viewer>/view/kp-zoom-in", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/zoom-out", 0, 0, TRUE); +- gtk_accel_map_change_entry("<virt-viewer>/view/kp-zoom-out", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/send/secure-attention", 0, 0, TRUE); + virt_viewer_set_insert_smartcard_accel(self, 0, 0); + virt_viewer_set_remove_smartcard_accel(self, 0, 0); +diff --git a/src/virt-viewer.xml b/src/virt-viewer.xml +index 6f2eebb..d489653 100644 +--- a/src/virt-viewer.xml ++++ b/src/virt-viewer.xml +@@ -138,18 +138,6 @@ + </object> + </child> + <child> +- <object class="GtkImageMenuItem" id="menu-view-kp-zoom-in"> +- <property name="accel_path"><virt-viewer>/view/kp-zoom-in</property> +- <property name="label">gtk-zoom-in</property> +- <property name="visible">False</property> +- <property name="can_focus">False</property> +- <property name="use_action_appearance">False</property> +- <property name="use_underline">True</property> +- <property name="use_stock">True</property> +- <signal name="activate" handler="virt_viewer_window_menu_view_zoom_in" swapped="no"/> +- </object> +- </child> +- <child> + <object class="GtkImageMenuItem" id="menu-view-zoom-out"> + <property name="accel_path"><virt-viewer>/view/zoom-out</property> + <property name="label">gtk-zoom-out</property> +@@ -162,18 +150,6 @@ + </object> + </child> + <child> +- <object class="GtkImageMenuItem" id="menu-view-kp-zoom-out"> +- <property name="accel_path"><virt-viewer>/view/kp-zoom-out</property> +- <property name="label">gtk-zoom-out</property> +- <property name="visible">False</property> +- <property name="can_focus">False</property> +- <property name="use_action_appearance">False</property> +- <property name="use_underline">True</property> +- <property name="use_stock">True</property> +- <signal name="activate" handler="virt_viewer_window_menu_view_zoom_out" swapped="no"/> +- </object> +- </child> +- <child> + <object class="GtkSeparatorMenuItem" id="separatormenuitem4"> + <property name="visible">True</property> + <property name="can_focus">False</property> +@@ -191,18 +167,6 @@ + <signal name="activate" handler="virt_viewer_window_menu_view_zoom_reset" swapped="no"/> + </object> + </child> +- <child> +- <object class="GtkImageMenuItem" id="menu-view-kp-zoom-reset"> +- <property name="accel_path"><virt-viewer>/view/kp-zoom-reset</property> +- <property name="label">gtk-zoom-100</property> +- <property name="visible">False</property> +- <property name="can_focus">False</property> +- <property name="use_action_appearance">False</property> +- <property name="use_underline">True</property> +- <property name="use_stock">True</property> +- <signal name="activate" handler="virt_viewer_window_menu_view_zoom_reset" swapped="no"/> +- </object> +- </child> + </object> + </child> + </object> diff --git a/SOURCES/0061-Add-documentation-for-fullscreen-monitor-mapping.patch b/SOURCES/0061-Add-documentation-for-fullscreen-monitor-mapping.patch new file mode 100644 index 0000000..5a26aa2 --- /dev/null +++ b/SOURCES/0061-Add-documentation-for-fullscreen-monitor-mapping.patch @@ -0,0 +1,140 @@ +From 99f69ebf08dd972de655459e8c008c82f5231663 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Thu, 25 Sep 2014 17:26:33 -0500 +Subject: [PATCH] Add documentation for fullscreen monitor mapping + +see https://bugzilla.redhat.com/show_bug.cgi?id=1142769 + +(cherry picked from commit 882a59596d24770bcefc6fb641c634dd0a2245f1) +--- + man/remote-viewer.pod | 43 ++++++++++++++++++++++++++++++++++++------- + man/virt-viewer.pod | 34 ++++++++++++++++++++++++++++++++++ + 2 files changed, 70 insertions(+), 7 deletions(-) + +diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod +index 2c84432..1683e44 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -15,8 +15,8 @@ protocols are SPICE and VNC. + Starting remote-viewer without URI will open a simple dialog with an + entry and a list of previously successfully accessed URI. + +-The URI can also point to a connection settings file, see FILE section +-for a description of the format. ++The URI can also point to a connection settings file, see the CONNECTION FILE ++section for a description of the format. + + =head1 OPTIONS + +@@ -44,10 +44,12 @@ Zoom level of the display window in percentage. Range 10-400. + + Start with the windows maximized to fullscreen. + +-If supported, the remote display will be reconfigured to match at best the +-client physical monitor configuration on initialization, by enabling or +-disabling extra monitors as necessary. This is currently implemented by the +-Spice backend only. ++If supported, the remote display will be reconfigured to match the physical ++client monitor configuration, by enabling or disabling extra monitors as ++necessary. This is currently implemented by the Spice backend only. ++ ++To specify which client monitors are used in fullscreen mode, see the ++CONFIGURATION section below. + + =item -t TITLE, --title TITLE + +@@ -113,7 +115,7 @@ the associated action. + It must be composed of modifiers (shift, ctrl or alt) and a + non-modifier key. For example, "shift+f11". + +-=head1 FILE ++=head1 CONNECTION FILE + + B<remote-viewer> connection file is of INI file format, with a + mandatory [virt-viewer] group and "type" key. +@@ -267,6 +269,33 @@ port 8080, use the value "http://foobar:8080". + + =back + ++=head1 CONFIGURATION ++ ++A small number of configuration options can be controlled by editing the ++settings file located in the user configuration directory: ++ ++ <USER-CONFIG-DIR>/virt-viewer/settings ++ ++This file is a text file in INI format, with application options in the ++[virt-viewer] group and per-guest options in a group identified by the guest's ++UUID. The application options should not be edited manually. There is also a ++special [fallback] group which specifies options for all guests that don't have ++an explicit group. ++ ++For each guest, the initial fullscreen monitor configuration can be specified ++by using the B<monitor-mapping> key. This configuration only takes effect when ++the -f/--full-screen option is specified. ++ ++The value of this key is a list of mappings between a guest display and a ++client monitor. Each mapping is separated by a semicolon character, and the ++mappings have the format <GUEST-DISPLAY-ID>:<CLIENT-MONITOR-ID>. ++ ++For example, to map guest displays 1 and 2 to client monitors 2 and 3 for the ++guest with a UUID of e4591275-d9d3-4a44-a18b-ef2fbc8ac3e2, use: ++ ++ [e4591275-d9d3-4a44-a18b-ef2fbc8ac3e2] ++ monitor-mapping=1:2;2:3 ++ + =head1 EXAMPLES + + To connect to SPICE server on host "makai" with port 5900 +diff --git a/man/virt-viewer.pod b/man/virt-viewer.pod +index ac9b268..e976c69 100644 +--- a/man/virt-viewer.pod ++++ b/man/virt-viewer.pod +@@ -71,6 +71,13 @@ socket connection. + + Start with the window maximised to fullscreen + ++If supported, the remote display will be reconfigured to match the physical ++client monitor configuration, by enabling or disabling extra monitors as ++necessary. This is currently implemented by the Spice backend only. ++ ++To specify which client monitors are used in fullscreen mode, see the ++CONFIGURATION section below. ++ + =item --debug + + Print debugging information +@@ -117,6 +124,33 @@ option, and will attempt to do a reconnection before it quits. + + =back + ++=head1 CONFIGURATION ++ ++A small number of configuration options can be controlled by editing the ++settings file located in the user configuration directory: ++ ++ <USER-CONFIG-DIR>/virt-viewer/settings ++ ++This file is a text file in INI format, with application options in the ++[virt-viewer] group and per-guest options in a group identified by the guest's ++UUID. The application options should not be edited manually. There is also a ++special [fallback] group which specifies options for all guests that don't have ++an explicit group. ++ ++For each guest, the initial fullscreen monitor configuration can be specified ++by using the B<monitor-mapping> key. This configuration only takes effect when ++the -f/--full-screen option is specified. ++ ++The value of this key is a list of mappings between a guest display and a ++client monitor. Each mapping is separated by a semicolon character, and the ++mappings have the format <GUEST-DISPLAY-ID>:<CLIENT-MONITOR-ID>. ++ ++For example, to map guest displays 1 and 2 to client monitors 2 and 3 for the ++guest with a UUID of e4591275-d9d3-4a44-a18b-ef2fbc8ac3e2, use: ++ ++ [e4591275-d9d3-4a44-a18b-ef2fbc8ac3e2] ++ monitor-mapping=1:2;2:3 ++ + =head1 EXAMPLES + + To connect to the guest called 'demo' running under Xen diff --git a/SOURCES/0062-Add-example-of-an-oVirt-URI-to-the-manpage.patch b/SOURCES/0062-Add-example-of-an-oVirt-URI-to-the-manpage.patch new file mode 100644 index 0000000..d3048ff --- /dev/null +++ b/SOURCES/0062-Add-example-of-an-oVirt-URI-to-the-manpage.patch @@ -0,0 +1,27 @@ +From f0b52036b3928b4a510562356e06e7e10df1bfca Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Thu, 25 Sep 2014 17:26:33 -0500 +Subject: [PATCH] Add example of an oVirt URI to the manpage + +https://bugzilla.redhat.com/show_bug.cgi?id=1142769 +(cherry picked from commit 0107214070b796ab5f00168f963081238e6379fa) +--- + man/remote-viewer.pod | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod +index 1683e44..b3b0bbc 100644 +--- a/man/remote-viewer.pod ++++ b/man/remote-viewer.pod +@@ -306,6 +306,11 @@ To connect to VNC server on host "tsingy" with port 5900 + + remote-viewer vnc://tsingy:5900 + ++To connect to a virtual machine named "toliara" on an oVirt server at ++example.org ++ ++ remote-viewer ovirt://[username@]example.org/toliara ++ + =head1 BUGS + + Report bugs to the mailing list C<http://www.redhat.com/mailman/listinfo/virt-tools-list> diff --git a/SOURCES/0063-Do-not-fail-when-the-auth-dialog-is-cancelled.patch b/SOURCES/0063-Do-not-fail-when-the-auth-dialog-is-cancelled.patch new file mode 100644 index 0000000..fe063db --- /dev/null +++ b/SOURCES/0063-Do-not-fail-when-the-auth-dialog-is-cancelled.patch @@ -0,0 +1,62 @@ +From e39786a67599b20ae86f2df9cb9e140f0e36742d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Mon, 22 Sep 2014 17:14:39 +0200 +Subject: [PATCH] Do not fail when the auth dialog is cancelled + +https://bugzilla.redhat.com/show_bug.cgi?id=1145460 +(cherry picked from commit a5ce2ed3aea30486900e868dc2158fc591321ec1) +--- + src/virt-viewer.c | 19 ++++++++++++------- + 1 file changed, 12 insertions(+), 7 deletions(-) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 8d3e6fb..aceb474 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -57,6 +57,7 @@ struct _VirtViewerPrivate { + gboolean withEvents; + gboolean waitvm; + gboolean reconnect; ++ gboolean auth_cancelled; + }; + + G_DEFINE_TYPE (VirtViewer, virt_viewer, VIRT_VIEWER_TYPE_APP) +@@ -668,6 +669,7 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + { + char **username = NULL, **password = NULL; + VirtViewer *app = cbdata; ++ VirtViewerPrivate *priv = app->priv; + int i; + int ret = -1; + +@@ -691,11 +693,11 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + if (username || password) { + VirtViewerWindow *vwin = virt_viewer_app_get_main_window(VIRT_VIEWER_APP(app)); + GtkWindow *win = virt_viewer_window_get_window(vwin); +- ret = virt_viewer_auth_collect_credentials(win, +- "libvirt", +- app->priv->uri, +- username, password); +- if (ret < 0) ++ priv->auth_cancelled = !virt_viewer_auth_collect_credentials(win, ++ "libvirt", ++ app->priv->uri, ++ username, password); ++ if (priv->auth_cancelled) + goto cleanup; + } else { + ret = 0; +@@ -748,8 +750,11 @@ virt_viewer_connect(VirtViewerApp *app) + &auth_libvirt, + oflags); + if (!priv->conn) { +- virt_viewer_app_simple_message_dialog(app, _("Unable to connect to libvirt with URI %s"), +- priv->uri ? priv->uri : _("[none]")); ++ if (!priv->auth_cancelled) { ++ virt_viewer_app_simple_message_dialog(app, _("Unable to connect to libvirt with URI %s"), ++ priv->uri ? priv->uri : _("[none]")); ++ } ++ + return -1; + } + diff --git a/SOURCES/0064-Simplify-virt_viewer_auth_libvirt_credentials-return.patch b/SOURCES/0064-Simplify-virt_viewer_auth_libvirt_credentials-return.patch new file mode 100644 index 0000000..8acd731 --- /dev/null +++ b/SOURCES/0064-Simplify-virt_viewer_auth_libvirt_credentials-return.patch @@ -0,0 +1,45 @@ +From 98dec8d10fa401aabc1da4caa571df964f6bfc13 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Tue, 23 Sep 2014 16:07:50 +0200 +Subject: [PATCH] Simplify virt_viewer_auth_libvirt_credentials() return value + logic + +As the function should return < 0 in error cases, let's explicitly +return/set the return value to -1 in error cases. Otherwise, the +function will return 0. + +This patch also fixes a regression introduced by (a5ce2ed3). + +https://bugzilla.redhat.com/show_bug.cgi?id=1142742 +(cherry picked from commit 42ffe6f8b4efe2a1e80fc98dbded37823133b55c) +--- + src/virt-viewer.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index aceb474..1d14b70 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -671,7 +671,7 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + VirtViewer *app = cbdata; + VirtViewerPrivate *priv = app->priv; + int i; +- int ret = -1; ++ int ret = 0; + + g_debug("Got libvirt credential request for %d credential(s)", ncred); + +@@ -697,10 +697,10 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + "libvirt", + app->priv->uri, + username, password); +- if (priv->auth_cancelled) ++ if (priv->auth_cancelled) { ++ ret = -1; + goto cleanup; +- } else { +- ret = 0; ++ } + } + + for (i = 0 ; i < ncred ; i++) { diff --git a/SOURCES/0065-Improve-authentication-error-messages.patch b/SOURCES/0065-Improve-authentication-error-messages.patch new file mode 100644 index 0000000..e315c53 --- /dev/null +++ b/SOURCES/0065-Improve-authentication-error-messages.patch @@ -0,0 +1,69 @@ +From ed387e66019867e2ca68a00473ef9b7e4b9db831 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Tue, 23 Sep 2014 16:23:42 +0200 +Subject: [PATCH] Improve authentication error messages + +Adding a better error message to our default error message, based on the +libvirt error. Also, the libvirt error is shown as debug. + +https://bugzilla.redhat.com/show_bug.cgi?id=1142742 +(cherry picked from commit 141d69b7f523f1ecc3c328b43e4a54f9cbfb5eee) +--- + src/virt-viewer.c | 37 +++++++++++++++++++++++++++++++++++-- + 1 file changed, 35 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 1d14b70..604dea6 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -722,6 +722,36 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + return ret; + } + ++static gchar * ++virt_viewer_get_error_message_from_vir_error(VirtViewer *self, ++ virErrorPtr error) ++{ ++ VirtViewerPrivate *priv = self->priv; ++ const gchar *error_details = NULL; ++ gchar *detailed_error_message = NULL; ++ gchar *error_message = g_strdup_printf(_("Unable to connect to libvirt with URI: %s."), ++ priv->uri ? priv->uri : _("[none]")); ++ ++ g_debug("Error: %s", error->message); ++ ++ /* For now we are only treating authentication errors. */ ++ switch (error->code) { ++ case VIR_ERR_AUTH_FAILED: ++ error_details = _("Authentication failed."); ++ break; ++ default: ++ break; ++ } ++ ++ if (error_details != NULL) { ++ detailed_error_message = g_strdup_printf("%s\n%s", error_message, error_details); ++ g_free(error_message); ++ return detailed_error_message; ++ } ++ ++ return error_message; ++} ++ + static int + virt_viewer_connect(VirtViewerApp *app) + { +@@ -751,8 +781,11 @@ virt_viewer_connect(VirtViewerApp *app) + oflags); + if (!priv->conn) { + if (!priv->auth_cancelled) { +- virt_viewer_app_simple_message_dialog(app, _("Unable to connect to libvirt with URI %s"), +- priv->uri ? priv->uri : _("[none]")); ++ gchar *error_message = virt_viewer_get_error_message_from_vir_error(self, virGetLastError()); ++ ++ virt_viewer_app_simple_message_dialog(app, error_message); ++ ++ g_free(error_message); + } + + return -1; diff --git a/SOURCES/0066-Unset-app-fullscreen-when-leaving-fullscreen.patch b/SOURCES/0066-Unset-app-fullscreen-when-leaving-fullscreen.patch new file mode 100644 index 0000000..261dbc1 --- /dev/null +++ b/SOURCES/0066-Unset-app-fullscreen-when-leaving-fullscreen.patch @@ -0,0 +1,70 @@ +From 002d20ade8d60d940f8722b1ffea433a671f345a Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Thu, 25 Sep 2014 10:53:55 -0500 +Subject: [PATCH] Unset app 'fullscreen' when leaving fullscreen + +Previously, the fullscreen floating toolbar and the "toggle-fullscreen" +hotkey (which maps to the menu item action) had slightly different +methods of exiting fullscreen. The floating toolbar method unset the +'fullscreen' property on the application (which causes all windows to +simultaneously exit fullscreen), whereas the hotkey did not. This had a +side-effect of preventing the display from auto re-sizing if it was +fullscreened again. After this change, both the hotkey and the toolbar +button will unset the application-level 'fullscreen' property when +exiting fullscreen mode. + +Resolves: rhbz#1022608 +(cherry picked from commit c4d1347a6d9893c34bb50c3fafcd7c9c23e1dc08) +--- + src/virt-viewer-window.c | 28 ++++++++++++++++++---------- + 1 file changed, 18 insertions(+), 10 deletions(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index c8d5722..8dbf5a5 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -830,15 +830,26 @@ virt_viewer_window_menu_file_quit(GtkWidget *src G_GNUC_UNUSED, + + + static void ++virt_viewer_window_set_fullscreen(VirtViewerWindow *self, ++ gboolean fullscreen) ++{ ++ if (fullscreen) { ++ virt_viewer_window_enter_fullscreen(self, -1); ++ } else { ++ /* leave all windows fullscreen state */ ++ if (virt_viewer_app_get_fullscreen(self->priv->app)) ++ g_object_set(self->priv->app, "fullscreen", FALSE, NULL); ++ /* or just this window */ ++ else ++ virt_viewer_window_leave_fullscreen(self); ++ } ++} ++ ++static void + virt_viewer_window_toolbar_leave_fullscreen(GtkWidget *button G_GNUC_UNUSED, + VirtViewerWindow *self) + { +- /* leave all windows fullscreen state */ +- if (virt_viewer_app_get_fullscreen(self->priv->app)) +- g_object_set(self->priv->app, "fullscreen", FALSE, NULL); +- /* or just this window */ +- else +- virt_viewer_window_leave_fullscreen(self); ++ virt_viewer_window_set_fullscreen(self, FALSE); + } + + static void keycombo_menu_location(GtkMenu *menu G_GNUC_UNUSED, gint *x, gint *y, +@@ -875,10 +886,7 @@ virt_viewer_window_menu_view_fullscreen(GtkWidget *menu, + { + gboolean fullscreen = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu)); + +- if (fullscreen) +- virt_viewer_window_enter_fullscreen(self, -1); +- else +- virt_viewer_window_leave_fullscreen(self); ++ virt_viewer_window_set_fullscreen(self, fullscreen); + } + + static void add_if_writable (GdkPixbufFormat *data, GHashTable *formats) diff --git a/SOURCES/0067-Don-t-use-fallback-ca-file-when-launching-vv-file.patch b/SOURCES/0067-Don-t-use-fallback-ca-file-when-launching-vv-file.patch new file mode 100644 index 0000000..45adde0 --- /dev/null +++ b/SOURCES/0067-Don-t-use-fallback-ca-file-when-launching-vv-file.patch @@ -0,0 +1,31 @@ +From e63dd36d1468cc089b74cb04fbf9d80b47988ca4 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 15 Aug 2014 10:58:56 -0500 +Subject: [PATCH] Don't use fallback ca-file when launching vv-file + +When launching from a vv-file, we want to use the ca specified in the vv +file and not load additional certs from the fallback ca-file. This +ensures that the ca-file property of the spice session is unset when +loading a ca from a vv-file. + +Resolves: rhbz#1127762 +--- + src/virt-viewer-session-spice.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index 58a1dd7..ceef067 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -359,7 +359,10 @@ fill_session(VirtViewerFile *file, SpiceSession *session) + g_return_if_fail(ca != NULL); + + GByteArray *ba = g_byte_array_new_take((guint8 *)ca, strlen(ca) + 1); +- g_object_set(G_OBJECT(session), "ca", ba, NULL); ++ g_object_set(G_OBJECT(session), ++ "ca", ba, ++ "ca-file", NULL, ++ NULL); + g_byte_array_unref(ba); + } + diff --git a/SOURCES/0068-Force-displays-to-update-geometry-when-agent-connect.patch b/SOURCES/0068-Force-displays-to-update-geometry-when-agent-connect.patch new file mode 100644 index 0000000..bf1b1cf --- /dev/null +++ b/SOURCES/0068-Force-displays-to-update-geometry-when-agent-connect.patch @@ -0,0 +1,59 @@ +From f02d4352d3157a953fa4609c48746cffaee45d14 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Mon, 11 Aug 2014 22:38:38 +0200 +Subject: [PATCH] Force displays to update geometry when agent connects + +We have to force displays to update geometry when the agent connects to +ensure the client will have the guest with the right resolution when the +guest has rebooted or the agent has crashed. + +https://bugzilla.redhat.com/sho_bug.cgi?id=1021841 +(cherry picked from commit e85ae4c27c84282572e42145a56e37c171a8a24a) +--- + src/virt-viewer-session-spice.c | 4 ++++ + src/virt-viewer-session.c | 4 ++++ + src/virt-viewer-session.h | 1 + + 3 files changed, 9 insertions(+) + +diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c +index ceef067..0c8cefb 100644 +--- a/src/virt-viewer-session-spice.c ++++ b/src/virt-viewer-session-spice.c +@@ -589,6 +589,10 @@ agent_connected_changed(SpiceChannel *cmain G_GNUC_UNUSED, + { + // this will force refresh of application menu + g_signal_emit_by_name(self, "session-display-updated"); ++ ++ /* this will force update displays geometry when the agent has connected ++ * after the application (eg: rebooting the guest) */ ++ virt_viewer_session_update_displays_geometry(VIRT_VIEWER_SESSION(self)); + } + + static void +diff --git a/src/virt-viewer-session.c b/src/virt-viewer-session.c +index 9410004..8413bfe 100644 +--- a/src/virt-viewer-session.c ++++ b/src/virt-viewer-session.c +@@ -475,6 +475,10 @@ void virt_viewer_session_clear_displays(VirtViewerSession *session) + session->priv->displays = NULL; + } + ++void virt_viewer_session_update_displays_geometry(VirtViewerSession *session) ++{ ++ virt_viewer_session_on_monitor_geometry_changed(session, NULL); ++} + + + void virt_viewer_session_close(VirtViewerSession *session) +diff --git a/src/virt-viewer-session.h b/src/virt-viewer-session.h +index 316fdf0..ba0f6b2 100644 +--- a/src/virt-viewer-session.h ++++ b/src/virt-viewer-session.h +@@ -107,6 +107,7 @@ void virt_viewer_session_add_display(VirtViewerSession *session, + void virt_viewer_session_remove_display(VirtViewerSession *session, + VirtViewerDisplay *display); + void virt_viewer_session_clear_displays(VirtViewerSession *session); ++void virt_viewer_session_update_displays_geometry(VirtViewerSession *session); + + void virt_viewer_session_close(VirtViewerSession* session); + gboolean virt_viewer_session_open_fd(VirtViewerSession* session, int fd); diff --git a/SOURCES/0069-Adapt-auth_cancelled-to-the-downstream-code.patch b/SOURCES/0069-Adapt-auth_cancelled-to-the-downstream-code.patch new file mode 100644 index 0000000..27e487b --- /dev/null +++ b/SOURCES/0069-Adapt-auth_cancelled-to-the-downstream-code.patch @@ -0,0 +1,42 @@ +From 8fc10c02f53754dfd83cf50327e801cdec4d2895 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Thu, 9 Oct 2014 17:05:05 +0200 +Subject: [PATCH] Adapt auth_cancelled to the downstream code + +While upstream we have virt_viewer_auth_collect_credentials() returning +a boolean (FALSE, 0, indicating that the user cancelled the auth dialog +and TRUE, !0, otherwise), downstream the function is still returning an +integer (-1 indicating that the user cancelled the auth dialog and 0 +otherwise). + +Related: rhbz#1142742 +--- + src/virt-viewer.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/src/virt-viewer.c b/src/virt-viewer.c +index 604dea6..4159203 100644 +--- a/src/virt-viewer.c ++++ b/src/virt-viewer.c +@@ -693,13 +693,15 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred, + if (username || password) { + VirtViewerWindow *vwin = virt_viewer_app_get_main_window(VIRT_VIEWER_APP(app)); + GtkWindow *win = virt_viewer_window_get_window(vwin); +- priv->auth_cancelled = !virt_viewer_auth_collect_credentials(win, +- "libvirt", +- app->priv->uri, +- username, password); +- if (priv->auth_cancelled) { +- ret = -1; ++ ret = virt_viewer_auth_collect_credentials(win, ++ "libvirt", ++ app->priv->uri, ++ username, password); ++ if (ret < 0) { ++ priv->auth_cancelled = TRUE; + goto cleanup; ++ } else { ++ priv->auth_cancelled = FALSE; + } + } + diff --git a/SOURCES/0070-ovirt-Allow-to-remove-CD-images.patch b/SOURCES/0070-ovirt-Allow-to-remove-CD-images.patch new file mode 100644 index 0000000..626f212 --- /dev/null +++ b/SOURCES/0070-ovirt-Allow-to-remove-CD-images.patch @@ -0,0 +1,36 @@ +From afa84a03c2584a971b54bd3a69ecb4429d517630 Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau <cfergeau@redhat.com> +Date: Mon, 22 Sep 2014 14:15:00 +0200 +Subject: [PATCH] ovirt: Allow to remove CD images + +It turns out this is supposed to be done through update requests with a +CD image with an empty name, which is what the current code tries to do. +The only reason it's not working is because of server-side bugs with +oVirt < 3.5 +The requirement on libgovirt is raised to 0.3.2 as +a small change is needed as well in libgovirt to allow empty filenames: +https://git.gnome.org/browse/libgovirt/commit/?id=bdb788fcc + +Without this change, nothing too bad will happen, but the CD won't be +removed and warnings will be logged in the console. + +(cherry picked from commit 9803f9cb420368e38117c5789777a6eeda5efbbd) +--- + src/ovirt-foreign-menu.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c +index 6fc9577..c813fed 100644 +--- a/src/ovirt-foreign-menu.c ++++ b/src/ovirt-foreign-menu.c +@@ -450,10 +450,6 @@ ovirt_foreign_menu_activate_item_cb(GtkMenuItem *menuitem, gpointer user_data) + g_debug("Removing current cdrom image"); + iso_name = NULL; + foreign_menu->priv->next_iso_name = NULL; +- /* FIXME: No idea how to remove a CDRom from a VM through ovirt REST +- * API for now, so return early. +- */ +- return; + } + g_object_set(foreign_menu->priv->cdrom, + "file", iso_name, diff --git a/SOURCES/0071-App-keep-hash-table-of-displays.patch b/SOURCES/0071-App-keep-hash-table-of-displays.patch new file mode 100644 index 0000000..422d32d --- /dev/null +++ b/SOURCES/0071-App-keep-hash-table-of-displays.patch @@ -0,0 +1,71 @@ +From bc712aca20f55565e259d666284947d645348f7e Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Wed, 20 Aug 2014 14:19:31 -0500 +Subject: [PATCH] App: keep hash table of displays + +This is part of a re-factoring that will de-couple the client window +from the remote display id. + +(cherry picked from commit 573c1cfc9118b730f2ff5aa6a7d45529f2978fbf) + +Conflicts: + src/virt-viewer-app.c +--- + src/virt-viewer-app.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index b05e966..0b86b9b 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -109,6 +109,7 @@ struct _VirtViewerAppPrivate { + VirtViewerWindow *main_window; + GtkWidget *main_notebook; + GHashTable *windows; ++ GHashTable *displays; + GHashTable *initial_display_map; + gchar *clipboard; + +@@ -919,6 +920,10 @@ virt_viewer_app_display_added(VirtViewerSession *session G_GNUC_UNUSED, + gint nth; + + g_object_get(display, "nth-display", &nth, NULL); ++ ++ g_debug("Insert display %d %p", nth, display); ++ g_hash_table_insert(self->priv->displays, GINT_TO_POINTER(nth), g_object_ref(display)); ++ + if (nth == 0) { + window = priv->main_window; + } else { +@@ -952,6 +957,7 @@ virt_viewer_app_display_removed(VirtViewerSession *session G_GNUC_UNUSED, + + gtk_widget_hide(GTK_WIDGET(display)); + g_object_get(display, "nth-display", &nth, NULL); ++ g_hash_table_remove(self->priv->displays, GINT_TO_POINTER(nth)); + win = virt_viewer_app_get_nth_window(self, nth); + if (!win) + return; +@@ -1622,6 +1628,15 @@ virt_viewer_app_dispose (GObject *object) + g_hash_table_unref(tmp); + } + ++ if (priv->displays) { ++ GHashTable *tmp = priv->displays; ++ /* null-ify before unrefing, because we need ++ * to prevent callbacks using priv->displays ++ * while it is being disposed of. */ ++ priv->displays = NULL; ++ g_hash_table_unref(tmp); ++ } ++ + g_clear_object(&priv->session); + g_free(priv->title); + priv->title = NULL; +@@ -1682,6 +1697,7 @@ virt_viewer_app_init (VirtViewerApp *self) + virt_viewer_app_set_debug(opt_debug); + + self->priv = GET_PRIVATE(self); ++ self->priv->displays = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref); + self->priv->windows = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, g_object_unref); + self->priv->config = g_key_file_new(); + self->priv->config_file = g_build_filename(g_get_user_config_dir(), diff --git a/SOURCES/0072-VirtViewerDisplay-add-convenience-API-for-getting-nt.patch b/SOURCES/0072-VirtViewerDisplay-add-convenience-API-for-getting-nt.patch new file mode 100644 index 0000000..b8ad81e --- /dev/null +++ b/SOURCES/0072-VirtViewerDisplay-add-convenience-API-for-getting-nt.patch @@ -0,0 +1,45 @@ +From daa3538174b7c451db4e58da348afe38cdc4084f Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Wed, 20 Aug 2014 14:23:12 -0500 +Subject: [PATCH] VirtViewerDisplay: add convenience API for getting nth + +g_object_get(...) can be cumbersome, so add convenience API for getting +the display ID ("nth-display") property: + + virt_viewer_display_get_nth() + +(cherry picked from commit 0e6735b4a4f1c21364781f97630ec1a12a82fd60) +--- + src/virt-viewer-display.c | 6 ++++++ + src/virt-viewer-display.h | 1 + + 2 files changed, 7 insertions(+) + +diff --git a/src/virt-viewer-display.c b/src/virt-viewer-display.c +index e91450f..e6bc108 100644 +--- a/src/virt-viewer-display.c ++++ b/src/virt-viewer-display.c +@@ -838,6 +838,12 @@ void virt_viewer_display_get_preferred_monitor_geometry(VirtViewerDisplay* self, + } + } + ++gint ++virt_viewer_display_get_nth(VirtViewerDisplay *self) ++{ ++ return self->priv->nth_display; ++} ++ + /* + * Local variables: + * c-indent-level: 4 +diff --git a/src/virt-viewer-display.h b/src/virt-viewer-display.h +index 70ce772..b1133e8 100644 +--- a/src/virt-viewer-display.h ++++ b/src/virt-viewer-display.h +@@ -127,6 +127,7 @@ gboolean virt_viewer_display_get_selectable(VirtViewerDisplay *display); + void virt_viewer_display_queue_resize(VirtViewerDisplay *display); + void virt_viewer_display_get_preferred_monitor_geometry(VirtViewerDisplay *self, GdkRectangle* preferred); + void virt_viewer_display_get_preferred_size(VirtViewerDisplay *self, GtkRequisition* requisistion); ++gint virt_viewer_display_get_nth(VirtViewerDisplay *self); + + G_END_DECLS + diff --git a/SOURCES/0073-VirtViewerApp-store-windows-in-a-list.patch b/SOURCES/0073-VirtViewerApp-store-windows-in-a-list.patch new file mode 100644 index 0000000..dc8401a --- /dev/null +++ b/SOURCES/0073-VirtViewerApp-store-windows-in-a-list.patch @@ -0,0 +1,550 @@ +From 4f1fac21ebd15ba0f3c660eb203b836cb9531b5c Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Wed, 20 Aug 2014 16:30:58 -0500 +Subject: [PATCH] VirtViewerApp: store windows in a list + +Use a list to store the application's windows. This is another step +towards separating the window from the guest display ID. + +(cherry picked from commit 453704789036551aa61bf19bc369c8c5709e49f3) + +Conflicts: + src/virt-viewer-app.c +--- + src/remote-viewer.c | 21 +++--- + src/virt-viewer-app.c | 204 +++++++++++++++++++++++--------------------------- + src/virt-viewer-app.h | 2 +- + 3 files changed, 104 insertions(+), 123 deletions(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 237e6a3..0c6067c 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -414,8 +414,7 @@ spice_menu_update(RemoteViewer *self, VirtViewerWindow *win) + } + + static void +-spice_menu_update_each(gpointer key G_GNUC_UNUSED, +- gpointer value, ++spice_menu_update_each(gpointer value, + gpointer user_data) + { + spice_menu_update(REMOTE_VIEWER(user_data), VIRT_VIEWER_WINDOW(value)); +@@ -424,11 +423,11 @@ spice_menu_update_each(gpointer key G_GNUC_UNUSED, + static void + spice_ctrl_menu_updated(RemoteViewer *self) + { +- GHashTable *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); ++ GList *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); + + g_debug("Spice controller menu updated"); + +- g_hash_table_foreach(windows, spice_menu_update_each, self); ++ g_list_foreach(windows, spice_menu_update_each, self); + } + + static void +@@ -463,8 +462,7 @@ spice_foreign_menu_update(RemoteViewer *self, VirtViewerWindow *win) + } + + static void +-spice_foreign_menu_update_each(gpointer key G_GNUC_UNUSED, +- gpointer value, ++spice_foreign_menu_update_each(gpointer value, + gpointer user_data) + { + spice_foreign_menu_update(REMOTE_VIEWER(user_data), VIRT_VIEWER_WINDOW(value)); +@@ -473,11 +471,11 @@ spice_foreign_menu_update_each(gpointer key G_GNUC_UNUSED, + static void + spice_foreign_menu_updated(RemoteViewer *self) + { +- GHashTable *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); ++ GList *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); + + g_debug("Spice foreign menu updated"); + +- g_hash_table_foreach(windows, spice_foreign_menu_update_each, self); ++ g_list_foreach(windows, spice_foreign_menu_update_each, self); + } + + static SpiceSession * +@@ -757,8 +755,7 @@ ovirt_foreign_menu_update(RemoteViewer *app, VirtViewerWindow *win) + } + + static void +-ovirt_foreign_menu_update_each(gpointer key G_GNUC_UNUSED, +- gpointer value, ++ovirt_foreign_menu_update_each(gpointer value, + gpointer user_data) + { + ovirt_foreign_menu_update(REMOTE_VIEWER(user_data), +@@ -768,11 +765,11 @@ ovirt_foreign_menu_update_each(gpointer key G_GNUC_UNUSED, + static void + ovirt_foreign_menu_updated(RemoteViewer *self) + { +- GHashTable *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); ++ GList *windows = virt_viewer_app_get_windows(VIRT_VIEWER_APP(self)); + + g_debug("Spice foreign menu updated"); + +- g_hash_table_foreach(windows, ovirt_foreign_menu_update_each, self); ++ g_list_foreach(windows, ovirt_foreign_menu_update_each, self); + } + + static void +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 0b86b9b..0be0aeb 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -108,7 +108,7 @@ static void virt_viewer_update_smartcard_accels(VirtViewerApp *self); + struct _VirtViewerAppPrivate { + VirtViewerWindow *main_window; + GtkWidget *main_notebook; +- GHashTable *windows; ++ GList *windows; + GHashTable *displays; + GHashTable *initial_display_map; + gchar *clipboard; +@@ -444,14 +444,11 @@ void virt_viewer_app_set_uuid_string(VirtViewerApp *self, const gchar *uuid_stri + // if we're changing our initial display map, move any existing windows to + // the appropriate monitors according to the per-vm configuration + if (mapping && self->priv->fullscreen) { +- GHashTableIter iter; +- gpointer value; ++ GList *l; + gint i = 0; + +- g_hash_table_iter_init(&iter, self->priv->windows); +- while (g_hash_table_iter_next(&iter, NULL, &value)) { +- gint monitor = virt_viewer_app_get_initial_monitor_for_display(self, i); +- app_window_try_fullscreen(self, VIRT_VIEWER_WINDOW(value), monitor); ++ for (l = self->priv->windows; l; l = l->next) { ++ app_window_try_fullscreen(self, VIRT_VIEWER_WINDOW(l->data), i); + i++; + } + } +@@ -509,8 +506,7 @@ virt_viewer_app_maybe_quit(VirtViewerApp *self, VirtViewerWindow *window) + + } + +-static void count_window_visible(gpointer key G_GNUC_UNUSED, +- gpointer value, ++static void count_window_visible(gpointer value, + gpointer user_data) + { + GtkWindow *win = virt_viewer_window_get_window(VIRT_VIEWER_WINDOW(value)); +@@ -524,7 +520,7 @@ static guint + virt_viewer_app_get_n_windows_visible(VirtViewerApp *self) + { + guint n = 0; +- g_hash_table_foreach(self->priv->windows, count_window_visible, &n); ++ g_list_foreach(self->priv->windows, count_window_visible, &n); + return n; + } + +@@ -551,8 +547,7 @@ virt_viewer_app_window_set_visible(VirtViewerApp *self, + return FALSE; + } + +-static void hide_one_window(gpointer key G_GNUC_UNUSED, +- gpointer value, ++static void hide_one_window(gpointer value, + gpointer user_data G_GNUC_UNUSED) + { + virt_viewer_window_hide(VIRT_VIEWER_WINDOW(value)); +@@ -561,7 +556,7 @@ static void hide_one_window(gpointer key G_GNUC_UNUSED, + static void + virt_viewer_app_hide_all_windows(VirtViewerApp *app) + { +- g_hash_table_foreach(app->priv->windows, hide_one_window, NULL); ++ g_list_foreach(app->priv->windows, hide_one_window, app); + } + + G_MODULE_EXPORT void +@@ -719,24 +714,27 @@ virt_viewer_app_set_window_subtitle(VirtViewerApp *app, + } + + static void +-set_title(gpointer key, +- gpointer value, ++set_title(gpointer value, + gpointer user_data) + { +- gint *nth = key; + VirtViewerApp *app = user_data; + VirtViewerWindow *window = value; +- virt_viewer_app_set_window_subtitle(app, window, *nth); ++ VirtViewerDisplay *display = virt_viewer_window_get_display(window); ++ ++ if (!display) ++ return; ++ ++ virt_viewer_app_set_window_subtitle(app, window, ++ virt_viewer_display_get_nth(display)); + } + + static void + virt_viewer_app_set_all_window_subtitles(VirtViewerApp *app) + { +- g_hash_table_foreach(app->priv->windows, set_title, app); ++ g_list_foreach(app->priv->windows, set_title, app); + } + +-static void update_title(gpointer key G_GNUC_UNUSED, +- gpointer value, ++static void update_title(gpointer value, + gpointer user_data G_GNUC_UNUSED) + { + virt_viewer_window_update_title(VIRT_VIEWER_WINDOW(value)); +@@ -745,11 +743,10 @@ static void update_title(gpointer key G_GNUC_UNUSED, + static void + virt_viewer_app_update_title(VirtViewerApp *self) + { +- g_hash_table_foreach(self->priv->windows, update_title, NULL); ++ g_list_foreach(self->priv->windows, update_title, NULL); + } + +-static void set_usb_options_sensitive(gpointer key G_GNUC_UNUSED, +- gpointer value, ++static void set_usb_options_sensitive(gpointer value, + gpointer user_data) + { + virt_viewer_window_set_usb_options_sensitive(VIRT_VIEWER_WINDOW(value), +@@ -759,59 +756,22 @@ static void set_usb_options_sensitive(gpointer key G_GNUC_UNUSED, + static void + virt_viewer_app_set_usb_options_sensitive(VirtViewerApp *self, gboolean sensitive) + { +- g_hash_table_foreach(self->priv->windows, set_usb_options_sensitive, +- GINT_TO_POINTER(sensitive)); ++ g_list_foreach(self->priv->windows, set_usb_options_sensitive, ++ GINT_TO_POINTER(sensitive)); + } + + static VirtViewerWindow * + virt_viewer_app_get_nth_window(VirtViewerApp *self, gint nth) + { +- return g_hash_table_lookup(self->priv->windows, &nth); +-} +- +-static gboolean +-virt_viewer_app_remove_nth_window(VirtViewerApp *self, gint nth) +-{ +- VirtViewerWindow *win; +- gboolean removed; +- +- g_return_val_if_fail(nth != 0, FALSE); +- +- win = virt_viewer_app_get_nth_window(self, nth); +- g_return_val_if_fail(win != NULL, FALSE); +- +- g_debug("Remove window %d %p", nth, win); +- g_object_ref(win); +- removed = g_hash_table_remove(self->priv->windows, &nth); +- g_warn_if_fail(removed); +- virt_viewer_app_update_menu_displays(self); +- +- if (removed) +- g_signal_emit(self, signals[SIGNAL_WINDOW_REMOVED], 0, win); +- +- g_object_unref(win); +- +- return removed; +-} +- +-static void +-virt_viewer_app_set_nth_window(VirtViewerApp *self, gint nth, VirtViewerWindow *win) +-{ +- gint *key; +- +- g_return_if_fail(virt_viewer_app_get_nth_window(self, nth) == NULL); +- key = g_malloc(sizeof(gint)); +- *key = nth; +- g_debug("Insert window %d %p", nth, win); +- g_hash_table_insert(self->priv->windows, key, win); +- virt_viewer_app_set_window_subtitle(self, win, nth); +- virt_viewer_app_update_menu_displays(self); +- if (self->priv->session) { +- virt_viewer_window_set_usb_options_sensitive(win, +- virt_viewer_session_get_has_usbredir(self->priv->session)); ++ GList *l; ++ for (l = self->priv->windows; l; l = l->next) { ++ VirtViewerDisplay *display = virt_viewer_window_get_display(l->data); ++ if (display ++ && (virt_viewer_display_get_nth(display) == nth)) { ++ return l->data; ++ } + } +- +- g_signal_emit(self, signals[SIGNAL_WINDOW_ADDED], 0, win); ++ return NULL; + } + + static void +@@ -862,7 +822,17 @@ virt_viewer_app_window_new(VirtViewerApp *self, gint nth) + virt_viewer_window_set_kiosk(window, self->priv->kiosk); + if (self->priv->main_window) + virt_viewer_window_set_zoom_level(window, virt_viewer_window_get_zoom_level(self->priv->main_window)); +- virt_viewer_app_set_nth_window(self, nth, window); ++ ++ self->priv->windows = g_list_append(self->priv->windows, window); ++ virt_viewer_app_set_window_subtitle(self, window, nth); ++ virt_viewer_app_update_menu_displays(self); ++ if (self->priv->session) { ++ virt_viewer_window_set_usb_options_sensitive(window, ++ virt_viewer_session_get_has_usbredir(self->priv->session)); ++ } ++ ++ g_signal_emit(self, signals[SIGNAL_WINDOW_ADDED], 0, window); ++ + if (self->priv->fullscreen) + app_window_try_fullscreen(self, window, + virt_viewer_app_get_initial_monitor_for_display(self, nth)); +@@ -947,24 +917,35 @@ virt_viewer_app_display_added(VirtViewerSession *session G_GNUC_UNUSED, + } + + ++static void virt_viewer_app_remove_nth_window(VirtViewerApp *self, ++ gint nth) ++{ ++ VirtViewerWindow *win = virt_viewer_app_get_nth_window(self, nth); ++ if (!win) ++ return; ++ ++ virt_viewer_window_set_display(win, NULL); ++ virt_viewer_window_hide(win); ++ ++ g_debug("Remove window %d %p", nth, win); ++ self->priv->windows = g_list_remove(self->priv->windows, win); ++ ++ g_signal_emit(self, signals[SIGNAL_WINDOW_REMOVED], 0, win); ++ ++ g_object_unref(win); ++} ++ + static void + virt_viewer_app_display_removed(VirtViewerSession *session G_GNUC_UNUSED, + VirtViewerDisplay *display, + VirtViewerApp *self) + { +- VirtViewerWindow *win = NULL; + gint nth; + +- gtk_widget_hide(GTK_WIDGET(display)); + g_object_get(display, "nth-display", &nth, NULL); ++ virt_viewer_app_remove_nth_window(self, nth); + g_hash_table_remove(self->priv->displays, GINT_TO_POINTER(nth)); +- win = virt_viewer_app_get_nth_window(self, nth); +- if (!win) +- return; +- +- virt_viewer_window_set_display(win, NULL); +- if (nth != 0) +- virt_viewer_app_remove_nth_window(self, nth); ++ virt_viewer_app_update_menu_displays(self); + } + + static void +@@ -1619,13 +1600,13 @@ virt_viewer_app_dispose (GObject *object) + VirtViewerAppPrivate *priv = self->priv; + + if (priv->windows) { +- GHashTable *tmp = priv->windows; ++ GList *tmp = priv->windows; + /* null-ify before unrefing, because we need + * to prevent callbacks using priv->windows + * while it is being disposed off. */ + priv->windows = NULL; + priv->main_window = NULL; +- g_hash_table_unref(tmp); ++ g_list_free_full(tmp, g_object_unref); + } + + if (priv->displays) { +@@ -1698,7 +1679,6 @@ virt_viewer_app_init (VirtViewerApp *self) + + self->priv = GET_PRIVATE(self); + self->priv->displays = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref); +- self->priv->windows = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, g_object_unref); + self->priv->config = g_key_file_new(); + self->priv->config_file = g_build_filename(g_get_user_config_dir(), + "virt-viewer", "settings", NULL); +@@ -2108,15 +2088,20 @@ typedef struct { + gboolean fullscreen; + } FullscreenOptions; + +-static void fullscreen_cb(gpointer key, +- gpointer value, ++static void fullscreen_cb(gpointer value, + gpointer user_data) + { + FullscreenOptions *options = (FullscreenOptions *)user_data; +- gint nth = virt_viewer_app_get_initial_monitor_for_display(options->app, *(gint*)key); ++ gint nth = 0; + VirtViewerWindow *vwin = VIRT_VIEWER_WINDOW(value); ++ VirtViewerDisplay *display = virt_viewer_window_get_display(vwin); + ++ /* At startup, the main window will not yet have an associated display, so ++ * assume that it's the first display */ ++ if (display) ++ nth = virt_viewer_display_get_nth(display); + g_debug("fullscreen display %d: %d", nth, options->fullscreen); ++ + if (options->fullscreen) + app_window_try_fullscreen(options->app, vwin, nth); + else +@@ -2142,18 +2127,20 @@ virt_viewer_app_set_fullscreen(VirtViewerApp *self, gboolean fullscreen) + + /* we iterate unconditionnaly, even if it was set before to update new windows */ + priv->fullscreen = fullscreen; +- g_hash_table_foreach(priv->windows, fullscreen_cb, &options); ++ g_list_foreach(priv->windows, fullscreen_cb, &options); + + g_object_notify(G_OBJECT(self), "fullscreen"); + } + + static void + menu_display_visible_toggled_cb(GtkCheckMenuItem *checkmenuitem, +- VirtViewerWindow *vwin) ++ VirtViewerDisplay *display) + { +- VirtViewerApp *self; ++ VirtViewerApp *self = virt_viewer_session_get_app(virt_viewer_display_get_session(display)); + gboolean visible; + static gboolean reentering = FALSE; ++ VirtViewerWindow *vwin = virt_viewer_app_get_nth_window(self, ++ virt_viewer_display_get_nth(display)); + + if (reentering) /* do not reenter if I switch you back */ + return; +@@ -2170,12 +2157,12 @@ menu_display_visible_toggled_cb(GtkCheckMenuItem *checkmenuitem, + static gint + update_menu_displays_sort(gconstpointer a, gconstpointer b) + { +- const int *ai = a; +- const int *bi = b; ++ const int ai = GPOINTER_TO_INT(a); ++ const int bi = GPOINTER_TO_INT(b); + +- if (*ai > *bi) ++ if (ai > bi) + return 1; +- else if (*ai < *bi) ++ else if (ai < bi) + return -1; + else + return 0; +@@ -2212,13 +2199,12 @@ window_empty_display_submenu(VirtViewerWindow *window) + } + + static void +-window_update_menu_displays_cb(gpointer key G_GNUC_UNUSED, +- gpointer value, ++window_update_menu_displays_cb(gpointer value, + gpointer user_data) + { + VirtViewerApp *self = VIRT_VIEWER_APP(user_data); + GtkMenuShell *submenu; +- GList *keys = g_hash_table_get_keys(self->priv->windows); ++ GList *keys = g_hash_table_get_keys(self->priv->displays); + GList *tmp; + + keys = g_list_sort(keys, update_menu_displays_sort); +@@ -2226,18 +2212,18 @@ window_update_menu_displays_cb(gpointer key G_GNUC_UNUSED, + + tmp = keys; + while (tmp) { +- int *nth = tmp->data; +- VirtViewerWindow *vwin = VIRT_VIEWER_WINDOW(g_hash_table_lookup(self->priv->windows, nth)); +- VirtViewerDisplay *display = virt_viewer_window_get_display(vwin); ++ int nth = GPOINTER_TO_INT(tmp->data); ++ VirtViewerWindow *vwin = virt_viewer_app_get_nth_window(self, nth); ++ VirtViewerDisplay *display = VIRT_VIEWER_DISPLAY(g_hash_table_lookup(self->priv->displays, tmp->data)); + GtkWidget *item; + gboolean visible, sensitive; + gchar *label; + +- label = g_strdup_printf(_("Display %d"), *nth + 1); ++ label = g_strdup_printf(_("Display %d"), nth + 1); + item = gtk_check_menu_item_new_with_label(label); + g_free(label); + +- visible = gtk_widget_get_visible(GTK_WIDGET(virt_viewer_window_get_window(vwin))); ++ visible = vwin && gtk_widget_get_visible(GTK_WIDGET(virt_viewer_window_get_window(vwin))); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), visible); + + sensitive = visible; +@@ -2253,7 +2239,7 @@ window_update_menu_displays_cb(gpointer key G_GNUC_UNUSED, + gtk_widget_set_sensitive(item, sensitive); + + g_signal_connect(G_OBJECT(item), +- "toggled", G_CALLBACK(menu_display_visible_toggled_cb), vwin); ++ "toggled", G_CALLBACK(menu_display_visible_toggled_cb), display); + gtk_menu_shell_append(submenu, item); + tmp = tmp->next; + } +@@ -2267,7 +2253,7 @@ virt_viewer_app_update_menu_displays(VirtViewerApp *self) + { + if (!self->priv->windows) + return; +- g_hash_table_foreach(self->priv->windows, window_update_menu_displays_cb, self); ++ g_list_foreach(self->priv->windows, window_update_menu_displays_cb, self); + } + + void +@@ -2327,8 +2313,7 @@ virt_viewer_app_get_main_window(VirtViewerApp *self) + } + + static void +-show_status_cb(gpointer key G_GNUC_UNUSED, +- gpointer value, ++show_status_cb(gpointer value, + gpointer user_data) + { + VirtViewerNotebook *nb = virt_viewer_window_get_notebook(VIRT_VIEWER_WINDOW(value)); +@@ -2350,13 +2335,12 @@ virt_viewer_app_show_status(VirtViewerApp *self, const gchar *fmt, ...) + text = g_strdup_vprintf(fmt, args); + va_end(args); + +- g_hash_table_foreach(self->priv->windows, show_status_cb, text); ++ g_list_foreach(self->priv->windows, show_status_cb, text); + g_free(text); + } + + static void +-show_display_cb(gpointer key G_GNUC_UNUSED, +- gpointer value, ++show_display_cb(gpointer value, + gpointer user_data G_GNUC_UNUSED) + { + VirtViewerNotebook *nb = virt_viewer_window_get_notebook(VIRT_VIEWER_WINDOW(value)); +@@ -2368,7 +2352,7 @@ void + virt_viewer_app_show_display(VirtViewerApp *self) + { + g_return_if_fail(VIRT_VIEWER_IS_APP(self)); +- g_hash_table_foreach(self->priv->windows, show_display_cb, self); ++ g_list_foreach(self->priv->windows, show_display_cb, self); + } + + gboolean +@@ -2387,7 +2371,7 @@ virt_viewer_app_get_session(VirtViewerApp *self) + return self->priv->session; + } + +-GHashTable* ++GList* + virt_viewer_app_get_windows(VirtViewerApp *self) + { + g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), NULL); +diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h +index 804e076..2d2fec7 100644 +--- a/src/virt-viewer-app.h ++++ b/src/virt-viewer-app.h +@@ -94,7 +94,7 @@ void virt_viewer_app_set_connect_info(VirtViewerApp *self, + gboolean virt_viewer_app_window_set_visible(VirtViewerApp *self, VirtViewerWindow *window, gboolean visible); + void virt_viewer_app_show_status(VirtViewerApp *self, const gchar *fmt, ...); + void virt_viewer_app_show_display(VirtViewerApp *self); +-GHashTable* virt_viewer_app_get_windows(VirtViewerApp *self); ++GList* virt_viewer_app_get_windows(VirtViewerApp *self); + gboolean virt_viewer_app_get_enable_accel(VirtViewerApp *self); + VirtViewerSession* virt_viewer_app_get_session(VirtViewerApp *self); + gboolean virt_viewer_app_get_fullscreen(VirtViewerApp *app); diff --git a/SOURCES/0074-Create-windows-on-demand-not-at-startup.patch b/SOURCES/0074-Create-windows-on-demand-not-at-startup.patch new file mode 100644 index 0000000..d3d67cc --- /dev/null +++ b/SOURCES/0074-Create-windows-on-demand-not-at-startup.patch @@ -0,0 +1,212 @@ +From a3274f16431bc6bdf1ab62f5621b685d2e128888 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Thu, 21 Aug 2014 15:59:31 -0500 +Subject: [PATCH] Create windows on demand, not at startup + +Previously, a window was created at startup for each display, even if +the display was not enabled. This resulted in a fixed 1:1 association +between windows and remote displays. Since there was always one window +created at startup to display status messages (the "main window"), this +was always associated with remote display #1. But if the first remote +display was not enabled, we ended up with a extra black window with a +message saying ("Waiting for display 1..."). + +By creating windows on demand, we can re-use the "main window" for any +arbitrary display, even if it's not display #1. + +Resolves: rhbz#1032939 +(cherry picked from commit f03285ba8da4a40a8058c3259788293124cc2803) + +Conflicts: + src/virt-viewer-app.c +--- + src/virt-viewer-app.c | 117 ++++++++++++++++++++++++++++++-------------------- + 1 file changed, 70 insertions(+), 47 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 0be0aeb..837f636 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -845,39 +845,78 @@ virt_viewer_app_window_new(VirtViewerApp *self, gint nth) + return window; + } + ++static VirtViewerWindow * ++ensure_window_for_display(VirtViewerApp *self, VirtViewerDisplay *display) ++{ ++ gint nth = virt_viewer_display_get_nth(display); ++ VirtViewerWindow *win = virt_viewer_app_get_nth_window(self, nth); ++ if (win == NULL) { ++ GList *l = self->priv->windows; ++ ++ /* There should always be at least a main window created at startup */ ++ g_return_val_if_fail(l != NULL, NULL); ++ /* if there's a window that doesn't yet have an associated display, use ++ * that window */ ++ for (; l; l = l->next) { ++ if (virt_viewer_window_get_display(VIRT_VIEWER_WINDOW(l->data)) == NULL) ++ break; ++ } ++ if (l && virt_viewer_window_get_display(VIRT_VIEWER_WINDOW(l->data)) == NULL) { ++ win = VIRT_VIEWER_WINDOW(l->data); ++ g_debug("Found a window without a display, reusing for this display..."); ++ virt_viewer_app_set_window_subtitle(self, win, nth); ++ if (self->priv->fullscreen && !self->priv->kiosk) ++ app_window_try_fullscreen(self, win, ++ virt_viewer_app_get_initial_monitor_for_display(self, nth)); ++ } else { ++ win = virt_viewer_app_window_new(self, nth); ++ } ++ ++ virt_viewer_window_set_display(win, display); ++ } ++ ++ return win; ++} ++ + static void + display_show_hint(VirtViewerDisplay *display, + GParamSpec *pspec G_GNUC_UNUSED, +- VirtViewerWindow *win) ++ gpointer user_data G_GNUC_UNUSED) + { +- VirtViewerApp *self; +- VirtViewerNotebook *nb = virt_viewer_window_get_notebook(win); ++ VirtViewerApp *self = virt_viewer_session_get_app(virt_viewer_display_get_session(display)); ++ VirtViewerNotebook *nb; ++ VirtViewerWindow *win; + gint nth; + guint hint; + +- g_object_get(win, +- "app", &self, +- NULL); + g_object_get(display, + "nth-display", &nth, + "show-hint", &hint, + NULL); + ++ win = virt_viewer_app_get_nth_window(self, nth); ++ + if (self->priv->fullscreen && + nth >= gdk_screen_get_n_monitors(gdk_screen_get_default())) { +- virt_viewer_window_hide(win); ++ if (win) ++ virt_viewer_window_hide(win); + } else if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED) { +- virt_viewer_window_hide(win); +- } else if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY) { +- virt_viewer_notebook_show_display(nb); +- virt_viewer_window_show(win); ++ if (win) ++ virt_viewer_window_hide(win); + } else { +- if (!self->priv->kiosk) +- virt_viewer_notebook_show_status(nb, _("Waiting for display %d..."), nth + 1); ++ if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY) { ++ win = ensure_window_for_display(self, display); ++ nb = virt_viewer_window_get_notebook(win); ++ virt_viewer_notebook_show_display(nb); ++ virt_viewer_window_show(win); ++ } else { ++ if (!self->priv->kiosk && win) { ++ nb = virt_viewer_window_get_notebook(win); ++ virt_viewer_notebook_show_status(nb, _("Waiting for display %d..."), nth + 1); ++ } ++ } + } + virt_viewer_app_update_menu_displays(self); +- +- g_object_unref(self); + } + + static void +@@ -885,8 +924,6 @@ virt_viewer_app_display_added(VirtViewerSession *session G_GNUC_UNUSED, + VirtViewerDisplay *display, + VirtViewerApp *self) + { +- VirtViewerAppPrivate *priv = self->priv; +- VirtViewerWindow *window; + gint nth; + + g_object_get(display, "nth-display", &nth, NULL); +@@ -894,25 +931,8 @@ virt_viewer_app_display_added(VirtViewerSession *session G_GNUC_UNUSED, + g_debug("Insert display %d %p", nth, display); + g_hash_table_insert(self->priv->displays, GINT_TO_POINTER(nth), g_object_ref(display)); + +- if (nth == 0) { +- window = priv->main_window; +- } else { +- window = virt_viewer_app_get_nth_window(self, nth); +- if (window == NULL) { +- if (priv->kiosk) { +- /* don't show extra monitors that don't fit on client */ +- g_debug("kiosk mode: skip extra monitors that don't fit on client"); +- return; +- } +- +- window = virt_viewer_app_window_new(self, nth); +- } +- } +- +- virt_viewer_window_set_display(window, display); +- virt_viewer_app_update_menu_displays(self); +- virt_viewer_signal_connect_object(display, "notify::show-hint", +- G_CALLBACK(display_show_hint), window, 0); ++ g_signal_connect(display, "notify::show-hint", ++ G_CALLBACK(display_show_hint), NULL); + g_object_notify(G_OBJECT(display), "show-hint"); /* call display_show_hint */ + } + +@@ -1463,16 +1483,20 @@ static void + virt_viewer_app_set_kiosk(VirtViewerApp *self, gboolean enabled) + { + int i; ++ GList *l; + + self->priv->kiosk = enabled; + if (enabled) + virt_viewer_app_set_fullscreen(self, enabled); + +- for (i = 0; i < gdk_screen_get_n_monitors(gdk_screen_get_default()); i++) { +- VirtViewerWindow *win = virt_viewer_app_get_nth_window(self, i); ++ /* create windows for each client monitor */ ++ for (i = g_list_length(self->priv->windows); ++ i < gdk_screen_get_n_monitors(gdk_screen_get_default()); i++) { ++ virt_viewer_app_window_new(self, i); ++ } + +- if (win == NULL) +- win = virt_viewer_app_window_new(self, i); ++ for (l = self->priv->windows; l != NULL; l = l ->next) { ++ VirtViewerWindow *win = l->data; + + if (enabled) + virt_viewer_window_show(win); +@@ -2137,20 +2161,19 @@ menu_display_visible_toggled_cb(GtkCheckMenuItem *checkmenuitem, + VirtViewerDisplay *display) + { + VirtViewerApp *self = virt_viewer_session_get_app(virt_viewer_display_get_session(display)); +- gboolean visible; ++ gboolean visible = gtk_check_menu_item_get_active(checkmenuitem); + static gboolean reentering = FALSE; +- VirtViewerWindow *vwin = virt_viewer_app_get_nth_window(self, +- virt_viewer_display_get_nth(display)); ++ VirtViewerWindow *vwin; + + if (reentering) /* do not reenter if I switch you back */ + return; + + reentering = TRUE; +- g_object_get(vwin, "app", &self, NULL); +- visible = virt_viewer_app_window_set_visible(self, vwin, +- gtk_check_menu_item_get_active(checkmenuitem)); ++ ++ vwin = ensure_window_for_display(self, display); ++ visible = virt_viewer_app_window_set_visible(self, vwin, visible); ++ + gtk_check_menu_item_set_active(checkmenuitem, /* will be toggled again */ !visible); +- g_object_unref(self); + reentering = FALSE; + } + diff --git a/SOURCES/0075-Use-socat-instead-of-nc-if-possible.patch b/SOURCES/0075-Use-socat-instead-of-nc-if-possible.patch new file mode 100644 index 0000000..1163bee --- /dev/null +++ b/SOURCES/0075-Use-socat-instead-of-nc-if-possible.patch @@ -0,0 +1,70 @@ +From 692a0295fe82a68c5b11b4d9f588b22b0008ebeb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Mon, 8 Sep 2014 23:14:23 +0200 +Subject: [PATCH] Use socat instead of nc if possible + +It turns out that nc does not leave on server disconnect, and there +doesn't seem to be any option to do that, leaving client open, and +a bunch of idle processes. + +Replacing nc with socat solves that, client is disconnected when +the VM is shut down, when the sever connection is closed. + +https://bugzilla.redhat.com/show_bug.cgi?id=1030487 +(cherry picked from commit 3eaecbb3a4d069cde18cb0ad1e93735e0b73ef72) +--- + src/virt-viewer-app.c | 32 +++++++++++++++++++++++--------- + 1 file changed, 23 insertions(+), 9 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 837f636..1abcc90 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -622,6 +622,7 @@ virt_viewer_app_open_tunnel_ssh(const char *sshhost, + const char *cmd[10]; + char portstr[50]; + int n = 0; ++ GString *cat; + + cmd[n++] = "ssh"; + if (sshport) { +@@ -634,17 +635,30 @@ virt_viewer_app_open_tunnel_ssh(const char *sshhost, + cmd[n++] = sshuser; + } + cmd[n++] = sshhost; +- cmd[n++] = "nc"; +- if (port) { +- cmd[n++] = host; +- cmd[n++] = port; +- } else { +- cmd[n++] = "-U"; +- cmd[n++] = unixsock; +- } ++ ++ cat = g_string_new("if (command -v socat) >/dev/null 2>&1"); ++ ++ g_string_append(cat, "; then socat - "); ++ if (port) ++ g_string_append_printf(cat, "TCP:%s:%s", host, port); ++ else ++ g_string_append_printf(cat, "UNIX-CONNECT:%s", unixsock); ++ ++ g_string_append(cat, "; else nc "); ++ if (port) ++ g_string_append_printf(cat, "%s %s", host, port); ++ else ++ g_string_append_printf(cat, "-U %s", unixsock); ++ ++ g_string_append(cat, "; fi"); ++ ++ cmd[n++] = cat->str; + cmd[n++] = NULL; + +- return virt_viewer_app_open_tunnel(cmd); ++ n = virt_viewer_app_open_tunnel(cmd); ++ g_string_free(cat, TRUE); ++ ++ return n; + } + + static int diff --git a/SOURCES/0076-spice-do-not-open-in-fullscreen-with-CONTROLLER_AUTO.patch b/SOURCES/0076-spice-do-not-open-in-fullscreen-with-CONTROLLER_AUTO.patch new file mode 100644 index 0000000..3e702b4 --- /dev/null +++ b/SOURCES/0076-spice-do-not-open-in-fullscreen-with-CONTROLLER_AUTO.patch @@ -0,0 +1,26 @@ +From 16beefaf0b2892029fd067093fa498843d84ab0a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com> +Date: Wed, 26 Feb 2014 11:55:50 +0100 +Subject: [PATCH] spice: do not open in fullscreen with + CONTROLLER_AUTO_DISPLAY_RES + +This flag is always set when using the rhevm user portal. Best is +probably to ignore it, now that fullscreen has simplified unique +behaviour. +--- + src/remote-viewer.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 0c6067c..2cb8925 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -561,7 +561,7 @@ spice_ctrl_notified(SpiceCtrlController *ctrl, + virt_viewer_app_set_title(app, g_value_get_string(&value)); + } else if (g_str_equal(pspec->name, "display-flags")) { + guint flags = g_value_get_uint(&value); +- gboolean fullscreen = !!(flags & (CONTROLLER_SET_FULL_SCREEN | CONTROLLER_AUTO_DISPLAY_RES)); ++ 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); diff --git a/SOURCES/0077-Set-initial-window-size-to-display-desktop-size.patch b/SOURCES/0077-Set-initial-window-size-to-display-desktop-size.patch new file mode 100644 index 0000000..6bdab4c --- /dev/null +++ b/SOURCES/0077-Set-initial-window-size-to-display-desktop-size.patch @@ -0,0 +1,30 @@ +From 6df976eb6a078ea81b32c218b8c4fec1faf7c02e Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Tue, 2 Sep 2014 16:45:00 -0500 +Subject: [PATCH] Set initial window size to display desktop size + +When setting the 'display' for a VirtViewerWindow, the initial size for +that window should be the size of the remote display. So we synthesize a +desktop resize event when setting a new display for a window. This is +only done for enabled displays. Disabled displays generally have a size +of 0x0, which would result in the window being at it's minimum size, so +just allow the window to use its default size. + +(cherry picked from commit 29c8cadd4037681e8eb417fd8a0bb6cc6170a6b3) +--- + 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 8dbf5a5..7182c2f 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -1327,6 +1327,8 @@ virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *displa + G_CALLBACK(virt_viewer_window_desktop_resize), self, 0); + virt_viewer_signal_connect_object(display, "notify::show-hint", + G_CALLBACK(display_show_hint), self, 0); ++ if (virt_viewer_display_get_enabled(display)) ++ virt_viewer_window_desktop_resize(display, self); + } + } + diff --git a/SOURCES/0078-Make-default-window-size-a-bit-more-useful.patch b/SOURCES/0078-Make-default-window-size-a-bit-more-useful.patch new file mode 100644 index 0000000..004dbd5 --- /dev/null +++ b/SOURCES/0078-Make-default-window-size-a-bit-more-useful.patch @@ -0,0 +1,31 @@ +From 13701ea3777df7febd2f5f2bee33e1b2c16f85df Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Wed, 3 Sep 2014 13:54:47 -0500 +Subject: [PATCH] Make default window size a bit more useful + +Currently, windows have a default size of 400x400 pixels. This is a +strange aspect ratio for a display, and it is also too small to be +useful for much. Since the default window size determines the initial +size of newly-enabled displays, it would be nice if we used a slightly +better size. + +(cherry picked from commit a15bbac32001d8fb9eea5e6149df2aa2231f1a4f) +--- + src/virt-viewer.xml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer.xml b/src/virt-viewer.xml +index d489653..849fc7d 100644 +--- a/src/virt-viewer.xml ++++ b/src/virt-viewer.xml +@@ -4,8 +4,8 @@ + <object class="GtkAccelGroup" id="accelgroup"/> + <object class="GtkWindow" id="viewer"> + <property name="can_focus">False</property> +- <property name="default_width">400</property> +- <property name="default_height">400</property> ++ <property name="default_width">1024</property> ++ <property name="default_height">768</property> + <signal name="delete-event" handler="virt_viewer_window_delete" swapped="no"/> + <child> + <object class="GtkVBox" id="viewer-box"> diff --git a/SOURCES/0079-Force-display_show_hint-when-the-display-is-set.patch b/SOURCES/0079-Force-display_show_hint-when-the-display-is-set.patch new file mode 100644 index 0000000..255c789 --- /dev/null +++ b/SOURCES/0079-Force-display_show_hint-when-the-display-is-set.patch @@ -0,0 +1,34 @@ +From 9869dc23a842efa97fa9dcf71a13dfa33e1accc1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Tue, 14 Oct 2014 16:47:03 +0200 +Subject: [PATCH] Force display_show_hint() when the display is set + +Since a window is not created at startup for each display, the first +display(s) set when the application is opened will never receive and +treat the "notify::show-hint" signal on VirtViewerWindow, once the +callback is only set when the display is set to the specific window. +It causes problems like the "Send Key" menu not activated till an extra +display is added. To avoid this problem, let's force a call to +display_show_hint() everytime a display is set. + +Resolves: rhbz#1152468 +https://bugzilla.redhat.com/show_bug.cgi?id=1152468 +(cherry picked from commit 910ee34248d98bd9f328c3f3e92120d49f55dedc) +--- + src/virt-viewer-window.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 7182c2f..4cda1e0 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -1327,6 +1327,9 @@ virt_viewer_window_set_display(VirtViewerWindow *self, VirtViewerDisplay *displa + G_CALLBACK(virt_viewer_window_desktop_resize), self, 0); + virt_viewer_signal_connect_object(display, "notify::show-hint", + G_CALLBACK(display_show_hint), self, 0); ++ ++ display_show_hint(display, NULL, self); ++ + if (virt_viewer_display_get_enabled(display)) + virt_viewer_window_desktop_resize(display, self); + } diff --git a/SOURCES/0080-Fix-bug-with-initial-placement-of-fullscreen-windows.patch b/SOURCES/0080-Fix-bug-with-initial-placement-of-fullscreen-windows.patch new file mode 100644 index 0000000..a1ffe9c --- /dev/null +++ b/SOURCES/0080-Fix-bug-with-initial-placement-of-fullscreen-windows.patch @@ -0,0 +1,31 @@ +From 912d62f4b706db37a8b023ca2e06a24fb0ac97e5 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Thu, 9 Oct 2014 11:21:07 -0500 +Subject: [PATCH] Fix bug with initial placement of fullscreen windows + +The function app_window_try_fullscreen() will lookup the initial monitor +for the nth monitor internally, so we should pass in the display ID to the function +rather than the mapped monitor ID. This was causing 2 monitors on the +same monitor with a configuration like this: + + monitor-mapping=1:2;2:1 + +(cherry picked from commit c64a3c8f707fcbb45c21cb6b4f5fc0b799ca6df5) +--- + src/virt-viewer-app.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 1abcc90..6dbe4bb 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -880,8 +880,7 @@ ensure_window_for_display(VirtViewerApp *self, VirtViewerDisplay *display) + g_debug("Found a window without a display, reusing for this display..."); + virt_viewer_app_set_window_subtitle(self, win, nth); + if (self->priv->fullscreen && !self->priv->kiosk) +- app_window_try_fullscreen(self, win, +- virt_viewer_app_get_initial_monitor_for_display(self, nth)); ++ app_window_try_fullscreen(self, win, nth); + } else { + win = virt_viewer_app_window_new(self, nth); + } diff --git a/SOURCES/0081-Don-t-disable-send-key-menu-when-display-isn-t-ready.patch b/SOURCES/0081-Don-t-disable-send-key-menu-when-display-isn-t-ready.patch new file mode 100644 index 0000000..e5b6a3f --- /dev/null +++ b/SOURCES/0081-Don-t-disable-send-key-menu-when-display-isn-t-ready.patch @@ -0,0 +1,48 @@ +From ac763b6423d5e14729a48e236e5f7c7261e2d1a2 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Thu, 16 Oct 2014 09:07:58 -0500 +Subject: [PATCH] Don't disable "send key" menu when display isn't ready + +The ability to send a keystroke should not depend on whether a display +is ready or not, it only depends on whether the display exists or not. + +See https://bugzilla.redhat.com/show_bug.cgi?id=1152574 + +(cherry picked from commit 65560fa4664e0cee5a0c7f76065a9418f06bbd86) +--- + src/virt-viewer-window.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c +index 4cda1e0..3ee25e6 100644 +--- a/src/virt-viewer-window.c ++++ b/src/virt-viewer-window.c +@@ -206,7 +206,7 @@ rebuild_combo_menu(GObject *gobject G_GNUC_UNUSED, + menu = GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-send")); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), + GTK_WIDGET(virt_viewer_window_get_keycombo_menu(self))); +- gtk_widget_set_sensitive(menu, FALSE); ++ gtk_widget_set_sensitive(menu, (self->priv->display != NULL)); + } + + static void +@@ -1268,9 +1268,7 @@ display_show_hint(VirtViewerDisplay *display, + + hint = (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY); + +- gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-send")), hint); + gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(self->priv->builder, "menu-file-screenshot")), hint); +- gtk_widget_set_sensitive(self->priv->toolbar_send_key, hint); + } + static gboolean + window_key_pressed (GtkWidget *widget G_GNUC_UNUSED, +@@ -1332,6 +1330,9 @@ 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-send")), TRUE); ++ gtk_widget_set_sensitive(self->priv->toolbar_send_key, TRUE); + } + } + diff --git a/SOURCES/0082-VirtViewerDisplayVnc-set-session-property.patch b/SOURCES/0082-VirtViewerDisplayVnc-set-session-property.patch new file mode 100644 index 0000000..680863a --- /dev/null +++ b/SOURCES/0082-VirtViewerDisplayVnc-set-session-property.patch @@ -0,0 +1,78 @@ +From 98a8729326c132b906a5c38e9f9f3d97b9b77691 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Wed, 3 Sep 2014 16:59:05 -0500 +Subject: [PATCH] VirtViewerDisplayVnc: set 'session' property + +Set the display's session property in the constructor. If the session is +not set, then virt_viewer_display_get_session() doesn't return anything +useful. + +(cherry picked from commit 804564e2460011dfbf3f195aa8931b15d98f8824) +--- + src/virt-viewer-display-vnc.c | 5 +++-- + src/virt-viewer-display-vnc.h | 3 ++- + src/virt-viewer-session-vnc.c | 4 ++-- + 3 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/src/virt-viewer-display-vnc.c b/src/virt-viewer-display-vnc.c +index 2222158..8a9564a 100644 +--- a/src/virt-viewer-display-vnc.c ++++ b/src/virt-viewer-display-vnc.c +@@ -157,11 +157,12 @@ virt_viewer_display_vnc_resize_desktop(VncDisplay *vnc G_GNUC_UNUSED, + + + GtkWidget * +-virt_viewer_display_vnc_new(VncDisplay *vnc) ++virt_viewer_display_vnc_new(VirtViewerSessionVnc *session, ++ VncDisplay *vnc) + { + VirtViewerDisplayVnc *display; + +- display = g_object_new(VIRT_VIEWER_TYPE_DISPLAY_VNC, NULL); ++ display = g_object_new(VIRT_VIEWER_TYPE_DISPLAY_VNC, "session", session, NULL); + + g_object_ref(vnc); + display->priv->vnc = vnc; +diff --git a/src/virt-viewer-display-vnc.h b/src/virt-viewer-display-vnc.h +index 7020437..0b50563 100644 +--- a/src/virt-viewer-display-vnc.h ++++ b/src/virt-viewer-display-vnc.h +@@ -28,6 +28,7 @@ + #include <vncdisplay.h> + + #include "virt-viewer-display.h" ++#include "virt-viewer-session-vnc.h" + + G_BEGIN_DECLS + +@@ -64,7 +65,7 @@ struct _VirtViewerDisplayVncClass { + + GType virt_viewer_display_vnc_get_type(void); + +-GtkWidget* virt_viewer_display_vnc_new(VncDisplay *display); ++GtkWidget* virt_viewer_display_vnc_new(VirtViewerSessionVnc *session, VncDisplay *display); + + G_END_DECLS + +diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c +index e4a6c93..1e82fbb 100644 +--- a/src/virt-viewer-session-vnc.c ++++ b/src/virt-viewer-session-vnc.c +@@ -98,7 +98,7 @@ static void + virt_viewer_session_vnc_connected(VncDisplay *vnc G_GNUC_UNUSED, + VirtViewerSessionVnc *session) + { +- GtkWidget *display = virt_viewer_display_vnc_new(session->priv->vnc); ++ GtkWidget *display = virt_viewer_display_vnc_new(session, session->priv->vnc); + g_signal_emit_by_name(session, "session-connected"); + virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(display), + VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, TRUE); +@@ -113,7 +113,7 @@ virt_viewer_session_vnc_disconnected(VncDisplay *vnc G_GNUC_UNUSED, + GtkWidget *display; + + virt_viewer_session_clear_displays(VIRT_VIEWER_SESSION(session)); +- display = virt_viewer_display_vnc_new(session->priv->vnc); ++ 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_show_hint(VIRT_VIEWER_DISPLAY(display), diff --git a/SOURCES/0083-Revert-Fix-bug-with-initial-placement-of-fullscreen-.patch b/SOURCES/0083-Revert-Fix-bug-with-initial-placement-of-fullscreen-.patch new file mode 100644 index 0000000..19ae0ae --- /dev/null +++ b/SOURCES/0083-Revert-Fix-bug-with-initial-placement-of-fullscreen-.patch @@ -0,0 +1,24 @@ +From ea9a07c37739d94df2ffcdb46a20a03297dd61c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com> +Date: Thu, 23 Oct 2014 15:03:27 +0200 +Subject: [PATCH] Revert "Fix bug with initial placement of fullscreen windows" + +This reverts commit 912d62f4b706db37a8b023ca2e06a24fb0ac97e5. +--- + src/virt-viewer-app.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 6dbe4bb..1abcc90 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -880,7 +880,8 @@ ensure_window_for_display(VirtViewerApp *self, VirtViewerDisplay *display) + g_debug("Found a window without a display, reusing for this display..."); + virt_viewer_app_set_window_subtitle(self, win, nth); + if (self->priv->fullscreen && !self->priv->kiosk) +- app_window_try_fullscreen(self, win, nth); ++ app_window_try_fullscreen(self, win, ++ virt_viewer_app_get_initial_monitor_for_display(self, nth)); + } else { + win = virt_viewer_app_window_new(self, nth); + } diff --git a/SOURCES/0084-Move-vnc-specific-auth-logic-to-VirtViewerSessionVnc.patch b/SOURCES/0084-Move-vnc-specific-auth-logic-to-VirtViewerSessionVnc.patch new file mode 100644 index 0000000..a5fbe99 --- /dev/null +++ b/SOURCES/0084-Move-vnc-specific-auth-logic-to-VirtViewerSessionVnc.patch @@ -0,0 +1,247 @@ +From 25ef080ac79f31002259a050944079bb9672f5ea Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 31 Jan 2014 11:31:33 -0600 +Subject: [PATCH] Move vnc-specific auth logic to VirtViewerSessionVnc + +Conflicts: + src/virt-viewer-auth.c +(cherry picked from commit dce19b379ad65a0d0edef6dfce19f1177eb082c6) +--- + src/virt-viewer-auth.c | 97 ------------------------------------------- + src/virt-viewer-auth.h | 6 --- + src/virt-viewer-session-vnc.c | 92 +++++++++++++++++++++++++++++++++++++--- + 3 files changed, 86 insertions(+), 109 deletions(-) + +diff --git a/src/virt-viewer-auth.c b/src/virt-viewer-auth.c +index bb03516..a796619 100644 +--- a/src/virt-viewer-auth.c ++++ b/src/virt-viewer-auth.c +@@ -105,103 +105,6 @@ virt_viewer_auth_collect_credentials(GtkWindow *window, + return response == GTK_RESPONSE_OK ? 0 : -1; + } + +-#ifdef HAVE_GTK_VNC +-void +-virt_viewer_auth_vnc_credentials(VirtViewerSession *session, +- GtkWindow *window, +- GtkWidget *vnc, +- GValueArray *credList, +- char *vncAddress) +-{ +- char *username = NULL, *password = NULL; +- gboolean wantPassword = FALSE, wantUsername = FALSE; +- int i; +- +- g_debug("Got VNC credential request for %d credential(s)", credList->n_values); +- +- for (i = 0 ; i < credList->n_values ; i++) { +- GValue *cred = g_value_array_get_nth(credList, i); +- switch (g_value_get_enum(cred)) { +- case VNC_DISPLAY_CREDENTIAL_USERNAME: +- wantUsername = TRUE; +- break; +- case VNC_DISPLAY_CREDENTIAL_PASSWORD: +- wantPassword = TRUE; +- break; +- case VNC_DISPLAY_CREDENTIAL_CLIENTNAME: +- break; +- default: +- g_debug("Unsupported credential type %d", g_value_get_enum(cred)); +- vnc_display_close(VNC_DISPLAY(vnc)); +- goto cleanup; +- } +- } +- +- VirtViewerFile *file = virt_viewer_session_get_file(session); +- if (file != NULL) { +- if (wantUsername && virt_viewer_file_is_set(file, "username")) { +- username = virt_viewer_file_get_username(file); +- wantUsername = FALSE; +- } +- if (wantPassword && virt_viewer_file_is_set(file, "password")) { +- password = virt_viewer_file_get_password(file); +- wantPassword = FALSE; +- } +- } +- +- if (wantUsername || wantPassword) { +- int ret = virt_viewer_auth_collect_credentials(window, +- "VNC", vncAddress, +- wantUsername ? &username : NULL, +- wantPassword ? &password : NULL); +- +- if (ret < 0) { +- vnc_display_close(VNC_DISPLAY(vnc)); +- goto cleanup; +- } +- } +- +- for (i = 0 ; i < credList->n_values ; i++) { +- GValue *cred = g_value_array_get_nth(credList, i); +- switch (g_value_get_enum(cred)) { +- case VNC_DISPLAY_CREDENTIAL_USERNAME: +- if (!username || +- vnc_display_set_credential(VNC_DISPLAY(vnc), +- g_value_get_enum(cred), +- username)) { +- g_debug("Failed to set credential type %d", g_value_get_enum(cred)); +- vnc_display_close(VNC_DISPLAY(vnc)); +- } +- break; +- case VNC_DISPLAY_CREDENTIAL_PASSWORD: +- if (!password || +- vnc_display_set_credential(VNC_DISPLAY(vnc), +- g_value_get_enum(cred), +- password)) { +- g_debug("Failed to set credential type %d", g_value_get_enum(cred)); +- vnc_display_close(VNC_DISPLAY(vnc)); +- } +- break; +- case VNC_DISPLAY_CREDENTIAL_CLIENTNAME: +- if (vnc_display_set_credential(VNC_DISPLAY(vnc), +- g_value_get_enum(cred), +- "libvirt")) { +- g_debug("Failed to set credential type %d", g_value_get_enum(cred)); +- vnc_display_close(VNC_DISPLAY(vnc)); +- } +- break; +- default: +- g_debug("Unsupported credential type %d", g_value_get_enum(cred)); +- vnc_display_close(VNC_DISPLAY(vnc)); +- } +- } +- +- cleanup: +- g_free(username); +- g_free(password); +-} +-#endif +- + /* + * Local variables: + * c-indent-level: 4 +diff --git a/src/virt-viewer-auth.h b/src/virt-viewer-auth.h +index 1f102e0..ad932c5 100644 +--- a/src/virt-viewer-auth.h ++++ b/src/virt-viewer-auth.h +@@ -32,12 +32,6 @@ + #include "virt-viewer-session.h" + #include "virt-viewer-util.h" + +-void virt_viewer_auth_vnc_credentials(VirtViewerSession *session, +- GtkWindow *window, +- GtkWidget *vnc, +- GValueArray *credList, +- char *vncAddress); +- + int virt_viewer_auth_collect_credentials(GtkWindow *window, + const char *type, + const char *address, +diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c +index 1e82fbb..3f4c90d 100644 +--- a/src/virt-viewer-session-vnc.c ++++ b/src/virt-viewer-session-vnc.c +@@ -254,17 +254,97 @@ virt_viewer_session_vnc_open_uri(VirtViewerSession* session, + + + static void +-virt_viewer_session_vnc_auth_credential(GtkWidget *src, ++virt_viewer_session_vnc_auth_credential(GtkWidget *src G_GNUC_UNUSED, + GValueArray *credList, + VirtViewerSession *session) + { + VirtViewerSessionVnc *self = VIRT_VIEWER_SESSION_VNC(session); ++ char *username = NULL, *password = NULL; ++ gboolean wantPassword = FALSE, wantUsername = FALSE; ++ int i; ++ ++ g_debug("Got VNC credential request for %d credential(s)", credList->n_values); ++ ++ for (i = 0 ; i < credList->n_values ; i++) { ++ GValue *cred = g_value_array_get_nth(credList, i); ++ switch (g_value_get_enum(cred)) { ++ case VNC_DISPLAY_CREDENTIAL_USERNAME: ++ wantUsername = TRUE; ++ break; ++ case VNC_DISPLAY_CREDENTIAL_PASSWORD: ++ wantPassword = TRUE; ++ break; ++ case VNC_DISPLAY_CREDENTIAL_CLIENTNAME: ++ break; ++ default: ++ g_debug("Unsupported credential type %d", g_value_get_enum(cred)); ++ vnc_display_close(self->priv->vnc); ++ goto cleanup; ++ } ++ } ++ ++ VirtViewerFile *file = virt_viewer_session_get_file(VIRT_VIEWER_SESSION(self)); ++ if (file != NULL) { ++ if (wantUsername && virt_viewer_file_is_set(file, "username")) { ++ username = virt_viewer_file_get_username(file); ++ wantUsername = FALSE; ++ } ++ if (wantPassword && virt_viewer_file_is_set(file, "password")) { ++ password = virt_viewer_file_get_password(file); ++ wantPassword = FALSE; ++ } ++ } ++ ++ if (wantUsername || wantPassword) { ++ int ret = virt_viewer_auth_collect_credentials(self->priv->main_window, ++ "VNC", NULL, ++ wantUsername ? &username : NULL, ++ wantPassword ? &password : NULL); ++ ++ if (ret < 0) { ++ vnc_display_close(self->priv->vnc); ++ goto cleanup; ++ } ++ } ++ ++ for (i = 0 ; i < credList->n_values ; i++) { ++ GValue *cred = g_value_array_get_nth(credList, i); ++ switch (g_value_get_enum(cred)) { ++ case VNC_DISPLAY_CREDENTIAL_USERNAME: ++ if (!username || ++ vnc_display_set_credential(self->priv->vnc, ++ g_value_get_enum(cred), ++ username)) { ++ g_debug("Failed to set credential type %d", g_value_get_enum(cred)); ++ vnc_display_close(self->priv->vnc); ++ } ++ break; ++ case VNC_DISPLAY_CREDENTIAL_PASSWORD: ++ if (!password || ++ vnc_display_set_credential(self->priv->vnc, ++ g_value_get_enum(cred), ++ password)) { ++ g_debug("Failed to set credential type %d", g_value_get_enum(cred)); ++ vnc_display_close(self->priv->vnc); ++ } ++ break; ++ case VNC_DISPLAY_CREDENTIAL_CLIENTNAME: ++ if (vnc_display_set_credential(self->priv->vnc, ++ g_value_get_enum(cred), ++ "libvirt")) { ++ g_debug("Failed to set credential type %d", g_value_get_enum(cred)); ++ vnc_display_close(self->priv->vnc); ++ } ++ break; ++ default: ++ g_debug("Unsupported credential type %d", g_value_get_enum(cred)); ++ vnc_display_close(self->priv->vnc); ++ } ++ } + +- virt_viewer_auth_vnc_credentials(session, +- self->priv->main_window, +- src, +- credList, +- NULL); ++ cleanup: ++ g_free(username); ++ g_free(password); + } + + diff --git a/SOURCES/0085-Don-t-hide-the-main-window-when-disconnecting.patch b/SOURCES/0085-Don-t-hide-the-main-window-when-disconnecting.patch new file mode 100644 index 0000000..cf53aef --- /dev/null +++ b/SOURCES/0085-Don-t-hide-the-main-window-when-disconnecting.patch @@ -0,0 +1,47 @@ +From 6b2c83325556bcc0c332221856d7999435a41906 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 31 Jan 2014 13:59:42 -0600 +Subject: [PATCH] Don't hide the main window when disconnecting + +The main window (display #1) is treated a bit differently from other windows, +since it is opened at app start and displays status messages while we attempt to +connect to the remote guest. As such, it should really stay open as long as the +app is running. + +The impetus for this change is the following: +- user attempts to connect to a remote VNC display with a password +- user types the wrong password +- A dialog pops up indicating that authentication failed and asking if the user + would like to try to re-connect. +- User clicks 'Yes' +- Because the connection was disconnected, all windows are closed +- remote-viewer tries to reconnect again, at which point a new display window is + opened, and the window gets placed by the window manager (possibly on another + monitor altogether). + +As a user, I expect the program to simply re-use the existing window when trying +to re-authenticate, instead of having the window disappear and then re-appear at +a different location. This patch accomplishes that. + +Conflicts: + src/virt-viewer-app.c +(cherry picked from commit ed9b3f3450832c0b17b80468748aff4bddfcec34) +--- + src/virt-viewer-app.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c +index 1abcc90..f635393 100644 +--- a/src/virt-viewer-app.c ++++ b/src/virt-viewer-app.c +@@ -550,7 +550,9 @@ virt_viewer_app_window_set_visible(VirtViewerApp *self, + static void hide_one_window(gpointer value, + gpointer user_data G_GNUC_UNUSED) + { +- virt_viewer_window_hide(VIRT_VIEWER_WINDOW(value)); ++ VirtViewerApp* self = VIRT_VIEWER_APP(user_data); ++ if (self->priv->main_window != value) ++ virt_viewer_window_hide(VIRT_VIEWER_WINDOW(value)); + } + + static void diff --git a/SOURCES/0086-Don-t-set-VNC-display-to-ready-until-vnc-is-initiali.patch b/SOURCES/0086-Don-t-set-VNC-display-to-ready-until-vnc-is-initiali.patch new file mode 100644 index 0000000..d1ef3ef --- /dev/null +++ b/SOURCES/0086-Don-t-set-VNC-display-to-ready-until-vnc-is-initiali.patch @@ -0,0 +1,57 @@ +From 5a494f14bce402634f0e6a65046a31e0cbda8783 Mon Sep 17 00:00:00 2001 +From: Jonathon Jongsma <jjongsma@redhat.com> +Date: Fri, 31 Jan 2014 14:48:35 -0600 +Subject: [PATCH] Don't set VNC display to ready until vnc is initialized + +We were setting the show_hint to READY as soon as we got the vnc-connected +signal. But there may be an authentication step between vnc-connected and +vnc-initialized. In this case, we switch to an empty black display during the +authentication step instead of showing the 'waiting for display N' status. + +(cherry picked from commit 51c3a0decf21e9cfc200e20ad6635f39262efdf9) +--- + src/virt-viewer-display-vnc.c | 10 ++++++++++ + src/virt-viewer-session-vnc.c | 2 -- + 2 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/src/virt-viewer-display-vnc.c b/src/virt-viewer-display-vnc.c +index 8a9564a..1f7c11b 100644 +--- a/src/virt-viewer-display-vnc.c ++++ b/src/virt-viewer-display-vnc.c +@@ -113,6 +113,14 @@ virt_viewer_display_vnc_key_ungrab(VncDisplay *vnc G_GNUC_UNUSED, + } + + static void ++virt_viewer_display_vnc_initialized(VncDisplay *vnc G_GNUC_UNUSED, ++ VirtViewerDisplay *display) ++{ ++ virt_viewer_display_set_show_hint(display, ++ VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, TRUE); ++} ++ ++static void + virt_viewer_display_vnc_send_keys(VirtViewerDisplay* display, + const guint *keyvals, + int nkeyvals) +@@ -195,6 +203,8 @@ virt_viewer_display_vnc_new(VirtViewerSessionVnc *session, + G_CALLBACK(virt_viewer_display_vnc_key_grab), display); + g_signal_connect(display->priv->vnc, "vnc-keyboard-ungrab", + G_CALLBACK(virt_viewer_display_vnc_key_ungrab), display); ++ g_signal_connect(display->priv->vnc, "vnc-initialized", ++ G_CALLBACK(virt_viewer_display_vnc_initialized), display); + + return GTK_WIDGET(display); + } +diff --git a/src/virt-viewer-session-vnc.c b/src/virt-viewer-session-vnc.c +index 3f4c90d..7c31f87 100644 +--- a/src/virt-viewer-session-vnc.c ++++ b/src/virt-viewer-session-vnc.c +@@ -100,8 +100,6 @@ virt_viewer_session_vnc_connected(VncDisplay *vnc G_GNUC_UNUSED, + { + GtkWidget *display = virt_viewer_display_vnc_new(session, session->priv->vnc); + g_signal_emit_by_name(session, "session-connected"); +- virt_viewer_display_set_show_hint(VIRT_VIEWER_DISPLAY(display), +- VIRT_VIEWER_DISPLAY_SHOW_HINT_READY, TRUE); + virt_viewer_session_add_display(VIRT_VIEWER_SESSION(session), + VIRT_VIEWER_DISPLAY(display)); + } diff --git a/SOURCES/0087-remote-viewer-Show-debug-message-when-an-invalid-Ovi.patch b/SOURCES/0087-remote-viewer-Show-debug-message-when-an-invalid-Ovi.patch new file mode 100644 index 0000000..8de53e4 --- /dev/null +++ b/SOURCES/0087-remote-viewer-Show-debug-message-when-an-invalid-Ovi.patch @@ -0,0 +1,31 @@ +From 9434767f8df4631d7ff807fa0d8cd53f8e665d2a Mon Sep 17 00:00:00 2001 +From: Pavel Grunt <pgrunt@redhat.com> +Date: Thu, 27 Nov 2014 14:11:35 +0100 +Subject: [PATCH] remote-viewer: Show debug message when an invalid Ovirt VM + name is given + +This patch is intended for rhel-7.1 only. Upstream version handles this +situation by showing a list of all available machines. + +https://bugzilla.redhat.com/show_bug.cgi?id=1168495 +--- + src/remote-viewer.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/remote-viewer.c b/src/remote-viewer.c +index 2cb8925..5ae3319 100644 +--- a/src/remote-viewer.c ++++ b/src/remote-viewer.c +@@ -856,7 +856,11 @@ create_ovirt_session(VirtViewerApp *app, const char *uri) + goto error; + } + vm = OVIRT_VM(ovirt_collection_lookup_resource(vms, vm_name)); +- g_return_val_if_fail(vm != NULL, FALSE); ++ if (vm == NULL) { ++ g_debug("Cannot find guest %s", vm_name); ++ goto error; ++ } ++ + g_object_get(G_OBJECT(vm), "state", &state, NULL); + if (state != OVIRT_VM_STATE_UP) { + g_debug("oVirt VM %s is not running", vm_name); diff --git a/SPECS/virt-viewer.spec b/SPECS/virt-viewer.spec index 73751fc..0896bc8 100644 --- a/SPECS/virt-viewer.spec +++ b/SPECS/virt-viewer.spec @@ -26,36 +26,100 @@ %endif Name: virt-viewer -Version: 0.5.7 -Release: 7%{?dist}%{?extra_release} +Version: 0.6.0 +Release: 12%{?dist}%{?extra_release} Summary: Virtual Machine Viewer Group: Applications/System License: GPLv2+ URL: http://virt-manager.org/ Source0: http://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz -Patch1: 0001-Do-all-display-alignment-in-virt-viewer.patch -Patch2: 0002-Don-t-re-configure-displays-when-show-hint-changes.patch -Patch3: 0003-Create-a-sparse-array-for-monitor-geometry-changed.patch -Patch4: 0004-Enable-the-display-before-showing-the-window.patch -Patch5: 0005-spice-show-an-error-dialog-if-password-is-invalid.patch -Patch6: 0006-man-add-application-x-virt-viewer-file-format-descri.patch -Patch7: 0007-remote-viewer-remove-d-direct-option.patch -Patch8: 0008-Try-to-share-more-GOption-code-between-r-v-and-v-v.patch -Patch9: 0009-Return-existing-window-in-app_window_new.patch -Patch10: 0010-kiosk-add-app-kiosk-option-pass-it-down-to-window.patch -Patch11: 0011-kiosk-open-a-window-on-each-client-monitor.patch -Patch12: 0012-kiosk-use-less-verbose-window-display-status.patch -Patch13: 0013-kiosk-keep-a-reference-on-the-toolbar.patch -Patch14: 0014-kiosk-teach-a-window-to-become-kiosk-mode.patch -Patch15: 0015-kiosk-add-kiosk-quit-option.patch -Patch16: 0016-kiosk-warn-and-prevent-if-app-want-to-quit-or-window.patch -Patch17: 0017-kiosk-don-t-open-extra-monitors.patch -Patch18: 0018-kiosk-explicit-resize-window-to-fullscreen-size.patch -Patch19: 0019-Don-t-disable-fullscreen-if-kiosk-mode-is-off.patch -Patch20: 0020-Translation-updates-from-RH-translation-teams.patch -Patch21: 0021-hotkeys-send-modifiers-before-non-modifier-key.patch -Patch22: 0022-Set-Spice-display-to-fullscreen-if-owning-window-is-.patch -Patch23: 0023-Clear-global-zoom-reset-hotkey-too.patch +Patch1: 0001-Fix-race-with-metacity-in-fullscreen.patch +Patch2: 0002-Fix-scaling-of-window-upon-resize.patch +Patch3: 0003-Silence-a-message-about-missing-configuration-file.patch +Patch4: 0004-Remove-Automatically-resize-menu.patch +Patch5: 0005-Use-a-USB-icon-in-the-fullscreen-toolbar.patch +Patch6: 0006-build-sys-Always-prepend-to-build-id.patch +Patch7: 0007-Update-user-visible-copyright-information.patch +Patch8: 0008-man-Add-missing-.-at-end-of-one-sentence.patch +Patch9: 0009-man-Fix-link-to-GPLv2-text.patch +Patch10: 0010-man-Fix-concatonated-typo.patch +Patch11: 0011-man-Use-nicer-link-to-GPLv2.patch +Patch12: 0012-man-remove-Perl-header.patch +Patch13: 0013-Don-t-show-do-you-want-to-quit-dialog-in-kiosk-mode.patch +Patch14: 0014-Set-freed-variables-to-NULL-in-remote_viewer_start.patch +Patch15: 0015-Don-t-resize-guest-display-on-zoom-change.patch +Patch16: 0016-Fix-regression-with-enabling-additional-displays.patch +Patch17: 0017-Fix-gtk2-build.patch +Patch18: 0018-rhbz-1007306-Don-t-free-session-if-we-re-re-trying-a.patch +Patch19: 0019-Fix-broken-release-cursor-accel-when-not-specified-i.patch +Patch20: 0020-Fix-tiny-windows-for-secondary-displays-in-gtk2-buil.patch +Patch21: 0021-Fix-tiny-window-when-resetting-zoom-factor-in-gtk2-b.patch +Patch22: 0022-window-take-zoom-level-into-account-for-display-limi.patch +Patch23: 0023-Remove-warning-when-removing-display.patch +Patch24: 0024-Replace-DEBUG_LOG-with-g_debug.patch +Patch25: 0025-kiosk-don-t-attempt-to-hide-windows-when-disconnecti.patch +Patch26: 0026-Use-a-custom-log-handler-to-silence-debug-messages.patch +Patch27: 0027-kiosk-remove-invalid-unref.patch +Patch28: 0028-Fix-a-floating-display-warning.patch +Patch29: 0029-man-fix-zoom-level-range.patch +Patch30: 0030-rhbz-1111514-Fix-un-shrinkable-displays-on-windows-g.patch +Patch31: 0031-remote-viewer-mention-vv-file-in-help-output.patch +Patch32: 0032-Make-ctrl-zoom-in-out-in-fullscreen.patch +Patch33: 0033-Don-t-connect-to-localhost-when-using-direct.patch +Patch34: 0034-Improve-docs-for-attach-flag-in-virt-viewer.patch +Patch35: 0035-Fix-silentely-typo-in-remote-viewer-man-page.patch +Patch36: 0036-virt-viewer.xml-remove-zoom-in-out-accelerators.patch +Patch37: 0037-Add-a-dialog-showing-details-of-the-current-guest.patch +Patch38: 0038-Change-per-guest-fullscreen-config-format.patch +Patch39: 0039-Write-vm-name-to-config-file-as-comment.patch +Patch40: 0040-Don-t-print-warning-for-missing-comment-in-config-fi.patch +Patch41: 0041-remote-viewer-allow-username-in-ovirt-URIs.patch +Patch42: 0042-remote-viewer-oVirt-username-review-fixes.patch +Patch43: 0043-Auth-fix-leak-of-username.patch +Patch44: 0044-ovirt-Remove-extra-from-oVirt-URI.patch +Patch45: 0045-ovirt-Add-OvirtForeignMenu-class.patch +Patch46: 0046-ovirt-Use-OvirtForeignMenu-class.patch +Patch47: 0047-Add-group-argument-to-VirtViewerFile-helpers.patch +Patch48: 0048-Add-ovirt-specific-properties-to-VirtViewerFile.patch +Patch49: 0049-Create-foreign-menu-from-.vv-file-information.patch +Patch50: 0050-Fix-without-spice-gtk-with-ovirt-build.patch +Patch51: 0051-Fix-gcc-warning-missing-prototypes.patch +Patch52: 0052-Fix-gcc-warning-unused-parameter.patch +Patch53: 0053-virt-viewer-Don-t-connect-to-localhost-displays-with.patch +Patch54: 0054-app-add-virt_viewer_app_make_dialog.patch +Patch55: 0055-app-report-disconnection-error-details.patch +Patch56: 0056-Don-t-check-for-NULL-when-it-never-can-happen.patch +Patch57: 0057-app-report-disconnection-error-details.patch +Patch58: 0058-Add-support-to-use-numpad-accelarators-for-zoom-in.o.patch +Patch59: 0059-Do-not-show-duplicated-menu-items.patch +Patch60: 0060-Revert-changes-related-to-numpad-accelerators.patch +Patch61: 0061-Add-documentation-for-fullscreen-monitor-mapping.patch +Patch62: 0062-Add-example-of-an-oVirt-URI-to-the-manpage.patch +Patch63: 0063-Do-not-fail-when-the-auth-dialog-is-cancelled.patch +Patch64: 0064-Simplify-virt_viewer_auth_libvirt_credentials-return.patch +Patch65: 0065-Improve-authentication-error-messages.patch +Patch66: 0066-Unset-app-fullscreen-when-leaving-fullscreen.patch +Patch67: 0067-Don-t-use-fallback-ca-file-when-launching-vv-file.patch +Patch68: 0068-Force-displays-to-update-geometry-when-agent-connect.patch +Patch69: 0069-Adapt-auth_cancelled-to-the-downstream-code.patch +Patch70: 0070-ovirt-Allow-to-remove-CD-images.patch +Patch71: 0071-App-keep-hash-table-of-displays.patch +Patch72: 0072-VirtViewerDisplay-add-convenience-API-for-getting-nt.patch +Patch73: 0073-VirtViewerApp-store-windows-in-a-list.patch +Patch74: 0074-Create-windows-on-demand-not-at-startup.patch +Patch75: 0075-Use-socat-instead-of-nc-if-possible.patch +Patch76: 0076-spice-do-not-open-in-fullscreen-with-CONTROLLER_AUTO.patch +Patch77: 0077-Set-initial-window-size-to-display-desktop-size.patch +Patch78: 0078-Make-default-window-size-a-bit-more-useful.patch +Patch79: 0079-Force-display_show_hint-when-the-display-is-set.patch +Patch80: 0080-Fix-bug-with-initial-placement-of-fullscreen-windows.patch +Patch81: 0081-Don-t-disable-send-key-menu-when-display-isn-t-ready.patch +Patch82: 0082-VirtViewerDisplayVnc-set-session-property.patch +Patch83: 0083-Revert-Fix-bug-with-initial-placement-of-fullscreen-.patch +Patch84: 0084-Move-vnc-specific-auth-logic-to-VirtViewerSessionVnc.patch +Patch85: 0085-Don-t-hide-the-main-window-when-disconnecting.patch +Patch86: 0086-Don-t-set-VNC-display-to-ready-until-vnc-is-initiali.patch +Patch87: 0087-remote-viewer-Show-debug-message-when-an-invalid-Ovi.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires: openssh-clients @@ -75,7 +139,8 @@ BuildRequires: glib2-devel >= 2.22 %if %{with_gtk3} BuildRequires: gtk3-devel >= 3.0.0 %else -BuildRequires: gtk2-devel >= 2.12.0 +BuildRequires: gtk2-devel >= 2.18.0 +Requires: gtk2 >= 2.18.0 %endif BuildRequires: libvirt-devel >= 0.9.7 BuildRequires: libxml2-devel @@ -86,16 +151,16 @@ BuildRequires: gtk-vnc-devel >= 0.3.8 %endif %if %{with_spice} %if %{with_gtk3} -BuildRequires: spice-gtk3-devel >= 0.20 +BuildRequires: spice-gtk3-devel >= 0.22 %else -BuildRequires: spice-gtk-devel >= 0.20 +BuildRequires: spice-gtk-devel >= 0.22 %endif BuildRequires: spice-protocol >= 0.10.1 %endif BuildRequires: /usr/bin/pod2man BuildRequires: intltool %if %{with_govirt} -BuildRequires: libgovirt-devel >= 0.0.3 +BuildRequires: libgovirt-devel >= 0.3.0 %endif %if 0%{?fedora} >= 20 @@ -133,7 +198,70 @@ the display, and libvirt for looking up VNC/SPICE server details. %patch21 -p1 %patch22 -p1 %patch23 -p1 - +%patch24 -p1 +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 +%patch50 -p1 +%patch51 -p1 +%patch52 -p1 +%patch53 -p1 +%patch54 -p1 +%patch55 -p1 +%patch56 -p1 +%patch57 -p1 +%patch58 -p1 +%patch59 -p1 +%patch60 -p1 +%patch61 -p1 +%patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 +%patch69 -p1 +%patch70 -p1 +%patch71 -p1 +%patch72 -p1 +%patch73 -p1 +%patch74 -p1 +%patch75 -p1 +%patch76 -p1 +%patch77 -p1 +%patch78 -p1 +%patch79 -p1 +%patch80 -p1 +%patch81 -p1 +%patch82 -p1 +%patch83 -p1 +%patch84 -p1 +%patch85 -p1 +%patch86 -p1 +%patch87 -p1 %build %if 0%{?enable_autotools} @@ -156,7 +284,7 @@ autoreconf -if %define govirt_arg --with-ovirt %endif -%configure %{spice_arg} %{gtk_arg} %{govirt_arg} --with-buildid=-%{release} +%configure %{spice_arg} %{gtk_arg} %{govirt_arg} --with-buildid=%{release} --disable-update-mimedb %__make %{?_smp_mflags} @@ -176,6 +304,7 @@ rm -rf $RPM_BUILD_ROOT %{_sbindir}/update-alternatives --install %{_libexecdir}/spice-xpi-client \ spice-xpi-client %{_libexecdir}/spice-xpi-client-remote-viewer 25 update-desktop-database -q %{_datadir}/applications +%{_bindir}/update-mime-database %{_datadir}/mime &> /dev/null %postun if [ $1 -eq 0 ] ; then @@ -184,6 +313,7 @@ if [ $1 -eq 0 ] ; then %{_sbindir}/update-alternatives --remove spice-xpi-client %{_libexecdir}/spice-xpi-client-remote-viewer fi update-desktop-database -q %{_datadir}/applications +%{_bindir}/update-mime-database %{_datadir}/mime &> /dev/null %posttrans /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : @@ -198,7 +328,9 @@ update-desktop-database -q %{_datadir}/applications %{_datadir}/%{name}/ui/virt-viewer.xml %{_datadir}/%{name}/ui/virt-viewer-auth.xml %{_datadir}/%{name}/ui/virt-viewer-about.xml +%{_datadir}/%{name}/ui/virt-viewer-guest-details.xml %{_datadir}/icons/hicolor/*/apps/* +%{_datadir}/icons/hicolor/*/devices/* %{_datadir}/applications/remote-viewer.desktop %{_datadir}/mime/packages/virt-viewer-mime.xml %ghost %{_libexecdir}/spice-xpi-client @@ -207,6 +339,131 @@ update-desktop-database -q %{_datadir}/applications %{_mandir}/man1/remote-viewer.1* %changelog +* 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