diff options
author | Morgan Collett <morgan.collett@gmail.com> | 2007-07-11 08:42:27 (GMT) |
---|---|---|
committer | Morgan Collett <morgan.collett@gmail.com> | 2007-07-11 08:42:27 (GMT) |
commit | 8fab49b64ead8fa9104b7df1501cde2fe40bc8b4 (patch) | |
tree | 20aaff0c95262ca0a3c6d613014de1d950e59feb /sugar | |
parent | 66983f0d24b71a2798018873f5c509def40f0e0e (diff) | |
parent | e4bce9271a2db597adb50fce182afe765ac97fa6 (diff) |
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
Diffstat (limited to 'sugar')
-rw-r--r-- | sugar/activity/activity.py | 24 | ||||
-rw-r--r-- | sugar/activity/bundlebuilder.py | 16 | ||||
-rw-r--r-- | sugar/activity/registry.py | 28 | ||||
-rw-r--r-- | sugar/graphics/style.py | 12 | ||||
-rw-r--r-- | sugar/objects/objecttype.py | 23 |
5 files changed, 75 insertions, 28 deletions
diff --git a/sugar/activity/activity.py b/sugar/activity/activity.py index 8a97199..3202703 100644 --- a/sugar/activity/activity.py +++ b/sugar/activity/activity.py @@ -64,11 +64,11 @@ class ActivityToolbar(gtk.Toolbar): self.insert(separator, -1) separator.show() - self.save = ToolButton('document-save') - self.save.set_tooltip(_('Save')) - self.save.connect('clicked', self._save_clicked_cb) - self.insert(self.save, -1) - self.save.show() + self.keep = ToolButton('document-save') + self.keep.set_tooltip(_('Keep')) + self.keep.connect('clicked', self._keep_clicked_cb) + self.insert(self.keep, -1) + self.keep.show() self.share = ToolButton('stock-share-mesh') self.share.set_tooltip(_('Share')) @@ -83,21 +83,21 @@ class ActivityToolbar(gtk.Toolbar): self.insert(separator, -1) separator.show() - self.close = ToolButton('window-close') - self.close.set_tooltip(_('Close')) - self.close.connect('clicked', self._close_clicked_cb) - self.insert(self.close, -1) - self.close.show() + self.stop = ToolButton('activity-stop') + self.stop.set_tooltip(_('Stop')) + self.stop.connect('clicked', self._stop_clicked_cb) + self.insert(self.stop, -1) + self.stop.show() self._update_title_sid = None def _share_clicked_cb(self, button): self._activity.share() - def _save_clicked_cb(self, button): + def _keep_clicked_cb(self, button): self._activity.save() - def _close_clicked_cb(self, button): + def _stop_clicked_cb(self, button): self._activity.close() self._activity.destroy() diff --git a/sugar/activity/bundlebuilder.py b/sugar/activity/bundlebuilder.py index a82d744..8e8c49d 100644 --- a/sugar/activity/bundlebuilder.py +++ b/sugar/activity/bundlebuilder.py @@ -50,26 +50,22 @@ class _DefaultFileList(list): self.append(os.path.join('activity', name)) self.append('activity/activity.info') - self.append('setup.py') if os.path.isfile(_get_source_path('NEWS')): self.append('NEWS') -class _ManifestFileList(list): - def __init__(self, manifest=None): +class _ManifestFileList(_DefaultFileList): + def __init__(self, manifest): + _DefaultFileList.__init__(self) self.append(manifest) f = open(manifest,'r') for line in f.readlines(): stripped_line = line.strip() - if stripped_line: + if stripped_line and not stripped_line in self: self.append(stripped_line) f.close() - defaults = _DefaultFileList() - for path in defaults: - self.append(path) - def _extract_bundle(source_file, dest_dir): if not os.path.exists(dest_dir): os.mkdir(dest_dir) @@ -270,8 +266,8 @@ def cmd_release(bundle_name, manifest): sugar_news += '%s - %d\n\n' % (bundle_name, version) f = open(news_path,'r') - for line in f.readline(): - if len(line) > 0: + for line in f.readlines(): + if len(line.strip()) > 0: sugar_news += line else: break diff --git a/sugar/activity/registry.py b/sugar/activity/registry.py index 171f740..b19abee 100644 --- a/sugar/activity/registry.py +++ b/sugar/activity/registry.py @@ -15,6 +15,8 @@ # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. +import logging + import dbus _SHELL_SERVICE = "org.laptop.Shell" @@ -39,6 +41,11 @@ class ActivityRegistry(object): bus = dbus.SessionBus() bus_object = bus.get_object(_SHELL_SERVICE, _SHELL_PATH) self._registry = dbus.Interface(bus_object, _REGISTRY_IFACE) + self._registry.connect_to_signal('ActivityAdded', self._activity_added_cb) + + # Two caches fo saving some travel across dbus. + self._service_name_to_activity_info = {} + self._mime_type_to_activities = {} def _convert_info_list(self, info_list): result = [] @@ -49,16 +56,33 @@ class ActivityRegistry(object): return result def get_activity(self, service_name): + if self._service_name_to_activity_info.has_key(service_name): + return self._service_name_to_activity_info[service_name] + info_dict = self._registry.GetActivity(service_name) - return _activity_info_from_dict(info_dict) + activity_info = _activity_info_from_dict(info_dict) + + self._service_name_to_activity_info[service_name] = activity_info + return activity_info def find_activity(self, name): info_list = self._registry.FindActivity(name) return self._convert_info_list(info_list) def get_activities_for_type(self, mime_type): + if self._mime_type_to_activities.has_key(mime_type): + return self._mime_type_to_activities[mime_type] + info_list = self._registry.GetActivitiesForType(mime_type) - return self._convert_info_list(info_list) + activities = self._convert_info_list(info_list) + + self._mime_type_to_activities[mime_type] = activities + return activities + + def _activity_added_cb(self, bundle): + logging.debug('ActivityRegistry._activity_added_cb: flushing caches') + self._service_name_to_activity_info.clear() + self._mime_type_to_activities.clear() _registry = None diff --git a/sugar/graphics/style.py b/sugar/graphics/style.py index fedbc9e..1306caa 100644 --- a/sugar/graphics/style.py +++ b/sugar/graphics/style.py @@ -18,6 +18,10 @@ import gtk import pango +def _get_screen_dpi(): + xft_dpi = gtk.settings_get_default().get_property('gtk-xft-dpi') + return float(xft_dpi / 1024) + def _compute_zoom_factor(): return gtk.gdk.screen_width() / 1200.0 @@ -43,17 +47,21 @@ class Font(object): def get_pango_desc(self): return pango.FontDescription(self._desc) +_XO_DPI = 200.0 + _FOCUS_LINE_WIDTH = 2 _TAB_CURVATURE = 1 ZOOM_FACTOR = _compute_zoom_factor() -FONT_SIZE = _zoom(7 * 200 / 72.0) +FONT_SIZE = _zoom(7 * _XO_DPI / _get_screen_dpi()) FONT_NORMAL = Font('Bitstream Vera Sans %d' % FONT_SIZE) FONT_BOLD = Font('Bitstream Vera Sans bold %d' % FONT_SIZE) +FONT_NORMAL_H = _compute_font_height(FONT_NORMAL) +FONT_BOLD_H = _compute_font_height(FONT_BOLD) TOOLBOX_SEPARATOR_HEIGHT = _zoom(9) TOOLBOX_HORIZONTAL_PADDING = _zoom(75) -TOOLBOX_TAB_VBORDER = int((_zoom(36) - FONT_SIZE - _FOCUS_LINE_WIDTH) / 2) +TOOLBOX_TAB_VBORDER = int((_zoom(36) - FONT_NORMAL_H - _FOCUS_LINE_WIDTH) / 2) TOOLBOX_TAB_HBORDER = _zoom(15) - _FOCUS_LINE_WIDTH - _TAB_CURVATURE TOOLBOX_TAB_LABEL_WIDTH = _zoom(150 - 15 * 2) diff --git a/sugar/objects/objecttype.py b/sugar/objects/objecttype.py index dd2da54..a819216 100644 --- a/sugar/objects/objecttype.py +++ b/sugar/objects/objecttype.py @@ -36,20 +36,39 @@ class ObjectType(object): self.name = name self.icon = icon self.mime_types = mime_types + + self._type_id_to_type = {} + self._mime_type_to_type = {} class ObjectTypeRegistry(object): def __init__(self): bus = dbus.SessionBus() bus_object = bus.get_object(_SERVICE, _PATH) self._registry = dbus.Interface(bus_object, _IFACE) + + # Two caches fo saving some travel across dbus. + self._type_id_to_type = {} + self._mime_type_to_type = {} def get_type(self, type_id): + if self._type_id_to_type.has_key(type_id): + return self._type_id_to_type[type_id] + type_dict = self._registry.GetType(type_id) - return _object_type_from_dict(type_dict) + object_type = _object_type_from_dict(type_dict) + + self._type_id_to_type[type_id] = object_type + return object_type def get_type_for_mime(self, mime_type): + if self._mime_type_to_type.has_key(mime_type): + return self._mime_type_to_type[mime_type] + type_dict = self._registry.GetTypeForMIME(mime_type) - return _object_type_from_dict(type_dict) + object_type = _object_type_from_dict(type_dict) + + self._mime_type_to_type[mime_type] = object_type + return object_type _registry = None |