diff --git a/CHANGELOG b/CHANGELOG index 9504c7d1fd..61fe653da3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,4 @@ -Version 2.0.0 - 2010-04-26 +Version 2.0.0 - 2011-04-26 * Bug fixes (see mercurial logs for details) * Popup form dialog has 3 buttons (close, ok, new) * New UI layout diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py index e2b706be55..efe1f478c0 100644 --- a/tryton/gui/window/view_form/model/group.py +++ b/tryton/gui/window/view_form/model/group.py @@ -228,6 +228,12 @@ class Group(SignalEvent, list): self.append(record) else: self.insert(position, record) + for record_rm in self.record_removed: + if record_rm.id == record.id: + self.record_removed.remove(record) + for record_del in self.record_deleted: + if record_del.id == record.id: + self.record_deleted.remove(record) self.current_idx = position if modified: record.modified_fields.setdefault('id') diff --git a/tryton/gui/window/view_form/view/form.py b/tryton/gui/window/view_form/view/form.py index f41a4c02a9..12bc70aa88 100644 --- a/tryton/gui/window/view_form/view/form.py +++ b/tryton/gui/window/view_form/view/form.py @@ -43,6 +43,12 @@ class ViewForm(ParserView): viewport.add(scroll) if isinstance(self.screen.window, gtk.Dialog): width, height = self.widget.size_request() + if self.screen.window: + parent = self.screen.window.get_transient_for() + if parent: + parent_width, parent_height = parent.get_size() + width = min(parent_width - 40, width) + height = min(parent_height - 80, height) vbox.set_size_request(width or -1, height or -1) vbox.pack_start(viewport, expand=True, fill=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 309c1b2791..4f9f967307 100644 --- a/tryton/gui/window/view_form/view/form_gtk/many2one.py +++ b/tryton/gui/window/view_form/view/form_gtk/many2one.py @@ -36,7 +36,7 @@ class Many2One(WidgetInterface): self.wid_text.connect('focus-out-event', lambda x, y: self._focus_out()) self.wid_text.connect_after('changed', self.sig_changed) self.changed = True - self.wid_text.connect_after('activate', self.sig_activate) + self.wid_text.connect('activate', self.sig_activate) self.wid_text.connect_after('focus-out-event', self.sig_activate) self.focus_out = True self.widget.pack_start(self.wid_text, expand=True, fill=True) @@ -93,6 +93,8 @@ class Many2One(WidgetInterface): self.focus_out = False if not value: + if not key_press and not event: + widget.emit_stop_by_name('activate') if not self._readonly and (self.wid_text.get_text() or \ (self.field.get_state_attrs( self.record)['required']) and key_press): diff --git a/tryton/gui/window/view_form/view/graph.py b/tryton/gui/window/view_form/view/graph.py index 6d4d6a16ef..75c43fc037 100644 --- a/tryton/gui/window/view_form/view/graph.py +++ b/tryton/gui/window/view_form/view/graph.py @@ -44,3 +44,6 @@ class ViewGraph(ParserView): def set_cursor(self, new=False, reset_view=True): pass + + def get_fields(self): + return [] diff --git a/tryton/gui/window/view_form/view/list.py b/tryton/gui/window/view_form/view/list.py index 3b70c3c502..4494e7d0e4 100644 --- a/tryton/gui/window/view_form/view/list.py +++ b/tryton/gui/window/view_form/view/list.py @@ -84,9 +84,18 @@ class AdaptModelGroup(gtk.GenericTreeModel): group = record_pos.group pos = group.index(record_pos) + offset if group is not record.group: + prev_group = record.group record.group.remove(record, remove=True, force_remove=True) + # Don't remove record from previous group + # as the new parent will change the parent + # This prevents concurrency conflict + record.group.record_removed.remove(record) group.add(record) - record.modified_fields.setdefault(record.parent_name or 'id') + if not record.parent_name: + record.modified_fields.setdefault(prev_group.parent_name) + record.value[prev_group.parent_name] = False + else: + record.modified_fields.setdefault(record.parent_name) group.move(record, pos) def move_before(self, record, path): @@ -740,6 +749,8 @@ class ViewList(ParserView): if model and iter_: record = model.get_value(iter_, 0) self.screen.current_record = record + else: + self.screen.current_record = None elif tree_sel.get_mode() == gtk.SELECTION_MULTIPLE: model, paths = tree_sel.get_selected_rows() @@ -747,6 +758,8 @@ class ViewList(ParserView): iter_ = model.get_iter(paths[0]) record = model.get_value(iter_, 0) self.screen.current_record = record + else: + self.screen.current_record = None if hasattr(self.widget_tree, 'editable') \ and self.widget_tree.editable \ diff --git a/tryton/pysocket.py b/tryton/pysocket.py index 9936e2421a..4f6009b2be 100644 --- a/tryton/pysocket.py +++ b/tryton/pysocket.py @@ -177,15 +177,15 @@ class PySocket: + (gzip_p and "1" or "0") + msg size = len(msg) - totalsent = 0 - while totalsent < size: - if self.ssl: + if self.ssl: + totalsent = 0 + while totalsent < size: sent = self.ssl_sock.write(msg[totalsent:]) - else: - sent = self.sock.send(msg[totalsent:]) - if sent == 0: - raise RuntimeError, "socket connection broken" - totalsent = totalsent + sent + if sent == 0: + raise RuntimeError, "socket connection broken" + totalsent = totalsent + sent + else: + self.sock.sendall(msg) def receive(self): buf = self.buffer diff --git a/tryton/wizard/main.py b/tryton/wizard/main.py index ec9479235b..6cb22a3aec 100644 --- a/tryton/wizard/main.py +++ b/tryton/wizard/main.py @@ -103,10 +103,10 @@ class Dialog(object): width, height = self.screen.screen_container.size_get() parent_width, parent_height = parent.get_size() dia_width, dia_height = self.dia.get_size() - self.widget_width = max(min(parent_width - 20, - max(dia_width, width + 20)), size[0]) - self.widget_height = max(min(parent_height - 60, - height + dia_height + 20), size[1]) + self.widget_width = min(parent_width - 20, + max(dia_width, width + 20, size[0])) + self.widget_height = min(parent_height - 60, + max(height + dia_height + 20, size[1])) self.dia.set_default_size(self.widget_width, self.widget_height) self.screen.widget.show()