X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fgtk_toolbox.py;fp=src%2Fgtk_toolbox.py;h=5cf4931c559480ecae980f1eb097aaa8e31e77e0;hb=dab1500bb3bae454db1e9b20dd10cee930875bde;hp=c7738a323949c663eb67b65e9051ce39e7abfffb;hpb=1345ac165ef85b42e08e0d50c6e79f59e4c59ebd;p=doneit diff --git a/src/gtk_toolbox.py b/src/gtk_toolbox.py index c7738a3..5cf4931 100644 --- a/src/gtk_toolbox.py +++ b/src/gtk_toolbox.py @@ -9,7 +9,7 @@ import sys import traceback -import datetime +import functools import contextlib import warnings @@ -126,6 +126,55 @@ class ContextHandler(object): self._respond(position) +def make_idler(func): + """ + Decorator that makes a generator-function into a function that will continue execution on next call + """ + a = [] + + @functools.wraps(func) + def decorated_func(*args, **kwds): + if not a: + a.append(func(*args, **kwds)) + try: + a[0].next() + return True + except StopIteration: + del a[:] + return False + + return decorated_func + + +def asynchronous_gtk_message(original_func): + """ + @note Idea came from http://www.aclevername.com/articles/python-webgui/ + """ + + def execute(allArgs): + args, kwargs = allArgs + original_func(*args, **kwargs) + + @functools.wraps(original_func) + def delayed_func(*args, **kwargs): + gobject.idle_add(execute, (args, kwargs)) + + return delayed_func + + +def synchronous_gtk_message(original_func): + """ + @note Idea came from http://www.aclevername.com/articles/python-webgui/ + """ + + @functools.wraps(original_func) + def immediate_func(*args, **kwargs): + with gtk_lock(): + return original_func(*args, **kwargs) + + return immediate_func + + class LoginWindow(object): def __init__(self, widgetTree): @@ -243,11 +292,11 @@ class ErrorDisplay(object): def push_exception(self, exception = None): if exception is None: - userMessage = sys.exc_value.message - warningMessage = traceback.format_exc() + userMessage = str(sys.exc_value) + warningMessage = str(traceback.format_exc()) else: - userMessage = exception.message - warningMessage = exception + userMessage = str(exception) + warningMessage = str(exception) self.push_message(userMessage) warnings.warn(warningMessage, stacklevel=3) @@ -481,6 +530,7 @@ if __name__ == "__main__": win.show_all() if False: + import datetime cal = PopupCalendar(None, datetime.datetime.now()) cal._popupWindow.connect("destroy", lambda w: gtk.main_quit()) cal.run()