Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-07-20 10:13:47 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-07-20 10:13:47 (GMT)
commitd6ec6db8809659e827a2d5f6387451084e99338c (patch)
tree012f022e2116955cbc66be6536d4a4821af006f7 /shell
parent87cb115aa0155291d2473537a3fa2da1400c174f (diff)
Make the console contextual to the activity and use the
window manager to activate it.
Diffstat (limited to 'shell')
-rw-r--r--shell/ActivityHost.py4
-rw-r--r--shell/ConsoleLogger.py49
-rw-r--r--shell/ConsoleWindow.py26
-rw-r--r--shell/PeopleWindow.py1
-rwxr-xr-xshell/Shell.py54
-rw-r--r--shell/data/kbdconfig1
-rwxr-xr-xshell/sugar-console8
-rwxr-xr-xshell/sugar-people2
8 files changed, 72 insertions, 73 deletions
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 @@
<Alt>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()
-
-