2010-04-14 50 views
0

我正在尋找一種方法來確定用戶是否在X11下切換虛擬桌面。Python/X11:瞭解用戶是否切換虛擬桌面

我在Python中使用X11庫和PyGTK。我在C中找到了一些工作示例,但我缺乏將它們轉換爲Python的專業知識,並且我閱讀了幾個X11傳呼機應用程序(fbpanel,pypanel)的源代碼,但我似乎無法找到我要找的內容。

我必須註冊信號嗎?使用X11或GTK? 我必須等待嗎?

我對X11和GTK都是全新的,所以任何提示/幫助將不勝感激。

映入眼簾, 菲利普

PS:我現在的工作可以發現here

回答

1

這裏是一個基於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 

顯然,SUBSTRUCTURE_MASK含有典型地與工作空間交換機相關聯的事件。不過,這個解決方案感覺有點尷尬。有任何想法嗎?

映入眼簾, 菲利普

0

你可能想看看libwnck,或者可能是它的Python綁定。

+0

我已經看過libwnck(這是非常整潔),但我不想添加另一個依賴項,當我可以使用X11/GTK解決它。 – Philip 2010-04-15 00:02:39

0

通常桌面的變化是由根窗口上的屬性變化向客戶端公佈, 所以聽PROPERTY_CHANGE_MASK代替SUBSTRUCTURE_MASK; 這會讓你減少很多噪音。

至於其中屬性的變化,我懷疑是不同的windowmanagerrs /桌面/任何不同的 ;我運行ubuntu/unity和 當我在桌面切換之前和之後執行「xprop -root」,並對結果進行比較時,我發現被更改的屬性是_NET_DESKTOP_VIEWPORT。

我得到的主要噪音是每次活動窗口更改時,根窗口的 _NET_ACTIVE_WINDOW屬性都會更改。