Make the console contextual to the activity and use the

window manager to activate it.
master
Marco Pesenti Gritti 18 years ago
parent 87cb115aa0
commit d6ec6db880

@ -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)

@ -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)

@ -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)

@ -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)

@ -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

@ -7,4 +7,5 @@
<Alt>c=close
f1=desktop
f2=!sugar-people
f3=!sugar-console
f4=!sugar-activity org.sugar.Terminal

@ -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()

@ -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()

@ -11,8 +11,8 @@ class LogWriter:
self._use_console = use_console
bus = dbus.SessionBus()
proxy_obj = bus.get_object('com.redhat.Sugar.Logger', '/com/redhat/Sugar/Logger')
self._logger = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Logger')
proxy_obj = bus.get_object('com.redhat.Sugar.Shell', '/com/redhat/Sugar/Shell')
self._logger = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Shell')
def start(self):
if self._use_console:

@ -8,7 +8,6 @@ import gtk
import gobject
from sugar.LogWriter import LogWriter
from sugar import keybindings
import sugar.util
ACTIVITY_SERVICE_NAME = "com.redhat.Sugar.Activity"
@ -129,6 +128,12 @@ class ActivityDbusService(dbus.service.Object):
"""Get the activity identifier"""
return self._activity.get_id()
@dbus.service.method(ACTIVITY_SERVICE_NAME)
def get_default_type(self):
"""Get the activity default type"""
return self._activity.get_default_type()
@dbus.service.method(ACTIVITY_SERVICE_NAME)
def get_shared(self):
"""Get the activity identifier"""
@ -152,8 +157,6 @@ class Activity(gtk.Window):
self._activity_object = None
self._default_type = None
keybindings.setup_global_keys(self)
self.connect('realize', self.__realize)
self.present()

@ -1,17 +0,0 @@
import gtk
import dbus
# FIXME These should be handled by the wm, but it's incovenient
# to do that with matchbox at the moment
def setup_global_keys(window, shell = None):
if not shell:
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')
window.connect("key-press-event", __key_press_event_cb, shell)
def __key_press_event_cb(window, event, shell):
if event.keyval == gtk.keysyms.F3:
shell.toggle_console()
Loading…
Cancel
Save