From dd1d7585f641b7319f59e9356286fd75df03fa70 Mon Sep 17 00:00:00 2001 From: "louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13" Date: Thu, 19 Aug 2010 21:43:11 +0000 Subject: A tentative to fix the 'glitch' bug due to both thread writing on the screen --- src/window.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/window.py b/src/window.py index 7ba09b6c..6aa44899 100644 --- a/src/window.py +++ b/src/window.py @@ -26,8 +26,12 @@ locale.setlocale(locale.LC_ALL, '') import curses from config import config +from threading import Lock + from message import Line +g_lock = Lock() + class Win(object): def __init__(self, height, width, y, x, parent_win): self._resize(height, width, y, x, parent_win) @@ -84,6 +88,7 @@ class UserList(Win): return arole - brole if not self.visible: return + g_lock.acquire() self.win.erase() y = 0 for user in sorted(users, compare_user): @@ -108,6 +113,7 @@ class UserList(Win): if y == self.height: break self.win.refresh() + g_lock.release() def resize(self, height, width, y, x, stdscr, visible): self.visible = visible @@ -126,6 +132,7 @@ class Topic(Win): def refresh(self, topic, jid=None): if not self.visible: return + g_lock.acquire() self.win.erase() if not jid: try: @@ -145,6 +152,7 @@ class Topic(Win): , curses.color_pair(15)) self.win.refresh() + g_lock.release() class RoomInfo(Win): def __init__(self, height, width, y, x, parent_win, visible): @@ -168,6 +176,7 @@ class RoomInfo(Win): return def compare_room(a, b): return a.nb - b.nb + g_lock.acquire() self.win.erase() self.win.addnstr(0, 0, "[", self.width ,curses.color_pair(1)) @@ -195,6 +204,7 @@ class RoomInfo(Win): except: break self.win.refresh() + g_lock.release() class TextWin(Win): """ @@ -275,6 +285,7 @@ class TextWin(Win): """ if not self.visible: return + g_lock.acquire() self.win.erase() lines = self.build_lines_from_messages(room.messages) if room.pos + self.height > len(lines): @@ -299,6 +310,7 @@ class TextWin(Win): self.write_text(y, line.text_offset, line.text, line.text_color) y += 1 self.win.refresh() + g_lock.release() def write_line_separator(self): """ @@ -465,7 +477,6 @@ class Input(Win): """ if not len(self.history): return - self.reset_completion() self.win.erase() if self.histo_pos >= 0: self.histo_pos -= 1 -- cgit v1.2.3