2015-10-18 1 views
1

Je souhaite que mon interface utilisateur change de conception selon que l'écran est composé (prenant en charge certains effets) ou non. Est-il possible deDétecter si le compositeur fonctionne

  • interroger si le serveur Fiable X est en cours d'exécution d'un gestionnaire de fenêtres compositing
  • averti lorsque compositing est activé/désactivé?

Solution:

Pour des précisions sur la réponse correcte de Andrey Sidorov pour les gens pas familiers avec l'API X11, c'est le code pour détecter un typographe conforme 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; 
} 

Répondre

3

Composants compatibles EWMH must acquire ownership of a selection named _NET_WM_CM_Sn, where n is the screen number

Pour suivre le compositeur, vous devez vérifier si la sélection est _NET_WM_CM_S0 appartenant à n'importe qui (en supposant que vous êtes sur l'écran 0) en utilisant XGetSelectionOwner. Si ce n'est pas le cas, acquérez vous-même la propriété et surveillez les événements SelectionClear pour détecter quand le composant est démarré.

+0

Fonctionne comme un charme, merci! –