Mercurial > libervia-web
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