Attempted further memory leak prevention; fixed bugs from moving to python 12; misc.

This commit is contained in:
2024-09-11 02:11:00 -05:00
parent 35456f2bca
commit 3a2e8eeb08
11 changed files with 47 additions and 51 deletions

View File

@@ -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

View File

@@ -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):

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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()

View File

@@ -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