Got it working.
This commit is contained in:
commit
11e2f004df
1 changed files with 59 additions and 0 deletions
59
nwnfaf.py
Normal file
59
nwnfaf.py
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
from Xlib import X, display, Xatom
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
import Xlib.error
|
||||||
|
|
||||||
|
# Establish a connection to the X server
|
||||||
|
disp = display.Display()
|
||||||
|
root = disp.screen().root
|
||||||
|
|
||||||
|
# Set the mask to receive events
|
||||||
|
root.change_attributes(event_mask=X.SubstructureNotifyMask | X.StructureNotifyMask)
|
||||||
|
|
||||||
|
# Retrieve the Atom for _NET_WM_WINDOW_TYPE
|
||||||
|
NET_WM_WINDOW_TYPE = disp.intern_atom('_NET_WM_WINDOW_TYPE')
|
||||||
|
NET_WM_WINDOW_TYPE_NORMAL = disp.intern_atom('_NET_WM_WINDOW_TYPE_NORMAL')
|
||||||
|
|
||||||
|
|
||||||
|
def is_main_window(window):
|
||||||
|
try:
|
||||||
|
# Query the _NET_WM_WINDOW_TYPE attribute
|
||||||
|
window_type = window.get_full_property(NET_WM_WINDOW_TYPE, Xatom.ATOM)
|
||||||
|
if window_type and NET_WM_WINDOW_TYPE_NORMAL in window_type.value:
|
||||||
|
return True
|
||||||
|
|
||||||
|
except Xlib.error.XError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def focus_window(window):
|
||||||
|
try:
|
||||||
|
# Use xdotool to focus the window
|
||||||
|
subprocess.run(['xdotool', 'windowactivate', str(window.id)], check=True)
|
||||||
|
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
print(f"Error focusing window {window.id}: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
while True:
|
||||||
|
event = root.display.next_event()
|
||||||
|
|
||||||
|
if event.type == X.CreateNotify:
|
||||||
|
window = event.window
|
||||||
|
# Wait a short time to ensure the window is initialized
|
||||||
|
time.sleep(0.05)
|
||||||
|
|
||||||
|
if is_main_window(window):
|
||||||
|
focus_window(window)
|
||||||
|
|
||||||
|
elif event.type == X.MapNotify:
|
||||||
|
window = event.window
|
||||||
|
# Wait a short time to ensure the window is initialized
|
||||||
|
time.sleep(0.05)
|
||||||
|
|
||||||
|
if is_main_window(window):
|
||||||
|
focus_window(window)
|
Loading…
Reference in a new issue