From a9bbd414a31b21f372af31815b98d5200c3386fe Mon Sep 17 00:00:00 2001 From: Sander Sweers Date: Sun, 20 Aug 2017 22:44:15 +0200 Subject: [PATCH] Drop set_value usage in Gtk.ListStore.set override this causes multiple updates to the store each emitting a signal. --- gi/overrides/Gtk.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/gi/overrides/Gtk.py b/gi/overrides/Gtk.py index 08d26127..5980d2f1 100644 --- a/gi/overrides/Gtk.py +++ b/gi/overrides/Gtk.py @@ -1007,28 +1007,30 @@ class ListStore(Gtk.ListStore, TreeModel, TreeSortable): Gtk.ListStore.set_value(self, treeiter, column, value) def set(self, treeiter, *args): - - def _set_lists(columns, values): - if len(columns) != len(values): + def _set_lists(cols, vals): + if len(cols) != len(vals): raise TypeError('The number of columns do not match the number of values') - for col_num, val in zip(columns, values): + + columns = [] + values = [] + for col_num, value in zip(cols, vals): if not isinstance(col_num, int): raise TypeError('TypeError: Expected integer argument for column.') - self.set_value(treeiter, col_num, val) + + columns.append(col_num) + values.append(self._convert_value(col_num, value)) + + Gtk.ListStore.set(self, treeiter, columns, values) if args: if isinstance(args[0], int): - columns = args[::2] - values = args[1::2] - _set_lists(columns, values) + _set_lists(args[::2], args[1::2]) elif isinstance(args[0], (tuple, list)): if len(args) != 2: raise TypeError('Too many arguments') _set_lists(args[0], args[1]) elif isinstance(args[0], dict): - columns = args[0].keys() - values = args[0].values() - _set_lists(columns, values) + _set_lists(list(args[0]), args.values()) else: raise TypeError('Argument list must be in the form of (column, value, ...), ((columns,...), (values, ...)) or {column: value}. No -1 termination is needed.') -- 2.13.4