From d6ec6db8809659e827a2d5f6387451084e99338c Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Thu, 20 Jul 2006 10:13:47 +0000 Subject: Make the console contextual to the activity and use the window manager to activate it. --- (limited to 'shell') diff --git a/shell/ActivityHost.py b/shell/ActivityHost.py index c9d6dcb..fb17d77 100644 --- a/shell/ActivityHost.py +++ b/shell/ActivityHost.py @@ -14,6 +14,7 @@ class ActivityHost: self._activity = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Activity') self._id = self._activity.get_id() + self._default_type = self._activity.get_default_type() self._window = gtk.gdk.window_foreign_new(xid) def get_id(self): @@ -25,6 +26,9 @@ class ActivityHost: def get_shared(self): return self._activity.get_shared() + def get_default_type(self): + return self._default_type + def show_dialog(self, dialog): dialog.show() dialog.window.set_transient_for(self._window) diff --git a/shell/ConsoleLogger.py b/shell/ConsoleLogger.py deleted file mode 100644 index 4c3eee2..0000000 --- a/shell/ConsoleLogger.py +++ /dev/null @@ -1,49 +0,0 @@ -import gtk -import dbus.service - -class ConsoleLogger(dbus.service.Object): - def __init__(self): - session_bus = dbus.SessionBus() - bus_name = dbus.service.BusName('com.redhat.Sugar.Logger', bus=session_bus) - object_path = '/com/redhat/Sugar/Logger' - dbus.service.Object.__init__(self, bus_name, object_path) - - self._window = gtk.Window() - self._window.set_title("Console") - self._window.connect("delete_event", lambda w, e: w.hide_on_delete()) - - self._nb = gtk.Notebook() - self._window.add(self._nb) - self._nb.show() - - self._consoles = {} - - def get_window(self): - return self._window - - def _create_console(self, application): - sw = gtk.ScrolledWindow() - sw.set_policy(gtk.POLICY_AUTOMATIC, - gtk.POLICY_AUTOMATIC) - - console = gtk.TextView() - console.set_wrap_mode(gtk.WRAP_WORD) - - sw.add(console) - console.show() - - self._nb.append_page(sw, gtk.Label(application)) - sw.show() - - return console - - @dbus.service.method('com.redhat.Sugar.Logger') - def log(self, application, message): - if self._consoles.has_key(application): - console = self._consoles[application] - else: - console = self._create_console(application) - self._consoles[application] = console - - buf = console.get_buffer() - buf.insert(buf.get_end_iter(), message) diff --git a/shell/ConsoleWindow.py b/shell/ConsoleWindow.py new file mode 100644 index 0000000..b5d977e --- /dev/null +++ b/shell/ConsoleWindow.py @@ -0,0 +1,26 @@ +import gtk + +class ConsoleWindow(gtk.Window): + def __init__(self): + gtk.Window.__init__(self) + + self.set_default_size(620, 440) + self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.set_title("Console") + self.connect("delete_event", lambda w, e: w.hide_on_delete()) + + sw = gtk.ScrolledWindow() + sw.set_policy(gtk.POLICY_AUTOMATIC, + gtk.POLICY_AUTOMATIC) + + self._console = gtk.TextView() + self._console.set_wrap_mode(gtk.WRAP_WORD) + sw.add(self._console) + self._console.show() + + self.add(sw) + sw.show() + + def log(self, message): + buf = self._console.get_buffer() + buf.insert(buf.get_end_iter(), message) diff --git a/shell/PeopleWindow.py b/shell/PeopleWindow.py index 33665ab..3d999c3 100644 --- a/shell/PeopleWindow.py +++ b/shell/PeopleWindow.py @@ -9,6 +9,7 @@ class PeopleWindow(gtk.Window): self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.set_default_size(620, 440) + self.connect("delete_event", lambda w, e: w.hide_on_delete()) hbox = gtk.HBox(False, 12) hbox.set_border_width(12) diff --git a/shell/Shell.py b/shell/Shell.py index 89ac549..bc42645 100755 --- a/shell/Shell.py +++ b/shell/Shell.py @@ -9,9 +9,9 @@ from sugar.LogWriter import LogWriter from ConsoleLogger import ConsoleLogger from ActivityRegistry import ActivityRegistry from HomeWindow import HomeWindow -from sugar import keybindings from sugar import env from PeopleWindow import PeopleWindow +from ConsoleWindow import ConsoleWindow from Owner import ShellOwner from PresenceService import PresenceService from ActivityHost import ActivityHost @@ -24,22 +24,29 @@ class ShellDbusService(dbus.service.Object): def __show_people_idle(self): self._shell.show_people() + def __show_console_idle(self): + self._shell.show_console() + + def __log_idle(self, (module_id, message)): + self._shell.log(module_id, message) + @dbus.service.method('com.redhat.Sugar.Shell') def show_people(self): gobject.idle_add(self.__show_people_idle) @dbus.service.method('com.redhat.Sugar.Shell') - def toggle_console(self): - self._shell.toggle_console() + def show_console(self): + gobject.idle_add(self.__show_console_idle) + + @dbus.service.method('com.redhat.Sugar.Shell') + def log(self, module_id, message): + gobject.idle_add(self.__log_idle, (module_id, message)) class Shell: def __init__(self): self._screen = wnck.screen_get_default() def start(self): - self._console = ConsoleLogger() - keybindings.setup_global_keys(self._console.get_window(), self) - log_writer = LogWriter("Shell", False) log_writer.start() @@ -55,16 +62,10 @@ class Shell: self._registry.scan_directory(os.path.join(env.get_user_dir(), 'activities')) self._home_window = HomeWindow(self) - keybindings.setup_global_keys(self._home_window, self) self._home_window.show() self._people_windows = {} - - def _toggle_window_visibility(self, window): - if window.get_property('visible'): - window.hide() - else: - window.show() + self._console_windows = {} def get_current_activity(self): window = self._screen.get_active_window() @@ -73,25 +74,34 @@ class Shell: else: return None - def __people_dialog_delete_cb(self, window, event): - window.hide() - return True - def show_people(self): activity = self.get_current_activity() if activity: if not self._people_windows.has_key(activity.get_id()): dialog = PeopleWindow(self, activity) - dialog.connect('delete-event', self.__people_dialog_delete_cb) - keybindings.setup_global_keys(dialog, self) self._people_windows[activity.get_id()] = dialog else: dialog = self._people_windows[activity.get_id()] - activity.show_dialog(dialog) - def toggle_console(self): - self._toggle_window_visibility(self._console.get_window()) + def get_console(self, module_id): + if not self._console_windows.has_key(module_id): + dialog = ConsoleWindow() + self._console_windows[module_id] = dialog + else: + dialog = self._console_windows[module_id] + return dialog + + def show_console(self): + activity = self.get_current_activity() + if activity: + module = self._registry.get_activity(activity.get_default_type()) + console = self.get_console(module.get_id()) + activity.show_dialog(console) + + def log(self, module_id, message): + console = self.get_console(module_id) + console.log(message) def get_registry(self): return self._registry diff --git a/shell/data/kbdconfig b/shell/data/kbdconfig index 3070536..ef9d96a 100644 --- a/shell/data/kbdconfig +++ b/shell/data/kbdconfig @@ -7,4 +7,5 @@ c=close f1=desktop f2=!sugar-people +f3=!sugar-console f4=!sugar-activity org.sugar.Terminal diff --git a/shell/sugar-console b/shell/sugar-console new file mode 100755 index 0000000..ed9c162 --- /dev/null +++ b/shell/sugar-console @@ -0,0 +1,8 @@ +#!/usr/bin/python + +import dbus + +bus = dbus.SessionBus() +proxy_obj = bus.get_object('com.redhat.Sugar.Shell', '/com/redhat/Sugar/Shell') +shell = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Shell') +shell.show_console() diff --git a/shell/sugar-people b/shell/sugar-people index 056dca0..60d82db 100755 --- a/shell/sugar-people +++ b/shell/sugar-people @@ -6,5 +6,3 @@ bus = dbus.SessionBus() proxy_obj = bus.get_object('com.redhat.Sugar.Shell', '/com/redhat/Sugar/Shell') shell = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Shell') shell.show_people() - - -- cgit v0.9.1