Skip to content

Commit ddaca4e

Browse files
committed
FilteredTaskTreeManager related bugfixes
- fixing uses of TaskStore.tree_model in the main code - re-introducing TaskStore.tree_model since a plugin directly references it - avoid duplicated creation of ListStore instances - other small fixes
1 parent e1cc2ce commit ddaca4e

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

GTG/core/tasks.py

+18-14
Original file line numberDiff line numberDiff line change
@@ -711,7 +711,7 @@ def get_tree_model(self):
711711

712712

713713
def has_matching_children(self,task:Task):
714-
return any(self.task_filter.do_match(c) for c in task.children)
714+
return any(self.task_filter.match(c) for c in task.children)
715715

716716

717717
def set_filter(self,new_filter:Gtk.Filter):
@@ -738,13 +738,13 @@ def _find_root_tasks(self) -> None:
738738

739739

740740
def _should_be_root_item(self,t:Task):
741-
if not self.task_filter.do_match(t):
741+
if not self.task_filter.match(t):
742742
return False
743-
return t.parent is None or not self.task_filter.do_match(t.parent)
743+
return t.parent is None or not self.task_filter.match(t.parent)
744744

745745

746746
def update_position_of(self,t:Task):
747-
if not self.task_filter.do_match(t):
747+
if not self.task_filter.match(t):
748748
self.remove(t)
749749
return
750750
if not self._in_the_right_model(t):
@@ -764,7 +764,7 @@ def _in_the_right_model(self,t:Task):
764764

765765
if current_model is None and correct_model is None:
766766
return True
767-
if current_model == correct_model:
767+
if current_model is correct_model:
768768
assert correct_model is not None
769769
pos = correct_model.find(t)
770770
return pos[0]
@@ -793,7 +793,7 @@ def remove(self,task:Task):
793793

794794
def _get_correct_containing_model(self,task:Task) -> Optional[Gio.ListStore]:
795795
"""Return the ListStore that should contain the given task matching the filter."""
796-
if task.parent is None or not self.task_filter.do_match(task.parent):
796+
if task.parent is None or not self.task_filter.match(task.parent):
797797
return self.root_model
798798
return self.tid_to_subtask_model.get(task.parent.id)
799799

@@ -805,19 +805,21 @@ def _get_containing_model(self,task:Task) -> Optional[Gio.ListStore]:
805805

806806
def _model_expand(self, item):
807807
"""Return a ListStore with the matching children of the given task."""
808-
model = Gio.ListStore.new(Task)
809-
810808
if type(item) == Gtk.TreeListRow:
811809
item = item.get_item()
810+
if item.id not in self.tid_to_subtask_model:
811+
self.tid_to_subtask_model[item.id] = self._create_model_for_children(item)
812+
model = self.tid_to_subtask_model[item.id]
813+
return Gtk.TreeListModel.new(model, False, False, self._model_expand)
814+
812815

816+
def _create_model_for_children(self,item):
817+
model = Gio.ListStore.new(Task)
813818
for child in item.children:
814-
if self.task_filter is None or self.task_filter.do_match(child):
819+
if self.task_filter.match(child):
815820
model.append(child)
816821
self.tid_to_containing_model[child.id] = model
817-
818-
self.tid_to_subtask_model[item.id] = model
819-
return Gtk.TreeListModel.new(model, False, False, self._model_expand)
820-
822+
return model
821823

822824

823825
class TaskStore(BaseStore[Task]):
@@ -831,8 +833,10 @@ class TaskStore(BaseStore[Task]):
831833
def __init__(self) -> None:
832834
super().__init__()
833835

834-
self.model = Gio.ListStore.new(Task)
835836
self.managers: list[FilteredTaskTreeManager] = []
837+
self.always_true_filter = Gtk.CustomFilter()
838+
self.always_true_filter.set_filter_func(lambda x: True)
839+
self.tree_model, manager = self.get_filtered_tree_model(self.always_true_filter)
836840

837841

838842
def get_filtered_tree_model(self,task_filter: Optional[Gtk.Filter]):

GTG/gtk/browser/task_pane.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,10 @@ def set_title(self) -> None:
220220
def set_search_query(self, query) -> None:
221221
"""Change tasks filter."""
222222

223-
self.filter_manager.set_filter(self.search_filter)
224223
self.search_filter.set_query(query)
225224
self.search_filter.pane = self.pane
226-
self.search_filter.changed(Gtk.FilterChange.DIFFERENT)
227225
self.searching = True
226+
self.filter_manager.set_filter(self.search_filter)
228227

229228

230229
def set_filter_pane(self, pane) -> None:
@@ -326,7 +325,7 @@ def on_key_released(self, controller, keyval, keycode, state):
326325
def select_last(self) -> None:
327326
"""Select last position in the task list."""
328327

329-
position = self.app.ds.tasks.tree_model.get_n_items()
328+
position = self.filtered.get_n_items()
330329
self.task_selection.select_item(position - 1, True)
331330

332331

@@ -642,7 +641,7 @@ def on_task_RMB_click(self, gesture, sequence) -> None:
642641
def on_toplevel_tag_drop(self, drop_target, task, x, y):
643642
if task.parent:
644643
self.ds.tasks.unparent(task.id)
645-
self.ds.tasks.tree_model.emit('items-changed', 0, 0, 0)
644+
self.filtered.emit('items-changed', 0, 0, 0)
646645
self.refresh()
647646

648647
return True

0 commit comments

Comments
 (0)