2014-02-20 22 views
2

我想開發一個允許在gnome工作區之間移動窗口的python應用程序。我正在使用wnck與窗口進行交互,但我想知道如何將窗口從工作區移動到另一個窗口。任何人都可以告訴我一個方法?如何在Python中使用wnck將gtk窗口從工作區移動到另一個窗口?

我試着用下面的代碼

screen = wnck.screen_get_default() 
window_list = screen.get_windows() 
titlePattern = re.compile('.*Downloads.*') 
    if len(window_list) == 0: 
     print "No Windows Found" 
    for win in window_list: 
     if(titlePattern.match(win.get_name())): 
      win.move_to_workspace(screen.get_workspace(2)) 

但screen.get_workspace(2)返回 '無',而它的工作原理(但並不移動窗口!)如果我使用screen.get_workspace(0 )作爲move_to_workspace參數。

我可以解決我的問題嗎?

預先感謝所有人。

回答

2

當您撥打screen.get_workspace(2)時,您的窗口管理器根本沒有工作區2。

您的代碼應該適用於所有實際存在的工作區。在GNOME 3中,這意味着所有已經有窗口的工作空間加上一個空的工作空間。這意味着screen.get_workspace(screen.get_workspace_count() - 1)應該爲您提供「空白」工作空間,如果這是您正在尋找的。請注意,沒有規範說最後一個工作區是empy,這正是gnome-shell目前正在做的事情。

您還可以讓窗口管理器增加屏幕上的工作區數量,但沒有義務這麼做:GNOME 3窗口管理器不會這樣做。

哦,還有一兩件事要記住Wnck:

在其創作中,WnckScreen對象不會有從X服務器獲取信息 。如果在創建後立即查詢(例如,通過 wnck_screen_get_windows()或wnck_screen_get_workspaces()),對於 示例),WnckScreen對象看起來好像沒有工作空間 也沒有窗口。該信息在帶有空閒源的主要事件循環 中提取,以避免在啓動時執行昂貴的同步 操作。如果未使用主事件循環,或者在創建 對象後儘快需要信息,則可以使用wnck_screen_force_update()明確獲取 信息。

我不認爲這是你的問題(因爲你已經有一個窗口列表),但我只是雙重檢查,因爲它是一個令人討厭的陷阱。

+0

謝謝@ jku。所以我不能在一個空的工作區移動我的窗戶?我正在研究gnome經典的香水。 – sergioska

+0

沒有什麼能夠阻止你將窗口移動到空的工作區,但工作區必須存在。在正常的GNOME 3中,總是有一個空的工作空間(最後一個),但我不知道經典模式的作用。 – jku

+0

我在我的環境中有4個工作區(我用ctrl + alt +箭頭在它們之間跳轉)。也許我誤解了'工作區'的含義? – sergioska

相關問題