GLib idle add return effort
This commit is contained in:
parent
9336df2afa
commit
4cafb7ff9f
@ -39,7 +39,6 @@ class FileActionSignalsMixin:
|
|||||||
if eve_type in [Gio.FileMonitorEvent.CREATED, Gio.FileMonitorEvent.DELETED,
|
if eve_type in [Gio.FileMonitorEvent.CREATED, Gio.FileMonitorEvent.DELETED,
|
||||||
Gio.FileMonitorEvent.RENAMED, Gio.FileMonitorEvent.MOVED_IN,
|
Gio.FileMonitorEvent.RENAMED, Gio.FileMonitorEvent.MOVED_IN,
|
||||||
Gio.FileMonitorEvent.MOVED_OUT]:
|
Gio.FileMonitorEvent.MOVED_OUT]:
|
||||||
logger.debug(eve_type)
|
|
||||||
|
|
||||||
if eve_type in [Gio.FileMonitorEvent.MOVED_IN, Gio.FileMonitorEvent.MOVED_OUT]:
|
if eve_type in [Gio.FileMonitorEvent.MOVED_IN, Gio.FileMonitorEvent.MOVED_OUT]:
|
||||||
self.update_on_soft_lock_end(data[0])
|
self.update_on_soft_lock_end(data[0])
|
||||||
|
@ -7,6 +7,7 @@ import gi
|
|||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
from gi.repository import GLib
|
from gi.repository import GLib
|
||||||
|
from gi.repository import Gio
|
||||||
|
|
||||||
# Application imports
|
# Application imports
|
||||||
from ...widgets.tab_header_widget import TabHeaderWidget
|
from ...widgets.tab_header_widget import TabHeaderWidget
|
||||||
@ -19,6 +20,18 @@ class GridMixin:
|
|||||||
"""docstring for GridMixin"""
|
"""docstring for GridMixin"""
|
||||||
|
|
||||||
def load_store(self, tab, store, save_state = False, use_generator = False):
|
def load_store(self, tab, store, save_state = False, use_generator = False):
|
||||||
|
# dir = tab.get_current_directory()
|
||||||
|
# file = Gio.File.new_for_path(dir)
|
||||||
|
# dir_list = Gtk.DirectoryList.new("standard::*", file)
|
||||||
|
# store.set(dir_list)
|
||||||
|
|
||||||
|
# file = Gio.File.new_for_path(dir)
|
||||||
|
# for file in file.enumerate_children("standard::*", Gio.FILE_ATTRIBUTE_STANDARD_NAME, None):
|
||||||
|
# store.append(file)
|
||||||
|
|
||||||
|
# return
|
||||||
|
|
||||||
|
|
||||||
dir = tab.get_current_directory()
|
dir = tab.get_current_directory()
|
||||||
files = tab.get_files()
|
files = tab.get_files()
|
||||||
|
|
||||||
@ -45,14 +58,24 @@ class GridMixin:
|
|||||||
asyncio.run( self.create_icons(tab, store, dir, files) )
|
asyncio.run( self.create_icons(tab, store, dir, files) )
|
||||||
|
|
||||||
async def create_icons(self, tab, store, dir, files):
|
async def create_icons(self, tab, store, dir, files):
|
||||||
tasks = [self.update_store(i, store, dir, tab, file[0]) for i, file in enumerate(files)]
|
icons = [self.get_icon(tab, dir, file[0]) for file in files]
|
||||||
|
data = await asyncio.gather(*icons)
|
||||||
|
tasks = [self.update_store(i, store, icon) for i, icon in enumerate(data)]
|
||||||
await asyncio.gather(*tasks)
|
await asyncio.gather(*tasks)
|
||||||
|
|
||||||
GLib.idle_add(Gtk.main_iteration)
|
GLib.idle_add(Gtk.main_iteration)
|
||||||
|
|
||||||
async def update_store(self, i, store, dir, tab, file):
|
async def update_store(self, i, store, icon):
|
||||||
icon = tab.create_icon(dir, file)
|
|
||||||
itr = store.get_iter(i)
|
itr = store.get_iter(i)
|
||||||
GLib.idle_add(store.set_value, itr, 0, icon)
|
GLib.idle_add(self.insert_store, store, itr, icon)
|
||||||
|
|
||||||
|
def insert_store(self, store, itr, icon):
|
||||||
|
store.set_value(itr, 0, icon)
|
||||||
|
# Note: If the function returns GLib.SOURCE_REMOVE or False it is automatically removed from the list of event sources and will not be called again.
|
||||||
|
return False
|
||||||
|
|
||||||
|
async def get_icon(self, tab, dir, file):
|
||||||
|
return tab.create_icon(dir, file)
|
||||||
|
|
||||||
def create_tab_widget(self, tab):
|
def create_tab_widget(self, tab):
|
||||||
return TabHeaderWidget(tab, self.close_tab)
|
return TabHeaderWidget(tab, self.close_tab)
|
||||||
|
@ -7,6 +7,7 @@ import gi
|
|||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
from gi.repository import GLib
|
from gi.repository import GLib
|
||||||
|
from gi.repository import Gio
|
||||||
|
|
||||||
# Application imports
|
# Application imports
|
||||||
from ...widgets.tab_header_widget import TabHeaderWidget
|
from ...widgets.tab_header_widget import TabHeaderWidget
|
||||||
@ -19,6 +20,18 @@ class GridMixin:
|
|||||||
"""docstring for GridMixin"""
|
"""docstring for GridMixin"""
|
||||||
|
|
||||||
def load_store(self, tab, store, save_state = False, use_generator = False):
|
def load_store(self, tab, store, save_state = False, use_generator = False):
|
||||||
|
# dir = tab.get_current_directory()
|
||||||
|
# file = Gio.File.new_for_path(dir)
|
||||||
|
# dir_list = Gtk.DirectoryList.new("standard::*", file)
|
||||||
|
# store.set(dir_list)
|
||||||
|
|
||||||
|
# file = Gio.File.new_for_path(dir)
|
||||||
|
# for file in file.enumerate_children("standard::*", Gio.FILE_ATTRIBUTE_STANDARD_NAME, None):
|
||||||
|
# store.append(file)
|
||||||
|
|
||||||
|
# return
|
||||||
|
|
||||||
|
|
||||||
dir = tab.get_current_directory()
|
dir = tab.get_current_directory()
|
||||||
files = tab.get_files()
|
files = tab.get_files()
|
||||||
|
|
||||||
@ -32,6 +45,7 @@ class GridMixin:
|
|||||||
if save_state and not trace_debug:
|
if save_state and not trace_debug:
|
||||||
self.fm_controller.save_state()
|
self.fm_controller.save_state()
|
||||||
|
|
||||||
|
|
||||||
def generate_icons(self, tab, store, dir, files):
|
def generate_icons(self, tab, store, dir, files):
|
||||||
try:
|
try:
|
||||||
loop = asyncio.get_running_loop()
|
loop = asyncio.get_running_loop()
|
||||||
@ -44,13 +58,24 @@ class GridMixin:
|
|||||||
asyncio.run( self.create_icons(tab, store, dir, files) )
|
asyncio.run( self.create_icons(tab, store, dir, files) )
|
||||||
|
|
||||||
async def create_icons(self, tab, store, dir, files):
|
async def create_icons(self, tab, store, dir, files):
|
||||||
tasks = [self.update_store(i, store, dir, tab, file[0]) for i, file in enumerate(files)]
|
icons = [self.get_icon(tab, dir, file[0]) for file in files]
|
||||||
|
data = await asyncio.gather(*icons)
|
||||||
|
tasks = [self.update_store(i, store, icon) for i, icon in enumerate(data)]
|
||||||
await asyncio.gather(*tasks)
|
await asyncio.gather(*tasks)
|
||||||
|
|
||||||
async def update_store(self, i, store, dir, tab, file):
|
GLib.idle_add(Gtk.main_iteration)
|
||||||
icon = tab.create_icon(dir, file)
|
|
||||||
|
async def update_store(self, i, store, icon):
|
||||||
itr = store.get_iter(i)
|
itr = store.get_iter(i)
|
||||||
GLib.idle_add(store.set_value, itr, 0, icon)
|
GLib.idle_add(self.insert_store, store, itr, icon)
|
||||||
|
|
||||||
|
def insert_store(self, store, itr, icon):
|
||||||
|
store.set_value(itr, 0, icon)
|
||||||
|
# Note: If the function returns GLib.SOURCE_REMOVE or False it is automatically removed from the list of event sources and will not be called again.
|
||||||
|
return False
|
||||||
|
|
||||||
|
async def get_icon(self, tab, dir, file):
|
||||||
|
return tab.create_icon(dir, file)
|
||||||
|
|
||||||
def create_tab_widget(self, tab):
|
def create_tab_widget(self, tab):
|
||||||
return TabHeaderWidget(tab, self.close_tab)
|
return TabHeaderWidget(tab, self.close_tab)
|
||||||
|
@ -77,4 +77,5 @@ class IconGridWidget(Gtk.IconView):
|
|||||||
def clear_and_set_new_store(self):
|
def clear_and_set_new_store(self):
|
||||||
self.set_model(None)
|
self.set_model(None)
|
||||||
store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None)
|
store = Gtk.ListStore(GdkPixbuf.Pixbuf or GdkPixbuf.PixbufAnimation or None, str or None)
|
||||||
|
# store = Gtk.ListStore(Gtk.DirectoryList)
|
||||||
self.set_model(store)
|
self.set_model(store)
|
@ -138,6 +138,7 @@ class Icon(DesktopIconMixin, VideoIconMixin, MeshsIconMixin):
|
|||||||
def _call_gtk_thread(event, result):
|
def _call_gtk_thread(event, result):
|
||||||
result.append( self.get_system_thumbnail(full_path, size) )
|
result.append( self.get_system_thumbnail(full_path, size) )
|
||||||
event.set()
|
event.set()
|
||||||
|
return False
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
event = threading.Event()
|
event = threading.Event()
|
||||||
|
Loading…
Reference in New Issue
Block a user