Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar-emulator
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2007-03-16 17:12:47 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2007-03-16 17:12:47 (GMT)
commitc9f28b7317fab9a6d824cac9ef3eedd39fba4948 (patch)
treed49a28e948d7503169c46fe97ef3dc93d1be4ba7 /sugar-emulator
parent8b6af7efa56599fd4edb81471fe92253549edb37 (diff)
Rework the emulator. Move matchbox in the shell.
Diffstat (limited to 'sugar-emulator')
-rwxr-xr-xsugar-emulator59
1 files changed, 50 insertions, 9 deletions
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)