aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-03-04 12:34:23 +0100
committerMattias Andrée <maandree@operamail.com>2014-03-04 12:34:23 +0100
commit26d536eb55d4fc847a8c83660fa0de7c4b077bf3 (patch)
tree2784bba8c245bbff957da41bed941e5ce917e987
parentfix threading issues in xmonad example (diff)
downloadxpybar-26d536eb55d4fc847a8c83660fa0de7c4b077bf3.tar.gz
xpybar-26d536eb55d4fc847a8c83660fa0de7c4b077bf3.tar.bz2
xpybar-26d536eb55d4fc847a8c83660fa0de7c4b077bf3.tar.xz
add Bar.invalidate
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rw-r--r--examples/clock16
-rw-r--r--examples/moderate5
-rw-r--r--examples/xmonad67
-rwxr-xr-xsrc/__main__.py16
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):
'''