changeset 1304:1a61b18703c4 frontends_multi_profiles

quick frontend (quick widgets): class' __name__ method is used for classes_map hash because the use of class directly was causing bugs with pyjamas (difficult to find, several MicroblogPanel instances were added only once in Libervia's TabPanel, hash method seemed buggy)
author Goffi <goffi@goffi.org>
date Fri, 06 Feb 2015 19:05:51 +0100
parents d3ef3894254d
children 3dc7f61677bb
files frontends/src/quick_frontend/quick_widgets.py
diffstat 1 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/frontends/src/quick_frontend/quick_widgets.py	Fri Feb 06 19:03:13 2015 +0100
+++ b/frontends/src/quick_frontend/quick_widgets.py	Fri Feb 06 19:05:51 2015 +0100
@@ -40,7 +40,11 @@
     @param child_cls: inherited class to use when Quick... class is requested, must inherit from base_cls.
         Can be None if it's the base_cls itself which register
     """
-    classes_map[base_cls] = child_cls
+    # FIXME: we use base_cls.__name__ instead of base_cls directly because pyjamas because
+    #        in the second case
+    classes_map[base_cls.__name__] = child_cls
+
+
 class WidgetAlreadyExistsError(Exception):
     pass
 
@@ -66,7 +70,9 @@
         @return: class actually used to create widget
         """
         try:
-            cls = classes_map[class_]
+            # FIXME: we use base_cls.__name__ instead of base_cls directly because pyjamas bugs
+            #        in the second case
+            cls = classes_map[class_.__name__]
         except KeyError:
             cls = class_
         if cls is None:
@@ -81,7 +87,7 @@
         """
         class_ = self.getRealClass(class_)
         try:
-            widgets_map = self._widgets[class_]
+            widgets_map = self._widgets[class_.__name__]
         except KeyError:
             return iter([])
         else:
@@ -139,8 +145,9 @@
         except KeyError:
             hash_ = cls.getWidgetHash(target, _kwargs['profiles'])
 
-        # widget creation or retrieval
-        widgets_map = self._widgets.setdefault(cls, {}) # we sorts widgets by classes
+        ## widget creation or retrieval ##
+
+        widgets_map = self._widgets.setdefault(cls.__name__, {}) # we sorts widgets by classes
         if not cls.SINGLE:
             widget = None # if the class is not SINGLE, we always create a new widget
         else: