The hints are _OB_ROLE, _OB_NAME, and _OB_CLASS.
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_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);
static void client_get_area(ObClient *self);
static void client_get_desktop(ObClient *self);
static void client_get_state(ObClient *self);
/* get the session related properties, these can change decorations
from per-app settings */
client_get_session_ids(self);
/* 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)
/* now we got everything that can affect the decorations */
if (!real)
+/*! 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];
static void client_change_wm_state(ObClient *self)
{
gulong state[2];
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_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");
Atom ob_theme;
Atom ob_config_file;
Atom ob_control;
Atom ob_theme;
Atom ob_config_file;
Atom ob_control;
+ Atom ob_role;
+ Atom ob_name;
+ Atom ob_class;
} Atoms;
extern Atoms prop_atoms;
} Atoms;
extern Atoms prop_atoms;
supported[i++] = prop_atoms.ob_theme;
supported[i++] = prop_atoms.ob_config_file;
supported[i++] = prop_atoms.ob_control;
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),
g_assert(i == num_support);
PROP_SETA32(RootWindow(ob_display, ob_screen),