diff libervia.py @ 193:f2ae8e170c49

browser side: selected widget caching in UniBox, to avoid to ask the getter at each key pressed, which make the box very slow.
author Goffi <goffi@goffi.org>
date Mon, 04 Mar 2013 00:01:23 +0100
parents cf5c83e7d515
children 6198be95a39c
line wrap: on
line diff
--- a/libervia.py	Sun Mar 03 23:30:25 2013 +0100
+++ b/libervia.py	Mon Mar 04 00:01:23 2013 +0100
@@ -121,6 +121,7 @@
     def onModuleLoad(self):
         print "============ onModuleLoad =============="
         self.whoami = None
+        self._selected_listeners = set()
         self.bridge = BridgeCall()
         self.bridge_signals = BridgeSignals(self)
         self.uni_box = None
@@ -129,6 +130,7 @@
         self.panel = panels.MainPanel(self)
         self.discuss_panel = self.panel.discuss_panel
         self.tab_panel = self.panel.tab_panel
+        self.tab_panel.addTabListener(self)
         self.libervia_widgets = set() #keep track of all actives LiberviaWidgets
         self.room_list = set() #set of rooms 
         self.mblog_cache = [] #used to keep our own blog entries in memory, to show them in new mblog panel
@@ -143,7 +145,9 @@
         self.resize()
         self._register = RegisterCall()
         self._register.call('isRegistered',self._isRegisteredCB)
-        self.selected = property(self.getSelected, self.setSelected)
+
+    def addSelectedListener(self, callback):
+        self._selected_listeners.add(callback)
 
     def getSelected(self):
         wid = self.tab_panel.getCurrentPanel()
@@ -160,21 +164,32 @@
 
         selected = widgets_panel.selected
 
+        if selected == widget:
+            return
+        
         if selected:
-            if selected == widget:
-                return
             selected.removeStyleName('selected_widget')
         
         widgets_panel.selected = widget
+        
         if widget:
             widgets_panel.selected.addStyleName('selected_widget')
 
-
+        for callback in self._selected_listeners:
+            callback(widget)
 
     def resize(self):
         """Resize elements"""
         Window.onResize()
 
+    def onBeforeTabSelected(self, sender, tab_index):
+        return True
+
+    def onTabSelected(self, sender, tab_index):
+        selected = self.getSelected()
+        for callback in self._selected_listeners:
+            callback(selected)
+
     def onEventPreview(self, event):
         if event.type in ["keydown", "keypress", "keyup"] and event.keyCode == KEY_ESCAPE:
             #needed to prevent request cancellation in Firefox