Я хочу использовать 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))