From a09ff54b6e0bdd82bd05b1c948f14156848abcd1 Mon Sep 17 00:00:00 2001 From: jgoerzen Date: Fri, 14 Mar 2003 00:47:09 +0100 Subject: [PATCH] /offlineimap/head: changeset 363 Fixed ability to resize windows under Curses. --- offlineimap/head/offlineimap/ui/Curses.py | 50 ++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/offlineimap/head/offlineimap/ui/Curses.py b/offlineimap/head/offlineimap/ui/Curses.py index 360787b..df409b0 100644 --- a/offlineimap/head/offlineimap/ui/Curses.py +++ b/offlineimap/head/offlineimap/ui/Curses.py @@ -15,10 +15,12 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +DEBUGLOG = open("/tmp/debug", "wt") + from Blinkenlights import BlinkenBase from UIBase import UIBase from threading import * -import thread, time, sys, os +import thread, time, sys, os, signal, time from offlineimap import version, threadutil from offlineimap.threadutil import MultiLock @@ -121,8 +123,14 @@ class CursesUtil: del self.stdscr def reset(self): + DEBUGLOG.write(" in reset...\n") + DEBUGLOG.flush() self.stop() + DEBUGLOG.write(" stop done...\n") + DEBUGLOG.flush() self.start() + DEBUGLOG.write(" start done...\n") + DEBUGLOG.flush() class CursesAccountFrame: def __init__(s, master, accountname): @@ -318,6 +326,46 @@ class Blinkenlights(BlinkenBase, UIBase): s.gettf().setcolor('red') s._msg(version.banner) s.inputhandler.set_bgchar(s.keypress) + signal.signal(signal.SIGWINCH, s.resizehandler) + s.resizelock = Lock() + s.resizecount = 0 + + def resizehandler(s, signum, frame): + s.resizeterm() + + def resizeterm(s, dosleep = 1): + DEBUGLOG.write("\nResizeterm called...\n") + DEBUGLOG.write("pid: %d\n" % os.getpid()) + if not s.resizelock.acquire(0): + s.resizecount += 1 + DEBUGLOG.write("Already resizing; aborting.\n") + return + else: + DEBUGLOG.write("Got the lock\n") + signal.signal(signal.SIGWINCH, signal.SIG_IGN) + s.aflock.acquire() + s.c.lock() + DEBUGLOG.write("locks acquired...\n") + s.resizecount += 1 + DEBUGLOG.write("at top of try\n") + while s.resizecount: + DEBUGLOG.write("in while loop\n") + s.c.reset() + DEBUGLOG.write("reset done...\n") + DEBUGLOG.write("sleep done...\n") + DEBUGLOG.flush() + s.setupwindows() + DEBUGLOG.write("setupwindows done...\n") + s.resizecount -= 1 + DEBUGLOG.write("exiting while loop...\n") + DEBUGLOG.write("in finally section...\n") + s.c.unlock() + s.aflock.release() + s.resizelock.release() + signal.signal(signal.SIGWINCH, s.resizehandler) + if dosleep: + time.sleep(1) + s.resizeterm(0) def isusable(s): # Not a terminal? Can't use curses. -- 2.39.2