From b5d1bbeccd6c8a564025cf50b08ea08ca795198f Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Wed, 13 Sep 2023 23:19:45 -0500 Subject: [PATCH] Trying to reduce reference count to grid_store --- plugins/trasher/plugin.py | 2 +- .../core/mixins/signals/file_action_signals_mixin.py | 3 ++- .../solarfm/core/mixins/ui/grid_mixin.py | 8 +++++++- .../solarfm/core/mixins/ui/tab_mixin.py | 8 ++++++-- .../solarfm/core/mixins/ui/window_mixin.py | 6 +++--- .../solarfm/core/widgets/icon_grid_widget.py | 12 ++++++++---- 6 files changed, 27 insertions(+), 12 deletions(-) diff --git a/plugins/trasher/plugin.py b/plugins/trasher/plugin.py index 287ce8a..fd71ecf 100644 --- a/plugins/trasher/plugin.py +++ b/plugins/trasher/plugin.py @@ -115,7 +115,7 @@ class Plugin(PluginBase): self._event_system.emit("get_current_state") state = self._fm_state for uri in state.uris: - self.trashman.restore(filename=uri.split("/")[-1], verbose = verbocity) + self.trashman.restore(filename = uri.split("/")[-1], verbose = verbocity) def empty_trash(self, widget = None, eve = None, verbocity = False): self.trashman.empty(verbose = verbocity) diff --git a/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/file_action_signals_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/file_action_signals_mixin.py index 65b5417..ec2bd33 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/file_action_signals_mixin.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/mixins/signals/file_action_signals_mixin.py @@ -73,7 +73,8 @@ class FileActionSignalsMixin: _store, tab_widget_label = self.get_store_and_label_from_notebook(notebook, f"{wid}|{tid}") tab.load_directory() - self.load_store(tab, store) + icon_grid.clear_and_set_new_store() + self.load_store(tab, icon_grid.get_store()) tab_widget_label.set_label(tab.get_end_of_path()) state = self.get_current_state() diff --git a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/grid_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/grid_mixin.py index 2725424..3d31316 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/grid_mixin.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/grid_mixin.py @@ -18,7 +18,6 @@ class GridMixin: """docstring for GridMixin""" def load_store(self, tab, store, save_state = False, use_generator = False): - store.clear() dir = tab.get_current_directory() files = tab.get_files() @@ -116,3 +115,10 @@ class GridMixin: tab_label = notebook.get_tab_label(obj).get_children()[0] return store, tab_label + + def get_icon_grid_from_notebook(self, notebook, _name): + for obj in notebook.get_children(): + icon_grid = obj.get_children()[0] + name = icon_grid.get_name() + if name == _name: + return icon_grid diff --git a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/tab_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/tab_mixin.py index 2e47338..8194410 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/tab_mixin.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/tab_mixin.py @@ -1,5 +1,6 @@ # Python imports import os +import gc # Lib imports import gi @@ -60,7 +61,7 @@ class TabMixin(GridMixin): tid = self.get_id_from_tab_box(tab_box) scroll = self.builder.get_object(f"{wid}|{tid}") icon_grid = scroll.get_children()[0] - store = icon_grid.get_model() + store = icon_grid.get_store() tab = self.get_fm_window(wid).get_tab_by_id(tid) watcher = tab.get_dir_watcher() @@ -83,6 +84,7 @@ class TabMixin(GridMixin): del watcher del tab + gc.collect() if not settings_manager.is_trace_debug(): self.fm_controller.save_state() @@ -199,7 +201,9 @@ class TabMixin(GridMixin): if not tab.set_path(path): return - self.update_tab(tab_label, tab, store, wid, tid) + icon_grid = self.get_icon_grid_from_notebook(notebook, f"{wid}|{tid}") + icon_grid.clear_and_set_new_store() + self.update_tab(tab_label, tab, icon_grid.get_store(), wid, tid) try: widget.grab_focus_without_selecting() diff --git a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py index 0f789f7..34ffb8b 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/mixins/ui/window_mixin.py @@ -108,10 +108,9 @@ class WindowMixin(TabMixin): self.execute_files() return - state = self.get_current_state() notebook = self.builder.get_object(f"window_{state.wid}") - tab_label = self.get_tab_label(notebook, icons_grid) + tab_label = self.get_tab_label(notebook, state.icon_grid) fileName = state.store[item][1] dir = state.tab.get_current_directory() @@ -119,7 +118,8 @@ class WindowMixin(TabMixin): if isdir(file): state.tab.set_path(file) - self.update_tab(tab_label, state.tab, state.store, state.wid, state.tid) + state.icon_grid.clear_and_set_new_store() + self.update_tab(tab_label, state.tab, state.icon_grid.get_store(), state.wid, state.tid) else: event_system.emit("open_files") except WindowException as e: diff --git a/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py b/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py index cad0503..368319d 100644 --- a/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py +++ b/src/versions/solarfm-0.0.1/solarfm/core/widgets/icon_grid_widget.py @@ -20,7 +20,7 @@ class IconGridWidget(Gtk.IconView): def __init__(self): super(IconGridWidget, self).__init__() - self._store = None + # self._store = None self._setup_styling() self._setup_signals() @@ -62,8 +62,7 @@ class IconGridWidget(Gtk.IconView): self.connect("drag-motion", grid_on_drag_motion) def _load_widgets(self): - self._store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None) - self.set_model(self._store) + self.clear_and_set_new_store() def _set_up_dnd(self): URI_TARGET_TYPE = 80 @@ -75,4 +74,9 @@ class IconGridWidget(Gtk.IconView): def get_store(self): - return self._store + return self.get_model() + + def clear_and_set_new_store(self): + self.set_model(None) + store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None) + self.set_model(store)