Set hints that remember the WM_WINDOW_ROLE and WM_CLASS properties for our users.
authorDana Jansens <danakj@orodu.net>
Fri, 11 Dec 2009 23:27:46 +0000 (18:27 -0500)
committerDana Jansens <danakj@orodu.net>
Fri, 11 Dec 2009 23:58:39 +0000 (18:58 -0500)
The hints are _OB_ROLE, _OB_NAME, and _OB_CLASS.

openbox/client.c
openbox/prop.c
openbox/prop.h
openbox/screen.c

index fcbe7cd..e3a7d6e 100644 (file)
@@ -76,6 +76,7 @@ static RrImage *client_default_icon     = NULL;
 static void client_get_all(ObClient *self, gboolean real);
 static void client_get_startup_id(ObClient *self);
 static void client_get_session_ids(ObClient *self);
+static void client_save_session_ids(ObClient *self);
 static void client_get_area(ObClient *self);
 static void client_get_desktop(ObClient *self);
 static void client_get_state(ObClient *self);
@@ -1159,6 +1160,7 @@ static void client_get_all(ObClient *self, gboolean real)
     /* get the session related properties, these can change decorations
        from per-app settings */
     client_get_session_ids(self);
+    client_save_session_ids(self);
 
     /* now we got everything that can affect the decorations */
     if (!real)
@@ -2367,6 +2369,15 @@ static void client_get_session_ids(ObClient *self)
     }
 }
 
+/*! Save the session IDs as seen by Openbox when the window mapped, so that
+  users can still access them later if the app changes them */
+static void client_save_session_ids(ObClient *self)
+{
+    PROP_SETS(self->window, ob_role, self->role);
+    PROP_SETS(self->window, ob_name, self->name);
+    PROP_SETS(self->window, ob_class, self->class);
+}
+
 static void client_change_wm_state(ObClient *self)
 {
     gulong state[2];
index ec1ce3d..b21b3f5 100644 (file)
@@ -179,6 +179,9 @@ void prop_startup(void)
     CREATE(ob_wm_action_undecorate, "_OB_WM_ACTION_UNDECORATE");
     CREATE(ob_wm_state_undecorated, "_OB_WM_STATE_UNDECORATED");
     CREATE(ob_control, "_OB_CONTROL");
+    CREATE(ob_role, "_OB_ROLE");
+    CREATE(ob_name, "_OB_NAME");
+    CREATE(ob_class, "_OB_CLASS");
 }
 
 #include <X11/Xutil.h>
index 644717a..419aa51 100644 (file)
@@ -202,6 +202,9 @@ typedef struct Atoms {
     Atom ob_theme;
     Atom ob_config_file;
     Atom ob_control;
+    Atom ob_role;
+    Atom ob_name;
+    Atom ob_class;
 } Atoms;
 extern Atoms prop_atoms;
 
index 4412027..8d0460d 100644 (file)
@@ -302,6 +302,9 @@ gboolean screen_annex(void)
     supported[i++] = prop_atoms.ob_theme;
     supported[i++] = prop_atoms.ob_config_file;
     supported[i++] = prop_atoms.ob_control;
+    supported[i++] = prop_atoms.ob_role;
+    supported[i++] = prop_atoms.ob_name;
+    supported[i++] = prop_atoms.ob_class;
     g_assert(i == num_support);
 
     PROP_SETA32(RootWindow(ob_display, ob_screen),