Focus correct sddm-greeter window ID if we have more than one
Also add inflect for cleaner English texts. Fixes #3.
This commit is contained in:
parent
fabb975dd9
commit
91c033869c
48
main.py
48
main.py
@ -6,12 +6,14 @@ import sys
|
|||||||
import time
|
import time
|
||||||
import cec
|
import cec
|
||||||
import logging
|
import logging
|
||||||
|
import inflect
|
||||||
from rich import traceback
|
from rich import traceback
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
from rich.logging import RichHandler
|
from rich.logging import RichHandler
|
||||||
from inotify_simple import INotify, flags
|
from inotify_simple import INotify, flags
|
||||||
traceback.install()
|
traceback.install()
|
||||||
console = Console()
|
console = Console()
|
||||||
|
p = inflect.engine()
|
||||||
|
|
||||||
|
|
||||||
FORMAT = "%(message)s"
|
FORMAT = "%(message)s"
|
||||||
@ -71,15 +73,26 @@ def x_focus_window(window_id: str) -> bool:
|
|||||||
|
|
||||||
|
|
||||||
def sddm_greeter_window_ids() -> list:
|
def sddm_greeter_window_ids() -> list:
|
||||||
log.debug(f"Checking if an 'sddm-greeter' window exists ...")
|
sddm_check_attempt = 1
|
||||||
|
sddm_check_attempts_max = 2
|
||||||
|
sddm_check_sleep = 2
|
||||||
|
while sddm_check_attempt <= sddm_check_attempts_max:
|
||||||
|
log.debug(f"Checking if 'sddm-greeter' window exists "
|
||||||
|
f"({sddm_check_attempt} of {sddm_check_attempts_max}) ...")
|
||||||
try:
|
try:
|
||||||
dm_windows = subprocess.run(
|
dm_windows = subprocess.run(
|
||||||
["xdotool", "search", "--onlyvisible", "--classname", "sddm-greeter"],
|
["xdotool", "search", "--onlyvisible", "--classname", "sddm-greeter"],
|
||||||
check=True,
|
check=True,
|
||||||
stdout=subprocess.PIPE,
|
capture_output=True,
|
||||||
encoding="utf-8")
|
encoding="utf-8")
|
||||||
return dm_windows.stdout.splitlines()
|
return dm_windows.stdout.splitlines()
|
||||||
except subprocess.CalledProcessError as xdotool_error:
|
except subprocess.CalledProcessError as xdotool_error:
|
||||||
|
if sddm_check_attempt < sddm_check_attempts_max:
|
||||||
|
log.debug(f"No 'sddm-greeter' window, checking again in "
|
||||||
|
f"""{sddm_check_sleep} {p.plural("second", sddm_check_sleep)} ...""")
|
||||||
|
sddm_check_attempt += 1
|
||||||
|
time.sleep(sddm_check_sleep)
|
||||||
|
else:
|
||||||
log.debug(f"No 'sddm-greeter' window exists, doing nothing")
|
log.debug(f"No 'sddm-greeter' window exists, doing nothing")
|
||||||
log.debug(xdotool_error)
|
log.debug(xdotool_error)
|
||||||
return []
|
return []
|
||||||
@ -90,12 +103,19 @@ def sddm_change_focus_if_two_windows() -> bool:
|
|||||||
if not dm_windows:
|
if not dm_windows:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
log.debug(f"Checking if 'sddm-greeter' window has focus ...")
|
sddm_focus_attempt = 1
|
||||||
|
sddm_focus_attempt_max = 2
|
||||||
|
sddm_focus_sleep = 2
|
||||||
|
sddm_window_count_attempt = 1
|
||||||
|
sddm_window_count_attempt_max = 2
|
||||||
|
while sddm_focus_attempt <= sddm_focus_attempt_max:
|
||||||
|
log.debug(f"Checking if 'sddm-greeter' window has focus "
|
||||||
|
f"({sddm_focus_attempt} of {sddm_focus_attempt_max}) ...")
|
||||||
try:
|
try:
|
||||||
x_window_focus = subprocess.run(
|
x_window_focus = subprocess.run(
|
||||||
["xdotool", "getwindowfocus"],
|
["xdotool", "getwindowfocus"],
|
||||||
check=True,
|
check=True,
|
||||||
stdout=subprocess.PIPE,
|
capture_output=True,
|
||||||
encoding="utf-8")
|
encoding="utf-8")
|
||||||
x_window_id_has_focus = x_window_focus.stdout.splitlines()[0]
|
x_window_id_has_focus = x_window_focus.stdout.splitlines()[0]
|
||||||
if x_window_id_has_focus in dm_windows:
|
if x_window_id_has_focus in dm_windows:
|
||||||
@ -107,12 +127,24 @@ def sddm_change_focus_if_two_windows() -> bool:
|
|||||||
f"focus ({x_window_id_has_focus})")
|
f"focus ({x_window_id_has_focus})")
|
||||||
dm_windows.remove(x_window_id_has_focus)
|
dm_windows.remove(x_window_id_has_focus)
|
||||||
x_focus_window(dm_windows[0])
|
x_focus_window(dm_windows[0])
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
log.warning(f"Number of 'sddm-greeter' windows ({len(dm_windows)}) is unexpected, not doing "
|
log.warning(f"Number of 'sddm-greeter' windows ({len(dm_windows)}) unexpected, "
|
||||||
f"anything")
|
f"not doing anything")
|
||||||
|
return False
|
||||||
else:
|
else:
|
||||||
|
log.debug(f"No other 'sddm-greeter' windows exist, checking again ...")
|
||||||
|
sddm_window_count_attempt += 1
|
||||||
|
if sddm_window_count_attempt == sddm_window_count_attempt_max:
|
||||||
log.debug(f"No other 'sddm-greeter' windows exist, no need to focus anything")
|
log.debug(f"No other 'sddm-greeter' windows exist, no need to focus anything")
|
||||||
|
return False
|
||||||
except subprocess.CalledProcessError as xdotool_error:
|
except subprocess.CalledProcessError as xdotool_error:
|
||||||
|
if sddm_focus_attempt < sddm_focus_attempt_max:
|
||||||
|
log.debug(f"Unable to get ID of focused window, checking again in "
|
||||||
|
f"""{sddm_focus_sleep} {p.plural("second", sddm_focus_sleep)} ...""")
|
||||||
|
sddm_focus_attempt += 1
|
||||||
|
time.sleep(sddm_focus_sleep)
|
||||||
|
else:
|
||||||
log.warning(f"Unable to get ID of focused window")
|
log.warning(f"Unable to get ID of focused window")
|
||||||
log.warning(xdotool_error)
|
log.warning(xdotool_error)
|
||||||
return False
|
return False
|
||||||
@ -166,6 +198,7 @@ def signal_handler(rx_signal: int, frame) -> None:
|
|||||||
def set_xauth_env(file_abs_path: str) -> None:
|
def set_xauth_env(file_abs_path: str) -> None:
|
||||||
os.environ["XAUTHORITY"] = file_abs_path
|
os.environ["XAUTHORITY"] = file_abs_path
|
||||||
log.debug(f"""Env variable 'XAUTHORITY' set to '{os.environ["XAUTHORITY"]}'""")
|
log.debug(f"""Env variable 'XAUTHORITY' set to '{os.environ["XAUTHORITY"]}'""")
|
||||||
|
sddm_change_focus_if_two_windows()
|
||||||
|
|
||||||
|
|
||||||
signal.signal(signal.SIGINT, signal_handler)
|
signal.signal(signal.SIGINT, signal_handler)
|
||||||
@ -190,9 +223,9 @@ xdo_map = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
set_xauth_env(xauth_abs_path)
|
|
||||||
os.environ["DISPLAY"] = ":0"
|
os.environ["DISPLAY"] = ":0"
|
||||||
log.debug(f"""Env variable 'DISPLAY' set to '{os.environ["DISPLAY"]}'""")
|
log.debug(f"""Env variable 'DISPLAY' set to '{os.environ["DISPLAY"]}'""")
|
||||||
|
set_xauth_env(xauth_abs_path)
|
||||||
|
|
||||||
|
|
||||||
log.debug(f"Activating event handlers ...")
|
log.debug(f"Activating event handlers ...")
|
||||||
@ -200,7 +233,6 @@ cec.add_callback(keypress_handler, cec.EVENT_KEYPRESS)
|
|||||||
cec.add_callback(log_handler, cec.EVENT_LOG)
|
cec.add_callback(log_handler, cec.EVENT_LOG)
|
||||||
log.debug(f"Event handlers active")
|
log.debug(f"Event handlers active")
|
||||||
log.info(f"Open for business on adapter '{use_adapter}'!")
|
log.info(f"Open for business on adapter '{use_adapter}'!")
|
||||||
sddm_change_focus_if_two_windows()
|
|
||||||
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
cec
|
cec
|
||||||
inotify_simple
|
inotify_simple
|
||||||
rich
|
rich
|
||||||
|
inflect
|
@ -10,6 +10,10 @@ colorama==0.4.4
|
|||||||
# via rich
|
# via rich
|
||||||
commonmark==0.9.1
|
commonmark==0.9.1
|
||||||
# via rich
|
# via rich
|
||||||
|
inflect==5.4.0
|
||||||
|
# via -r requirements.in
|
||||||
|
inotify-simple==1.3.5
|
||||||
|
# via -r requirements.in
|
||||||
pygments==2.11.2
|
pygments==2.11.2
|
||||||
# via rich
|
# via rich
|
||||||
rich==11.2.0
|
rich==11.2.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user