summaryrefslogtreecommitdiff
path: root/src/leap/gui/utils.py
diff options
context:
space:
mode:
authorkali <kali@leap.se>2012-11-28 02:03:22 +0900
committerkali <kali@leap.se>2012-11-28 02:03:22 +0900
commiteec567a0a26edddb30b15ea4ef67f042c160d5ba (patch)
treeaf102710429fa31d1542e579af75a68a5798e694 /src/leap/gui/utils.py
parent16f19a225a922dd77f3f6c75c94194ebd229fc67 (diff)
move delay function to gui/utils
Diffstat (limited to 'src/leap/gui/utils.py')
-rw-r--r--src/leap/gui/utils.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/leap/gui/utils.py b/src/leap/gui/utils.py
index 8b1e3630..f91ac3ef 100644
--- a/src/leap/gui/utils.py
+++ b/src/leap/gui/utils.py
@@ -1,6 +1,7 @@
"""
utility functions to work with gui objects
"""
+from PyQt4 import QtCore
def layout_widgets(layout):
@@ -8,3 +9,26 @@ def layout_widgets(layout):
return a generator with all widgets in a layout
"""
return (layout.itemAt(i) for i in range(layout.count()))
+
+
+DELAY_MSECS = 50
+
+
+def delay(obj, method_str=None, call_args=None):
+ """
+ Triggers a function or slot with a small delay.
+ this is a mainly a hack to get responsiveness in the ui
+ in cases in which the event loop freezes and the task
+ is not heavy enough to setup a processing queue.
+ """
+ if callable(obj) and not method_str:
+ fun = lambda: obj()
+
+ if method_str:
+ invoke = QtCore.QMetaObject.invokeMethod
+ if call_args:
+ fun = lambda: invoke(obj, method_str, call_args)
+ else:
+ fun = lambda: invoke(obj, method_str)
+
+ QtCore.QTimer().singleShot(DELAY_MSECS, fun)