Reviewers: ,
Please review this at http://codereview.tryton.org/546003/
Affected files:
M tryton/gui/main.py
M tryton/gui/window/nomodal.py
M tryton/gui/window/preference.py
Index: tryton/gui/main.py
===================================================================
--- a/tryton/gui/main.py
+++ b/tryton/gui/main.py
@@ -833,8 +833,8 @@
def sig_user_preferences(self, widget):
if not self.close_pages():
return False
- win = Preference(rpc._USER)
- if win.run():
+
+ def callback():
rpc.context_reload()
try:
prefs = RPCExecute('model', 'res.user', 'get_preferences',
@@ -856,8 +856,8 @@
self.sig_win_menu()
CONFIG['client.lang'] = prefs['language']
CONFIG.save()
- self.sig_win_menu()
- return True
+ self.sig_win_menu()
+ Preference(rpc._USER, callback)
def sig_win_close(self, widget):
self._sig_remove_book(widget,
Index: tryton/gui/window/nomodal.py
===================================================================
--- a/tryton/gui/window/nomodal.py
+++ b/tryton/gui/window/nomodal.py
@@ -2,7 +2,6 @@
#this repository contains the full copyright notices and license terms.
import gtk
-from tryton.gui.main import Main
import tryton.common as common
@@ -19,6 +18,7 @@
focus = focus.get_parent()
def register(self):
+ from tryton.gui.main import Main
main = Main.get_main()
self.page = main.get_page()
if not self.page:
Index: tryton/gui/window/preference.py
===================================================================
--- a/tryton/gui/window/preference.py
+++ b/tryton/gui/window/preference.py
@@ -8,17 +8,19 @@
from tryton.config import TRYTON_ICON
import tryton.common as common
from tryton.common import RPCExecute, RPCException
+from tryton.gui.window.nomodal import NoModal
_ = gettext.gettext
-class Preference(object):
+class Preference(NoModal):
"Preference window"
- def __init__(self, user):
- self.parent = common.get_toplevel_window()
+ def __init__(self, user, callback):
+ NoModal.__init__(self)
+ self.callback = callback
self.win = gtk.Dialog(_('Preferences'), self.parent,
- gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT)
+ gtk.DIALOG_DESTROY_WITH_PARENT)
self.win.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
self.win.set_has_separator(False)
self.win.set_icon(TRYTON_ICON)
@@ -33,6 +35,7 @@
gtk.keysyms.Return, gtk.gdk.CONTROL_MASK,
gtk.ACCEL_VISIBLE)
self.win.set_default_response(gtk.RESPONSE_OK)
+ self.win.connect('response', self.response)
try:
view = RPCExecute('model', 'res.user',
@@ -68,33 +71,30 @@
width, height = self.parent.get_size()
self.win.set_default_size(int(width * 0.9), int(height * 0.9))
+ self.register()
self.win.show()
- def run(self):
- "Run the window"
- if not self.win:
- return False
- res = False
- while True:
- if self.win.run() == gtk.RESPONSE_OK:
- if self.screen.current_record.validate():
- vals =
copy.copy(self.screen.get(get_modifiedonly=True))
- if 'password' in vals:
- password = common.ask(_('Current Password:'),
- visibility=False)
- if not password:
- break
- else:
- password = False
- try:
- RPCExecute('model', 'res.user', 'set_preferences',
- vals, password)
- except RPCException:
- continue
- res = True
- break
- else:
- break
+ def response(self, win, response_id):
+ if response_id == gtk.RESPONSE_OK:
+ if self.screen.current_record.validate():
+ vals = copy.copy(self.screen.get(get_modifiedonly=True))
+ if 'password' in vals:
+ password = common.ask(_('Current Password:'),
+ visibility=False)
+ if not password:
+ return
+ else:
+ password = False
+ try:
+ RPCExecute('model', 'res.user', 'set_preferences',
+ vals, password)
+ except RPCException:
+ return
self.parent.present()
+ self.destroy()
+ self.callback()
+
+ def destroy(self):
+ self.screen.destroy()
self.win.destroy()
- return res
+ NoModal.destroy(self)
--
[email protected] mailing list