diff options
author | Rafael Ortiz <rafael@activitycentral.com> | 2011-03-25 02:10:10 (GMT) |
---|---|---|
committer | Rafael Ortiz <rafael@activitycentral.com> | 2011-03-25 02:10:10 (GMT) |
commit | c3c97e4844945fae15a55942af06af185fa1c5d6 (patch) | |
tree | d9541befe1c6043108ef629875ec212fbd18600c | |
parent | 8afa0a514fc6102e54d8bb27bc5786c52e0b1681 (diff) |
Disables idle suspend on XO while any of the stopwatches are
running by James Cameron
-rw-r--r-- | powerd.py | 51 | ||||
-rw-r--r-- | stopwatch.py | 5 |
2 files changed, 56 insertions, 0 deletions
diff --git a/powerd.py b/powerd.py new file mode 100644 index 0000000..88b4e84 --- /dev/null +++ b/powerd.py @@ -0,0 +1,51 @@ +# Copyright (C) 2011 One Laptop per Child +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty ofwa +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import os + + +def marker(): + """ filesystem path of per-process inhibit file """ + return os.path.join('/var/run/powerd-inhibit-suspend', str(os.getpid())) + + +class Suspend(): + """ control of powerd idle suspend, + reference counted, + does nothing if powerd is not present """ + + def __init__(self): + self.references = 0 + + def inhibit(self): + """ inhibit suspend for this process """ + if self.references == 0: + try: + file(marker(), 'w').write('') + except: + return + self.references += 1 + + def uninhibit(self): + """ uninhibit suspend for this process """ + self.references -= 1 + if self.references > 0: + return + try: + os.remove(marker()) + except: + pass + self.references = 0 diff --git a/stopwatch.py b/stopwatch.py index 4ae43dd..d24f0e3 100644 --- a/stopwatch.py +++ b/stopwatch.py @@ -26,6 +26,9 @@ import threading import locale import pango from gettext import gettext +import powerd + +suspend = powerd.Suspend() class WatchModel(): STATE_PAUSED = 1 @@ -316,8 +319,10 @@ class OneWatchView(): self._logger.debug("run button pressed: " + str(t)) if self._run_button.get_active(): #button has _just_ been set active action = WatchModel.RUN_EVENT + suspend.inhibit() else: action = WatchModel.PAUSE_EVENT + suspend.uninhibit() self._watch_model.add_event_from_view((self._timer.get_offset() + t, action)) return True |