Misc: Add properties to the registration window

Add WM_CLASS, COMPTON_VERSION, and _NET_WM_PID properties to the
registration window, to ease the development of pcman's compton-conf.
pull/2/head
Richard Grenville 11 years ago
parent ed99f1b2c9
commit 640ef04378

@ -4543,8 +4543,31 @@ register_cm(session_t *ps) {
if (ps->redirected) if (ps->redirected)
XCompositeUnredirectWindow(ps->dpy, ps->reg_win, CompositeRedirectManual); XCompositeUnredirectWindow(ps->dpy, ps->reg_win, CompositeRedirectManual);
Xutf8SetWMProperties(ps->dpy, ps->reg_win, "xcompmgr", "xcompmgr", {
NULL, 0, NULL, NULL, NULL); XClassHint *h = XAllocClassHint();
if (h) {
h->res_name = "compton";
h->res_class = "xcompmgr";
}
Xutf8SetWMProperties(ps->dpy, ps->reg_win, "xcompmgr", "xcompmgr",
NULL, 0, NULL, NULL, h);
cxfree(h);
}
// Set _NET_WM_PID
{
long pid = getpid();
if (!XChangeProperty(ps->dpy, ps->reg_win,
get_atom(ps, "_NET_WM_PID"), XA_CARDINAL, 32, PropModeReplace,
(unsigned char *) &pid, 1)) {
printf_errf("(): Failed to set _NET_WM_PID.");
}
}
// Set COMPTON_VERSION
if (!wid_set_text_prop(ps, ps->reg_win, get_atom(ps, "COMPTON_VERSION"), COMPTON_VERSION)) {
printf_errf("(): Failed to set COMPTON_VERSION.");
}
{ {
unsigned len = strlen(REGISTER_PROP) + 2; unsigned len = strlen(REGISTER_PROP) + 2;

@ -337,9 +337,7 @@ isdamagenotify(session_t *ps, const XEvent *ev) {
*/ */
static inline XTextProperty * static inline XTextProperty *
make_text_prop(session_t *ps, char *str) { make_text_prop(session_t *ps, char *str) {
XTextProperty *pprop = malloc(sizeof(XTextProperty)); XTextProperty *pprop = cmalloc(1, XTextProperty);
if (!pprop)
printf_errfq(1, "(): Failed to allocate memory.");
if (XmbTextListToTextProperty(ps->dpy, &str, 1, XStringStyle, pprop)) { if (XmbTextListToTextProperty(ps->dpy, &str, 1, XStringStyle, pprop)) {
cxfree(pprop->value); cxfree(pprop->value);
@ -350,6 +348,25 @@ make_text_prop(session_t *ps, char *str) {
return pprop; return pprop;
} }
/**
* Set a single-string text property on a window.
*/
static inline bool
wid_set_text_prop(session_t *ps, Window wid, Atom prop_atom, char *str) {
XTextProperty *pprop = make_text_prop(ps, str);
if (!pprop) {
printf_errf("(\"%s\"): Failed to make text property.", str);
return false;
}
XSetTextProperty(ps->dpy, wid, pprop, prop_atom);
cxfree(pprop->value);
cxfree(pprop);
return true;
}
static void static void
run_fade(session_t *ps, win *w, unsigned steps); run_fade(session_t *ps, win *w, unsigned steps);

Loading…
Cancel
Save