Add tasks to the home window. A bunch of fixes.

This commit is contained in:
Marco Pesenti Gritti 2006-07-10 13:42:34 +02:00
parent 1cc14e406a
commit 9f9f420863
6 changed files with 92 additions and 20 deletions

View File

@ -135,7 +135,7 @@ class BrowserActivity(Activity):
self.set_mode(BrowserActivity.LEADING) self.set_mode(BrowserActivity.LEADING)
def __title_cb(self, embed): def __title_cb(self, embed):
self.set_tab_text(embed.get_title()) self.set_title(embed.get_title())
def __shared_location_changed_cb(self, model, key): def __shared_location_changed_cb(self, model, key):
self.set_has_changes(True) self.set_has_changes(True)

View File

@ -1,14 +1,15 @@
from gettext import gettext as _ from gettext import gettext as _
import gtk import gtk
import wnck
from sugar.activity import Activity from sugar.activity import Activity
class NewActivityButton(gtk.MenuToolButton): class NewActivityButton(gtk.MenuToolButton):
def __init__(self, shell): def __init__(self, home):
gtk.MenuToolButton.__init__(self, None, _('New Activity')) gtk.MenuToolButton.__init__(self, None, _('New Activity'))
self._shell = shell self._home = home
self.set_menu(gtk.Menu()) self.set_menu(gtk.Menu())
self.connect("show-menu", self.__show_menu_cb) self.connect("show-menu", self.__show_menu_cb)
@ -16,7 +17,7 @@ class NewActivityButton(gtk.MenuToolButton):
def __show_menu_cb(self, button): def __show_menu_cb(self, button):
menu = gtk.Menu() menu = gtk.Menu()
for activity_info in self._shell.get_registry().list_activities(): for activity_info in self._home.list_activities():
item = gtk.MenuItem(activity_info.get_title(), False) item = gtk.MenuItem(activity_info.get_title(), False)
name = activity_info.get_name() name = activity_info.get_name()
item.connect('activate', self.__menu_item_activate_cb, name) item.connect('activate', self.__menu_item_activate_cb, name)
@ -26,7 +27,7 @@ class NewActivityButton(gtk.MenuToolButton):
self.set_menu(menu) self.set_menu(menu)
def __menu_item_activate_cb(self, item, name): def __menu_item_activate_cb(self, item, name):
Activity.create(name) self._home.create(name)
class Toolbar(gtk.Toolbar): class Toolbar(gtk.Toolbar):
def __init__(self, shell): def __init__(self, shell):
@ -36,15 +37,66 @@ class Toolbar(gtk.Toolbar):
self.insert(new_activity_button, -1) self.insert(new_activity_button, -1)
new_activity_button.show() new_activity_button.show()
class ActivityGrid(gtk.VBox):
def __init__(self, home):
gtk.VBox.__init__(self)
self._home = home
self.update()
def _add_all(self):
screen = wnck.screen_get_default()
for window in screen.get_windows():
if not window.is_skip_tasklist():
self.add(window)
def _remove_all(self):
for child in self.get_children():
self.remove(child)
def add(self, window):
button = gtk.Button(window.get_name())
button.connect('clicked', self.__button_clicked_cb, window)
self.pack_start(button, False)
button.show()
def update(self):
self._remove_all()
self._add_all()
def __button_clicked_cb(self, button, window):
self._home.activate(window)
class HomeWindow(gtk.Window): class HomeWindow(gtk.Window):
def __init__(self, shell): def __init__(self, shell):
gtk.Window.__init__(self) gtk.Window.__init__(self)
self._shell = shell
vbox = gtk.VBox() vbox = gtk.VBox()
toolbar = Toolbar(shell) toolbar = Toolbar(self)
vbox.pack_start(toolbar, False) vbox.pack_start(toolbar, False)
toolbar.show() toolbar.show()
self._grid = ActivityGrid(self)
vbox.pack_start(self._grid)
self._grid.show()
self.add(vbox) self.add(vbox)
vbox.show() vbox.show()
def list_activities(self):
return self._shell.get_registry().list_activities()
def create(self, activity_name):
Activity.create(activity_name)
self.hide()
def activate(self, activity_window):
activity_window.activate(gtk.get_current_event_time())
self.hide()
def show(self):
self._grid.update()
gtk.Window.show(self)

View File

@ -51,7 +51,6 @@ class PresenceWindow(gtk.Window):
self._share_button.set_sensitive(False) self._share_button.set_sensitive(False)
else: else:
self._share_button.set_sensitive(True) self._share_button.set_sensitive(True)
self._activity.connect('shared', lambda w: self._share_button.set_sensitive(False))
else: else:
self._share_button.set_sensitive(False) self._share_button.set_sensitive(False)

View File

@ -11,6 +11,7 @@ from sugar import keybindings
from sugar.activity import Activity from sugar.activity import Activity
from PresenceWindow import PresenceWindow from PresenceWindow import PresenceWindow
from sugar.chat.ActivityChat import ActivityChat from sugar.chat.ActivityChat import ActivityChat
from Owner import ShellOwner
class ShellDbusService(dbus.service.Object): class ShellDbusService(dbus.service.Object):
def __init__(self, shell, bus_name): def __init__(self, shell, bus_name):
@ -41,6 +42,8 @@ class Shell(gobject.GObject):
def __init__(self): def __init__(self):
gobject.GObject.__init__(self) gobject.GObject.__init__(self)
self._screen = wnck.screen_get_default()
def start(self): def start(self):
self._console = ConsoleLogger() self._console = ConsoleLogger()
keybindings.setup_global_keys(self._console.get_window(), self) keybindings.setup_global_keys(self._console.get_window(), self)
@ -52,6 +55,8 @@ class Shell(gobject.GObject):
bus_name = dbus.service.BusName('com.redhat.Sugar.Shell', bus=session_bus) bus_name = dbus.service.BusName('com.redhat.Sugar.Shell', bus=session_bus)
ShellDbusService(self, bus_name) ShellDbusService(self, bus_name)
self._owner = ShellOwner()
self._registry = ActivityRegistry() self._registry = ActivityRegistry()
self._home_window = HomeWindow(self) self._home_window = HomeWindow(self)
@ -59,7 +64,9 @@ class Shell(gobject.GObject):
self._home_window.show() self._home_window.show()
self._presence_window = PresenceWindow(self) self._presence_window = PresenceWindow(self)
self._presence_window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
self._presence_window.set_skip_taskbar_hint(True) self._presence_window.set_skip_taskbar_hint(True)
self._presence_window.set_decorated(False)
keybindings.setup_global_keys(self._presence_window, self) keybindings.setup_global_keys(self._presence_window, self)
self._chat_windows = {} self._chat_windows = {}
@ -73,15 +80,22 @@ class Shell(gobject.GObject):
def toggle_home(self): def toggle_home(self):
self._toggle_window_visibility(self._home_window) self._toggle_window_visibility(self._home_window)
def get_current_activity(self): def get_activity_from_xid(self, xid):
window = wnck.screen_get_default().get_active_window()
if window and not window.is_skip_tasklist():
bus = dbus.SessionBus() bus = dbus.SessionBus()
xid = window.get_xid()
service = Activity.ACTIVITY_SERVICE_NAME + "%s" % xid service = Activity.ACTIVITY_SERVICE_NAME + "%s" % xid
path = Activity.ACTIVITY_SERVICE_PATH + "/%s" % xid path = Activity.ACTIVITY_SERVICE_PATH + "/%s" % xid
proxy_obj = bus.get_object(service, path) proxy_obj = bus.get_object(service, path)
return dbus.Interface(proxy_obj, 'com.redhat.Sugar.Activity') return dbus.Interface(proxy_obj, 'com.redhat.Sugar.Activity')
def get_current_activity(self):
window = self._screen.get_active_window()
if window and window.is_skip_tasklist():
window = self._screen.get_previously_active_window()
if window and not window.is_skip_tasklist():
return self.get_activity_from_xid(window.get_xid())
else: else:
return None return None
@ -93,20 +107,25 @@ class Shell(gobject.GObject):
if not self._chat_windows.has_key(activity_id): if not self._chat_windows.has_key(activity_id):
window = gtk.Window() window = gtk.Window()
window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
window.set_skip_taskbar_hint(True) window.set_skip_taskbar_hint(True)
window.set_decorated(False)
keybindings.setup_global_keys(window, self) keybindings.setup_global_keys(window, self)
chat = ActivityChat(activity) chat = ActivityChat(activity)
window.add(chat) window.add(chat)
chat.show() chat.show()
self._chat_windows[activity_id] = window self._chat_windows[activity_id] = window
self._toggle_window_visibility(self._chat_windows[activity_id]) else:
window = self._chat_windows[activity_id]
window.move(210, 10)
window.resize(380, 440)
self._toggle_window_visibility(window)
self._presence_window.move(10, 10)
self._presence_window.resize(180, 440)
self._presence_window.set_activity(activity) self._presence_window.set_activity(activity)
self._toggle_window_visibility(self._presence_window) self._toggle_window_visibility(self._presence_window)
else:
self._presence_window.hide()
for window in self._chat_windows.values():
window.hide()
def toggle_console(self): def toggle_console(self):
self._toggle_window_visibility(self._console.get_window()) self._toggle_window_visibility(self._console.get_window())

View File

@ -179,7 +179,7 @@ class Activity(gtk.Window):
self.connect('realize', self.__realize) self.connect('realize', self.__realize)
self.show() self.present()
def __realize(self, window): def __realize(self, window):
if not self._dbus_service: if not self._dbus_service:

View File

@ -13,6 +13,8 @@ def setup_global_keys(window, shell = None):
window.connect("key-press-event", __key_press_event_cb, shell) window.connect("key-press-event", __key_press_event_cb, shell)
def __key_press_event_cb(window, event, shell): def __key_press_event_cb(window, event, shell):
if event.keyval == gtk.keysyms.F1:
shell.toggle_home()
if event.keyval == gtk.keysyms.F2: if event.keyval == gtk.keysyms.F2:
shell.toggle_people() shell.toggle_people()
if event.keyval == gtk.keysyms.F3: if event.keyval == gtk.keysyms.F3: