LINUX.ORG.RU

Перенести окно на другой рабочий стол

 ,


0

1

Привет всем! Пишу на досуге свою панель задач на питоне с использованием Xlib и Qt. Возникла проблема с перемещением окна на другой десктоп:

from Xlib import *
dsp = display.Display()
window = dsp.create_resource_object('window', 0x03400052)
window.change_property(dsp.intern_atom("_NET_WM_DESKTOP"), Xatom.CARDINAL, 32, [0L])
Id окна я получаю из _NET_WM_CLIENT_LIST, но для простоты воспроизведения его можно взять из вывода wmctrl -d

В качестве WM - KWin.

Результат выполнения для меня непонятный: в выводе xprop -id 0x03400052 значение меняется, в пейджере КДЕшном окно перезжает на нужный десктоп, но вот само окно где было там и осталось.

★★

Последнее исправление: robert_foster (всего исправлений: 2)

AFAIK это надо делать через send_event у рутового окна.

    def _send_event(self, window, ctype, data, mask=None):                           
        data = (data + ([0] * (5 - len(data))))[:5]                                  
        ev = ClientMessage(window=window, client_type=ctype, data=(32, (data)))      
        self.root.send_event(ev, event_mask=X.SubstructureRedirectMask)

    def change_window_desktop(self, window, desktop):                                
        """Move window to ``desktop``"""                                             
        if desktop < 0:                                                              
            return                                                                   
                                                                                     
        self._send_event(window, self.get_atom("_NET_WM_DESKTOP"), [desktop])        
        self.dpy.flush()   
baverman ★★★
()
Ответ на: комментарий от baverman

Почти успех! На нулевой десктоп могу отправить, на остальные нет) Но это я уже сам доработаю, спасибо тебе большое.

Я правильно понял, что любые свойства окна нужно менять не напрямую, а отсылая сообщение рутовому окну?

robert_foster ★★
() автор топика
Последнее исправление: robert_foster (всего исправлений: 1)
Ответ на: комментарий от robert_foster

Я правильно понял, что любые свойства окна нужно менять не напрямую, а отсылая сообщение рутовому окну?

Да. WM слушает события на рутовом окне и управляет окнами согласно им.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.