From 3a2e8eeb089ae5e80e9225d44e2d610e9fc4953c Mon Sep 17 00:00:00 2001
From: itdominator <1itdominator@gmail.com>
Date: Wed, 11 Sep 2024 02:11:00 -0500
Subject: [PATCH] Attempted further memory leak prevention; fixed bugs from
moving to python 12; misc.
---
plugins/searcher/widgets/grep_preview_widget.py | 4 ++--
pyrightconfig.json | 4 ++--
src/solarfm/core/fs_actions/handler_mixin.py | 16 ++++++++++------
src/solarfm/core/mixins/ui/grid_mixin.py | 3 ++-
src/solarfm/core/mixins/ui/tab_mixin.py | 9 +++++----
src/solarfm/core/mixins/ui/window_mixin.py | 6 +++++-
src/solarfm/core/widgets/io_widget.py | 17 +++++++++--------
.../widgets/popups/path_menu_popup_widget.py | 17 +++++++++--------
.../shellfm/windows/tabs/utils/launcher.py | 2 +-
user_config/bin/solarfm | 3 ++-
user_config/usr/bin/solarfm | 17 -----------------
11 files changed, 47 insertions(+), 51 deletions(-)
delete mode 100755 user_config/usr/bin/solarfm
diff --git a/plugins/searcher/widgets/grep_preview_widget.py b/plugins/searcher/widgets/grep_preview_widget.py
index 79a34d6..09e778a 100644
--- a/plugins/searcher/widgets/grep_preview_widget.py
+++ b/plugins/searcher/widgets/grep_preview_widget.py
@@ -48,7 +48,7 @@ class GrepPreviewWidget(Gtk.Box):
return bytes(f"\n{target}", "utf-8").decode("utf-8")
def make_utf8_line_highlight(self, buffer, itr, i, color, target, query):
- parts = re.split(r"(" + query + ")(?i)", target.replace("\n", ""))
+ parts = re.split(r"(?i)(" + query + ")", target.replace("\n", ""))
for part in parts:
itr = buffer.get_end_iter()
@@ -57,4 +57,4 @@ class GrepPreviewWidget(Gtk.Box):
else:
new_s = f"{part}"
_part = bytes(new_s, "utf-8").decode("utf-8")
- buffer.insert_markup(itr, _part, len(_part))
+ buffer.insert_markup(itr, _part, len(_part))
\ No newline at end of file
diff --git a/pyrightconfig.json b/pyrightconfig.json
index 4d8b8ec..51882b6 100644
--- a/pyrightconfig.json
+++ b/pyrightconfig.json
@@ -8,6 +8,6 @@
"root": "./src/versions/solarfm-0.0.1/solarfm"
}
],
- "venvPath": ".",
- "venv": ".venv"
+ "venvPath": "/home/abaddon/Portable_Apps/py-venvs/pylsp-venv/",
+ "venv": "venv"
}
diff --git a/src/solarfm/core/fs_actions/handler_mixin.py b/src/solarfm/core/fs_actions/handler_mixin.py
index 73705cd..b2d2352 100644
--- a/src/solarfm/core/fs_actions/handler_mixin.py
+++ b/src/solarfm/core/fs_actions/handler_mixin.py
@@ -110,26 +110,30 @@ class HandlerMixin:
tab.move_file(fPath, tPath)
else:
io_widget = IOWidget(action, file)
+ io_list = self._builder.get_object("io_list")
+
+ io_list.add(io_widget)
+ io_list.show_all()
if action == "copy":
file.copy_async(destination=target,
flags=Gio.FileCopyFlags.BACKUP,
- io_priority=98,
+ io_priority=45,
cancellable=io_widget.cancle_eve,
progress_callback=io_widget.update_progress,
callback=io_widget.finish_callback)
- self._builder.get_object("io_list").add(io_widget)
if action == "move" or action == "rename":
file.move_async(destination=target,
flags=Gio.FileCopyFlags.BACKUP,
- io_priority=98,
+ io_priority=45,
cancellable=io_widget.cancle_eve,
- progress_callback=None,
# NOTE: progress_callback here causes seg fault when set
+ progress_callback=None,
callback=io_widget.finish_callback)
- self._builder.get_object("io_list").add(io_widget)
+ io_widget = None
+ io_list = None
except GObject.GError as e:
raise OSError(e)
@@ -162,4 +166,4 @@ class HandlerMixin:
target = Gio.File.new_for_path(f"{base_path}/{file_name}-copy{i}{extension}")
i += 1
- return target
+ return target
\ No newline at end of file
diff --git a/src/solarfm/core/mixins/ui/grid_mixin.py b/src/solarfm/core/mixins/ui/grid_mixin.py
index 1cdcb4f..2b3cf94 100644
--- a/src/solarfm/core/mixins/ui/grid_mixin.py
+++ b/src/solarfm/core/mixins/ui/grid_mixin.py
@@ -56,8 +56,9 @@ class GridMixin:
def update_store(self, i, store, icon):
itr = store.get_iter(i)
- GLib.idle_add(self.insert_store, store, itr, icon)
+ GLib.idle_add(self.insert_store, store, itr, icon.copy())
itr = None
+ del icon
@daemon_threaded
def make_and_load_icon(self, i, store, tab, dir, file):
diff --git a/src/solarfm/core/mixins/ui/tab_mixin.py b/src/solarfm/core/mixins/ui/tab_mixin.py
index 79a2617..70e53fe 100644
--- a/src/solarfm/core/mixins/ui/tab_mixin.py
+++ b/src/solarfm/core/mixins/ui/tab_mixin.py
@@ -264,15 +264,16 @@ class TabMixin(GridMixin):
path_menu_buttons.add(button)
show_path_menu = True
- path_menu_buttons = None
- query = None
- files = None
+ query = None
+ files = None
if not show_path_menu:
+ path_menu_buttons = None
event_system.emit("hide_path_menu")
else:
event_system.emit("show_path_menu")
buttons = path_menu_buttons.get_children()
+ path_menu_buttons = None
if len(buttons) == 1:
self.slowed_focus(buttons[0])
@@ -311,4 +312,4 @@ class TabMixin(GridMixin):
self.builder.get_object("refresh_tab").released()
wid, tid = None, None
- tab = None
+ tab = None
\ No newline at end of file
diff --git a/src/solarfm/core/mixins/ui/window_mixin.py b/src/solarfm/core/mixins/ui/window_mixin.py
index 5d6aea7..618b9bc 100644
--- a/src/solarfm/core/mixins/ui/window_mixin.py
+++ b/src/solarfm/core/mixins/ui/window_mixin.py
@@ -130,6 +130,10 @@ class WindowMixin(TabMixin):
self.update_tab(tab_label, state.tab, state.icon_grid.get_store(), state.wid, state.tid)
else:
event_system.emit("open_files")
+
+ state = None
+ notebook = None
+ tab_label = None
except WindowException as e:
traceback.print_exc()
self.display_message(settings.theming.error_color, f"{repr(e)}")
@@ -197,4 +201,4 @@ class WindowMixin(TabMixin):
Gtk.drag_finish(drag_context, False, False, time)
def create_new_tab_notebook(self, widget=None, wid=None, path=None):
- self.create_tab(wid, None, path)
+ self.create_tab(wid, None, path)
\ No newline at end of file
diff --git a/src/solarfm/core/widgets/io_widget.py b/src/solarfm/core/widgets/io_widget.py
index c0bcce1..ab8bf41 100644
--- a/src/solarfm/core/widgets/io_widget.py
+++ b/src/solarfm/core/widgets/io_widget.py
@@ -65,19 +65,20 @@ class IOWidget(Gtk.Box):
logger.info(f"Canceling: [{self._action}] of {self._basename} ...")
eve.cancel()
- def update_progress(self, current, total, eve=None):
+ def update_progress(self, current, total, eve = None):
self.progress.set_fraction(current/total)
- def finish_callback(self, file, task=None, eve=None):
+ def finish_callback(self, file, task = None, eve = None):
+ if task.had_error():
+ logger.info(f"{self._action} of {self._basename} cancelled/failed...")
+ return
+
if self._action == "move" or self._action == "rename":
status = self._file.move_finish(task)
if self._action == "copy":
status = self._file.copy_finish(task)
- if status:
- self.delete_self()
- else:
- logger.info(f"{self._action} of {self._basename} failed...")
+ self.delete_self()
- def delete_self(self, widget=None, eve=None):
- self.get_parent().remove(self)
+ def delete_self(self, widget = None, eve = None):
+ self.get_parent().remove(self)
\ No newline at end of file
diff --git a/src/solarfm/core/widgets/popups/path_menu_popup_widget.py b/src/solarfm/core/widgets/popups/path_menu_popup_widget.py
index e3359bf..3f2c507 100644
--- a/src/solarfm/core/widgets/popups/path_menu_popup_widget.py
+++ b/src/solarfm/core/widgets/popups/path_menu_popup_widget.py
@@ -29,16 +29,16 @@ class PathMenuPopupWidget(Gtk.Popover):
self.set_relative_to(path_entry)
self.set_modal(False)
self.set_position(Gtk.PositionType.BOTTOM)
- self.set_size_request(240, 420)
+ self.set_size_request(480, 420)
def _setup_signals(self):
event_system.subscribe("show_path_menu", self.show_path_menu)
event_system.subscribe("hide_path_menu", self.hide_path_menu)
def _load_widgets(self):
- path_menu_buttons = Gtk.ButtonBox()
- scroll_window = Gtk.ScrolledWindow()
- view_port = Gtk.Viewport()
+ scroll_window = Gtk.ScrolledWindow()
+ view_port = Gtk.Viewport()
+ path_menu_buttons = Gtk.Box()
scroll_window.set_vexpand(True)
scroll_window.set_hexpand(True)
@@ -47,12 +47,13 @@ class PathMenuPopupWidget(Gtk.Popover):
self.builder.expose_object(f"path_menu_buttons", path_menu_buttons)
view_port.add(path_menu_buttons)
scroll_window.add(view_port)
- scroll_window.show_all()
self.add(scroll_window)
+ scroll_window.show_all()
- def show_path_menu(self, widget=None, eve=None):
+
+ def show_path_menu(self, widget = None, eve = None):
self.popup()
- def hide_path_menu(self, widget=None, eve=None):
- self.popdown()
+ def hide_path_menu(self, widget = None, eve = None):
+ self.popdown()
\ No newline at end of file
diff --git a/src/solarfm/shellfm/windows/tabs/utils/launcher.py b/src/solarfm/shellfm/windows/tabs/utils/launcher.py
index 6e07b4b..1b9d772 100644
--- a/src/solarfm/shellfm/windows/tabs/utils/launcher.py
+++ b/src/solarfm/shellfm/windows/tabs/utils/launcher.py
@@ -113,4 +113,4 @@ class Launcher:
if not os.path.islink(fp): # Skip if it is symbolic link
total_size += os.path.getsize(fp)
- return total_size
+ return total_size
\ No newline at end of file
diff --git a/user_config/bin/solarfm b/user_config/bin/solarfm
index 60cf37e..9921548 100755
--- a/user_config/bin/solarfm
+++ b/user_config/bin/solarfm
@@ -23,6 +23,7 @@ function main() {
export G_SLICE=always-malloc
export G_DEBUG=gc-friendly
export GOBJECT_DEBUG=instance-count
- python /opt/solarfm.zip "${files[@]}"
+ export GSK_RENDERER=cairo
+ python /opt/solarfm.zip "$@"
}
main "$@";
diff --git a/user_config/usr/bin/solarfm b/user_config/usr/bin/solarfm
deleted file mode 100755
index 8cca2db..0000000
--- a/user_config/usr/bin/solarfm
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-# . CONFIG.sh
-
-# set -o xtrace ## To debug scripts
-# set -o errexit ## To exit on error
-# set -o errunset ## To exit if a variable is referenced but not set
-
-
-function main() {
- call_path=`pwd`
- cd "${call_path}"
- echo "Working Dir: " $(pwd)
-
- python /opt/solarfm.zip "$@"
-}
-main "$@";