2014-02-20 4 views
2

Я пытаюсь разработать приложение python, которое позволяет перемещать окна между рабочей областью gnome. Я использую wnck для взаимодействия с окнами, но я хотел бы знать, как я могу перемещать окно из рабочей области в другую. Кто-нибудь может предложить мне способ?Как перенести окно gtk из рабочей области в другую с помощью wnck в python?

Я попытался с помощью следующего кода

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) возвращение 'None', в то время как он работает (но не перемещает окно!), Если я использую screen.get_workspace (0) как параметр move_to_workspace.

Могу ли я решить свою проблему?

Благодарим вас заблаговременно.

ответ

2

Ваш менеджер окон просто не имеет рабочего пространства 2, когда вы вызываете screen.get_workspace(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 classic. – sergioska

+0

Нет ничего, что помешало бы вам перемещать окна в пустое рабочее пространство, но рабочее пространство должно существовать. В обычном GNOME 3 всегда есть одно пустое рабочее пространство (последнее), но я не знаю, что делает классический режим. – jku

+0

У меня есть 4 рабочего пространства в моей среде (я прыгаю между ними с помощью Ctrl + Alt + стрелки). может быть, я не понимаю смысл «рабочего пространства»? – sergioska