| 
									
										
										
										
											2007-01-20 13:38:58 +01:00
										 |  |  | #!/usr/bin/env python | 
					
						
							| 
									
										
										
										
											2006-10-15 01:24:45 +02:00
										 |  |  | # Copyright (C) 2006, 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-17 09:39:31 +02:00
										 |  |  | import sys | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											2007-03-09 17:29:03 +01:00
										 |  |  | from ConfigParser import ConfigParser | 
					
						
							| 
									
										
										
										
											2007-03-23 15:05:42 +01:00
										 |  |  | import gettext | 
					
						
							| 
									
										
										
										
											2006-10-17 09:39:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-27 10:35:59 +02:00
										 |  |  | import pygtk | 
					
						
							|  |  |  | pygtk.require('2.0') | 
					
						
							| 
									
										
										
										
											2006-10-16 13:34:43 +02:00
										 |  |  | import gtk | 
					
						
							| 
									
										
										
										
											2006-10-29 06:33:42 +01:00
										 |  |  | import gobject | 
					
						
							| 
									
										
										
										
											2006-10-16 13:34:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-18 00:08:14 +02:00
										 |  |  | from sugar import logger | 
					
						
							| 
									
										
										
										
											2006-10-16 13:34:43 +02:00
										 |  |  | from sugar import profile | 
					
						
							| 
									
										
										
										
											2006-10-17 09:39:31 +02:00
										 |  |  | from sugar import env | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-24 20:00:14 +02:00
										 |  |  | logger.cleanup() | 
					
						
							| 
									
										
										
										
											2006-10-18 00:08:14 +02:00
										 |  |  | logger.start('shell') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-09 17:38:05 +01:00
										 |  |  | sys.path.insert(0, env.get_shell_path()) | 
					
						
							| 
									
										
										
										
											2006-10-17 09:39:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 13:34:43 +02:00
										 |  |  | from view.Shell import Shell | 
					
						
							| 
									
										
										
										
											2007-07-02 14:34:41 +02:00
										 |  |  | from model.shellmodel import ShellModel | 
					
						
							| 
									
										
										
										
											2007-01-27 12:54:56 +01:00
										 |  |  | from shellservice import ShellService | 
					
						
							| 
									
										
										
										
											2007-02-25 23:53:10 +01:00
										 |  |  | from intro import intro | 
					
						
							| 
									
										
										
										
											2006-10-16 13:34:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-16 18:12:47 +01:00
										 |  |  | def _start_matchbox(): | 
					
						
							|  |  |  |     cmd = ['matchbox-window-manager'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     cmd.extend(['-use_titlebar', 'no']) | 
					
						
							| 
									
										
										
										
											2007-05-11 20:31:44 +02:00
										 |  |  |     cmd.extend(['-theme', 'sugar']) | 
					
						
							| 
									
										
										
										
											2007-03-16 18:12:47 +01:00
										 |  |  |     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() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-23 15:05:42 +01:00
										 |  |  | def _setup_translations(): | 
					
						
							|  |  |  |     domain = 'sugar' | 
					
						
							|  |  |  |     gettext.bindtextdomain(domain, env.get_locale_path()) | 
					
						
							|  |  |  |     gettext.textdomain(domain) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-16 18:12:47 +01:00
										 |  |  | _save_session_info() | 
					
						
							|  |  |  | _start_matchbox() | 
					
						
							| 
									
										
										
										
											2007-03-23 15:05:42 +01:00
										 |  |  | _setup_translations() | 
					
						
							| 
									
										
										
										
											2007-03-16 18:12:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-25 23:53:10 +01:00
										 |  |  | # Do initial setup if needed | 
					
						
							|  |  |  | key = profile.get_pubkey()  | 
					
						
							|  |  |  | if not key or not len(key): | 
					
						
							|  |  |  | 	win = intro.IntroWindow() | 
					
						
							|  |  |  | 	win.show_all() | 
					
						
							|  |  |  | 	gtk.main() | 
					
						
							| 
									
										
										
										
											2006-10-17 14:31:04 +02:00
										 |  |  | 	profile.update() | 
					
						
							| 
									
										
										
										
											2006-10-16 13:34:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-13 19:46:07 +02:00
										 |  |  | def check_gabble(bus_name): | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         import dbus | 
					
						
							|  |  |  |         bus = dbus.SessionBus() | 
					
						
							|  |  |  |         bus_object = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') | 
					
						
							|  |  |  |         name = bus_object.GetNameOwner(bus_name, dbus_interface='org.freedesktop.DBus') | 
					
						
							|  |  |  |         if name: | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  |     except dbus.DBusException: | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  |     return False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if os.environ.has_key("TP_DEBUG"): | 
					
						
							|  |  |  |     # Allow the user time to start up telepathy connection managers | 
					
						
							|  |  |  |     # using the Sugar DBus bus address | 
					
						
							|  |  |  |     import time | 
					
						
							|  |  |  |     from telepathy.client import ManagerRegistry | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     registry = ManagerRegistry() | 
					
						
							|  |  |  |     registry.LoadManagers() | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         gabble = registry.services["gabble"] | 
					
						
							|  |  |  |     except KeyError: | 
					
						
							|  |  |  |         raise RuntimeError("Gabble connection manager not found!") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     while not check_gabble(gabble['busname']): | 
					
						
							|  |  |  |         print "Waiting for gabble on: DBUS_SESSION_BUS_ADDRESS=%s" % os.environ["DBUS_SESSION_BUS_ADDRESS"] | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             time.sleep(5) | 
					
						
							|  |  |  |         except KeyboardInterrupt: | 
					
						
							|  |  |  |             print "Got Ctrl+C, continuing..." | 
					
						
							|  |  |  |             break | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 13:34:43 +02:00
										 |  |  | model = ShellModel() | 
					
						
							|  |  |  | shell = Shell(model) | 
					
						
							| 
									
										
										
										
											2007-06-29 18:31:35 +02:00
										 |  |  | service = ShellService(shell) | 
					
						
							| 
									
										
										
										
											2006-10-16 13:34:43 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | try: | 
					
						
							|  |  |  | 	gtk.main() | 
					
						
							|  |  |  | except KeyboardInterrupt: | 
					
						
							|  |  |  | 	print 'Ctrl+C pressed, exiting...' | 
					
						
							| 
									
										
										
										
											2006-12-14 23:21:25 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | os.remove(dsba_file) |