# Python imports import threading # Gtk imports import gi gi.require_version("Gtk", "3.0") gi.require_version('Gdk', '3.0') from gi.repository import Gtk, Gdk, GLib, Gio, GdkPixbuf # Application imports def threaded(fn): def wrapper(*args, **kwargs): threading.Thread(target=fn, args=args, kwargs=kwargs).start() return wrapper class TreeViewUpdateMixin: """docstring for DummyMixin""" def load_store(self, view, store, dir): store.clear() view.load_directory(dir) files = view.get_images() for i, file in enumerate(files): store.append([None, f"{dir}/{file[0]}"]) self.create_icon(i, view, store, dir, file[0]) @threaded def create_icon(self, i, view, store, dir, file): icon = view.create_icon(dir, file) fpath = f"{dir}/{file}" GLib.idle_add(self.update_store, (i, store, icon, view, fpath,)) def update_store(self, item): i, store, icon, view, fpath = item itr = store.get_iter(i) if not icon: if fpath.endswith(".gif"): icon = GdkPixbuf.PixbufAnimation.get_static_image(fpath) else: icon = GdkPixbuf.Pixbuf.new_from_file(view.DEFAULT_ICON) store.set_value(itr, 0, icon)