From 9f69cc6ae9b076b0ee76a12c9cb726259e7a7213 Mon Sep 17 00:00:00 2001 From: Tobias Witek Date: Sat, 12 Aug 2017 17:03:04 +0200 Subject: [PATCH] [core] Add ability to "hide" a module with all its widgets * A module can override the method "hidden" to specify when all it's widgets should be hidden. * Implement hidden for cmus and spotify * Fix problem that cmus widgets were not displayed correctly fixes #157 --- bumblebee/engine.py | 3 +++ bumblebee/modules/cmus.py | 4 ++++ bumblebee/modules/spotify.py | 3 +++ bumblebee/output.py | 7 +++++-- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/bumblebee/engine.py b/bumblebee/engine.py index 8882c9b..ee94186 100644 --- a/bumblebee/engine.py +++ b/bumblebee/engine.py @@ -56,6 +56,9 @@ class Module(object): """Return the widgets to draw for this module""" return self._widgets + def hidden(self): + return False + def widget(self, name): for widget in self._widgets: if widget.name == name: diff --git a/bumblebee/modules/cmus.py b/bumblebee/modules/cmus.py index 4bc0e56..30996c0 100644 --- a/bumblebee/modules/cmus.py +++ b/bumblebee/modules/cmus.py @@ -49,6 +49,9 @@ class Module(bumblebee.engine.Module): self._repeat = False self._tags = defaultdict(lambda: '') + def hidden(self): + return self._status == None + @scrollable def description(self, widget): return string.Formatter().vformat(self._fmt, (), self._tags) @@ -72,6 +75,7 @@ class Module(bumblebee.engine.Module): try: info = bumblebee.util.execute("cmus-remote -Q") except RuntimeError: + self._status = None pass self._tags = defaultdict(lambda: '') for line in info.split("\n"): diff --git a/bumblebee/modules/spotify.py b/bumblebee/modules/spotify.py index 7086ba6..9ed47aa 100644 --- a/bumblebee/modules/spotify.py +++ b/bumblebee/modules/spotify.py @@ -40,6 +40,9 @@ class Module(bumblebee.engine.Module): def spotify(self, widget): return str(self._song) + def hidden(self): + return str(self._song) == "" + def update(self, widgets): try: bus = dbus.SessionBus() diff --git a/bumblebee/output.py b/bumblebee/output.py index 42d09fd..c7ebbe9 100644 --- a/bumblebee/output.py +++ b/bumblebee/output.py @@ -11,6 +11,7 @@ import bumblebee.store def scrollable(func): def wrapper(module, widget): text = func(module, widget) + if not text: return text width = widget.get("theme.width", module.parameter("width", 30)) widget.set("theme.minwidth", "A"*width) if len(text) <= width: @@ -39,6 +40,9 @@ class Widget(bumblebee.store.Store): self.name = name self.id = str(uuid.uuid4()) + def get_module(self): + return self._module + def link_module(self, module): """Set the module that spawned this widget @@ -93,8 +97,7 @@ class I3BarOutput(object): def draw(self, widget, module=None, engine=None): """Draw a single widget""" full_text = widget.full_text() - """Don't draw it when we only have an empty text""" - if full_text == "": + if widget.get_module() and widget.get_module().hidden(): return padding = self._theme.padding(widget) prefix = self._theme.prefix(widget, padding)