Fixing vod thumbnailer; handling signal removal on tab close
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
# Python imports
|
||||
import os
|
||||
import gc
|
||||
import time
|
||||
|
||||
# Lib imports
|
||||
@@ -52,14 +51,6 @@ class TabMixin(GridMixin):
|
||||
event_system.emit("set_window_title", (tab.get_current_directory(),))
|
||||
self.set_file_watcher(tab)
|
||||
|
||||
tab_widget = None
|
||||
scroll, store = None, None
|
||||
index = None
|
||||
notebook = None
|
||||
path_entry = None
|
||||
tab = None
|
||||
ctx = None
|
||||
|
||||
|
||||
def get_tab_widget(self, tab):
|
||||
tab_widget = self.create_tab_widget()
|
||||
@@ -72,58 +63,35 @@ class TabMixin(GridMixin):
|
||||
|
||||
def close_tab(self, button, eve = None):
|
||||
notebook = button.get_parent().get_parent()
|
||||
if notebook.get_n_pages() == 1:
|
||||
notebook = None
|
||||
return
|
||||
if notebook.get_n_pages() == 1: return
|
||||
|
||||
tab_box = button.get_parent()
|
||||
wid = int(notebook.get_name()[-1])
|
||||
tid = self.get_id_from_tab_box(tab_box)
|
||||
scroll = self.builder.get_object(f"{wid}|{tid}", use_gtk = False)
|
||||
icon_grid = scroll.get_children()[0]
|
||||
store = icon_grid.get_store()
|
||||
tab = self.get_fm_window(wid).get_tab_by_id(tid)
|
||||
watcher = tab.get_dir_watcher()
|
||||
|
||||
watcher.cancel()
|
||||
self.get_fm_window(wid).delete_tab_by_id(tid)
|
||||
|
||||
tab_box.unload_signals()
|
||||
icon_grid.unload_signals()
|
||||
icon_grid.set_model(None)
|
||||
|
||||
self.builder.dereference_object(f"{wid}|{tid}|icon_grid")
|
||||
self.builder.dereference_object(f"{wid}|{tid}")
|
||||
|
||||
iter = store.get_iter_first()
|
||||
while iter:
|
||||
next_iter = store.iter_next(iter)
|
||||
store.unref_node(iter)
|
||||
iter = next_iter
|
||||
|
||||
store.clear()
|
||||
store.run_dispose()
|
||||
|
||||
icon_grid.set_model(None)
|
||||
icon_grid.run_dispose()
|
||||
scroll.run_dispose()
|
||||
tab_box.run_dispose()
|
||||
|
||||
iter = None
|
||||
wid, tid = None, None
|
||||
store = None
|
||||
icon_grid = None
|
||||
scroll = None
|
||||
tab_box = None
|
||||
watcher = None
|
||||
tab = None
|
||||
notebook = None
|
||||
notebook.remove_page( notebook.page_num(scroll) )
|
||||
|
||||
if not settings_manager.is_trace_debug():
|
||||
self.fm_controller.save_state()
|
||||
|
||||
self.set_window_title()
|
||||
gc.collect()
|
||||
|
||||
# NOTE: Not actually getting called even tho set in the glade file...
|
||||
def on_tab_dnded(self, notebook, page, x, y):
|
||||
...
|
||||
print("Create new window on tab dnd outside stub...")
|
||||
|
||||
def on_tab_reorder(self, child, page_num, new_index):
|
||||
wid, tid = page_num.get_name().split("|")
|
||||
|
@@ -1,6 +1,5 @@
|
||||
# Python imports
|
||||
import os
|
||||
import gc
|
||||
import time
|
||||
|
||||
# Lib imports
|
||||
@@ -52,15 +51,6 @@ class TabMixin(GridMixin):
|
||||
event_system.emit("set_window_title", (tab.get_current_directory(),))
|
||||
self.set_file_watcher(tab)
|
||||
|
||||
tab_widget = None
|
||||
scroll, store = None, None
|
||||
index = None
|
||||
notebook = None
|
||||
# path_entry = None
|
||||
tab = None
|
||||
ctx = None
|
||||
|
||||
|
||||
def get_tab_widget(self, tab):
|
||||
tab_widget = self.create_tab_widget()
|
||||
tab_widget.tab_id = tab.get_id()
|
||||
@@ -72,56 +62,33 @@ class TabMixin(GridMixin):
|
||||
|
||||
def close_tab(self, button, eve = None):
|
||||
notebook = button.get_parent().get_parent()
|
||||
if notebook.get_n_pages() == 1:
|
||||
notebook = None
|
||||
return
|
||||
if notebook.get_n_pages() == 1: return
|
||||
|
||||
tab_box = button.get_parent()
|
||||
wid = int(notebook.get_name()[-1])
|
||||
tid = self.get_id_from_tab_box(tab_box)
|
||||
scroll = self.builder.get_object(f"{wid}|{tid}", use_gtk = False)
|
||||
icon_grid = scroll.get_children()[0]
|
||||
store = icon_grid.get_model()
|
||||
tab = self.get_fm_window(wid).get_tab_by_id(tid)
|
||||
watcher = tab.get_dir_watcher()
|
||||
|
||||
watcher.cancel()
|
||||
self.get_fm_window(wid).delete_tab_by_id(tid)
|
||||
|
||||
tab_box.unload_signals()
|
||||
icon_grid.unload_signals()
|
||||
icon_grid.set_model(None)
|
||||
|
||||
self.builder.dereference_object(f"{wid}|{tid}|icon_grid")
|
||||
self.builder.dereference_object(f"{wid}|{tid}")
|
||||
|
||||
iter = store.get_iter_first()
|
||||
while iter:
|
||||
next_iter = store.iter_next(iter)
|
||||
store.unref_node(iter)
|
||||
iter = next_iter
|
||||
|
||||
store.clear()
|
||||
store.run_dispose()
|
||||
|
||||
icon_grid.set_model(None)
|
||||
icon_grid.run_dispose()
|
||||
scroll.run_dispose()
|
||||
tab_box.run_dispose()
|
||||
|
||||
iter = None
|
||||
wid, tid = None, None
|
||||
store = None
|
||||
icon_grid = None
|
||||
scroll = None
|
||||
tab_box = None
|
||||
watcher = None
|
||||
tab = None
|
||||
notebook = None
|
||||
notebook.remove_page( notebook.page_num(scroll) )
|
||||
|
||||
if not settings_manager.is_trace_debug():
|
||||
self.fm_controller.save_state()
|
||||
|
||||
self.set_window_title()
|
||||
|
||||
gc.collect()
|
||||
|
||||
# NOTE: Not actually getting called even tho set in the glade file...
|
||||
def on_tab_dnded(self, notebook, page, x, y):
|
||||
...
|
||||
|
@@ -20,6 +20,8 @@ class IconGridWidget(Gtk.IconView):
|
||||
def __init__(self):
|
||||
super(IconGridWidget, self).__init__()
|
||||
|
||||
self._handler_ids = []
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
self._set_up_dnd()
|
||||
@@ -52,12 +54,12 @@ class IconGridWidget(Gtk.IconView):
|
||||
grid_on_drag_data_received,
|
||||
grid_on_drag_motion):
|
||||
|
||||
self.connect("button_release_event", grid_icon_single_click)
|
||||
self.connect("item-activated", grid_icon_double_click)
|
||||
self.connect("selection-changed", grid_set_selected_items)
|
||||
self.connect("drag-data-get", grid_on_drag_set)
|
||||
self.connect("drag-data-received", grid_on_drag_data_received)
|
||||
self.connect("drag-motion", grid_on_drag_motion)
|
||||
self._handler_ids.append(self.connect("button_release_event", grid_icon_single_click))
|
||||
self._handler_ids.append(self.connect("item-activated", grid_icon_double_click))
|
||||
self._handler_ids.append(self.connect("selection-changed", grid_set_selected_items))
|
||||
self._handler_ids.append(self.connect("drag-data-get", grid_on_drag_set))
|
||||
self._handler_ids.append(self.connect("drag-data-received", grid_on_drag_data_received))
|
||||
self._handler_ids.append(self.connect("drag-motion", grid_on_drag_motion))
|
||||
|
||||
def _load_widgets(self):
|
||||
self.clear_and_set_new_store()
|
||||
@@ -75,20 +77,18 @@ class IconGridWidget(Gtk.IconView):
|
||||
return self.get_model()
|
||||
|
||||
def clear_and_set_new_store(self):
|
||||
store = self.get_model()
|
||||
if store:
|
||||
iter = store.get_iter_first()
|
||||
while iter:
|
||||
next_iter = store.iter_next(iter)
|
||||
store.unref_node(iter)
|
||||
iter = next_iter
|
||||
|
||||
store.clear()
|
||||
store.run_dispose()
|
||||
store = None
|
||||
|
||||
self.set_model(None)
|
||||
store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None)
|
||||
# store = Gtk.ListStore(Gtk.DirectoryList)
|
||||
self.set_model(store)
|
||||
store = None
|
||||
self.set_model(
|
||||
Gtk.ListStore(
|
||||
GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None
|
||||
)
|
||||
)
|
||||
|
||||
def unload_signals(self):
|
||||
self.unset_model_drag_dest()
|
||||
self.unset_model_drag_source()
|
||||
|
||||
for handle_id in self._handler_ids:
|
||||
self.disconnect(handle_id)
|
||||
|
||||
self._handler_ids.clear()
|
||||
|
@@ -15,7 +15,7 @@ class TabHeaderWidget(Gtk.Box):
|
||||
def __init__(self, close_tab):
|
||||
super(TabHeaderWidget, self).__init__()
|
||||
|
||||
self._close_tab = close_tab # NOTE: Close method in tab_mixin
|
||||
self._close_tab = close_tab # NOTE: Close method is from tab_mixin
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
@@ -31,7 +31,7 @@ class TabHeaderWidget(Gtk.Box):
|
||||
|
||||
def _load_widgets(self):
|
||||
self.label = Gtk.Label()
|
||||
close = Gtk.Button()
|
||||
self.close_btn = Gtk.Button()
|
||||
icon = Gtk.Image(stock = Gtk.STOCK_CLOSE)
|
||||
|
||||
self.label.set_xalign(0.0)
|
||||
@@ -39,10 +39,15 @@ class TabHeaderWidget(Gtk.Box):
|
||||
self.label.set_margin_right(25)
|
||||
self.label.set_hexpand(True)
|
||||
|
||||
close.connect("released", self._close_tab)
|
||||
self._handler_id = self.close_btn.connect("released", self._close_tab)
|
||||
|
||||
close.add(icon)
|
||||
self.close_btn.add(icon)
|
||||
self.add(self.label)
|
||||
self.add(close)
|
||||
self.add(self.close_btn)
|
||||
|
||||
self.show_all()
|
||||
|
||||
def unload_signals(self):
|
||||
self.close_btn.disconnect(self._handler_id)
|
||||
self._close_tab = None
|
||||
self._handler_id = None
|
Reference in New Issue
Block a user