我希望我的UI根据屏幕是否合成(因此支持某些效果)来改变设计。是否可能
解决方案:
详细说明Andrey Sidorov对不太熟悉X11 API的人的正确答案,这是检测符合EWMH的合成器的代码:
int has_compositor(Display *dpy, int screen) {
char prop_name[20];
snprintf(prop_name, 20, "_NET_WM_CM_S%d", screen);
Atom prop_atom = XInternAtom(dpy, prop_name, False);
return XGetSelectionOwner(dpy, prop_atom) != None;
}
答案 0 :(得分:3)
符合EWMH标准的合成者must acquire ownership of a selection named _NET_WM_CM_Sn, where n is the screen number
要跟踪合成器,您需要使用_NET_WM_CM_S0
检查所有人(假设您在屏幕0上)是否拥有选择XGetSelectionOwner
。如果不拥有,请自行获取所有权并监视SelectionClear事件,以检测何时启动合成器。