changeset 16db4360489e in tryton:default
details: https://hg.tryton.org/tryton?cmd=changeset;node=16db4360489e
description:
        Make get_preferences synchronous

        We must be sure that the preferences have been set before triggering 
other
        actions (like opening URL).

        issue8011
        review281141002
diffstat:

 tryton/common/common.py |   9 ++++-
 tryton/gui/main.py      |  71 ++++++++++++++++++++++--------------------------
 2 files changed, 40 insertions(+), 40 deletions(-)

diffs (101 lines):

diff -r 2d221d67b7a9 -r 16db4360489e tryton/common/common.py
--- a/tryton/common/common.py   Tue Apr 02 17:49:10 2019 +0200
+++ b/tryton/common/common.py   Tue Apr 02 17:53:05 2019 +0200
@@ -1076,8 +1076,13 @@
         if callback:
             callback()
     # Use RPCProgress to not send rpc.CONTEXT
-    RPCProgress('execute', ('model', 'res.user', 'get_preferences', True, {})
-        ).run(True, update)
+    context = RPCProgress(
+        'execute',
+        ('model', 'res.user', 'get_preferences', True, {})).run(
+            True, update if callback else None)
+    if not callback:
+        rpc.context_reset()
+        rpc.CONTEXT.update(context)
 
 
 class Tooltips(object):
diff -r 2d221d67b7a9 -r 16db4360489e tryton/gui/main.py
--- a/tryton/gui/main.py        Tue Apr 02 17:49:10 2019 +0200
+++ b/tryton/gui/main.py        Tue Apr 02 17:53:05 2019 +0200
@@ -506,45 +506,40 @@
         self.notebook.set_current_page(page - 1)
 
     def get_preferences(self):
-        def _set_preferences(prefs):
-            try:
-                prefs = prefs()
-            except RPCException:
-                prefs = {}
-            threads = []
-            for target in (
-                    common.IconFactory.load_icons,
-                    common.MODELACCESS.load_models,
-                    common.MODELHISTORY.load_history,
-                    common.VIEW_SEARCH.load_searches,
-                    ):
-                t = threading.Thread(target=target)
-                threads.append(t)
-                t.start()
-            for t in threads:
-                t.join()
-            if prefs and 'language_direction' in prefs:
-                translate.set_language_direction(prefs['language_direction'])
-                CONFIG['client.language_direction'] = \
-                    prefs['language_direction']
-            self.sig_win_menu(prefs=prefs)
-            for action_id in prefs.get('actions', []):
-                Action.execute(action_id, {})
-            self.set_title(prefs.get('status_bar', ''))
-            if prefs and 'language' in prefs:
-                translate.setlang(prefs['language'], prefs.get('locale'))
-                if CONFIG['client.lang'] != prefs['language']:
-                    self.favorite_unset()
-                CONFIG['client.lang'] = prefs['language']
-            # Set placeholder after language is set to get correct translation
-            self.global_search_entry.set_placeholder_text(_("Action"))
-            CONFIG.save()
+        RPCContextReload()
+        try:
+            prefs = RPCExecute('model', 'res.user', 'get_preferences', False)
+        except RPCException:
+            prefs = {}
 
-        def _get_preferences():
-            RPCExecute('model', 'res.user', 'get_preferences', False,
-                callback=_set_preferences)
-
-        RPCContextReload(_get_preferences)
+        threads = []
+        for target in (
+                common.IconFactory.load_icons,
+                common.MODELACCESS.load_models,
+                common.MODELHISTORY.load_history,
+                common.VIEW_SEARCH.load_searches,
+                ):
+            t = threading.Thread(target=target)
+            threads.append(t)
+            t.start()
+        for t in threads:
+            t.join()
+        if prefs and 'language_direction' in prefs:
+            translate.set_language_direction(prefs['language_direction'])
+            CONFIG['client.language_direction'] = \
+                prefs['language_direction']
+        self.sig_win_menu(prefs=prefs)
+        for action_id in prefs.get('actions', []):
+            Action.execute(action_id, {})
+        self.set_title(prefs.get('status_bar', ''))
+        if prefs and 'language' in prefs:
+            translate.setlang(prefs['language'], prefs.get('locale'))
+            if CONFIG['client.lang'] != prefs['language']:
+                self.favorite_unset()
+            CONFIG['client.lang'] = prefs['language']
+        # Set placeholder after language is set to get correct translation
+        self.global_search_entry.set_placeholder_text(_("Action"))
+        CONFIG.save()
 
     def preferences(self):
         from tryton.gui.window.preference import Preference

Reply via email to