[solved] pygtk key-press event embedded window

Fórumok

python gtk-ban írok egy programot, ami gtk.Socket-tel embed-el egy másik programot (nevezetten a dwb webböngésző) és vannak rajta gtk.ToolItem-ek.
A ToolItem-ekre kattintva üzenetet küld a dwb-nek "dwb -x valami"
paranccsal, pl. egy körbenyíl gomb "dwb -x reload"-ot küld, ez újratölti az aktuális lapot.
néhány funkcióhoz viszont nem elég a ezt a x kapcsolós felületet használni, van hogy egy-két billentyűleütést kéne küldeni a dwb-nek, pl. Escape vagy "Y" (válasz
egy Y/N kérdésre).
nem tudom, hogyan-hova küldjek gtk.gdk.KEY_PRESS tipusú gtk.gdk.Event-et.
nem láttam eredményét, ha a Socket objektumnak küldtem, se ha a fő gtk.Window-nak küldtem, se ha XID alapján
a fő ablakom bármely xwininfo -tree által mutatott alablakjának küldtem az eventet. XID alapján a "xdotool key --window" paranccsal próbáltam küldeni eventet.

a kérdéses kód jelenleg:


        sock = gtk.Socket()
        ...
        evnt = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
        evnt.state = 0
        evnt.keyval = gtk.keysyms.Escape
        evnt.time = 0
        evnt.send_event = True
        sock.add_events(gtk.gdk.KEY_PRESS)
        sock.emit("key-press-event", evnt)

Hozzászólások

nyomon vagyok. valamiért az Event keyval property-jét nem veszi figyelembe és a string-et sem (evnt.string üresnek látszik amikor dump-olom a Socket által elkapott eventeket, pedig az emit()-nek átadott Event-ben beállítottam), hanem csakis a hardware_keycode-ra reagál.
Köv. kérdés, hogy tudok karakterkódból hardware_keycode-ot visszakapni?


evnt = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
evnt.state = 0
evnt.hardware_keycode = 9
evnt.time = 0
sock.emit("key-press-event", evnt)

~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack

egy ilyen sikeredett:


key = gtk.keysyms.Escape
...
def_km = gtk.gdk.keymap_get_default()
keycodes = def_km.get_entries_for_keyval(key)
if keycodes != None and len(keycodes) >= 1:
  keycode = keycodes[0]
  evnt = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
  evnt.state = keycode[2]
  evnt.hardware_keycode = keycode[0]
  evnt.time = 0
  sock.emit("key-press-event", evnt)

~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack