diff --git a/src/Pytop/signal_classes/TaskbarSignals.py b/src/Pytop/signal_classes/TaskbarSignals.py index 6f311cd..2f7a076 100644 --- a/src/Pytop/signal_classes/TaskbarSignals.py +++ b/src/Pytop/signal_classes/TaskbarSignals.py @@ -1,3 +1,6 @@ +# Python imports +import threading + # Gtk imports import gi gi.require_version('Gtk', '3.0') @@ -10,9 +13,6 @@ from gi.repository import Gdk as gdk from gi.repository import GLib -# Python imports -import threading - # Application imports @@ -54,18 +54,23 @@ class TaskbarSignals: if workspace and w.get_workspace(): wnum = w.get_workspace().get_number() if not w.is_skip_pager() and not w.is_skip_tasklist() and wnum == self.actv_workspace_num: - btn = self.createWinBttn(w) - self.setupSignals(btn, w) - self.taskBarButtons.add(btn) - - def setupSignals(self, btn, win): - btn.connect("button-press-event", self.clickEvent, (win)) + self.createWinLink(w) def setScreenSignals(self): self.SCREEN.connect("active-workspace-changed", self.activeWorkspaceChanged) self.SCREEN.connect("window-opened", self.windowOpened) self.SCREEN.connect("window-closed", self.windowClosed) + def createWinLink(self, w): + btn = self.createWinBttn(w) + self.setupSignals(btn, w) + self.taskBarButtons.add(btn) + + def setupSignals(self, btn, win): + btn.connect("button-press-event", self.clickEvent, (win)) + win.connect("name_changed", self.windowNameChanged, (btn)) + win.connect("workspace_changed", self.windowWorkspaceChanged, (btn)) + def createWinBttn(self, w): btn = gtk.Button(label=w.get_name(), always_show_image=True) img = gtk.Image() @@ -123,7 +128,7 @@ class TaskbarSignals: def hideTaskbarMenu(self, widget, eve): - widget.hide() + self.taskbarMenu.hide() def setPagerWidget(self): pager = wnck.Pager() @@ -139,16 +144,26 @@ class TaskbarSignals: self.SCREEN.force_update() # (Re)populate screen windows list self.refreashTaskbar() + def windowClosed(self, screen, window): + self.clearChildren(self.taskBarButtons) + 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 - self.refreashTaskbar() + def windowNameChanged(self, win, btn): + btn.set_label(win.get_name()) + + def windowWorkspaceChanged(self, win, btn): + wnum = win.get_workspace().get_number() + if self.actv_workspace_num == wnum: + btn.show() + else: + btn.hide() def clearChildren(self, parent): children = parent.get_children(); @@ -198,6 +213,7 @@ class TaskbarSignals: def closeAppWindow(self, widget, data=None): self.window.close(1) + self.hideTaskbarMenu(None, None) # WINDOW_SIGNALS