From 13dd7a77382c9f8b2d1ff017369e0f3e4ed7e69a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 2 Apr 2019 17:53:05 +0200 Subject: [PATCH] Make get_preferences synchronous We must be sure that the preferences have been set before triggering other actions (like opening URL). issue8011 review281141002 --- tryton/common/common.py | 9 ++++-- tryton/gui/main.py | 71 +++++++++++++++++++---------------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/tryton/common/common.py b/tryton/common/common.py index 1c932004b0..1e1f73f5a7 100644 --- a/tryton/common/common.py +++ b/tryton/common/common.py @@ -1076,8 +1076,13 @@ def RPCContextReload(callback=None): 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 --git a/tryton/gui/main.py b/tryton/gui/main.py index 43d987ef66..2b7ab305c0 100644 --- a/tryton/gui/main.py +++ b/tryton/gui/main.py @@ -506,45 +506,40 @@ class Main(Gtk.Application): 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