37 lines
2.2 KiB
Python
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()
|