Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2010-12-13 18:17:41 (GMT)
committer Simon Schampijer <simon@schampijer.de>2010-12-13 18:17:41 (GMT)
commit30c82c588b9740681cf85cc696a43c611db04c5c (patch)
tree54fc15717a19cbbc61c3f7d829b05002acd9b6d1
parent62cb0e9595fbfa6e1ef7d1edfb968fef0ea253b4 (diff)
Protected Activities Support #10415
Backport from SL #2087 (Martin Abente) Activities deletion causes troubles during classes. Teachers from Paraguay and Uruguay asked for a mechanism to protect activities from being easily deleted. This patch provides a mechanism that uses a gconf value to determine which activities will not contain the erase option at the list view palette. The gconf value contains a list of activities bundle indentifiers.
-rw-r--r--data/sugar.schemas.in14
-rw-r--r--src/jarabe/desktop/activitieslist.py19
-rw-r--r--src/jarabe/model/bundleregistry.py12
3 files changed, 38 insertions, 7 deletions
diff --git a/data/sugar.schemas.in b/data/sugar.schemas.in
index 454375a..cf234a1 100644
--- a/data/sugar.schemas.in
+++ b/data/sugar.schemas.in
@@ -285,5 +285,19 @@
</locale>
</schema>
+ <schema>
+ <key>/schemas/desktop/sugar/protected_activities</key>
+ <applyto>/desktop/sugar/protected_activities</applyto>
+ <owner>sugar</owner>
+ <type>list</type>
+ <list_type>string</list_type>
+ <default>[]</default>
+ <locale name="C">
+ <short>Bundle IDs of protected activities</short>
+ <long>Users will not be allowed to erase these
+ activities through the list view.</long>
+ </locale>
+ </schema>
+
</schemalist>
</gconfschemafile>
diff --git a/src/jarabe/desktop/activitieslist.py b/src/jarabe/desktop/activitieslist.py
index 4ced829..a8332f0 100644
--- a/src/jarabe/desktop/activitieslist.py
+++ b/src/jarabe/desktop/activitieslist.py
@@ -375,13 +375,7 @@ class ActivityListPalette(ActivityPalette):
self.menu.append(self._favorite_item)
self._favorite_item.show()
- menu_item = MenuItem(_('Erase'), 'list-remove')
- menu_item.connect('activate', self.__erase_activate_cb)
- self.menu.append(menu_item)
- menu_item.show()
-
- if not os.access(activity_info.get_path(), os.W_OK):
- menu_item.props.sensitive = False
+ self._add_erase_option(registry, activity_info)
registry = bundleregistry.get_registry()
self._activity_changed_sid = registry.connect('bundle_changed',
@@ -390,6 +384,17 @@ class ActivityListPalette(ActivityPalette):
self.connect('destroy', self.__destroy_cb)
+ def _add_erase_option(self, registry, activity_info):
+ menu_item = MenuItem(_('Erase'), 'list-remove')
+ menu_item.connect('activate', self.__erase_activate_cb)
+ self.menu.append(menu_item)
+ menu_item.show()
+
+ if not os.access(activity_info.get_path(), os.W_OK) or \
+ registry.is_activity_protected(self._bundle_id):
+ menu_item.props.sensitive = False
+
+
def __destroy_cb(self, palette):
self.disconnect(self._activity_changed_sid)
diff --git a/src/jarabe/model/bundleregistry.py b/src/jarabe/model/bundleregistry.py
index d48c071..924c18f 100644
--- a/src/jarabe/model/bundleregistry.py
+++ b/src/jarabe/model/bundleregistry.py
@@ -20,6 +20,7 @@ import logging
import traceback
import sys
+import gconf
import gobject
import gio
import simplejson
@@ -63,6 +64,14 @@ class BundleRegistry(gobject.GObject):
self._last_defaults_mtime = -1
self._favorite_bundles = {}
+ client = gconf.client_get_default()
+ self._protected_activities = client.get_list(
+ '/desktop/sugar/protected_activities',
+ gconf.VALUE_STRING)
+
+ if self._protected_activities is None:
+ self._protected_activities = []
+
try:
self._load_favorites()
except Exception:
@@ -275,6 +284,9 @@ class BundleRegistry(gobject.GObject):
key = self._get_favorite_key(bundle_id, version)
return key in self._favorite_bundles
+ def is_activity_protected(self, bundle_id):
+ return bundle_id in self._protected_activities
+
def set_bundle_position(self, bundle_id, version, x, y):
key = self._get_favorite_key(bundle_id, version)
if key not in self._favorite_bundles: