From 9ba2b04e96449fea5b6bd212aa3d431638754bdd Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 11 Dec 2009 18:27:46 -0500 Subject: [PATCH] Set hints that remember the WM_WINDOW_ROLE and WM_CLASS properties for our users. The hints are _OB_ROLE, _OB_NAME, and _OB_CLASS. --- openbox/client.c | 11 +++++++++++ openbox/prop.c | 3 +++ openbox/prop.h | 3 +++ openbox/screen.c | 3 +++ 4 files changed, 20 insertions(+) diff --git a/openbox/client.c b/openbox/client.c index fcbe7cd9..e3a7d6ec 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -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]; diff --git a/openbox/prop.c b/openbox/prop.c index ec1ce3db..b21b3f53 100644 --- a/openbox/prop.c +++ b/openbox/prop.c @@ -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 diff --git a/openbox/prop.h b/openbox/prop.h index 644717a2..419aa512 100644 --- a/openbox/prop.h +++ b/openbox/prop.h @@ -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; diff --git a/openbox/screen.c b/openbox/screen.c index 4412027e..8d0460d5 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -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), -- 2.45.2