File virtview-git-window-title.patch of Package virt-viewer

Subject: Fix setting of window title with domain name
From: Daniel P. Berrange berrange@redhat.com Fri Sep 16 10:57:53 2011 +0100
Date: Fri Sep 16 10:57:53 2011 +0100:
Git: 46cf6410c11dc8369dcf74283656f4bb0e14be8a


Index: virt-viewer-0.4.1/src/virt-viewer-app.c
===================================================================
--- virt-viewer-0.4.1.orig/src/virt-viewer-app.c
+++ virt-viewer-0.4.1/src/virt-viewer-app.c
@@ -121,6 +121,7 @@ struct _VirtViewerAppPrivate {
 	char *pretty_address;
 	gchar *guest_name;
 	gboolean grabbed;
+	char *title;
 };
 
 
@@ -135,6 +136,7 @@ enum {
 	PROP_SESSION,
 	PROP_GUEST_NAME,
 	PROP_FULLSCREEN,
+	PROP_TITLE,
 };
 
 void
@@ -386,6 +388,34 @@ virt_viewer_app_trace(VirtViewerApp *sel
 	}
 }
 
+static void
+virt_viewer_app_set_window_subtitle(VirtViewerApp *app,
+				    VirtViewerWindow *window,
+				    int nth)
+{
+	gchar *subtitle = app->priv->title ? g_strdup_printf("%s (%d)", app->priv->title, nth + 1) : NULL;
+	g_object_set(window, "subtitle", subtitle, NULL);
+	g_free(subtitle);
+}
+
+static void
+set_title(gpointer key,
+	  gpointer value,
+	  gpointer user_data)
+{
+	gint *nth = key;
+	VirtViewerApp *app = user_data;
+	VirtViewerWindow *window = value;
+	virt_viewer_app_set_window_subtitle(app, window, *nth);
+}
+
+static void
+virt_viewer_app_set_all_window_subtitles(VirtViewerApp *app)
+{
+	virt_viewer_app_set_window_subtitle(app, app->priv->main_window, 0);
+	g_hash_table_foreach(app->priv->windows, set_title, app);
+}
+
 static void update_title(gpointer key G_GNUC_UNUSED,
 			 gpointer value,
 			 gpointer user_data G_GNUC_UNUSED)
@@ -426,6 +456,7 @@ virt_viewer_app_set_nth_window(VirtViewe
 	key = g_malloc(sizeof(gint));
 	*key = nth;
 	g_hash_table_insert(self->priv->windows, key, win);
+	virt_viewer_app_set_window_subtitle(self, win, nth);
 }
 
 static void
@@ -949,6 +980,10 @@ virt_viewer_app_get_property (GObject *o
 		g_value_set_boolean(value, priv->fullscreen);
 		break;
 
+	case PROP_TITLE:
+		g_value_set_string(value, priv->title);
+		break;
+
         default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
         }
@@ -981,6 +1016,12 @@ virt_viewer_app_set_property (GObject *o
 		virt_viewer_app_set_fullscreen(self, g_value_get_boolean(value));
 		break;
 
+	case PROP_TITLE:
+		g_free(priv->title);
+		priv->title = g_value_dup_string(value);
+		virt_viewer_app_set_all_window_subtitles(self);
+		break;
+
         default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
         }
@@ -1006,6 +1047,7 @@ virt_viewer_app_dispose (GObject *object
 		g_object_unref(priv->container);
 		priv->container = NULL;
 	}
+	g_free(priv->title);
 
 	virt_viewer_app_free_connect_info(self);
 
@@ -1134,6 +1176,16 @@ virt_viewer_app_class_init (VirtViewerAp
 							     G_PARAM_READABLE |
 							     G_PARAM_WRITABLE |
 							     G_PARAM_STATIC_STRINGS));
+	g_object_class_install_property(object_class,
+					PROP_TITLE,
+					g_param_spec_string("title",
+							    "Title",
+							    "Title",
+							    "",
+							    G_PARAM_READABLE |
+							    G_PARAM_WRITABLE |
+							    G_PARAM_STATIC_STRINGS));
+
 }
 
 void
Index: virt-viewer-0.4.1/src/virt-viewer.c
===================================================================
--- virt-viewer-0.4.1.orig/src/virt-viewer.c
+++ virt-viewer-0.4.1/src/virt-viewer.c
@@ -49,7 +49,6 @@ struct _VirtViewerPrivate {
 	char *uri;
 	virConnectPtr conn;
 	char *domkey;
-	char *domtitle;
 	gboolean withEvents;
 	gboolean waitvm;
 	gboolean reconnect;
@@ -414,8 +413,7 @@ virt_viewer_initial_connect(VirtViewerAp
 		}
 	}
 
-	free(priv->domtitle);
-	priv->domtitle = g_strdup(virDomainGetName(dom));
+	g_object_set(app, "title", virDomainGetName(dom), NULL);
 
 	virt_viewer_app_show_status(app, _("Checking guest domain status"));
 	if (virDomainGetInfo(dom, &info) < 0) {
openSUSE Build Service is sponsored by