2010-03-09 16 views
4

Comment basculer entre les espaces de travail de mon gestionnaire de fenêtres en utilisant Python avec le module Xlib?Python: comment basculer entre les espaces de travail en utilisant Xlib?

Ceci est ma tentative la plus prometteuse:

#!/usr/bin/python 

from Xlib import X, display, error, Xatom, Xutil 
import Xlib.protocol.event 

screen = Xlib.display.Display().screen() 
root = screen.root 


def sendEvent(win, ctype, data, mask=None): 
     """ Send a ClientMessage event to the root """ 
     data = (data+[0]*(5-len(data)))[:5] 
     ev = Xlib.protocol.event.ClientMessage(window=win, client_type=ctype, data=(32,(data))) 

     if not mask: 
      mask = (X.SubstructureRedirectMask|X.SubstructureNotifyMask) 
     root.send_event(ev, event_mask=mask) 


# switch to desktop 2 
sendEvent(root, Xlib.display.Display().intern_atom("_NET_CURRENT_DESKTOP"), [2]) 

Le code ci-dessus est sans vergogne volé à divers endroits dans la source PyPanel; malheureusement, il ne fait rien, ne génère même pas d'avertissement/d'exception. Est-ce que j'ai râté quelque chose? J'utilise Python et PyGTK. Xlib semble être le bon choix pour changer de bureau. Je n'ai pas l'intention d'utiliser wnck (module buggy Python) ou similaire, mais j'apprécierais n'importe quel pointeur de toute façon.

Je pourrais ajouter que c'est ma première tentative d'écriture d'une application Python en utilisant Xlib (ou PyGTK).

Répondre

2

Apparemment, vous devez travailler sur le même objet Affichage, puis flush à la fin. Quelque chose comme:

display = Xlib.display.Display() 
screen = display.screen() 
root = screen.root 

# ... 

sendEvent(root, display.intern_atom("_NET_CURRENT_DESKTOP"), [1, X.CurrentTime]) 
display.flush() 

Crédit: Idée de a very similar thread (qui fonctionne presque).

P.S. En passant, le numéro de bureau commence à 0.

+0

Merci beaucoup! L'ajout de display.flush() le fait fonctionner. – Philip