diff --git a/tryton/common/date_widget.py b/tryton/common/date_widget.py index 688c40dc84..ba068ae2cd 100644 --- a/tryton/common/date_widget.py +++ b/tryton/common/date_widget.py @@ -179,6 +179,8 @@ class DateEntry(gtk.Entry): self.set_text(self.initial_value) def _on_key_press(self, editable, event): + if not self.get_editable(): + return False if event.keyval in (gtk.keysyms.Tab, gtk.keysyms.Escape, gtk.keysyms.Return, gtk.keysyms.KP_Enter): if self.mode_cmd: diff --git a/tryton/gui/window/view_form/view/form_gtk/calendar.py b/tryton/gui/window/view_form/view/form_gtk/calendar.py index 156bda5277..ab3deaaed5 100644 --- a/tryton/gui/window/view_form/view/form_gtk/calendar.py +++ b/tryton/gui/window/view_form/view/form_gtk/calendar.py @@ -57,6 +57,8 @@ class Calendar(WidgetInterface): self.widget.set_focus_chain([self.entry]) def sig_key_press(self, widget, event): + if not self.entry.get_editable(): + return False if event.keyval == gtk.keysyms.F2: self.cal_open(widget) return True @@ -187,6 +189,8 @@ class DateTime(WidgetInterface): self.widget.set_focus_chain([self.entry]) def sig_key_press(self, widget, event): + if not self.entry.get_editable(): + return False if event.keyval == gtk.keysyms.F2: self.cal_open(widget) return True diff --git a/tryton/gui/window/view_form/view/form_gtk/many2one.py b/tryton/gui/window/view_form/view/form_gtk/many2one.py index c4a86b2c7c..f259aa929d 100644 --- a/tryton/gui/window/view_form/view/form_gtk/many2one.py +++ b/tryton/gui/window/view_form/view/form_gtk/many2one.py @@ -427,13 +427,14 @@ class Many2One(WidgetInterface): self.changed = True def sig_key_press(self, widget, event, *args): - if event.keyval == gtk.keysyms.F3: + editable = self.wid_text.get_editable() + if event.keyval == gtk.keysyms.F3 and editable: self.sig_new(widget, event) return True elif event.keyval == gtk.keysyms.F2: self.sig_edit(widget) return True - elif event.keyval in (gtk.keysyms.Tab, gtk.keysyms.Return): + elif event.keyval in (gtk.keysyms.Tab, gtk.keysyms.Return) and editable: return not self.sig_activate(widget, event, key_press=True) return False diff --git a/tryton/gui/window/view_form/view/form_gtk/one2many.py b/tryton/gui/window/view_form/view/form_gtk/one2many.py index 804f583305..5657b433bf 100644 --- a/tryton/gui/window/view_form/view/form_gtk/one2many.py +++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py @@ -302,12 +302,14 @@ class Dialog(object): def on_keypress(self, widget, event): if self.attrs.get('add_remove') \ - and event.keyval == gtk.keysyms.F3: + and event.keyval == gtk.keysyms.F3 \ + and self.but_add.get_property('sensitive'): self._sig_add() return False - if (event.keyval in (gtk.keysyms.N, gtk.keysyms.n) \ + if ((event.keyval in (gtk.keysyms.N, gtk.keysyms.n) \ and event.state & gtk.gdk.CONTROL_MASK) \ - or event.keyval == gtk.keysyms.F3: + or event.keyval == gtk.keysyms.F3) \ + and self.but_new.get_property('sensitive'): self._sig_new(widget) return False if event.keyval == gtk.keysyms.F2: @@ -475,13 +477,15 @@ class One2Many(WidgetInterface): def on_keypress(self, widget, event): if self.attrs.get('add_remove') \ - and event.keyval == gtk.keysyms.F3: + and event.keyval == gtk.keysyms.F3 \ + and self.but_add.get_property('sensitive'): self._sig_add() return False - if (event.keyval == gtk.keysyms.N \ + if ((event.keyval == gtk.keysyms.N \ and event.state & gtk.gdk.CONTROL_MASK \ and event.state & gtk.gdk.SHIFT_MASK) \ - or event.keyval == gtk.keysyms.F3: + or event.keyval == gtk.keysyms.F3) \ + and self.but_new.get_property('sensitive'): self._sig_new(widget) return False if event.keyval == gtk.keysyms.F2: diff --git a/tryton/gui/window/view_form/view/form_gtk/reference.py b/tryton/gui/window/view_form/view/form_gtk/reference.py index f6d58f1350..43baeb1dff 100644 --- a/tryton/gui/window/view_form/view/form_gtk/reference.py +++ b/tryton/gui/window/view_form/view/form_gtk/reference.py @@ -216,13 +216,14 @@ class Reference(WidgetInterface): dia.destroy() def sig_key_press(self, widget, event): - if event.keyval == gtk.keysyms.F3: + editable = self.wid_text.get_editable() + if event.keyval == gtk.keysyms.F3 and editable: self.sig_new(widget, event) return True elif event.keyval == gtk.keysyms.F2: self.sig_focus_out(widget, event) return True - elif event.keyval == gtk.keysyms.Tab: + elif event.keyval in (gtk.keysyms.Tab, gtk.keysyms.Return) and editable: if self._view.modelfield.get(self._view.model) or \ not self.wid_text.get_text(): return False