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.
This commit is contained in:
parent
5c01dc651a
commit
9ba2b04e96
4 changed files with 20 additions and 0 deletions
|
@ -76,6 +76,7 @@ static RrImage *client_default_icon = NULL;
|
||||||
static void client_get_all(ObClient *self, gboolean real);
|
static void client_get_all(ObClient *self, gboolean real);
|
||||||
static void client_get_startup_id(ObClient *self);
|
static void client_get_startup_id(ObClient *self);
|
||||||
static void client_get_session_ids(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_area(ObClient *self);
|
||||||
static void client_get_desktop(ObClient *self);
|
static void client_get_desktop(ObClient *self);
|
||||||
static void client_get_state(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
|
/* get the session related properties, these can change decorations
|
||||||
from per-app settings */
|
from per-app settings */
|
||||||
client_get_session_ids(self);
|
client_get_session_ids(self);
|
||||||
|
client_save_session_ids(self);
|
||||||
|
|
||||||
/* now we got everything that can affect the decorations */
|
/* now we got everything that can affect the decorations */
|
||||||
if (!real)
|
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)
|
static void client_change_wm_state(ObClient *self)
|
||||||
{
|
{
|
||||||
gulong state[2];
|
gulong state[2];
|
||||||
|
|
|
@ -179,6 +179,9 @@ void prop_startup(void)
|
||||||
CREATE(ob_wm_action_undecorate, "_OB_WM_ACTION_UNDECORATE");
|
CREATE(ob_wm_action_undecorate, "_OB_WM_ACTION_UNDECORATE");
|
||||||
CREATE(ob_wm_state_undecorated, "_OB_WM_STATE_UNDECORATED");
|
CREATE(ob_wm_state_undecorated, "_OB_WM_STATE_UNDECORATED");
|
||||||
CREATE(ob_control, "_OB_CONTROL");
|
CREATE(ob_control, "_OB_CONTROL");
|
||||||
|
CREATE(ob_role, "_OB_ROLE");
|
||||||
|
CREATE(ob_name, "_OB_NAME");
|
||||||
|
CREATE(ob_class, "_OB_CLASS");
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <X11/Xutil.h>
|
#include <X11/Xutil.h>
|
||||||
|
|
|
@ -202,6 +202,9 @@ typedef struct Atoms {
|
||||||
Atom ob_theme;
|
Atom ob_theme;
|
||||||
Atom ob_config_file;
|
Atom ob_config_file;
|
||||||
Atom ob_control;
|
Atom ob_control;
|
||||||
|
Atom ob_role;
|
||||||
|
Atom ob_name;
|
||||||
|
Atom ob_class;
|
||||||
} Atoms;
|
} Atoms;
|
||||||
extern Atoms prop_atoms;
|
extern Atoms prop_atoms;
|
||||||
|
|
||||||
|
|
|
@ -302,6 +302,9 @@ gboolean screen_annex(void)
|
||||||
supported[i++] = prop_atoms.ob_theme;
|
supported[i++] = prop_atoms.ob_theme;
|
||||||
supported[i++] = prop_atoms.ob_config_file;
|
supported[i++] = prop_atoms.ob_config_file;
|
||||||
supported[i++] = prop_atoms.ob_control;
|
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);
|
g_assert(i == num_support);
|
||||||
|
|
||||||
PROP_SETA32(RootWindow(ob_display, ob_screen),
|
PROP_SETA32(RootWindow(ob_display, ob_screen),
|
||||||
|
|
Loading…
Reference in a new issue