Files
gnome-jarvis/test/fixtures/cu-probe.py
T
snxraven 599bfe440d
Rolling release / release (push) Failing after 1m46s
Computer Use Updates
2026-09-13 19:30:17 -04:00

37 lines
2.2 KiB
Python

import gi,json,os,time
gi.require_version('Gtk','3.0')
from gi.repository import Gtk,Gdk,GLib
out=os.environ.get('JARVIS_CU_PROBE_OUTPUT', '/tmp/jarvis-cu-probe-events.json')
state={'clicks':0,'keys':[],'text':'','pointer':[],'scroll':[]}
def record():
with open(out,'w') as f: json.dump(state,f)
win=Gtk.Window(title=os.environ.get('JARVIS_CU_PROBE_TITLE', 'Jarvis computer-use verification'))
win.set_default_size(680,560)
box=Gtk.Box(orientation=Gtk.Orientation.VERTICAL,spacing=12)
box.set_border_width(20);win.add(box)
box.pack_start(Gtk.Label(label='Jarvis verification — disposable test window'),False,False,0)
entry=Gtk.Entry();entry.get_accessible().set_name('Verification text');box.pack_start(entry,False,False,0)
entry.connect('changed',lambda e:(state.update(text=e.get_text()),record()))
button=Gtk.Button(label='Verify click');box.pack_start(button,False,False,0)
button.connect('clicked',lambda *_:(state.update(clicks=state['clicks']+1),record()))
save=Gtk.Button(label='Save verification text');box.pack_start(save,False,False,0)
def save_text(*_):
with open(out+'.txt','w') as f: f.write(entry.get_text())
state['saved']=True;record()
save.connect('clicked',save_text)
area=Gtk.DrawingArea();area.set_size_request(620,220)
area.get_accessible().set_name('Verification pointer area')
area.add_events(Gdk.EventMask.BUTTON_PRESS_MASK|Gdk.EventMask.BUTTON_RELEASE_MASK|Gdk.EventMask.POINTER_MOTION_MASK|Gdk.EventMask.SCROLL_MASK|Gdk.EventMask.SMOOTH_SCROLL_MASK)
def point(w,e):
state['pointer'].append({'type':str(e.type),'x':round(e.x),'y':round(e.y),'button':getattr(e,'button',0)});state['pointer']=state['pointer'][-60:];record();return True
for sig in ['button-press-event','button-release-event','motion-notify-event']:area.connect(sig,point)
def scroll(w,e):
state['scroll'].append(str(e.direction));record();return True
area.connect('scroll-event',scroll);box.pack_start(area,True,True,0)
def key(w,e):state['keys'].append(Gdk.keyval_name(e.keyval));state['keys']=state['keys'][-100:];record();return False
win.connect('key-press-event',key)
win.connect('destroy',Gtk.main_quit)
win.show_all();entry.grab_focus();record()
GLib.timeout_add_seconds(1200,lambda:(Gtk.main_quit(),False)[1])
Gtk.main()