From baf4d66fea871cd6c285c51fcbb995efe5dd6800 Mon Sep 17 00:00:00 2001 From: necoro <> Date: Mon, 9 Jul 2007 04:51:41 +0000 Subject: added resume_loop plugin --- portato/gui/gtk/windows.py | 2 +- portato/gui/gui_helper.py | 4 +++- portato/gui/qt/terminal.py | 35 ++++++++++++++++++++++++++++++++--- portato/gui/qt/tree.py | 2 +- portato/gui/qt/windows.py | 2 +- 5 files changed, 38 insertions(+), 7 deletions(-) (limited to 'portato/gui') diff --git a/portato/gui/gtk/windows.py b/portato/gui/gtk/windows.py index 3ce8ae2..8b433ca 100644 --- a/portato/gui/gtk/windows.py +++ b/portato/gui/gtk/windows.py @@ -154,7 +154,7 @@ class PluginWindow (AbstractDialog): def cb_ok_clicked (self, btn): for plugin, val in self.changedPlugins.iteritems(): - plugin.set_enabled(val) + plugin.set_option("disabled", not val) self.close() return True diff --git a/portato/gui/gui_helper.py b/portato/gui/gui_helper.py index e827a22..358f56e 100644 --- a/portato/gui/gui_helper.py +++ b/portato/gui/gui_helper.py @@ -459,9 +459,11 @@ class EmergeQueue: self.title_update(title) time.sleep(0.5) - if self.title_update: self.title_update(None) + if self.process is None: # someone resetted this + return + @plugin.hook("after_emerge", packages = packages, retcode = self.process.returncode) def update_packages(): for p in packages: diff --git a/portato/gui/qt/terminal.py b/portato/gui/qt/terminal.py index 91d2e94..23e090a 100644 --- a/portato/gui/qt/terminal.py +++ b/portato/gui/qt/terminal.py @@ -13,8 +13,9 @@ from PyQt4 import Qt from Queue import Queue -from threading import Thread -from os import read +from threading import Thread, currentThread +from os import read, close +import errno try: from curses.ascii import ctrl @@ -45,6 +46,13 @@ class DeleteEvent (Qt.QEvent): Qt.QEvent.__init__(self, self.TYPE) self.del_type = type +class SetPtyEvent (Qt.QEvent): + TYPE = Qt.QEvent.Type(1003) + + def __init__ (self, pty): + Qt.QEvent.__init__(self, self.TYPE) + self.pty = pty + class BoldFormat (Qt.QTextCharFormat): def __init__(self): @@ -112,6 +120,11 @@ class QtConsole (Console, Qt.QTextEdit): # set black bg self.palette().setColor(Qt.QPalette.Base, Qt.QColor("black")) + + # set highlighting colors ... XXX: for some reasons this does not work ... Qt sucks + self.palette().setColor(Qt.QPalette.Highlight, Qt.QColor("white")) + self.palette().setColor(Qt.QPalette.HighlightedText, Qt.QColor("black")) + self.setBackgroundRole(Qt.QPalette.Base) self.setAutoFillBackground(True) @@ -151,6 +164,11 @@ class QtConsole (Console, Qt.QTextEdit): self._deletePrev(event.del_type) event.accept() return True + + elif event.type() == SetPtyEvent.TYPE: + self.set_pty(event.pty) + event.accept() + return True event.ignore() return False @@ -207,6 +225,10 @@ class QtConsole (Console, Qt.QTextEdit): self.current.start() def set_pty (self, pty): + if currentThread().getName() != "MainThread": + Qt.QCoreApplication.postEvent(self, SetPtyEvent(pty)) + return + if not self.running: self.pty = pty self.start_new_thread() @@ -215,6 +237,7 @@ class QtConsole (Console, Qt.QTextEdit): else: # quit current thread self.run = False self.clear() + close(self.pty) self.pty = pty # set this after clearing to lose no chars :) self.start_new_thread() @@ -226,7 +249,13 @@ class QtConsole (Console, Qt.QTextEdit): got_cr = False while self.run: - s = read(self.pty, 1) + try: + s = read(self.pty, 1) + except OSError, e: # bug in Python with the subprocess module + if e.errno == errno.EINTR: + continue + raise + if s == "": break # nothing read -> finish if self.isNotWrapping and s == "\n": diff --git a/portato/gui/qt/tree.py b/portato/gui/qt/tree.py index 6e9950f..7c0fa4c 100644 --- a/portato/gui/qt/tree.py +++ b/portato/gui/qt/tree.py @@ -72,7 +72,7 @@ class QtTree (Tree): iter += 1 # next iter ... newIt = iter.value() - if newIt.parent() != it.parent(): # stop if we left the current parent + if not newIt or newIt.parent() != it.parent(): # stop if we left the current parent return None else: return newIt diff --git a/portato/gui/qt/windows.py b/portato/gui/qt/windows.py index 3bd9296..5f1100f 100644 --- a/portato/gui/qt/windows.py +++ b/portato/gui/qt/windows.py @@ -116,7 +116,7 @@ class PluginDialog (Window): @Qt.pyqtSignature("") def on_buttonBox_accepted(self): for pluginKey, value in self.changedPlugins.iteritems(): - self.plugins[pluginKey].set_enabled(value) + self.plugins[pluginKey].set_option("disabled", not value) self.accept() -- cgit v1.2.3-54-g00ecf