Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
This commit is contained in:
commit
66c5e882f3
@ -690,8 +690,9 @@ sugar_browser_init(SugarBrowser *browser)
|
|||||||
G_CALLBACK(title_cb), NULL);
|
G_CALLBACK(title_cb), NULL);
|
||||||
g_signal_connect(G_OBJECT(browser), "location",
|
g_signal_connect(G_OBJECT(browser), "location",
|
||||||
G_CALLBACK(location_cb), NULL);
|
G_CALLBACK(location_cb), NULL);
|
||||||
g_signal_connect(G_OBJECT(browser), "dom-mouse-click",
|
/* g_signal_connect(G_OBJECT(browser), "dom-mouse-click",
|
||||||
G_CALLBACK(dom_mouse_click_cb), NULL);
|
G_CALLBACK(dom_mouse_click_cb), NULL);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
VERSION=0.63
|
VERSION=0.63
|
||||||
DATE=`date +%Y%m%d`
|
DATE=`date +%Y%m%d`
|
||||||
RELEASE=2.82
|
RELEASE=2.87
|
||||||
TARBALL=sugar-$VERSION-$RELEASE.${DATE}git.tar.bz2
|
TARBALL=sugar-$VERSION-$RELEASE.${DATE}git.tar.bz2
|
||||||
|
|
||||||
rm sugar-$VERSION.tar.bz2
|
rm sugar-$VERSION.tar.bz2
|
||||||
|
16
configure.ac
16
configure.ac
@ -57,22 +57,6 @@ AC_SUBST(MOZILLA_INCLUDE_DIR)
|
|||||||
AC_SUBST(XPIDL)
|
AC_SUBST(XPIDL)
|
||||||
AC_SUBST(MOZILLA_IDL_DIR)
|
AC_SUBST(MOZILLA_IDL_DIR)
|
||||||
|
|
||||||
PKG_CHECK_MODULES(NSPR, [nspr],
|
|
||||||
[have_nspr=true],
|
|
||||||
[
|
|
||||||
PKG_CHECK_MODULES(NSPR, [mozilla-nspr],
|
|
||||||
[have_nspr=true],
|
|
||||||
[
|
|
||||||
PKG_CHECK_MODULES(NSPR, [xulrunner-nspr],
|
|
||||||
[have_nspr=true],
|
|
||||||
have_nspr=false)
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
if test "x$have_nspr" = xfalse; then
|
|
||||||
AC_MSG_ERROR([Could not find nspr])
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
AC_MSG_ERROR([Must specify the xulrunner sdk dir (--with-libxul-sdk)])
|
AC_MSG_ERROR([Must specify the xulrunner sdk dir (--with-libxul-sdk)])
|
||||||
|
@ -450,7 +450,14 @@ class Buddy(ExportedGObject):
|
|||||||
# to avoid leaking a PropertyChanged signal before the buddy is
|
# to avoid leaking a PropertyChanged signal before the buddy is
|
||||||
# actually valid the first time after creation
|
# actually valid the first time after creation
|
||||||
if self._valid:
|
if self._valid:
|
||||||
self.PropertyChanged(changed_props)
|
dbus_changed = {}
|
||||||
|
for key, value in changed_props.items():
|
||||||
|
if value:
|
||||||
|
dbus_changed[key] = value
|
||||||
|
else:
|
||||||
|
dbus_changed[key] = ""
|
||||||
|
self.PropertyChanged(dbus_changed)
|
||||||
|
|
||||||
self.emit('property-changed', changed_props)
|
self.emit('property-changed', changed_props)
|
||||||
|
|
||||||
self._update_validity()
|
self._update_validity()
|
||||||
@ -514,6 +521,11 @@ class GenericOwner(Buddy):
|
|||||||
self._registered = kwargs["registered"]
|
self._registered = kwargs["registered"]
|
||||||
del kwargs["registered"]
|
del kwargs["registered"]
|
||||||
|
|
||||||
|
self._ip4_addr_monitor = psutils.IP4AddressMonitor.get_instance()
|
||||||
|
self._ip4_addr_monitor.connect("address-changed", self._ip4_address_changed_cb)
|
||||||
|
if self._ip4_addr_monitor.props.address:
|
||||||
|
kwargs["ip4-address"] = self._ip4_addr_monitor.props.address
|
||||||
|
|
||||||
Buddy.__init__(self, bus_name, object_id, **kwargs)
|
Buddy.__init__(self, bus_name, object_id, **kwargs)
|
||||||
self._owner = True
|
self._owner = True
|
||||||
|
|
||||||
@ -522,9 +534,6 @@ class GenericOwner(Buddy):
|
|||||||
signal_name="NameOwnerChanged",
|
signal_name="NameOwnerChanged",
|
||||||
dbus_interface="org.freedesktop.DBus")
|
dbus_interface="org.freedesktop.DBus")
|
||||||
|
|
||||||
self._ip4_addr_monitor = psutils.IP4AddressMonitor.get_instance()
|
|
||||||
self._ip4_addr_monitor.connect("address-changed", self._ip4_address_changed_cb)
|
|
||||||
|
|
||||||
def _ip4_address_changed_cb(self, monitor, address):
|
def _ip4_address_changed_cb(self, monitor, address):
|
||||||
"""Handle IPv4 address change, set property to generate event"""
|
"""Handle IPv4 address change, set property to generate event"""
|
||||||
props = {_PROP_IP4_ADDRESS: address}
|
props = {_PROP_IP4_ADDRESS: address}
|
||||||
|
@ -106,16 +106,6 @@ class ClipboardIcon(CanvasIcon):
|
|||||||
else:
|
else:
|
||||||
self.props.xo_color = XoColor("#000000,#FFFFFF")
|
self.props.xo_color = XoColor("#000000,#FFFFFF")
|
||||||
|
|
||||||
if activity and percent == 100:
|
|
||||||
# FIXME: restrict based on file type rather than activity once
|
|
||||||
# we have a better type registry
|
|
||||||
# restrict auto-open to a specific set of activities
|
|
||||||
allowed = ["org.laptop.AbiWordActivity",
|
|
||||||
"org.laptop.sugar.Xbook",
|
|
||||||
"org.vpri.EtoysActivity"]
|
|
||||||
if activity in allowed:
|
|
||||||
self._open_file()
|
|
||||||
|
|
||||||
def _open_file(self):
|
def _open_file(self):
|
||||||
if self._percent < 100:
|
if self._percent < 100:
|
||||||
return
|
return
|
||||||
|
@ -28,6 +28,7 @@ import gtk, gobject
|
|||||||
|
|
||||||
from sugar.presence import presenceservice
|
from sugar.presence import presenceservice
|
||||||
from sugar.activity.activityservice import ActivityService
|
from sugar.activity.activityservice import ActivityService
|
||||||
|
from sugar.activity import bundleregistry
|
||||||
from sugar.graphics.window import Window
|
from sugar.graphics.window import Window
|
||||||
from sugar.graphics.toolbox import Toolbox
|
from sugar.graphics.toolbox import Toolbox
|
||||||
from sugar.graphics.toolbutton import ToolButton
|
from sugar.graphics.toolbutton import ToolButton
|
||||||
@ -200,13 +201,15 @@ class Activity(Window, gtk.Container):
|
|||||||
|
|
||||||
if handle.object_id:
|
if handle.object_id:
|
||||||
self.jobject = datastore.get(handle.object_id)
|
self.jobject = datastore.get(handle.object_id)
|
||||||
|
self.jobject.object_id = ''
|
||||||
|
del self.jobject['ctime']
|
||||||
|
del self.jobject['mtime']
|
||||||
elif create_jobject:
|
elif create_jobject:
|
||||||
logging.debug('Creating a jobject.')
|
logging.debug('Creating a jobject.')
|
||||||
self.jobject = datastore.create()
|
self.jobject = datastore.create()
|
||||||
self.jobject['title'] = '%s %s' % (get_bundle_name(), 'Activity')
|
self.jobject['title'] = '%s %s' % (get_bundle_name(), 'Activity')
|
||||||
self.jobject['activity'] = self.get_service_name()
|
self.jobject['activity'] = self.get_service_name()
|
||||||
self.jobject['date'] = str(time.time())
|
self.jobject['icon'] = self._get_icon()
|
||||||
self.jobject['icon'] = ''
|
|
||||||
self.jobject['keep'] = '0'
|
self.jobject['keep'] = '0'
|
||||||
self.jobject['buddies'] = ''
|
self.jobject['buddies'] = ''
|
||||||
self.jobject['preview'] = ''
|
self.jobject['preview'] = ''
|
||||||
@ -329,6 +332,10 @@ class Activity(Window, gtk.Container):
|
|||||||
raise
|
raise
|
||||||
self.destroy()
|
self.destroy()
|
||||||
|
|
||||||
|
def _get_icon(self):
|
||||||
|
registry = bundleregistry.get_registry()
|
||||||
|
return registry.get_bundle(self.get_service_name()).get_icon()
|
||||||
|
|
||||||
def get_bundle_name():
|
def get_bundle_name():
|
||||||
"""Return the bundle name for the current process' bundle
|
"""Return the bundle name for the current process' bundle
|
||||||
"""
|
"""
|
||||||
|
@ -78,10 +78,14 @@ class Bundle:
|
|||||||
if cp.has_option(section, 'class'):
|
if cp.has_option(section, 'class'):
|
||||||
self._class = cp.get(section, 'class')
|
self._class = cp.get(section, 'class')
|
||||||
self._exec = '%s --bundle-path="%s"' % (
|
self._exec = '%s --bundle-path="%s"' % (
|
||||||
env.get_bin_path(_PYTHON_FACTORY), self.get_path())
|
env.get_bin_path(_PYTHON_FACTORY), self._path)
|
||||||
elif cp.has_option(section, 'exec'):
|
elif cp.has_option(section, 'exec'):
|
||||||
self._class = None
|
self._class = None
|
||||||
self._exec = cp.get(section, 'exec')
|
cmdline = cp.get(section, 'exec')
|
||||||
|
cmdline = os.path.join(self._path, cmdline)
|
||||||
|
cmdline = cmdline.replace('$SUGAR_BUNDLE_PATH', self._path)
|
||||||
|
cmdline = os.path.expandvars(cmdline)
|
||||||
|
self._exec = cmdline
|
||||||
else:
|
else:
|
||||||
self._exec = None
|
self._exec = None
|
||||||
self._valid = False
|
self._valid = False
|
||||||
|
@ -39,6 +39,9 @@ class DSObject(gobject.GObject):
|
|||||||
self.metadata[key] = value
|
self.metadata[key] = value
|
||||||
self.emit('updated')
|
self.emit('updated')
|
||||||
|
|
||||||
|
def __delitem__(self, key):
|
||||||
|
del self.metadata[key]
|
||||||
|
|
||||||
def get_metadata(self):
|
def get_metadata(self):
|
||||||
return self._metadata
|
return self._metadata
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ def create(properties, filename):
|
|||||||
return object_id
|
return object_id
|
||||||
|
|
||||||
def update(uid, properties, filename, reply_handler=None, error_handler=None):
|
def update(uid, properties, filename, reply_handler=None, error_handler=None):
|
||||||
logging.debug('dbus_helpers.update')
|
logging.debug('dbus_helpers.update: %s, %s' % (uid, filename))
|
||||||
if reply_handler and error_handler:
|
if reply_handler and error_handler:
|
||||||
_data_store.update(uid, dbus.Dictionary(properties), filename,
|
_data_store.update(uid, dbus.Dictionary(properties), filename,
|
||||||
reply_handler=reply_handler,
|
reply_handler=reply_handler,
|
||||||
|
@ -123,7 +123,7 @@ class _IconCache:
|
|||||||
del self._icons[evict_key]
|
del self._icons[evict_key]
|
||||||
|
|
||||||
def get_handle(self, name, fill_color, stroke_color):
|
def get_handle(self, name, fill_color, stroke_color):
|
||||||
if name == None:
|
if not name:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if name[0:6] == "theme:":
|
if name[0:6] == "theme:":
|
||||||
|
@ -35,6 +35,16 @@ class Toolbox(gtk.VBox):
|
|||||||
self.pack_start(self._notebook)
|
self.pack_start(self._notebook)
|
||||||
self._notebook.show()
|
self._notebook.show()
|
||||||
|
|
||||||
|
def _toolbar_box_expose_cb(self, widget, event):
|
||||||
|
widget.style.paint_flat_box(widget.window,
|
||||||
|
gtk.STATE_NORMAL, gtk.SHADOW_NONE,
|
||||||
|
event.area, widget, 'toolbox',
|
||||||
|
widget.allocation.x,
|
||||||
|
widget.allocation.y,
|
||||||
|
widget.allocation.width,
|
||||||
|
widget.allocation.height)
|
||||||
|
return False
|
||||||
|
|
||||||
def add_toolbar(self, name, toolbar):
|
def add_toolbar(self, name, toolbar):
|
||||||
label = gtk.Label(name)
|
label = gtk.Label(name)
|
||||||
label.set_size_request(gtk.gdk.screen_width() / _N_TABS, -1)
|
label.set_size_request(gtk.gdk.screen_width() / _N_TABS, -1)
|
||||||
@ -42,6 +52,8 @@ class Toolbox(gtk.VBox):
|
|||||||
|
|
||||||
toolbar_box = gtk.HBox()
|
toolbar_box = gtk.HBox()
|
||||||
toolbar_box.pack_start(toolbar, True, True, units.grid_to_pixels(1))
|
toolbar_box.pack_start(toolbar, True, True, units.grid_to_pixels(1))
|
||||||
|
toolbar_box.set_size_request(-1, units.grid_to_pixels(1))
|
||||||
|
toolbar_box.connect('expose-event', self._toolbar_box_expose_cb)
|
||||||
|
|
||||||
self._notebook.append_page(toolbar_box, label)
|
self._notebook.append_page(toolbar_box, label)
|
||||||
toolbar_box.show()
|
toolbar_box.show()
|
||||||
|
Loading…
Reference in New Issue
Block a user