Python / X11: узнайте, переключает ли пользователь виртуальные рабочие столы - PullRequest
0 голосов
/ 15 апреля 2010

Я ищу способ определить, переключает ли пользователь виртуальные рабочие столы под X11.

Я использую Python с библиотеками X11 и PyGTK. Я нашел несколько рабочих примеров в C, но мне не хватает опыта, чтобы перевести их на Python, и я прочитал исходный код нескольких приложений пейджера X11 (fbpanel, pypanel), но не могу найти то, что ищу .

Нужно ли регистрироваться для получения сигнала? Используете X11 или GTK? Должен ли я заняться-ждать?

Я совершенно новичок как в X11, так и в GTK, поэтому любые советы / помощь будут с благодарностью.

Поздравил, Philip

PS: Мои текущие усилия можно найти здесь .

Ответы [ 3 ]

1 голос
/ 08 мая 2010

Вот решение на основе 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 содержит события, которые обычно связаны с переключателями рабочей области. Тем не менее, это решение кажется немного неловким. Есть идеи?

Поздравил, Philip

0 голосов
/ 15 марта 2014

Как правило, изменение рабочего стола объявляется клиентам изменением свойства в корневом окне, так что слушайте PROPERTY_CHANGE_MASK вместо SUBSTRUCTURE_MASK; это даст вам намного меньше шума.

Что касается , свойство которого изменяется, я подозреваю, что среди разные менеджеры окон / рабочие столы / что угодно; Я использую Ubuntu / Unity и когда я делаю «xprop -root» до и после переключения на рабочем столе, и сравниваю результаты, Я обнаружил, что изменилось свойство _NET_DESKTOP_VIEWPORT.

Кроме того, основной шум, который я получаю, заключается в том, что Свойство _NET_ACTIVE_WINDOW изменяется каждый раз, когда изменяется активное окно.

0 голосов
/ 15 апреля 2010

Возможно, вы захотите взглянуть на libwnck или, возможно, на его привязки Python.

...