Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/Shell.py
blob: b0e04d6a80a4061e85fa0404253128ec8f52c925 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import os

import dbus
import gtk
import wnck
import gobject

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 sugar.activity import Activity
from PeopleWindow import PeopleWindow
from Owner import ShellOwner

class ShellDbusService(dbus.service.Object):
	def __init__(self, shell, bus_name):
		dbus.service.Object.__init__(self, bus_name, '/com/redhat/Sugar/Shell')
		self._shell = shell

	def __show_people_idle(self):
		self._shell.show_people()		

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

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

		session_bus = dbus.SessionBus()
		bus_name = dbus.service.BusName('com.redhat.Sugar.Shell', bus=session_bus)
		ShellDbusService(self, bus_name)

		self._owner = ShellOwner()

		self._registry = ActivityRegistry()
		self._registry.scan_directory(env.get_activities_dir())
		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()

	def get_activity_from_xid(self, xid):
		bus = dbus.SessionBus()
		service = Activity.ACTIVITY_SERVICE_NAME + "%s" % xid
		path = Activity.ACTIVITY_SERVICE_PATH + "/%s" % xid
		proxy_obj = bus.get_object(service, path)

		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:
			return None

	def show_people(self):
		activity = self.get_current_activity()

		if activity:
			activity_id = activity.get_id()

			if not self._people_windows.has_key(activity_id):
				window = PeopleWindow(self, activity)
				keybindings.setup_global_keys(window, self)
				self._people_windows[activity_id] = window
			else:
				window = self._people_windows[activity_id]

			self._toggle_window_visibility(window)

	def toggle_console(self):
		self._toggle_window_visibility(self._console.get_window())

	def get_registry(self):
		return self._registry