xpra icon
Bug tracker and wiki

Changeset 158 in xpra


Ignore:
Timestamp:
09/07/11 10:32:12 (22 months ago)
Author:
antoine
Message:

clear keys when client disconnects and ignore any packets that come after that so we don't end up re-setting some modifiers or keys. Unfortunately requires a new public flag on Protocol class.

Location:
trunk/src/xpra
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/xpra/protocol.py

    r156 r158  
    8383        self._source_has_more = False 
    8484        self._recv_counter = 0 
     85        self.closing = False 
    8586        self._closed = False 
    8687        self._read_decoder = IncrBDecode() 
  • trunk/src/xpra/server.py

    r154 r158  
    617617                    break 
    618618 
     619    def _clear_keys_pressed(self): 
     620        if len(self.keys_pressed)>0: 
     621            log.debug("clearing keys pressed: %s" % str(self.keys_pressed)) 
     622            for keycode in self.keys_pressed.keys(): 
     623                xtest_fake_key(gtk.gdk.display_get_default(), keycode, False) 
     624            self.keys_pressed = {} 
     625 
    619626    def _focus(self, id, modifiers): 
    620627        log.debug("_focus(%s,%s)" % (id, modifiers)) 
    621628        if self._has_focus != id: 
    622629            if id == 0: 
    623                 #clear any keys that were pressed: 
    624                 if len(self.keys_pressed)>0: 
    625                     log.debug("focus event: clearing keys pressed: %s" % str(self.keys_pressed)) 
    626                     for keycode in self.keys_pressed.keys(): 
    627                         xtest_fake_key(gtk.gdk.display_get_default(), keycode, False) 
    628                     self.keys_pressed = {} 
     630                self._clear_keys_pressed() 
    629631                # FIXME: kind of a hack: 
    630632                self._wm.get_property("toplevel").reset_x_focus() 
     
    790792        if self._protocol is not None: 
    791793            log.info("Disconnecting existing client") 
     794            #ensure that from now on we ignore any incoming packets coming 
     795            #from this connection as these could potentially set some keys pressed, etc 
     796            self._protocol.closing = True 
     797            self._clear_keys_pressed() 
    792798            # send message asking for disconnection politely: 
    793799            self._protocol.source.send_packet_now(["disconnect", "new valid connection received"]) 
     
    984990        if proto is self._protocol: 
    985991            log.info("xpra client disconnected.") 
     992            self._clear_keys_pressed() 
    986993            self._protocol = None 
    987994        sys.stdout.flush() 
     
    10141021    def process_packet(self, proto, packet): 
    10151022        packet_type = packet[0] 
     1023        if self._protocol and self._protocol.closing: 
     1024            log.debug("ignoring %s packet on socket which is closing" % packet_type) 
     1025            return 
    10161026        if (isinstance(packet_type, str) 
    10171027            and packet_type.startswith("clipboard-")): 
Note: See TracChangeset for help on using the changeset viewer.