У меня есть приложение wxPython только для Linux с wxFrame, которое действует как меню / панель инструментов, оно может открывать новые окна, которые не зависят от самой панели инструментов.
Поскольку пользователь может переместить любое из этих окон в любое виртуальное рабочее пространство, я ищу способ переместить панель инструментов в текущее рабочее пространство всякий раз, когда пользователь активирует окно.
Я пытался использовать Raise (), но таким образом панель инструментов тоже получает фокус, и я этого не хочу. Обратите внимание, что я не могу сделать панель инструментов липкой, поскольку не хочу, чтобы она работала в в каждом рабочем пространстве.
Спасибо!
(wxPython 2.8.9.1, Ubuntu 9.04)
Последующий:
Я проверил исходный код xfwm4 , чтобы увидеть, как работает его «Переместить окно в рабочую область N». Он использует подсказку _NET_WM_DESKTOP , поэтому я пытаюсь сделать это с использованием Python .. Вот мой код прямо сейчас:
import gtk
def move_to_workspace(frame, ws):
gdkwin = gtk.gdk.window_lookup(frame.GetHandle())
win = gdkwin.get_user_data()
while not isinstance(win, gtk.Window): # Find parent Window object
win = win.get_parent()
win.window.property_change(gtk.gdk.atom_intern("_NET_WM_DESKTOP"),
gtk.gdk.atom_intern("CARDINAL"), 32,
gtk.gdk.PROP_MODE_REPLACE,
[ws])
Похоже, код несколько успешен, поскольку xprop обнаруживает изменение:
(before execution)
$ xprop | grep WM_DESKTOP
_NET_WM_DESKTOP(CARDINAL) = 0
(after)
$xprop | grep WM_DESKTOP
_NET_WM_DESKTOP(CARDINAL) = 1
но проблема в том, что окно не перемещается в нужное рабочее пространство: /
Должен ли я использовать python-xlib вместо pygtk? Если это так, как я могу получить из wxFrame (или gtk.Window, или XID) соответствующий Xlib.Window?
Продолжение 2:
То же самое происходит с использованием xprop ..
$ xprop -id <id> -f _NET_WM_DESKTOP 32c -set _NET_WM_DESKTOP 1
Он обнаруживает измененную _NET_WM_DESKTOP, но окно остается там: / Однако я заметил следующее:
- в предназначенном рабочем пространстве появляется иконизированная версия окна
- если я обозначу окно в рабочем пространстве «источник», оно исчезнет
Итак, может быть, мне следует отправить какое-то сообщение "обновить" оконному менеджеру тоже??