Как активировать / сфокусировать окно гнома с помощью python - PullRequest
0 голосов
/ 27 марта 2020

Я хочу использовать python для программной фокусировки определенного windows. Я запускаю его с python 3 и под Ubuntu 18.04, версия gnome-shell 3.28. Вдохновленный этим ответом Я принял скрипт, чтобы он использовал новый модуль PyGObject.

Ниже приведен минимальный рабочий пример. Сценарий распечатывает все имена окон с соответствующими им идентификаторами окон X. Затем он пытается активировать / сфокусировать жестко закодированное окно (для простоты в этом MWE). Окно становится видимым для меня на переднем плане, однако оно не сфокусировано. Под этим я подразумеваю, что любая клавиша все еще нажимает go к окну терминала, из которого я вызвал скрипт. Как я могу заставить выбранное окно стать сфокусированным так, чтобы все клавиши были его входами?

PS: В документах говорится, что Wnck.activate(...) просит только оконный менеджер (WM) фокусировать окно, и что WMW может отказать в этом, если есть более свежая деятельность. Как я могу сделать мой активационный звонок самым последним действием или как заставить WM не игнорировать мою команду?

MWE:

#!/usr/bin/env python3
# minimal working example

import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck # Gdk, GdkX11,
import time

screen = Wnck.Screen.get_default()

while Gtk.events_pending():
    Gtk.main_iteration()

windows = screen.get_windows()
for w in windows:
    print('xid=%d and name=%r' %(w.get_xid(), w.get_name()))

# some choosen xid
xid = 65011719
for w in windows:
    if w.get_xid() == xid:
        cnt=0
        w.activate(int(time.time()+1))

...