diff --git a/src/xpra/client.py b/src/xpra/client.py
index 7339c87..14c0ea6 100644
a
|
b
|
class ClientWindow(gtk.Window): |
73 | 73 | self._failed_pixbuf_index = 0 |
74 | 74 | self._refresh_timer = None |
75 | 75 | self._refresh_requested = 0 |
| 76 | self._heldKeys = {} |
76 | 77 | |
77 | 78 | self.update_metadata(metadata) |
78 | 79 | |
… |
… |
class ClientWindow(gtk.Window): |
279 | 280 | """ for versions newer than 0.0.7.24, we send ALL the raw information we have """ |
280 | 281 | keycode = event.hardware_keycode |
281 | 282 | log.debug("key_action(%s,%s) modifiers=%s, name=%s, state=%s, keyval=%s, string=%s, keycode=%s" % (event, depressed, modifiers, name, event.state, event.keyval, event.string, keycode)) |
282 | | self._client.send(["key-action", self._id, nn(name), depressed, modifiers, nn(event.keyval), nn(event.string), nn(keycode)]) |
| 283 | keyEvent = ["key-action", self._id, nn(name), depressed, modifiers, nn(event.keyval), nn(event.string), nn(keycode)] |
| 284 | self._client.send(keyEvent) |
| 285 | if depressed: |
| 286 | assert(keyEvent[3]) |
| 287 | self._heldKeys[nn(keycode)] = keyEvent[:] |
| 288 | else: |
| 289 | if nn(keycode) in self._heldKeys: |
| 290 | del self._heldKeys[nn(keycode)] |
283 | 291 | else: |
284 | 292 | """ versions before 0.0.7.24 only accept 4 parameters (no keyval, keycode, ...) """ |
285 | 293 | if name is not None: |
286 | 294 | self._client.send(["key-action", self._id, nn(name), depressed, modifiers]) |
287 | 295 | |
| 296 | def release_keys(self): |
| 297 | for keyEvent in self._heldKeys.values(): |
| 298 | assert(keyEvent[3]) |
| 299 | keyEvent[3] = False |
| 300 | self._client.send(keyEvent) |
| 301 | self._heldKeys = {} |
| 302 | |
288 | 303 | def do_key_press_event(self, event): |
289 | 304 | self._key_action(event, True) |
290 | 305 | |
… |
… |
class XpraClient(gobject.GObject): |
435 | 450 | if gotit and self._focused is not id: |
436 | 451 | self.send(["focus", id]) |
437 | 452 | self._focused = id |
| 453 | assert id > 0 |
| 454 | self._id_to_window[id].release_keys() |
438 | 455 | if not gotit and self._focused is id: |
439 | 456 | self.send(["focus", 0]) |
440 | 457 | self._focused = None |