Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Ortiz <rafael@activitycentral.com>2011-03-25 02:10:10 (GMT)
committer Rafael Ortiz <rafael@activitycentral.com>2011-03-25 02:10:10 (GMT)
commitc3c97e4844945fae15a55942af06af185fa1c5d6 (patch)
treed9541befe1c6043108ef629875ec212fbd18600c
parent8afa0a514fc6102e54d8bb27bc5786c52e0b1681 (diff)
Disables idle suspend on XO while any of the stopwatches are
running by James Cameron
-rw-r--r--powerd.py51
-rw-r--r--stopwatch.py5
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