2015-10-18 80 views
1

我希望我的UI根据屏幕是否合成(因此支持某些效果)而改变设计。是否有可能检测合成器是否正在运行

  • 可靠查询X服务器是否正在运行使用复合窗口管理
  • 当合成上/关闭时收到通知?

解决方案:

为了详细说明安德烈·西多罗夫的人不那么熟悉的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; 
} 

回答