diff options
author | Marco 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) |
commit | c9f28b7317fab9a6d824cac9ef3eedd39fba4948 (patch) | |
tree | d49a28e948d7503169c46fe97ef3dc93d1be4ba7 /sugar-emulator | |
parent | 8b6af7efa56599fd4edb81471fe92253549edb37 (diff) |
Rework the emulator. Move matchbox in the shell.
Diffstat (limited to 'sugar-emulator')
-rwxr-xr-x | sugar-emulator | 59 |
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) |