Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac1
-rw-r--r--emulator/Makefile.am4
-rw-r--r--shell/Makefile.am7
-rw-r--r--shell/kbdconfig (renamed from emulator/kbdconfig)0
-rwxr-xr-xshell/sugar-shell44
-rwxr-xr-xsugar-emulator59
-rw-r--r--sugar/Makefile.am1
-rw-r--r--sugar/emulator.py123
-rw-r--r--sugar/env.py3
-rwxr-xr-xtools/build-snapshot.sh2
11 files changed, 85 insertions, 161 deletions
diff --git a/Makefile.am b/Makefile.am
index 7394eac..4606e90 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = emulator lib po shell sugar services tools
+SUBDIRS = lib po shell sugar services tools
ACLOCAL_AMFLAGS = -I m4
diff --git a/configure.ac b/configure.ac
index 8b0dab0..abc04f7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -114,7 +114,6 @@ AM_GLIB_GNU_GETTEXT
AC_OUTPUT([
Makefile
-emulator/Makefile
lib/Makefile
lib/data/Makefile
lib/src/Makefile
diff --git a/emulator/Makefile.am b/emulator/Makefile.am
deleted file mode 100644
index d0386c7..0000000
--- a/emulator/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-confdir = $(pkgdatadir)/emulator
-conf_DATA = kbdconfig
-
-EXTRA_DIST = $(conf_DATA)
diff --git a/shell/Makefile.am b/shell/Makefile.am
index 0d881ed..dfcbcc2 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -7,7 +7,10 @@ bin_SCRIPTS = \
sugardir = $(pkgdatadir)/shell
sugar_PYTHON = \
- __init__.py \
+ __init__.py \
shellservice.py
-EXTRA_DIST = $(bin_SCRIPTS)
+confdir = $(pkgdatadir)/shell
+conf_DATA = kbdconfig
+
+EXTRA_DIST = $(bin_SCRIPTS) $(conf_DATA)
diff --git a/emulator/kbdconfig b/shell/kbdconfig
index 415c69f..415c69f 100644
--- a/emulator/kbdconfig
+++ b/shell/kbdconfig
diff --git a/shell/sugar-shell b/shell/sugar-shell
index 24eb751..753fd67 100755
--- a/shell/sugar-shell
+++ b/shell/sugar-shell
@@ -1,5 +1,4 @@
#!/usr/bin/env python
-
# Copyright (C) 2006, Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
@@ -40,6 +39,34 @@ from model.ShellModel import ShellModel
from shellservice import ShellService
from intro import intro
+def _start_matchbox():
+ cmd = ['matchbox-window-manager']
+
+ cmd.extend(['-use_titlebar', 'no'])
+ cmd.extend(['-theme', 'olpc'])
+ cmd.extend(['-kbdconfig', env.get_shell_path('kbdconfig')])
+
+ gobject.spawn_async(cmd, flags=gobject.SPAWN_SEARCH_PATH)
+
+def _save_session_info():
+ # Save our DBus Session Bus address somewhere it can be found
+ #
+ # WARNING!!! this is going away at some near future point, do not rely on it
+ #
+ dsba_file = os.path.join(env.get_profile_path(), "session.info")
+ f = open(dsba_file, "w")
+
+ cp = ConfigParser()
+ cp.add_section('Session')
+ cp.set('Session', 'dbus_address', os.environ['DBUS_SESSION_BUS_ADDRESS'])
+ cp.set('Session', 'display', gtk.gdk.display_get_default().get_name())
+ cp.write(f)
+
+ f.close()
+
+_save_session_info()
+_start_matchbox()
+
# Do initial setup if needed
key = profile.get_pubkey()
if not key or not len(key):
@@ -48,21 +75,6 @@ if not key or not len(key):
gtk.main()
profile.update()
-# Save our DBus Session Bus address somewhere it can be found
-#
-# WARNING!!! this is going away at some near future point, do not rely on it
-#
-dsba_file = os.path.join(env.get_profile_path(), "session.info")
-f = open(dsba_file, "w")
-
-cp = ConfigParser()
-cp.add_section('Session')
-cp.set('Session', 'dbus_address', os.environ['DBUS_SESSION_BUS_ADDRESS'])
-cp.set('Session', 'display', gtk.gdk.display_get_default().get_name())
-cp.write(f)
-
-f.close()
-
model = ShellModel()
service = ShellService(model)
shell = Shell(model)
diff --git a/sugar-emulator b/sugar-emulator
index 09ebaa8..944b607 100755
--- a/sugar-emulator
+++ b/sugar-emulator
@@ -18,17 +18,63 @@
import os
import sys
+import socket
import pygtk
pygtk.require('2.0')
import gtk
-
-os.environ['SUGAR_EMULATOR'] = 'yes'
+import gobject
from sugar import env
-from sugar.emulator import Emulator
import _sugar
+def _get_display_number():
+ """Find a free display number trying to connect to 6000+ ports"""
+ retries = 20
+ display_number = 1
+ display_is_free = False
+
+ while not display_is_free and retries > 0:
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ try:
+ s.connect(('127.0.0.1', 6000 + display_number))
+ s.close()
+
+ display_number += 1
+ retries -= 1
+ except:
+ display_is_free = True
+
+ if display_is_free:
+ return display_number
+ else:
+ logging.error('Cannot find a free display.')
+ sys.exit(0)
+
+def _start_xephyr(width, height, dpi):
+ display = _get_display_number()
+
+ cmd = [ 'Xephyr' ]
+ cmd.append(':%d' % display)
+ cmd.append('-ac')
+
+ if width > 0 and height > 0:
+ cmd.append('-screen %dx%d' % (width, height))
+ else:
+ cmd.append('-fullscreen')
+
+ if dpi > 0:
+ cmd.append('-dpi')
+ cmd.append(str(dpi))
+
+ result = gobject.spawn_async(cmd, flags=gobject.SPAWN_SEARCH_PATH)
+ pid = result[0]
+
+ os.environ['DISPLAY'] = ":%d" % (display)
+ os.environ['SUGAR_EMULATOR_PID'] = str(pid)
+
+os.environ['SUGAR_EMULATOR'] = 'yes'
+
if len(sys.argv) == 1:
program = 'sugar-shell'
else:
@@ -41,11 +87,6 @@ else:
width = 1200
height = 900
-dpi = min(_sugar.get_screen_dpi(), 96)
-kbd_config = os.path.join(env.get_emulator_path('kbdconfig'))
-
-emulator = Emulator(width, height, dpi)
-emulator.set_keyboard_config(kbd_config)
-emulator.start()
+_start_xephyr(width, height, min(_sugar.get_screen_dpi(), 96))
os.execlp('dbus-launch', 'dbus-launch', '--exit-with-session', program)
diff --git a/sugar/Makefile.am b/sugar/Makefile.am
index 0642fbd..3e8aee2 100644
--- a/sugar/Makefile.am
+++ b/sugar/Makefile.am
@@ -4,7 +4,6 @@ sugardir = $(pythondir)/sugar
sugar_PYTHON = \
__init__.py \
date.py \
- emulator.py \
env.py \
logger.py \
profile.py \
diff --git a/sugar/emulator.py b/sugar/emulator.py
deleted file mode 100644
index 5373255..0000000
--- a/sugar/emulator.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright (C) 2006, Red Hat, Inc.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-import os
-import socket
-import sys
-
-import gobject
-
-from sugar import env
-
-def get_display_number():
- """Find a free display number trying to connect to 6000+ ports"""
- retries = 20
- display_number = 1
- display_is_free = False
-
- while not display_is_free and retries > 0:
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- try:
- s.connect(('127.0.0.1', 6000 + display_number))
- s.close()
-
- display_number += 1
- retries -= 1
- except:
- display_is_free = True
-
- if display_is_free:
- return display_number
- else:
- logging.error('Cannot find a free display.')
- sys.exit(0)
-
-class Process:
- """Object representing one of the session processes"""
-
- def __init__(self, command):
- self._command = command
-
- def get_name(self):
- return self._command
-
- def start(self, standard_output=False):
- args = self._command.split()
- flags = gobject.SPAWN_SEARCH_PATH
- result = gobject.spawn_async(args, flags=flags,
- standard_output=standard_output)
- self.pid = result[0]
- self._stdout = result[2]
-
-class MatchboxProcess(Process):
- def __init__(self, kbd_config):
- options = '-use_titlebar no '
- options += '-theme olpc '
-
- if kbd_config:
- options += '-kbdconfig %s ' % kbd_config
-
- command = 'matchbox-window-manager %s ' % options
- Process.__init__(self, command)
-
- def get_name(self):
- return 'Matchbox'
-
-class XephyrProcess(Process):
- def __init__(self, width, height, dpi):
- self._display = get_display_number()
- cmd = 'Xephyr :%d -ac ' % (self._display)
-
- if width > 0 and height > 0:
- cmd += ' -screen %dx%d' % (width, height)
- else:
- cmd += ' -fullscreen '
-
- if dpi > 0:
- cmd += ' -dpi %d' % (dpi)
-
- Process.__init__(self, cmd)
-
- def get_name(self):
- return 'Xephyr'
-
- def start(self, standard_output=False):
- Process.start(self)
- os.environ['DISPLAY'] = ":%d" % (self._display)
- os.environ['SUGAR_EMULATOR_PID'] = '%d' % self.pid
-
-class Emulator(object):
- """The OLPC emulator"""
- def __init__(self, width, height, dpi):
- self._keyboard_config = None
- self._width = width
- self._height = height
- self._dpi = dpi
-
- def set_keyboard_config(self, config):
- self._keyboard_config = config
-
- def start(self):
- try:
- process = XephyrProcess(self._width, self._height, self._dpi)
- process.start()
- except:
- print 'Cannot run the emulator. You need to install Xephyr'
- sys.exit(0)
-
- process = MatchboxProcess(self._keyboard_config)
- process.start()
diff --git a/sugar/env.py b/sugar/env.py
index 4cdaf2c..4938940 100644
--- a/sugar/env.py
+++ b/sugar/env.py
@@ -66,6 +66,3 @@ def get_service_path(name):
def get_shell_path(path=None):
return _get_prefix_path('share/sugar/shell', path)
-
-def get_emulator_path(path=None):
- return _get_prefix_path('share/sugar/emulator', path)
diff --git a/tools/build-snapshot.sh b/tools/build-snapshot.sh
index cf904bf..1b55685 100755
--- a/tools/build-snapshot.sh
+++ b/tools/build-snapshot.sh
@@ -1,6 +1,6 @@
VERSION=0.63
DATE=`date +%Y%m%d`
-RELEASE=2.52
+RELEASE=2.53
TARBALL=sugar-$VERSION-$RELEASE.${DATE}git.tar.bz2
rm sugar-$VERSION.tar.bz2