2015-10-18 77 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; 
} 

回答