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