From 26d536eb55d4fc847a8c83660fa0de7c4b077bf3 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Tue, 4 Mar 2014 12:34:23 +0100 Subject: add Bar.invalidate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- examples/clock | 16 ++++--------- examples/moderate | 5 +---- examples/xmonad | 67 +++++++++++++++++++++---------------------------------- src/__main__.py | 16 +++++++++++++ 4 files changed, 47 insertions(+), 57 deletions(-) diff --git a/examples/clock b/examples/clock index c7d9ac2..163f7d5 100644 --- a/examples/clock +++ b/examples/clock @@ -17,19 +17,11 @@ clock = Clock(format = '%Y-(%m)%b-%d %T, %a w%V, %Z', utc = False, sync_to = Clo start_ = start def start(): start_() - def refresh(): - if redraw(): - get_display().flush() - async(lambda : clock.continuous_sync(refresh)) + async(lambda : clock.continuous_sync(lambda : bar.invalidate())) -semaphore = threading.Semaphore() def redraw(): - if semaphore.acquire(blocking = False): - text = clock.read() - bar.clear() - bar.draw_coloured_text(0, 10, 0, 2, text) - semaphore.release() - return True - return False + text = clock.read() + bar.clear() + bar.draw_coloured_text(0, 10, 0, 2, text) diff --git a/examples/moderate b/examples/moderate index d47c704..1ab25e6 100644 --- a/examples/moderate +++ b/examples/moderate @@ -220,10 +220,7 @@ pattern = [ '%s │ %.2f │ %s │ %s │ %s │ %s }{ %s │ %s │ %s │ %s' start_ = start def start(): start_() - def refresh(): - if redraw(): - get_display().flush() - async(lambda : clock_.continuous_sync(refresh)) + async(lambda : clock_.continuous_sync(lambda : bar.invalidate())) HEIGHT = len(pattern) * 12 pattern = '\n'.join([p.replace('}{', '\0') for p in pattern]) diff --git a/examples/xmonad b/examples/xmonad index cd6e623..056eb50 100644 --- a/examples/xmonad +++ b/examples/xmonad @@ -26,50 +26,35 @@ def start(): text = input() except: sys.exit(0) - # Dummy event for performing update in the main thread # TODO do this better - e = Xlib.protocol.event.KeyPress(detail = 1, - time = Xlib.X.CurrentTime, - root = get_display().screen().root, - window = bar.window, - child = Xlib.X.NONE, - root_x = 1, root_y = 1, - event_x = 1, event_y = 1, - state = 0, same_screen = 1) - get_display().send_event(bar.window, e) - get_display().flush() + bar.invalidate() async(lambda : forever(refresh)) -semaphore = threading.Semaphore() def redraw(): global text - if semaphore.acquire(blocking = False): - buf, esc = '', None - for c in text: - if esc is not None: - esc += c - if esc == '^': - buf += '^' - esc = None - elif esc[-1] == ')': - if esc.startswith('bg(') or esc.startswith('fg('): - c = 4 if esc.startswith('bg(') else 3 - esc = esc[3 : -1] - if esc == '': - buf += '\033[%i9m' % c - else: - r, g, b = esc[1 : 3], esc[3 : 5], esc[5 : 7] - r, g, b = int(r, 16), int(g, 16), int(b, 16) - r, g, b = str(r), str(g), str(b) - buf += '\033[%i8;2;%sm' % (c, ';'.join([r, g, b])) - esc = None - elif c == '^': - esc = '' - else: - buf += c - bar.clear() - bar.draw_coloured_text(0, 10, 0, 2, buf) - semaphore.release() - return True - return False + buf, esc = '', None + for c in text: + if esc is not None: + esc += c + if esc == '^': + buf += '^' + esc = None + elif esc[-1] == ')': + if esc.startswith('bg(') or esc.startswith('fg('): + c = 4 if esc.startswith('bg(') else 3 + esc = esc[3 : -1] + if esc == '': + buf += '\033[%i9m' % c + else: + r, g, b = esc[1 : 3], esc[3 : 5], esc[5 : 7] + r, g, b = int(r, 16), int(g, 16), int(b, 16) + r, g, b = str(r), str(g), str(b) + buf += '\033[%i8;2;%sm' % (c, ';'.join([r, g, b])) + esc = None + elif c == '^': + esc = '' + else: + buf += c + bar.clear() + bar.draw_coloured_text(0, 10, 0, 2, buf) diff --git a/src/__main__.py b/src/__main__.py index 6077a98..efc31fd 100755 --- a/src/__main__.py +++ b/src/__main__.py @@ -398,6 +398,22 @@ class Bar: self.change_colour(self.foreground) self.change_font(self.font) + def invalidate(self): + ''' + Cause the window to be redraw on the main window + ''' + # Dummy event for performing update in the main thread # TODO do this better + e = Xlib.protocol.event.KeyPress(detail = 1, + time = Xlib.X.CurrentTime, + root = display.screen().root, + window = self.window, + child = Xlib.X.NONE, + root_x = 1, root_y = 1, + event_x = 1, event_y = 1, + state = 0, same_screen = 1) + display.send_event(self.window, e) + display.flush() + @staticmethod def coloured_length(text): ''' -- cgit v1.2.3-70-g09d2