Merge branch 'master' of git+ssh://dcbw@crank.laptop.org/git/sugar

This commit is contained in:
Dan Williams 2006-06-19 23:18:57 -04:00
commit d57fe375b9
5 changed files with 106 additions and 69 deletions

View File

@ -16,7 +16,7 @@ class LogWriter:
self._logger = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Logger') self._logger = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Logger')
def start(self): def start(self):
if os.environ.has_key('SUGAR_USE_CONSOLE') and self._use_console: if self._use_console:
sys.stdout = self sys.stdout = self
sys.stderr = self sys.stderr = self

View File

@ -1,18 +1,24 @@
import os import os
import signal
from ConfigParser import ConfigParser from ConfigParser import ConfigParser
import pygtk import pygtk
pygtk.require('2.0') pygtk.require('2.0')
import gtk import gtk
from sugar.shell import shell from sugar.shell.shell import Shell
from sugar import env from sugar import env
def start(): class Session:
shell.main() def __init__(self):
self._activity_processes = {}
def start(self):
shell = Shell()
shell.connect('close', self._shell_close_cb)
shell.start()
activities = [] activities = []
activities_dirs = [] activities_dirs = []
for data_dir in env.get_data_dirs(): for data_dir in env.get_data_dirs():
@ -33,9 +39,21 @@ def start():
for activity in activities: for activity in activities:
args = [ 'python', '-m', activity ] args = [ 'python', '-m', activity ]
os.spawnvp(os.P_NOWAIT, 'python', args) pid = os.spawnvp(os.P_NOWAIT, 'python', args)
self._activity_processes[activity] = pid
try: try:
gtk.main() gtk.main()
except KeyboardInterrupt: except KeyboardInterrupt:
print 'Ctrl+C pressed, exiting...' print 'Ctrl+C pressed, exiting...'
self.shutdown()
def _shell_close_cb(self, shell):
self.shutdown()
def shutdown(self):
# FIXME Obviously we want to notify the activities to
# shutt down rather then killing them down forcefully.
for name in self._activity_processes.keys():
print 'Shutting down %s' % (name)
os.kill(self._activity_processes[name], signal.SIGTERM)

View File

@ -54,7 +54,7 @@ class WindowManager:
def set_position(self, position): def set_position(self, position):
self._position = position self._position = position
def _update_size_and_position(self): def _calc_size_and_position(self):
screen_width = self._window.get_screen().get_width() screen_width = self._window.get_screen().get_width()
screen_height = self._window.get_screen().get_height() screen_height = self._window.get_screen().get_height()
@ -69,19 +69,29 @@ class WindowManager:
height = int(screen_height * self._height) height = int(screen_height * self._height)
if self._position is WindowManager.CENTER: if self._position is WindowManager.CENTER:
x = int((screen_width - width) / 2) self._x = int((screen_width - width) / 2)
y = int((screen_height - height) / 2) self._y = int((screen_height - height) / 2)
elif self._position is WindowManager.LEFT: elif self._position is WindowManager.LEFT:
x = - int((1.0 - self._sliding_pos) * width) self._x = - int((1.0 - self._sliding_pos) * width)
y = int((screen_height - height) / 2) self._y = int((screen_height - height) / 2)
elif self._position is WindowManager.TOP: elif self._position is WindowManager.TOP:
x = int((screen_width - width) / 2) self._x = int((screen_width - width) / 2)
y = - int((1.0 - self._sliding_pos) * height) self._y = - int((1.0 - self._sliding_pos) * height)
self._window.move(x, y) self._real_width = width
self._window.resize(width, height) self._real_height = height
def _update_size_and_position(self):
self._calc_size_and_position()
self._window.move(self._x, self._y)
self._window.resize(self._real_width, self._real_height)
def _update_position(self):
self._calc_size_and_position()
self._window.move(self._x, self._y)
def __slide_in_timeout_cb(self): def __slide_in_timeout_cb(self):
if self._sliding_pos == 0:
self._window.show() self._window.show()
left = 1.0 - self._sliding_pos left = 1.0 - self._sliding_pos
@ -90,7 +100,7 @@ class WindowManager:
if self._sliding_pos > .999: if self._sliding_pos > .999:
self._sliding_pos = 1.0 self._sliding_pos = 1.0
self._update_size_and_position() self._update_position()
if self._sliding_pos == 1.0: if self._sliding_pos == 1.0:
return False return False
@ -106,7 +116,7 @@ class WindowManager:
if self._sliding_pos < .001: if self._sliding_pos < .001:
self._sliding_pos = 0 self._sliding_pos = 0
self._update_size_and_position() self._update_position()
if self._sliding_pos == 0: if self._sliding_pos == 0:
self._window.hide() self._window.hide()

View File

@ -472,7 +472,16 @@ class ConsoleLogger(dbus.service.Object):
buf = console.get_buffer() buf = console.get_buffer()
buf.insert(buf.get_end_iter(), message) buf.insert(buf.get_end_iter(), message)
def main(): class Shell(gobject.GObject):
__gsignals__ = {
'close': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
([])),
}
def __init__(self):
gobject.GObject.__init__(self)
def start(self):
console = ConsoleLogger() console = ConsoleLogger()
log_writer = LogWriter("Shell", False) log_writer = LogWriter("Shell", False)
@ -482,6 +491,7 @@ def main():
service = dbus.service.BusName("com.redhat.Sugar.Shell", bus=session_bus) service = dbus.service.BusName("com.redhat.Sugar.Shell", bus=session_bus)
activity_container = ActivityContainer(service, session_bus) activity_container = ActivityContainer(service, session_bus)
activity_container.window.connect('destroy', self.__activity_container_destroy_cb)
activity_container.show() activity_container.show()
wm = WindowManager(activity_container.window) wm = WindowManager(activity_container.window)
@ -493,10 +503,13 @@ def main():
console.set_parent_window(activity_container.window) console.set_parent_window(activity_container.window)
def __activity_container_destroy_cb(self, activity_container):
self.emit('close')
if __name__ == "__main__": if __name__ == "__main__":
main() shell = Shell()
shell.start()
try: try:
gtk.main() gtk.main()
except KeyboardInterrupt: except KeyboardInterrupt:
print 'Ctrl+c pressed, exiting...' print 'Ctrl+c pressed, exiting...'
pass

View File

@ -62,8 +62,6 @@ if curdir == '.':
else: else:
basedir = os.path.dirname(curdir) basedir = os.path.dirname(curdir)
console = False
if os.path.isfile(os.path.join(curdir, '__uninstalled__.py')): if os.path.isfile(os.path.join(curdir, '__uninstalled__.py')):
if basedir == '': if basedir == '':
print 'Running sugar from current directory...' print 'Running sugar from current directory...'
@ -71,18 +69,16 @@ if os.path.isfile(os.path.join(curdir, '__uninstalled__.py')):
print 'Running sugar from ' + basedir + ' ...' print 'Running sugar from ' + basedir + ' ...'
add_to_python_path(basedir) add_to_python_path(basedir)
add_to_python_path(os.path.join(basedir, 'cut-n-paste')) add_to_python_path(os.path.join(basedir, 'cut-n-paste'))
console = True
else: else:
print 'Running the installed sugar...' print 'Running the installed sugar...'
add_to_python_path(os.path.expanduser('~/.sugar/activities')) add_to_python_path(os.path.expanduser('~/.sugar/activities'))
if console: print 'Redirecting output to the console, press ctrl+d to open it.'
os.environ['SUGAR_USE_CONSOLE'] = 'yes'
print 'Redirecting output to the console, press ctrl+d to open it.'
from sugar.session import session from sugar.session.session import Session
session = Session()
session.start() session.start()
if dbus_daemon_pid: if dbus_daemon_pid: