From c95ef5512432455c1859efcccc188c4188a5d2d4 Mon Sep 17 00:00:00 2001 From: Maxim Stewart Date: Mon, 14 Oct 2019 21:40:25 -0500 Subject: [PATCH] Trying once more to improve icon loading... --- bin/pytop-0-0-1-x64.deb | Bin 23876 -> 23632 bytes src/Pytop/resources/PyTop.glade | 20 ++++++++++- src/Pytop/signal_classes/TaskbarSignals.py | 10 +++--- src/Pytop/utils/FileHandler.py | 14 ++++---- src/Pytop/widgets/Grid.py | 40 ++++++--------------- src/Pytop/widgets/Icon.py | 15 ++++---- 6 files changed, 49 insertions(+), 50 deletions(-) diff --git a/bin/pytop-0-0-1-x64.deb b/bin/pytop-0-0-1-x64.deb index 491b1d9360b33732ba64ec9bb744fb42a2a49766..cb9485a73ad15286d748aeb64fd1701957f6cc9c 100644 GIT binary patch delta 21574 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 delta 21820 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 diff --git a/src/Pytop/resources/PyTop.glade b/src/Pytop/resources/PyTop.glade index 7764d81..2423801 100644 --- a/src/Pytop/resources/PyTop.glade +++ b/src/Pytop/resources/PyTop.glade @@ -143,8 +143,22 @@ False gtk-new - + False + False + True + mouse + True + splashscreen + True + True + False + False + north + + + + True @@ -281,8 +295,12 @@ False True center + True splashscreen + True + True False + False center diff --git a/src/Pytop/signal_classes/TaskbarSignals.py b/src/Pytop/signal_classes/TaskbarSignals.py index 5f2d663..5550d4d 100644 --- a/src/Pytop/signal_classes/TaskbarSignals.py +++ b/src/Pytop/signal_classes/TaskbarSignals.py @@ -63,8 +63,6 @@ class TaskbarSignals: def setScreenSignals(self): self.SCREEN.connect("active-workspace-changed", self.activeWorkspaceChanged) - # self.SCREEN.connect("application-opened", self.applicationOpened) - # self.SCREEN.connect("application-closed", self.applicationClosed) self.SCREEN.connect("window-opened", self.windowOpened) self.SCREEN.connect("window-closed", self.windowClosed) @@ -84,8 +82,10 @@ class TaskbarSignals: window.activate(1) if e.type == gdk.EventType.BUTTON_PRESS and e.button == MouseButtons.RIGHT_BUTTON: self.window = window - self.taskbarMenu.set_relative_to(widget) - self.taskbarMenu.popup() + self.taskbarMenu.show() + + def hideTaskbarMenu(self, widget, eve): + widget.hide() def setPagerWidget(self): pager = wnck.Pager() @@ -100,11 +100,13 @@ class TaskbarSignals: self.SCREEN = screen self.SCREEN.force_update() # (Re)populate screen windows list self.refreashTaskbar() + def windowOpened(self, screen, window): self.SCREEN.force_update() # (Re)populate screen windows list btn = self.createWinBttn(window) self.setupSignals(btn, window) self.taskBarButtons.add(btn) + def windowClosed(self, screen, window): self.clearChildren(self.taskBarButtons) self.SCREEN.force_update() # (Re)populate screen windows list diff --git a/src/Pytop/utils/FileHandler.py b/src/Pytop/utils/FileHandler.py index 2376792..f33d389 100644 --- a/src/Pytop/utils/FileHandler.py +++ b/src/Pytop/utils/FileHandler.py @@ -38,19 +38,19 @@ class FileHandler: def openFile(self, file): print("Opening: " + file) if file.lower().endswith(self.vids): - subprocess.Popen([self.MEDIAPLAYER, self.MPV_WH, file], stdout=subprocess.PIPE) + subprocess.Popen([self.MEDIAPLAYER, self.MPV_WH, file], stdout=subprocess.PIPE, close_fds=True) elif file.lower().endswith(self.music): - subprocess.Popen([self.MUSICPLAYER, file], stdout=subprocess.PIPE) + subprocess.Popen([self.MUSICPLAYER, file], stdout=subprocess.PIPE, close_fds=True) elif file.lower().endswith(self.images): - subprocess.Popen([self.IMGVIEWER, file], stdout=subprocess.PIPE) + subprocess.Popen([self.IMGVIEWER, file], stdout=subprocess.PIPE, close_fds=True) elif file.lower().endswith(self.txt): - subprocess.Popen([self.TEXTVIEWER, file], stdout=subprocess.PIPE) + subprocess.Popen([self.TEXTVIEWER, file], stdout=subprocess.PIPE, close_fds=True) elif file.lower().endswith(self.pdf): - subprocess.Popen([self.PDFVIEWER, file], stdout=subprocess.PIPE) + subprocess.Popen([self.PDFVIEWER, file], stdout=subprocess.PIPE, close_fds=True) elif file.lower().endswith(self.office): - subprocess.Popen([self.OFFICEPROG, file], stdout=subprocess.PIPE) + subprocess.Popen([self.OFFICEPROG, file], stdout=subprocess.PIPE, close_fds=True) else: - subprocess.Popen(['xdg-open', file], stdout=subprocess.PIPE) + subprocess.Popen(['xdg-open', file], stdout=subprocess.PIPE, close_fds=True) def create(self, name, type): diff --git a/src/Pytop/widgets/Grid.py b/src/Pytop/widgets/Grid.py index 096e2de..cc55573 100644 --- a/src/Pytop/widgets/Grid.py +++ b/src/Pytop/widgets/Grid.py @@ -40,7 +40,6 @@ class Grid: self.imagesFilter = settings.returnImagesFilter() self.iconFactory = Icon(settings) self.helperThread = None # Helper thread object - self.toWorkPool = [] # Thread fills pool and gtk empties it self.selectedFiles = [] self.currentPath = "" @@ -52,6 +51,7 @@ class Grid: # @threaded def setNewDirectory(self, path): + self.store.clear() self.currentPath = path dirPaths = ['.', '..'] vids = [] @@ -86,38 +86,17 @@ class Grid: files.sort() files = dirPaths + vids + images + desktop + files - self.store.clear() + self.generateGridIcons(path, files) - # Run helper thread... - self.helperThread = threading.Thread(target=self.generateGridIcons, args=(path, files)) - self.helperThread.daemon = True # Set this thread as a Daemon Thread - self.helperThread.start() - # self.generateGridIcons(path, files) - glib.idle_add(self.addToGrid, (files,)) # NOTE: This must stay in the main thread b/c - # gtk isn't thread safe/aware. - # @threaded + @threaded def generateGridIcons(self, dirPath, files): for file in files: - image = self.iconFactory.createIcon(dirPath, file) - self.toWorkPool.append([image, file]) + image = self.iconFactory.createIcon(dirPath, file).get_pixbuf() + glib.idle_add(self.addToGrid, (image, file,)) - - # NOTE: If nothing else is updating, this function gets called immediatly when return is True. - # Returning False ends checks and "continues normal flow" - def addToGrid(self, args): - files = args[0] - - if len(self.toWorkPool) > 0: - for dataSet in self.toWorkPool: - self.store.append([dataSet[0].get_pixbuf(), dataSet[1]]) - - self.toWorkPool.clear() - - if len(self.store) == len(files): # Processed all files - return False - else: # Check again when idle - return True + def addToGrid(self, dataSet): + self.store.append([dataSet[0], dataSet[1]]) def iconDblLeftClick(self, widget, item): try: @@ -187,7 +166,7 @@ class Grid: def returnSelectedFiles(self): # NOTE: Just returning selectedFiles looks like it returns a "pointer" - # to the children. This mean we lose the list if any left click occures + # to the children. This means we lose the list if any left click occures # in this class. files = [] for file in self.selectedFiles: @@ -195,4 +174,5 @@ class Grid: return files def returnCurrentPath(self): - return self.currentPath + currentPath = self.currentPath + return currentPath diff --git a/src/Pytop/widgets/Icon.py b/src/Pytop/widgets/Icon.py index b589615..75dbf11 100644 --- a/src/Pytop/widgets/Icon.py +++ b/src/Pytop/widgets/Icon.py @@ -36,10 +36,9 @@ class Icon: fullPath = dir + "/" + file return self.getIconImage(file, fullPath) - def getIconImage(self, file, fullPath): try: - thumbnl = None + thumbnl = None # Video thumbnail if file.lower().endswith(self.vidsList): @@ -49,22 +48,22 @@ class Icon: if isfile(hashImgPth) == False: self.generateVideoThumbnail(fullPath, hashImgPth) - thumbnl = self.createScaledImage(hashImgPth, self.viIconWH) + thumbnl = self.createScaledImage(hashImgPth, self.viIconWH) # Image Icon elif file.lower().endswith(self.imagesList): - thumbnl = self.createScaledImage(fullPath, self.viIconWH) + thumbnl = self.createScaledImage(fullPath, self.viIconWH) # .desktop file parsing elif fullPath.lower().endswith( ('.desktop',) ): - thumbnl = self.parseDesktopFiles(fullPath) + thumbnl = self.parseDesktopFiles(fullPath) # System icons else: - thumbnl = self.getSystemThumbnail(fullPath, self.systemIconImageWH[0]) + thumbnl = self.getSystemThumbnail(fullPath, self.systemIconImageWH[0]) if thumbnl == None: # If no icon, try stock file icon... - thumbnl = gtk.Image.new_from_icon_name("gtk-file", gtk.IconSize.LARGE_TOOLBAR) + thumbnl = gtk.Image.new_from_icon_name("gtk-file", gtk.IconSize.LARGE_TOOLBAR) if thumbnl == None: # If no icon whatsoever, return internal default - thumbnl = gtk.Image.new_from_file("resources/icons/bin.png") + thumbnl = gtk.Image.new_from_file("resources/icons/bin.png") return thumbnl except Exception as e: