Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/activity.py
diff options
context:
space:
mode:
authorC. Scott Ananian <cscott@laptop.org>2007-12-27 07:55:05 (GMT)
committer C. Scott Ananian <cscott@laptop.org>2008-05-20 19:05:58 (GMT)
commit44f12314acd67182c23feae9a7d1b76b2fcb08b8 (patch)
treefd3125219ed529d60633c920fdcb5972272d4839 /activity.py
parent3daf1636c1b24826f88cda324949c958a71750fa (diff)
New PyGameActivity class in activity.py.
PyGameActivity can be used to properly wrap a Pippy pygame activity in an activity frame, with toolbar, full-screen mode, etc.
Diffstat (limited to 'activity.py')
-rw-r--r--activity.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/activity.py b/activity.py
index 6989cec..fca1a90 100644
--- a/activity.py
+++ b/activity.py
@@ -123,3 +123,37 @@ class VteActivity(ViewSourceActivity):
def on_child_exit(self, widget):
"""This method is invoked when the user's script exits."""
pass # override in subclass
+
+class PyGameActivity(ViewSourceActivity):
+ """Activity wrapper for a pygame."""
+ def __init__(self, handle):
+ # fork pygame before we initialize the activity.
+ import os, pygame, sys
+ pygame.init()
+ windowid = pygame.display.get_wm_info()['wmwindow']
+ self.child_pid = os.fork()
+ if self.child_pid == 0:
+ library_path = os.path.join(activity.get_bundle_path(), 'library')
+ pippy_app_path = os.path.join(activity.get_bundle_path(), 'pippy_app.py')
+ sys.path[0:0] = [ library_path ]
+ g = globals()
+ g['__name__']='__main__'
+ execfile(pippy_app_path, g, g) # start pygame
+ sys.exit(0)
+ super(PyGameActivity, self).__init__(handle)
+ import gobject, gtk, os
+ toolbox = activity.ActivityToolbox(self)
+ # we don't support share/keep (yet?)
+ toolbar = toolbox.get_activity_toolbar()
+ toolbar.share.hide() # this should share bundle.
+ toolbar.keep.hide()
+ self.set_toolbox(toolbox)
+ toolbox.show()
+ socket = gtk.Socket()
+ socket.set_flags(socket.flags() | gtk.CAN_FOCUS)
+ socket.show()
+ self.set_canvas(socket)
+ socket.add_id(windowid)
+ self.show_all()
+ socket.grab_focus()
+ gobject.child_watch_add(self.child_pid, lambda pid, cond: self.close())