Merge branch 'master' of git+ssh://guillaume@dev.laptop.org/git/sugar-toolkit into 5079-rebased

master
Guillaume Desmottes 16 years ago
commit 6a78863c22

@ -1,4 +1,4 @@
AC_INIT([sugar-toolkit],[0.81.5],[],[sugar-toolkit]) AC_INIT([sugar-toolkit],[0.81.6],[],[sugar-toolkit])
AC_PREREQ([2.59]) AC_PREREQ([2.59])

@ -439,6 +439,7 @@ class Activity(Window, gtk.Container):
self._deleting = False self._deleting = False
self._max_participants = 0 self._max_participants = 0
self._invites_queue = [] self._invites_queue = []
self._jobject = None
self._xsmp_client = XSMPClient() self._xsmp_client = XSMPClient()
self._xsmp_client.connect('quit-requested', self.__sm_quit_requested_cb) self._xsmp_client.connect('quit-requested', self.__sm_quit_requested_cb)
@ -467,33 +468,6 @@ class Activity(Window, gtk.Container):
if self._jobject.metadata.has_key('share-scope'): if self._jobject.metadata.has_key('share-scope'):
share_scope = self._jobject.metadata['share-scope'] share_scope = self._jobject.metadata['share-scope']
elif create_jobject:
logging.debug('Creating a jobject.')
self._jobject = datastore.create()
title = _('%s Activity') % get_bundle_name()
self._jobject.metadata['title'] = title
self.set_title(self._jobject.metadata['title'])
self._jobject.metadata['title_set_by_user'] = '0'
self._jobject.metadata['activity'] = self.get_bundle_id()
self._jobject.metadata['activity_id'] = self.get_id()
self._jobject.metadata['keep'] = '0'
self._jobject.metadata['preview'] = ''
self._jobject.metadata['share-scope'] = SCOPE_PRIVATE
if self._shared_activity is not None:
icon_color = self._shared_activity.props.color
else:
icon_color = profile.get_color().to_string()
self._jobject.metadata['icon-color'] = icon_color
self._jobject.file_path = ''
# Cannot call datastore.write async for creates:
# https://dev.laptop.org/ticket/3071
datastore.write(self._jobject)
else:
self._jobject = None
# handle activity share/join # handle activity share/join
mesh_instance = self._pservice.get_activity(self._activity_id, mesh_instance = self._pservice.get_activity(self._activity_id,
warn_if_none=False) warn_if_none=False)
@ -524,6 +498,29 @@ class Activity(Window, gtk.Container):
else: else:
logging.debug("Unknown share scope %r" % share_scope) logging.debug("Unknown share scope %r" % share_scope)
if handle.object_id is None and create_jobject:
logging.debug('Creating a jobject.')
self._jobject = datastore.create()
title = _('%s Activity') % get_bundle_name()
self._jobject.metadata['title'] = title
self.set_title(self._jobject.metadata['title'])
self._jobject.metadata['title_set_by_user'] = '0'
self._jobject.metadata['activity'] = self.get_bundle_id()
self._jobject.metadata['activity_id'] = self.get_id()
self._jobject.metadata['keep'] = '0'
self._jobject.metadata['preview'] = ''
self._jobject.metadata['share-scope'] = SCOPE_PRIVATE
if self._shared_activity is not None:
icon_color = self._shared_activity.props.color
else:
icon_color = profile.get_color().to_string()
self._jobject.metadata['icon-color'] = icon_color
self._jobject.file_path = ''
# Cannot call datastore.write async for creates:
# https://dev.laptop.org/ticket/3071
datastore.write(self._jobject)
def do_set_property(self, pspec, value): def do_set_property(self, pspec, value):
if pspec.name == 'active': if pspec.name == 'active':
if self._active != value: if self._active != value:

@ -23,8 +23,7 @@ import os
import tempfile import tempfile
from sugar.bundle.bundle import Bundle, MalformedBundleException, \ from sugar.bundle.bundle import Bundle, MalformedBundleException, \
AlreadyInstalledException, RegistrationException, \ AlreadyInstalledException, RegistrationException, NotInstalledException
NotInstalledException
from sugar import activity from sugar import activity
from sugar import env from sugar import env
@ -55,6 +54,7 @@ class ActivityBundle(Bundle):
self._mime_types = None self._mime_types = None
self._show_launcher = True self._show_launcher = True
self._activity_version = 0 self._activity_version = 0
self._installation_time = os.stat(path).st_mtime
info_file = self.get_file('activity/activity.info') info_file = self.get_file('activity/activity.info')
if info_file is None: if info_file is None:
@ -65,7 +65,7 @@ class ActivityBundle(Bundle):
if linfo_file: if linfo_file:
self._parse_linfo(linfo_file) self._parse_linfo(linfo_file)
self.manifest = None #This should be replaced by following function self.manifest = None # This should be replaced by following function
self.read_manifest() self.read_manifest()
def _raw_manifest(self): def _raw_manifest(self):
@ -226,7 +226,7 @@ class ActivityBundle(Bundle):
def get_installation_time(self): def get_installation_time(self):
"""Get a timestamp representing the time at which this activity was """Get a timestamp representing the time at which this activity was
installed.""" installed."""
return os.stat(self._path).st_mtime return self._installation_time
def get_bundle_id(self): def get_bundle_id(self):
"""Get the activity bundle id""" """Get the activity bundle id"""

@ -581,11 +581,10 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem):
palette = property(get_palette, set_palette) palette = property(get_palette, set_palette)
def get_icon_state(base_name, perc, step=5): def get_icon_state(base_name, perc, step=5):
assert step > 0, 'get_icon_state(): step must be positive\n'
strength = round(perc / step) * step strength = round(perc / step) * step
icon_theme = gtk.icon_theme_get_default() icon_theme = gtk.icon_theme_get_default()
while strength <= 100: while strength <= 100 and strength >= 0:
icon_name = '%s-%03d' % (base_name, strength) icon_name = '%s-%03d' % (base_name, strength)
if icon_theme.has_icon(icon_name): if icon_theme.has_icon(icon_name):
return icon_name return icon_name

@ -19,7 +19,7 @@ import gobject
import gtk import gtk
from sugar.graphics import style from sugar.graphics import style
from sugar.graphics.palette import Palette, ToolInvoker from sugar.graphics.palette import ToolInvoker
from sugar.graphics.toolbutton import ToolButton from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.icon import Icon from sugar.graphics.icon import Icon
@ -207,10 +207,12 @@ class _TrayScrollButton(ToolButton):
viewport = property(fset=set_viewport) viewport = property(fset=set_viewport)
ALIGN_TO_START = 0
ALIGN_TO_END = 1
class HTray(gtk.HBox): class HTray(gtk.HBox):
def __init__(self, **kwargs): def __init__(self, **kwargs):
gobject.GObject.__init__(self, **kwargs) gobject.GObject.__init__(self, **kwargs)
self.set_direction(gtk.TEXT_DIR_LTR)
scroll_left = _TrayScrollButton('go-left', _PREVIOUS_PAGE) scroll_left = _TrayScrollButton('go-left', _PREVIOUS_PAGE)
self.pack_start(scroll_left, False) self.pack_start(scroll_left, False)
@ -225,17 +227,37 @@ class HTray(gtk.HBox):
scroll_left.viewport = self._viewport scroll_left.viewport = self._viewport
scroll_right.viewport = self._viewport scroll_right.viewport = self._viewport
if self.align == ALIGN_TO_END:
spacer = gtk.SeparatorToolItem()
spacer.set_size_request(0, 0)
spacer.props.draw = False
spacer.set_expand(True)
self._viewport.traybar.insert(spacer, 0)
spacer.show()
align = gobject.property(
flags=gobject.PARAM_CONSTRUCT_ONLY | gobject.PARAM_READWRITE,
default=ALIGN_TO_START, type=int)
def get_children(self): def get_children(self):
return self._viewport.traybar.get_children() children = self._viewport.traybar.get_children()[:]
if self.align == ALIGN_TO_END:
children = children[1:]
return children
def add_item(self, item, index=-1): def add_item(self, item, index=-1):
if self.align == ALIGN_TO_END and index > -1:
index += 1
self._viewport.traybar.insert(item, index) self._viewport.traybar.insert(item, index)
def remove_item(self, item): def remove_item(self, item):
self._viewport.traybar.remove(item) self._viewport.traybar.remove(item)
def get_item_index(self, item): def get_item_index(self, item):
return self._viewport.traybar.get_item_index(item) index = self._viewport.traybar.get_item_index(item)
if self.align == ALIGN_TO_END:
index -= 1
return index
def scroll_to_item(self, item): def scroll_to_item(self, item):
self._viewport.scroll_to_item(item) self._viewport.scroll_to_item(item)
@ -259,17 +281,37 @@ class VTray(gtk.VBox):
scroll_left.viewport = self._viewport scroll_left.viewport = self._viewport
scroll_right.viewport = self._viewport scroll_right.viewport = self._viewport
if self.align == ALIGN_TO_END:
spacer = gtk.SeparatorToolItem()
spacer.set_size_request(0, 0)
spacer.props.draw = False
spacer.set_expand(True)
self._viewport.traybar.insert(spacer, 0)
spacer.show()
align = gobject.property(
flags=gobject.PARAM_CONSTRUCT_ONLY | gobject.PARAM_READWRITE,
default=ALIGN_TO_START, type=int)
def get_children(self): def get_children(self):
return self._viewport.traybar.get_children() children = self._viewport.traybar.get_children()[:]
if self.align == ALIGN_TO_END:
children = children[1:]
return children
def add_item(self, item, index=-1): def add_item(self, item, index=-1):
if self.align == ALIGN_TO_END and index > -1:
index += 1
self._viewport.traybar.insert(item, index) self._viewport.traybar.insert(item, index)
def remove_item(self, item): def remove_item(self, item):
self._viewport.traybar.remove(item) self._viewport.traybar.remove(item)
def get_item_index(self, item): def get_item_index(self, item):
return self._viewport.traybar.get_item_index(item) index = self._viewport.traybar.get_item_index(item)
if self.align == ALIGN_TO_END:
index -= 1
return index
def scroll_to_item(self, item): def scroll_to_item(self, item):
self._viewport.scroll_to_item(item) self._viewport.scroll_to_item(item)

@ -235,12 +235,18 @@ class Activity(gobject.GObject):
def get_joined_buddies(self): def get_joined_buddies(self):
"""Retrieve the set of Buddy objects attached to this activity """Retrieve the set of Buddy objects attached to this activity
returns list of presence Buddy objects returns list of presence Buddy objects that we can successfully
create from the buddy object paths that PS has for this activity.
""" """
resp = self._activity.GetJoinedBuddies() resp = self._activity.GetJoinedBuddies()
buddies = [] buddies = []
for item in resp: for item in resp:
buddies.append(self._ps_new_object(item)) try:
buddies.append(self._ps_new_object(item))
except dbus.DBusException:
_logger.debug(
'get_joined_buddies failed to get buddy object for %r',
item)
return buddies return buddies
def get_buddy_by_handle(self, handle): def get_buddy_by_handle(self, handle):

@ -30,6 +30,10 @@ DEFAULT_TIMEZONE = 'UTC'
DEFAULT_HOT_CORNERS_DELAY = 0.0 DEFAULT_HOT_CORNERS_DELAY = 0.0
DEFAULT_WARM_EDGES_DELAY = 1000.0 DEFAULT_WARM_EDGES_DELAY = 1000.0
RING_LAYOUT = 'ring-layout'
RANDOM_LAYOUT = 'random-layout'
DEFAULT_FAVORITES_LAYOUT = RANDOM_LAYOUT
_profile = None _profile = None
def _set_key(cp, section, key, value): def _set_key(cp, section, key, value):
@ -71,6 +75,9 @@ class Profile(object):
self.sound_volume = DEFAULT_VOLUME self.sound_volume = DEFAULT_VOLUME
self.hot_corners_delay = DEFAULT_HOT_CORNERS_DELAY self.hot_corners_delay = DEFAULT_HOT_CORNERS_DELAY
self.warm_edges_delay = DEFAULT_WARM_EDGES_DELAY self.warm_edges_delay = DEFAULT_WARM_EDGES_DELAY
self.automatic_pm = False
self.extreme_pm = False
self.favorites_layout = DEFAULT_FAVORITES_LAYOUT
self._pubkey = None self._pubkey = None
self._privkey_hash = None self._privkey_hash = None
@ -110,6 +117,12 @@ class Profile(object):
_set_key(cp, 'Sound', 'Volume', self.sound_volume) _set_key(cp, 'Sound', 'Volume', self.sound_volume)
_set_key(cp, 'Power', 'AutomaticPM', self.automatic_pm)
_set_key(cp, 'Power', 'ExtremePM', self.extreme_pm)
_set_key(cp, 'Shell', 'FavoritesLayout', self.favorites_layout)
f = open(self._config_path, 'w') f = open(self._config_path, 'w')
cp.write(f) cp.write(f)
f.close() f.close()
@ -140,6 +153,16 @@ class Profile(object):
self.backup1 = cp.get('Server', 'Backup1') self.backup1 = cp.get('Server', 'Backup1')
if cp.has_option('Sound', 'Volume'): if cp.has_option('Sound', 'Volume'):
self.sound_volume = float(cp.get('Sound', 'Volume')) self.sound_volume = float(cp.get('Sound', 'Volume'))
if cp.has_option('Power', 'AutomaticPM'):
state = cp.get('Power', 'AutomaticPM')
if state.lower() == "true":
self.automatic_pm = True
if cp.has_option('Power', 'ExtremePM'):
state = cp.get('Power', 'ExtremePM')
if state.lower() == "true":
self.extreme_pm = True
if cp.has_option('Shell', 'FavoritesLayout'):
self.favorites_layout = cp.get('Shell', 'FavoritesLayout')
del cp del cp

Loading…
Cancel
Save