show the hostname of forwarded clients in the titlebar
authorMikael Magnusson <mikachu@comhem.se>
Mon, 23 Apr 2007 18:46:19 +0000 (18:46 +0000)
committerMikael Magnusson <mikachu@comhem.se>
Mon, 23 Apr 2007 18:46:19 +0000 (18:46 +0000)
openbox/client.c
openbox/client.h
openbox/prop.c
openbox/prop.h

index dc4e52d..2b9d537 100644 (file)
@@ -70,6 +70,7 @@ static void client_get_layer(ObClient *self);
 static void client_get_shaped(ObClient *self);
 static void client_get_mwm_hints(ObClient *self);
 static void client_get_gravity(ObClient *self);
+static void client_get_client_machine(ObClient *self);
 static void client_change_allowed_actions(ObClient *self);
 static void client_change_state(ObClient *self);
 static void client_change_wm_state(ObClient *self);
@@ -624,6 +625,7 @@ void client_unmanage(ObClient *self)
     g_free(self->name);
     g_free(self->class);
     g_free(self->role);
+    g_free(self->client_machine);
     g_free(self->sm_client_id);
     g_free(self);
      
@@ -933,6 +935,7 @@ static void client_get_all(ObClient *self)
        (min/max sizes), so we're ready to set up the decorations/functions */
     client_setup_decor_and_functions(self);
   
+    client_get_client_machine(self);
     client_update_title(self);
     client_update_class(self);
     client_update_sm_client_id(self);
@@ -1641,6 +1644,7 @@ void client_update_wmhints(ObClient *self)
 void client_update_title(ObClient *self)
 {
     gchar *data = NULL;
+    gchar *visible = NULL;
 
     g_free(self->title);
      
@@ -1660,8 +1664,14 @@ void client_update_title(ObClient *self)
         }
     }
 
-    PROP_SETS(self->window, net_wm_visible_name, data);
-    self->title = data;
+    if (self->client_machine) {
+        visible = g_strdup_printf("%s (%s)", data, self->client_machine);
+        g_free(data);
+    } else
+        visible = data;
+
+    PROP_SETS(self->window, net_wm_visible_name, visible);
+    self->title = visible;
 
     if (self->frame)
         frame_adjust_title(self->frame);
@@ -1860,6 +1870,21 @@ void client_update_user_time(ObClient *self)
     }
 }
 
+static void client_get_client_machine(ObClient *self)
+{
+    gchar *data = NULL;
+    gchar localhost[128];
+
+    g_free(self->client_machine);
+
+    if (PROP_GETS(self->window, wm_client_machine, locale, &data)) {
+        gethostname(localhost, 127);
+        localhost[127] = '\0';
+        if (strcmp(localhost, data))
+            self->client_machine = data;
+    }
+}
+
 static void client_change_wm_state(ObClient *self)
 {
     gulong state[2];
index 90c6c05..4ee4d5c 100644 (file)
@@ -116,6 +116,8 @@ struct _ObClient
     gchar *title;
     /*! Window title when iconified */
     gchar *icon_title;
+    /*! Hostname of machine running client */
+    gchar *client_machine;
 
     /*! The application that created the window */
     gchar *name;
index b3c65d3..655fd07 100644 (file)
@@ -48,6 +48,7 @@ void prop_startup()
     CREATE(wm_icon_name, "WM_ICON_NAME");
     CREATE(wm_class, "WM_CLASS");
     CREATE(wm_window_role, "WM_WINDOW_ROLE");
+    CREATE(wm_client_machine, "WM_CLIENT_MACHINE");
     CREATE(motif_wm_hints, "_MOTIF_WM_HINTS");
 
     CREATE(sm_client_id, "SM_CLIENT_ID");
index 386b7a8..1d3445f 100644 (file)
@@ -50,6 +50,7 @@ typedef struct Atoms {
     Atom wm_icon_name;
     Atom wm_class;
     Atom wm_window_role;
+    Atom wm_client_machine;
     Atom motif_wm_hints;
 
     /* SM atoms */