Explicitly set the previous view to switch to when opening a new Form
Closes #14975
This commit is contained in:
@@ -2928,6 +2928,7 @@ function eval_pyson(value){
|
||||
screen.current_record = screen.group.get(m2o_id);
|
||||
new Sao.Window.Form(screen, callback, {
|
||||
save_current: true,
|
||||
prev_view: null,
|
||||
});
|
||||
});
|
||||
return;
|
||||
@@ -2998,6 +2999,7 @@ function eval_pyson(value){
|
||||
new_: true,
|
||||
save_current: true,
|
||||
defaults: defaults,
|
||||
prev_view: null,
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
+6
-1
@@ -162,7 +162,12 @@
|
||||
return label;
|
||||
});
|
||||
|
||||
this.prev_view = screen.current_view;
|
||||
// prev_view should stay null
|
||||
if (kwargs.prev_view !== undefined) {
|
||||
this.prev_view = kwargs.prev_view;
|
||||
} else {
|
||||
this.prev_view = screen.current_view;
|
||||
}
|
||||
this.screen.screen_container.alternate_view = true;
|
||||
this.info_bar = new Sao.Window.InfoBar();
|
||||
var view_type = kwargs.view_type || 'form';
|
||||
|
||||
@@ -28,8 +28,9 @@ class Attachment(WinForm):
|
||||
],
|
||||
mode=['tree', 'form'],
|
||||
readonly=not access['write'])
|
||||
super().__init__(screen, self.callback,
|
||||
view_type='tree', title=title)
|
||||
super().__init__(
|
||||
screen, self.callback, view_type='tree', title=title,
|
||||
prev_view=screen.current_view)
|
||||
screen.search_filter()
|
||||
|
||||
def destroy(self):
|
||||
|
||||
@@ -110,7 +110,9 @@ class Log(WinForm):
|
||||
screen = Screen('ir.model.log', domain=[
|
||||
('resource', '=', self.resource),
|
||||
], mode=['tree', 'form'])
|
||||
super().__init__(screen, view_type='tree', title=title)
|
||||
super().__init__(
|
||||
screen, view_type='tree', title=title,
|
||||
prev_view=screen.current_view)
|
||||
screen.search_filter()
|
||||
|
||||
self.win.vbox.pack_start(grid, expand=False, fill=True, padding=0)
|
||||
|
||||
@@ -18,8 +18,9 @@ class Note(WinForm):
|
||||
screen = Screen('ir.note', domain=[
|
||||
('resource', '=', self.resource),
|
||||
], mode=['tree', 'form'])
|
||||
super().__init__(screen, self.callback, view_type='tree',
|
||||
title=title)
|
||||
super().__init__(
|
||||
screen, self.callback, view_type='tree', title=title,
|
||||
prev_view=screen.current_view)
|
||||
screen.search_filter()
|
||||
|
||||
def destroy(self):
|
||||
|
||||
@@ -120,7 +120,9 @@ class Action:
|
||||
self.screen.current_record.save()
|
||||
else:
|
||||
self.screen.current_record.cancel()
|
||||
WinForm(self.screen, callback, title=self.title.get_text())
|
||||
WinForm(
|
||||
self.screen, callback, title=self.title.get_text(),
|
||||
prev_view=self.screen.current_view)
|
||||
|
||||
def display(self):
|
||||
self.screen.search_filter(self.screen.screen_container.get_text())
|
||||
|
||||
@@ -284,7 +284,8 @@ class Many2Many(Widget):
|
||||
# Force a display to clear the CellCache
|
||||
self.screen.display()
|
||||
self._popup = False
|
||||
WinForm(screen, callback, save_current=True)
|
||||
WinForm(
|
||||
screen, callback, save_current=True, prev_view=screen.current_view)
|
||||
|
||||
def _sig_new(self, defaults=None):
|
||||
if self._popup:
|
||||
@@ -304,7 +305,8 @@ class Many2Many(Widget):
|
||||
self._popup = False
|
||||
|
||||
WinForm(
|
||||
screen, callback, new=True, save_current=True, defaults=defaults)
|
||||
screen, callback, new=True, save_current=True, defaults=defaults,
|
||||
prev_view=screen.current_view)
|
||||
|
||||
def _readonly_set(self, value):
|
||||
super()._readonly_set(value)
|
||||
|
||||
@@ -186,7 +186,8 @@ class Many2One(Widget):
|
||||
screen.current_record.rec_name()))
|
||||
self._popup = False
|
||||
WinForm(
|
||||
screen, callback, new=True, save_current=True, defaults=defaults)
|
||||
screen, callback, new=True, save_current=True, defaults=defaults,
|
||||
prev_view=None)
|
||||
|
||||
def sig_edit(self, entry=None, icon_pos=None, *args):
|
||||
if entry:
|
||||
@@ -225,7 +226,7 @@ class Many2One(Widget):
|
||||
force_change=True)
|
||||
self._popup = False
|
||||
self.changed = True
|
||||
WinForm(screen, callback, save_current=True)
|
||||
WinForm(screen, callback, save_current=True, prev_view=None)
|
||||
return
|
||||
if not self._readonly:
|
||||
domain = self.field.domain_get(self.record)
|
||||
|
||||
@@ -398,7 +398,8 @@ class One2Many(Widget):
|
||||
field_size -= len(self.field.get_eval(self.record)) + 1
|
||||
WinForm(
|
||||
self.screen, lambda a: update_sequence(), new=True,
|
||||
defaults=defaults, many=field_size)
|
||||
defaults=defaults, many=field_size,
|
||||
prev_view=self.screen.current_view)
|
||||
|
||||
def _new_product(self, defaults=None):
|
||||
fields = self.attrs['product'].split(',')
|
||||
@@ -472,7 +473,7 @@ class One2Many(Widget):
|
||||
|
||||
def callback(result):
|
||||
self._popup = False
|
||||
WinForm(self.screen, callback)
|
||||
WinForm(self.screen, callback, prev_view=self.screen.current_view)
|
||||
|
||||
def _sig_next(self, widget):
|
||||
if not self._validate():
|
||||
|
||||
@@ -974,13 +974,15 @@ class M2O(GenericText):
|
||||
if target_id and target_id >= 0:
|
||||
screen.load([target_id])
|
||||
screen.current_record = screen.group.get(target_id)
|
||||
WinForm(screen, open_callback, save_current=True)
|
||||
WinForm(
|
||||
screen, open_callback, save_current=True,
|
||||
prev_view=screen.current_view)
|
||||
else:
|
||||
defaults = defaults.copy() if defaults is not None else {}
|
||||
defaults['rec_name'] = text
|
||||
WinForm(
|
||||
screen, open_callback, new=True, save_current=True,
|
||||
defaults=defaults)
|
||||
defaults=defaults, prev_view=screen.current_view)
|
||||
|
||||
def search_remote(self, record, field, text, callback=None):
|
||||
model = self.get_model(record, field)
|
||||
@@ -1127,7 +1129,9 @@ class O2M(GenericText):
|
||||
def open_callback(result):
|
||||
if callback:
|
||||
callback()
|
||||
WinForm(screen, open_callback, view_type='tree', context=context)
|
||||
WinForm(
|
||||
screen, open_callback, view_type='tree', context=context,
|
||||
prev_view=screen.current_view)
|
||||
|
||||
|
||||
class M2M(O2M):
|
||||
@@ -1154,8 +1158,9 @@ class M2M(O2M):
|
||||
def open_callback(result):
|
||||
if callback:
|
||||
callback()
|
||||
WinForm(screen, open_callback, view_type='tree', domain=domain,
|
||||
context=context)
|
||||
WinForm(
|
||||
screen, open_callback, view_type='tree', domain=domain,
|
||||
context=context, prev_view=screen.current_view)
|
||||
|
||||
|
||||
class Selection(GenericText, SelectionMixin, PopdownMixin):
|
||||
|
||||
@@ -16,6 +16,7 @@ from tryton.gui.window.nomodal import NoModal
|
||||
from .infobar import InfoBar
|
||||
|
||||
_ = gettext.gettext
|
||||
SENTINEL = object()
|
||||
|
||||
|
||||
class WinForm(NoModal, InfoBar):
|
||||
@@ -23,7 +24,7 @@ class WinForm(NoModal, InfoBar):
|
||||
|
||||
def __init__(self, screen, callback=None, view_type='form',
|
||||
new=False, many=0, domain=None, context=None,
|
||||
save_current=False, title='', defaults=None):
|
||||
save_current=False, title='', defaults=None, prev_view=SENTINEL):
|
||||
tooltips = common.Tooltips()
|
||||
NoModal.__init__(self)
|
||||
|
||||
@@ -49,7 +50,10 @@ class WinForm(NoModal, InfoBar):
|
||||
if not title:
|
||||
title = MODELNAME.get(screen.model_name)
|
||||
self.title = title
|
||||
self.prev_view = self.screen.current_view
|
||||
if prev_view is not SENTINEL:
|
||||
self.prev_view = prev_view
|
||||
else:
|
||||
self.prev_view = screen.current_view
|
||||
self.screen.screen_container.alternate_view = True
|
||||
self.screen.switch_view(view_type=view_type)
|
||||
if self.screen.current_view.view_type != view_type:
|
||||
@@ -519,7 +523,8 @@ class WinForm(NoModal, InfoBar):
|
||||
viewport = self.screen.screen_container.alternate_viewport
|
||||
if viewport and viewport.get_parent():
|
||||
viewport.get_parent().remove(viewport)
|
||||
self.screen.switch_view(view_type=self.prev_view.view_type)
|
||||
if self.prev_view:
|
||||
self.screen.switch_view(view_type=self.prev_view.view_type)
|
||||
if getattr(self, 'win', None):
|
||||
self.win.destroy()
|
||||
NoModal.destroy(self)
|
||||
|
||||
@@ -167,7 +167,9 @@ class WinSearch(NoModal):
|
||||
else:
|
||||
self.callback(None)
|
||||
self.destroy()
|
||||
WinForm(screen, callback, new=True, save_current=True)
|
||||
WinForm(
|
||||
screen, callback, new=True, save_current=True,
|
||||
prev_view=screen.current_view)
|
||||
return
|
||||
if res:
|
||||
group = self.screen.group
|
||||
|
||||
Reference in New Issue
Block a user