From: Daniel Narvaez <dwnarv...@gmail.com>
Replaced by the sugar-runner module.
Rationale:
* sugar-runner is similar in concept to sugar-emulator but it
provides a better user experience. It runs also from a text
console (into a standard X server). It works around Xephyr
issues like international keyboards and multiple outputs.
It tries to work out of the box everywhere, for example
by offering to tweak Xwrapper.config where necessary.
* sugar-runner is better tested with recent sugar code and
recent distributions. It also integrates with sugar-build.
* A separate module make sense here because most users will
never run this code. It's largely a collection of hacks
which are not necessary when running as a normal desktop
environment.
Why now:
* We are starting to use GSettings, which requires to setup
the xdg directories to avoid conflicts with GNOME. Thus we
would require to make changes to sugar-emulator to setup
these properly. Maintaining two separate implementation of
basically the same thing is a waste of resources.
* We are at the beginning of the cycle, the best time for
potentially disruptive changes.
---
README | 1 -
bin/Makefile.am | 1 -
bin/sugar-emulator | 14 ---
configure.ac | 1 -
data/Makefile.am | 3 -
data/sugar-emulator.desktop.in | 10 ---
src/jarabe/model/session.py | 15 +---
src/jarabe/model/sound.py | 10 +--
src/jarabe/util/Makefile.am | 1 -
src/jarabe/util/emulator.py | 194 ----------------------------------------
src/jarabe/view/keyhandler.py | 5 --
11 files changed, 5 insertions(+), 250 deletions(-)
delete mode 100755 bin/sugar-emulator
delete mode 100644 data/sugar-emulator.desktop.in
delete mode 100644 src/jarabe/util/emulator.py
diff --git a/README b/README
index 1f89810..cfc196e 100644
--- a/README
+++ b/README
@@ -38,7 +38,6 @@ Alt+r Rotate the screen
Alt+o Toggle overlay visibility
Alt+= Open the developer console
Alt+0 Open the developer console
-Alt+q Quit the emulator
Ctrl+s Activate sketch mode in chat
diff --git a/bin/Makefile.am b/bin/Makefile.am
index cb671da..bd38323 100644
--- a/bin/Makefile.am
+++ b/bin/Makefile.am
@@ -1,6 +1,5 @@
python_scripts = \
sugar-control-panel \
- sugar-emulator \
sugar-install-bundle \
sugar-launch
diff --git a/bin/sugar-emulator b/bin/sugar-emulator
deleted file mode 100755
index 308aac7..0000000
--- a/bin/sugar-emulator
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-if [ "$(id -u)" -eq 0 -o "$(id -ru)" -eq 0 ] ; then
- echo Refusing to run as root.
- exit 3
-fi
-
-# Source debug definitions
-if [ -f ~/.sugar/debug ]; then
- . ~/.sugar/debug
-fi
-
-# Start emulator
-python -c "import sys; from jarabe.util import emulator; sys.argv[0]='$0';
emulator.main()" "$@"
diff --git a/configure.ac b/configure.ac
index 137e53a..9eae29e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -48,7 +48,6 @@ bin/Makefile
bin/sugar
data/icons/Makefile
data/Makefile
-data/sugar-emulator.desktop
extensions/cpsection/aboutcomputer/Makefile
extensions/cpsection/aboutme/Makefile
extensions/cpsection/datetime/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index 6a62d23..39bdb35 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -23,9 +23,6 @@ GTKRC_FILES = \
xsessionsdir = $(datadir)/xsessions
xsessions_DATA = sugar.desktop
-applicationsdir = $(datadir)/applications
-applications_DATA = sugar-emulator.desktop
-
mime_xml_in_files = sugar.xml.in
mime_xml_files = $(mime_xml_in_files:.xml.in=.xml)
@INTLTOOL_XML_RULE@
diff --git a/data/sugar-emulator.desktop.in b/data/sugar-emulator.desktop.in
deleted file mode 100644
index 6247bd7..0000000
--- a/data/sugar-emulator.desktop.in
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Encoding=UTF-8
-Name=Sugar
-GenericName=Sugar Emulator
-Comment=The emulator for the Sugar Desktop Environment
-Exec=@prefix@/bin/sugar-emulator
-Terminal=false
-Type=Application
-Icon=sugar-xo
-Categories=Education;Teaching;
diff --git a/src/jarabe/model/session.py b/src/jarabe/model/session.py
index a5cd4a4..a708633 100644
--- a/src/jarabe/model/session.py
+++ b/src/jarabe/model/session.py
@@ -54,9 +54,7 @@ class SessionManager(session.SessionManager):
self.initiate_shutdown()
def shutdown_completed(self):
- if env.is_emulator():
- self._close_emulator()
- elif self._logout_mode != self.MODE_LOGOUT:
+ if self._logout_mode != self.MODE_LOGOUT:
bus = dbus.SystemBus()
if have_systemd():
try:
@@ -93,17 +91,6 @@ class SessionManager(session.SessionManager):
session.SessionManager.shutdown_completed(self)
Gtk.main_quit()
- def _close_emulator(self):
- Gtk.main_quit()
-
- if 'SUGAR_EMULATOR_PID' in os.environ:
- pid = int(os.environ['SUGAR_EMULATOR_PID'])
- os.kill(pid, signal.SIGTERM)
-
- # Need to call this ASAP so the atexit handlers get called before we
- # get killed by the X (dis)connection
- sys.exit()
-
def get_session_manager():
global _session_manager
diff --git a/src/jarabe/model/sound.py b/src/jarabe/model/sound.py
index 851228d..02ad04d 100644
--- a/src/jarabe/model/sound.py
+++ b/src/jarabe/model/sound.py
@@ -54,12 +54,10 @@ def set_muted(new_state):
def save():
- if env.is_emulator() is False:
- client = GConf.Client.get_default()
- client.set_int('/desktop/sugar/sound/volume', get_volume())
+ client = GConf.Client.get_default()
+ client.set_int('/desktop/sugar/sound/volume', get_volume())
def restore():
- if env.is_emulator() is False:
- client = GConf.Client.get_default()
- set_volume(client.get_int('/desktop/sugar/sound/volume'))
+ client = GConf.Client.get_default()
+ set_volume(client.get_int('/desktop/sugar/sound/volume'))
diff --git a/src/jarabe/util/Makefile.am b/src/jarabe/util/Makefile.am
index 3054b5a..17b9253 100644
--- a/src/jarabe/util/Makefile.am
+++ b/src/jarabe/util/Makefile.am
@@ -4,5 +4,4 @@ SUBDIRS = \
sugardir = $(pythondir)/jarabe/util
sugar_PYTHON = \
__init__.py \
- emulator.py \
normalize.py
diff --git a/src/jarabe/util/emulator.py b/src/jarabe/util/emulator.py
deleted file mode 100644
index 72b0d26..0000000
--- a/src/jarabe/util/emulator.py
+++ /dev/null
@@ -1,194 +0,0 @@
-# Copyright (C) 2006-2008, Red Hat, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-import os
-import signal
-import subprocess
-import sys
-import time
-from optparse import OptionParser
-from gettext import gettext as _
-
-from gi.repository import Gtk
-from gi.repository import Gdk
-from gi.repository import GObject
-
-from sugar3 import env
-
-
-ERROR_NO_DISPLAY = 30
-ERROR_NO_SERVER = 31
-default_dimensions = (800, 600)
-
-
-def _run_xephyr(display, dpi, dimensions, fullscreen):
- cmd = ['Xephyr']
- cmd.append(':%d' % display)
- cmd.append('-ac')
- cmd += ['-title', _('Sugar in a window')]
-
- screen_size = (Gdk.Screen.width(), Gdk.Screen.height())
-
- if (not dimensions) and (fullscreen is None) and \
- (screen_size <= default_dimensions):
- # no forced settings, screen too small => fit screen
- fullscreen = True
- elif not dimensions:
- # screen is big enough or user has en/disabled fullscreen manually
- # => use default size (will get ignored for fullscreen)
- dimensions = '%dx%d' % default_dimensions
-
- if not dpi:
- dpi = Gtk.Settings.get_default().get_property('gtk-xft-dpi') / 1024
-
- if fullscreen:
- cmd.append('-fullscreen')
-
- if dimensions:
- cmd.append('-screen')
- cmd.append(dimensions)
-
- if dpi:
- cmd.append('-dpi')
- cmd.append('%d' % dpi)
-
- cmd.append('-noreset')
-
- try:
- pipe = subprocess.Popen(cmd)
-
- except OSError, exc:
- sys.stderr.write('Error executing server: %s\n' % (exc, ))
- return None
-
- return pipe
-
-
-def _check_server(display):
- result = subprocess.call(['xdpyinfo', '-display', ':%d' % display],
- stdout=open(os.devnull, 'w'),
- stderr=open(os.devnull, 'w'))
- return result == 0
-
-
-def _kill_pipe(pipe):
- """Terminate and wait for child process."""
- try:
- os.kill(pipe.pid, signal.SIGTERM)
- except OSError:
- pass
-
- pipe.wait()
-
-
-def _start_xephyr(dpi, dimensions, fullscreen):
- for display in range(30, 40):
- if not _check_server(display):
- pipe = _run_xephyr(display, dpi, dimensions, fullscreen)
- if pipe is None:
- return None, None
-
- for i_ in range(10):
- if _check_server(display):
- return pipe, display
-
- time.sleep(0.1)
-
- _kill_pipe(pipe)
-
- return None, None
-
-
-def _start_window_manager():
- cmd = ['metacity']
-
- cmd.extend(['--no-force-fullscreen'])
-
- GObject.spawn_async(cmd, flags=GObject.SPAWN_SEARCH_PATH)
-
-
-def _setup_env(display, scaling, emulator_pid):
- # We need to remove the environment related to gnome-keyring-daemon,
- # so a new instance of gnome-keyring-daemon can be started and
- # registered properly.
- for variable in ['GPG_AGENT_INFO', 'SSH_AUTH_SOCK',
- 'GNOME_KEYRING_CONTROL', 'GNOME_KEYRING_PID']:
- if variable in os.environ:
- del os.environ[variable]
-
- os.environ['SUGAR_EMULATOR'] = 'yes'
- os.environ['GABBLE_LOGFILE'] = os.path.join(
- env.get_profile_path(), 'logs', 'telepathy-gabble.log')
- os.environ['SALUT_LOGFILE'] = os.path.join(
- env.get_profile_path(), 'logs', 'telepathy-salut.log')
- os.environ['MC_LOGFILE'] = os.path.join(
- env.get_profile_path(), 'logs', 'mission-control.log')
- os.environ['STREAM_ENGINE_LOGFILE'] = os.path.join(
- env.get_profile_path(), 'logs', 'telepathy-stream-engine.log')
- os.environ['DISPLAY'] = ':%d' % (display)
- os.environ['SUGAR_EMULATOR_PID'] = emulator_pid
- os.environ['MC_ACCOUNT_DIR'] = os.path.join(
- env.get_profile_path(), 'accounts')
-
- if scaling:
- os.environ['SUGAR_SCALING'] = scaling
-
-
-def main():
- """Script-level operations"""
-
- parser = OptionParser()
- parser.add_option('-d', '--dpi', dest='dpi', type='int',
- help='Emulator dpi')
- parser.add_option('-s', '--scaling', dest='scaling',
- help='Sugar scaling in %')
- parser.add_option('-i', '--dimensions', dest='dimensions',
- help='Emulator dimensions (ex. 1200x900)')
- parser.add_option('-f', '--fullscreen', dest='fullscreen',
- action='store_true', default=None,
- help='Run emulator in fullscreen mode')
- parser.add_option('-F', '--no-fullscreen', dest='fullscreen',
- action='store_false',
- help='Do not run emulator in fullscreen mode')
- (options, args) = parser.parse_args()
-
- if not os.environ.get('DISPLAY'):
- sys.stderr.write('DISPLAY not set, cannot connect to host X server.\n')
- return ERROR_NO_DISPLAY
-
- server, display = _start_xephyr(options.dpi, options.dimensions,
- options.fullscreen)
- if server is None:
- sys.stderr.write('Failed to start server. Please check output above'
- ' for any error message.\n')
- return ERROR_NO_SERVER
-
- _setup_env(display, options.scaling, str(server.pid))
-
- command = ['dbus-launch', '--exit-with-session']
-
- if not args:
- command.append('sugar')
- else:
- _start_window_manager()
-
- if args[0].endswith('.py'):
- command.append('python')
-
- command.append(args[0])
-
- subprocess.call(command)
- _kill_pipe(server)
diff --git a/src/jarabe/view/keyhandler.py b/src/jarabe/view/keyhandler.py
index cb47d17..d96a88c 100644
--- a/src/jarabe/view/keyhandler.py
+++ b/src/jarabe/view/keyhandler.py
@@ -57,9 +57,7 @@ _actions_table = {
'<alt><shift>Tab': 'previous_window',
'<alt>Escape': 'close_window',
'XF86WebCam': 'open_search',
-# the following are intended for emulator users
'<alt><shift>f': 'frame',
- '<alt><shift>q': 'quit_emulator',
'XF86Search': 'open_search',
'<alt><shift>o': 'open_search'
}
@@ -156,9 +154,6 @@ class KeyHandler(object):
def handle_frame(self, event_time):
self._frame.notify_key_press()
- def handle_quit_emulator(self, event_time):
- session.get_session_manager().shutdown()
-
def handle_open_search(self, event_time):
journalactivity.get_journal().show_journal()