35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
"""Private X11 window that reports physical OCR click events."""
|
|
import json
|
|
import sys
|
|
|
|
from Xlib import X, Xatom, display
|
|
|
|
|
|
connection = display.Display()
|
|
screen = connection.screen()
|
|
root = screen.root
|
|
window = root.create_window(20, 20, 240, 140, 0, screen.root_depth,
|
|
X.InputOutput, X.CopyFromParent,
|
|
event_mask=X.ButtonPressMask | X.ButtonReleaseMask)
|
|
window.map()
|
|
root.change_property(connection.intern_atom("_NET_ACTIVE_WINDOW"), Xatom.WINDOW, 32, [window.id])
|
|
window.set_input_focus(X.RevertToParent, X.CurrentTime)
|
|
connection.sync()
|
|
initial_pointer = root.query_pointer()
|
|
print(json.dumps({"window": window.id, "width": screen.width_in_pixels,
|
|
"height": screen.height_in_pixels,
|
|
"pointer": [initial_pointer.root_x, initial_pointer.root_y]}), flush=True)
|
|
for line in sys.stdin:
|
|
if line.strip() != "events":
|
|
break
|
|
connection.sync()
|
|
events = []
|
|
while connection.pending_events():
|
|
event = connection.next_event()
|
|
if event.type in (X.ButtonPress, X.ButtonRelease):
|
|
events.append({"pressed": event.type == X.ButtonPress,
|
|
"button": event.detail, "x": event.root_x, "y": event.root_y})
|
|
pointer = root.query_pointer()
|
|
print(json.dumps({"events": events, "pointer": [pointer.root_x, pointer.root_y]}), flush=True)
|
|
connection.close()
|