2010-04-14 4 views
0

Je cherche un moyen de déterminer si l'utilisateur change de bureau virtuel sous X11. J'utilise Python avec les librairies X11 et PyGTK. J'ai trouvé quelques exemples de travail en C, mais je n'ai pas l'expertise pour les traduire en Python, et j'ai lu le code source de plusieurs applications de pager X11 (fbpanel, pypanel), mais je n'arrive pas à trouver ce que je cherche .Python/X11: savoir si l'utilisateur change de bureau virtuel

Dois-je m'inscrire pour recevoir un signal? Utiliser X11 ou GTK? Dois-je être occupé-attendre? Je suis complètement nouveau à la fois pour X11 et GTK, donc des conseils/aide seraient grandement appréciés.

, Greets Philip

PS: Mes efforts actuels peuvent être trouvés here.

Répondre

1

Voici une solution basée sur GTK:

screen = gtk.gdk.screen_get_default() 
root = screen.get_root_window() 
root.set_events(gtk.gdk.SUBSTRUCTURE_MASK) 
root.add_filter(event_filter) 

def event_filter(event, user_data): 
     # process event 
     return gtk.gdk.FILTER_CONTINUE 

Apparemment, le SUBSTRUCTURE_MASK contient des événements qui sont généralement associés à des commutateurs de l'espace de travail. Néanmoins, cette solution est un peu gênante. Des idées?

, Greets Philip

0

Vous voudrez peut-être jeter un oeil à libwnck, ou peut-être à ses fixations Python.

+0

J'ai déjà regardé dans libwnck (qui est exceptionnellement soigné), mais je ne veux pas ajouter une autre dépendance au programme quand je peux aussi bien le résoudre en utilisant X11/GTK. – Philip

0

En général, un changement de bureau est annoncé aux clients par un changement de propriété sur la fenêtre racine, donc écouter PROPERTY_CHANGE_MASK au lieu de SUBSTRUCTURE_MASK; qui vous donnera beaucoup moins de bruit.

Comme modifications de la propriété, je soupçonne que diffère parmi différents windowmanagers/desktops/whatever; Je cours Ubuntu/unité et quand je fais "xprop-racine" avant et après un commutateur de bureau, et diff les résultats, Je trouve que la propriété qui a changé est _NET_DESKTOP_VIEWPORT.

Le bruit primaire que je reçois en plus est que la propriété _NET_ACTIVE_WINDOW de la fenêtre racine change chaque fois que la fenêtre active change.

Questions connexes