From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> Currently the remote viewer windows get the URI as their title. Provide a --title STRING arg to remote-viewer to let the user override the title with something more meaningful to them. Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> --- man/remote-viewer.pod | 4 ++++ src/remote-viewer-main.c | 5 ++++- src/remote-viewer.c | 8 +++++--- src/remote-viewer.h | 4 +++- src/virt-viewer-app.c | 20 +++++++++++++++++--- src/virt-viewer-app.h | 2 ++ 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/man/remote-viewer.pod b/man/remote-viewer.pod index ed61a55..e8337ed 100644 --- a/man/remote-viewer.pod +++ b/man/remote-viewer.pod @@ -38,6 +38,10 @@ Zoom level of the display window in percentage. Range 10-200. Start with the window maximised to fullscreen +=item -t TITLE, --title TITLE + +Set the window title to B<TITLE> + =item --spice-controller Use the SPICE controller to initialize the connection with the SPICE diff --git a/src/remote-viewer-main.c b/src/remote-viewer-main.c index 615e758..f92ef13 100644 --- a/src/remote-viewer-main.c +++ b/src/remote-viewer-main.c @@ -196,6 +196,7 @@ main(int argc, char **argv) int zoom = 100; gchar **args = NULL; gchar *uri = NULL; + char *title = NULL; gboolean verbose = FALSE; gboolean debug = FALSE; gboolean direct = FALSE; @@ -209,6 +210,8 @@ main(int argc, char **argv) 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 }, { "direct", 'd', 0, G_OPTION_ARG_NONE, &direct, N_("Direct connection with no automatic tunnels"), NULL }, { "zoom", 'z', 0, G_OPTION_ARG_INT, &zoom, @@ -304,7 +307,7 @@ main(int argc, char **argv) g_object_set(viewer, "guest-name", "defined by Spice controller", NULL); } else { #endif - viewer = remote_viewer_new(uri, verbose); + viewer = remote_viewer_new(uri, title, verbose); g_object_set(viewer, "guest-name", uri, NULL); #if HAVE_SPICE_GTK } diff --git a/src/remote-viewer.c b/src/remote-viewer.c index 77c1414..55df838 100644 --- a/src/remote-viewer.c +++ b/src/remote-viewer.c @@ -181,11 +181,12 @@ remote_viewer_init(RemoteViewer *self) } RemoteViewer * -remote_viewer_new(const gchar *uri, gboolean verbose) +remote_viewer_new(const gchar *uri, const gchar *title, gboolean verbose) { return g_object_new(REMOTE_VIEWER_TYPE, "guri", uri, "verbose", verbose, + "title", title, NULL); } @@ -609,7 +610,7 @@ spice_ctrl_notified(SpiceCtrlController *ctrl, &value); } } else if (g_str_equal(pspec->name, "title")) { - g_object_set_property(G_OBJECT(app), "title", &value); + 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; @@ -768,7 +769,8 @@ remote_viewer_start(VirtViewerApp *app) g_return_val_if_fail(guri != NULL, FALSE); DEBUG_LOG("Opening display to %s", guri); - g_object_set(app, "title", guri, NULL); + if (virt_viewer_app_get_title(app) == NULL) + virt_viewer_app_set_title(app, guri); if (virt_viewer_util_extract_host(guri, &type, NULL, NULL, NULL, NULL) < 0 || type == NULL) { virt_viewer_app_simple_message_dialog(app, _("Cannot determine the connection type from URI")); diff --git a/src/remote-viewer.h b/src/remote-viewer.h index a465b7e..de701e0 100644 --- a/src/remote-viewer.h +++ b/src/remote-viewer.h @@ -48,7 +48,9 @@ typedef struct { GType remote_viewer_get_type (void); -RemoteViewer* remote_viewer_new(const gchar *uri, gboolean verbose); +RemoteViewer* remote_viewer_new(const gchar *uri, + const gchar *title, + gboolean verbose); RemoteViewer* remote_viewer_new_with_controller(gboolean verbose); G_END_DECLS diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c index a95687a..2e6c895 100644 --- a/src/virt-viewer-app.c +++ b/src/virt-viewer-app.c @@ -1245,9 +1245,7 @@ virt_viewer_app_set_property (GObject *object, guint property_id, break; case PROP_TITLE: - g_free(priv->title); - priv->title = g_value_dup_string(value); - virt_viewer_app_set_all_window_subtitles(self); + virt_viewer_app_set_title(self, g_value_get_string(value)); break; case PROP_ENABLE_ACCEL: @@ -1494,6 +1492,22 @@ virt_viewer_app_class_init (VirtViewerAppClass *klass) G_TYPE_OBJECT); } +const char *virt_viewer_app_get_title(VirtViewerApp *self) +{ + g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), NULL); + + return self->priv->title; +} + +void virt_viewer_app_set_title(VirtViewerApp *self, const char *title) +{ + g_return_if_fail(VIRT_VIEWER_IS_APP(self)); + + g_free(self->priv->title); + self->priv->title = g_strdup(title); + virt_viewer_app_set_all_window_subtitles(self); +} + void virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct) { diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h index 5dc95dd..812a7fe 100644 --- a/src/virt-viewer-app.h +++ b/src/virt-viewer-app.h @@ -60,6 +60,8 @@ typedef struct { GType virt_viewer_app_get_type (void); +const char *virt_viewer_app_get_title(VirtViewerApp *app); +void virt_viewer_app_set_title(VirtViewerApp *app, const char *title); void virt_viewer_app_set_debug(gboolean debug); gboolean virt_viewer_app_start(VirtViewerApp *app); void virt_viewer_app_quit(VirtViewerApp *self); -- 1.7.11.2