~ubuntu-branches/ubuntu/natty/miro/natty

« back to all changes in this revision

Viewing changes to platform/osx/plat/frontends/widgets/threads.py

  • Committer: Bazaar Package Importer
  • Author(s): Bryce Harrington
  • Date: 2011-01-22 02:46:33 UTC
  • mfrom: (1.4.10 upstream) (1.7.5 experimental)
  • Revision ID: james.westby@ubuntu.com-20110122024633-kjme8u93y2il5nmf
Tags: 3.5.1-1ubuntu1
* Merge from debian.  Remaining ubuntu changes:
  - Use python 2.7 instead of python 2.6
  - Relax dependency on python-dbus to >= 0.83.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Miro - an RSS based video player application
2
 
# Copyright (C) 2005-2010 Participatory Culture Foundation
3
 
#
4
 
# This program is free software; you can redistribute it and/or modify
5
 
# it under the terms of the GNU General Public License as published by
6
 
# the Free Software Foundation; either version 2 of the License, or
7
 
# (at your option) any later version.
8
 
#
9
 
# This program is distributed in the hope that it will be useful,
10
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
# GNU General Public License for more details.
13
 
#
14
 
# You should have received a copy of the GNU General Public License
15
 
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
17
 
#
18
 
# In addition, as a special exception, the copyright holders give
19
 
# permission to link the code of portions of this program with the OpenSSL
20
 
# library.
21
 
#
22
 
# You must obey the GNU General Public License in all respects for all of
23
 
# the code used other than OpenSSL. If you modify file(s) with this
24
 
# exception, you may extend this exception to your version of the file(s),
25
 
# but you are not obligated to do so. If you do not wish to do so, delete
26
 
# this exception statement from your version. If you delete this exception
27
 
# statement from all source files in the program, then also delete it here.
28
 
 
29
 
"""miro.plat.frontends.widgets.threads -- Handle UI threading."""
30
 
 
31
 
import logging
32
 
import traceback
33
 
import threading
34
 
 
35
 
from PyObjCTools import AppHelper
36
 
 
37
 
def call_wrapper(func, args, kwargs):
38
 
    def wrapper():
39
 
        try:
40
 
            func(*args, **kwargs)
41
 
        except:
42
 
            msg = "Error when calling %s" % func
43
 
            if args:
44
 
                msg += ' (args: %s)' % (args,)
45
 
            if kwargs:
46
 
                msg += ' (kwargs: %s)' % (kwargs,)
47
 
            logging.warn("%s\n%s", msg, traceback.format_exc())
48
 
    return wrapper
49
 
 
50
 
def call_on_ui_thread(func, *args, **kwargs):
51
 
    """Call a function in the UI thread."""
52
 
    AppHelper.callAfter(call_wrapper(func, args, kwargs))
53
 
 
54
 
def on_ui_thread(func):
55
 
    """Decorator which specifies that a method should always be called on the 
56
 
    main GUI thread.
57
 
    """
58
 
    def scheduled(*args, **kwargs):
59
 
        call_on_ui_thread(func, *args, **kwargs)
60
 
    return scheduled
61
 
 
62
 
def warn_if_not_on_main_thread(name):
63
 
    if threading.currentThread().getName() != 'MainThread':
64
 
        print "WARNING: function %s not on main thread" % name