Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
This commit is contained in:
commit
0225360178
3
NEWS
3
NEWS
@ -1,3 +1,6 @@
|
|||||||
|
* #4941: Add menu entry with dialog to show About this XO (erikos)
|
||||||
|
* #5089: show frame shortly when adding object to clipboard (erikos)
|
||||||
|
* #5097: Fix pasting text between activities through the clipboard. (tomeu)
|
||||||
* #4660: Use improved PS API which streamlines ShareActivity process (smcv)
|
* #4660: Use improved PS API which streamlines ShareActivity process (smcv)
|
||||||
|
|
||||||
0.70.1
|
0.70.1
|
||||||
|
@ -504,12 +504,16 @@ class Activity(Window, gtk.Container):
|
|||||||
self.save()
|
self.save()
|
||||||
elif pspec.name == 'max-participants':
|
elif pspec.name == 'max-participants':
|
||||||
self._max_participants = value
|
self._max_participants = value
|
||||||
|
else:
|
||||||
|
Window.do_set_property(self, pspec, value)
|
||||||
|
|
||||||
def do_get_property(self, pspec):
|
def do_get_property(self, pspec):
|
||||||
if pspec.name == 'active':
|
if pspec.name == 'active':
|
||||||
return self._active
|
return self._active
|
||||||
elif pspec.name == 'max-participants':
|
elif pspec.name == 'max-participants':
|
||||||
return self._max_participants
|
return self._max_participants
|
||||||
|
else:
|
||||||
|
return Window.do_get_property(self, pspec)
|
||||||
|
|
||||||
def get_id(self):
|
def get_id(self):
|
||||||
"""Returns the activity id of the current instance of your activity.
|
"""Returns the activity id of the current instance of your activity.
|
||||||
|
@ -474,7 +474,7 @@ class Palette(gtk.Window):
|
|||||||
if self._group_id:
|
if self._group_id:
|
||||||
group = palettegroup.get_group(self._group_id)
|
group = palettegroup.get_group(self._group_id)
|
||||||
if group and group.is_up():
|
if group and group.is_up():
|
||||||
self._set_state(group.get_state())
|
self._set_state(self.PRIMARY)
|
||||||
|
|
||||||
immediate = True
|
immediate = True
|
||||||
group.popdown()
|
group.popdown()
|
||||||
@ -686,12 +686,19 @@ class WidgetInvoker(Invoker):
|
|||||||
widget.connect('leave-notify-event', self._leave_notify_event_cb)
|
widget.connect('leave-notify-event', self._leave_notify_event_cb)
|
||||||
|
|
||||||
def get_rect(self):
|
def get_rect(self):
|
||||||
x, y = self._widget.window.get_origin()
|
|
||||||
allocation = self._widget.get_allocation()
|
allocation = self._widget.get_allocation()
|
||||||
|
if self._widget.window is not None:
|
||||||
|
x, y = self._widget.window.get_origin()
|
||||||
|
else:
|
||||||
|
logging.warning(
|
||||||
|
"Trying to position palette with invoker that's not realized.")
|
||||||
|
x = 0
|
||||||
|
y = 0
|
||||||
|
|
||||||
if self._widget.flags() & gtk.NO_WINDOW:
|
if self._widget.flags() & gtk.NO_WINDOW:
|
||||||
x += allocation.x
|
x += allocation.x
|
||||||
y += allocation.y
|
y += allocation.y
|
||||||
|
|
||||||
width = allocation.width
|
width = allocation.width
|
||||||
height = allocation.height
|
height = allocation.height
|
||||||
|
|
||||||
|
@ -15,12 +15,73 @@
|
|||||||
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
# Boston, MA 02111-1307, USA.
|
# Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
import gobject
|
||||||
import gtk
|
import gtk
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from sugar.graphics.icon import Icon
|
||||||
|
|
||||||
|
class UnfullscreenButton(gtk.Window):
|
||||||
|
|
||||||
class Window(gtk.Window):
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
gtk.Window.__init__(self)
|
gtk.Window.__init__(self)
|
||||||
|
|
||||||
|
self.set_decorated(False)
|
||||||
|
self.set_resizable(False)
|
||||||
|
self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
|
||||||
|
|
||||||
|
self.set_border_width(0)
|
||||||
|
|
||||||
|
self.props.accept_focus = False
|
||||||
|
|
||||||
|
#Setup estimate of width, height
|
||||||
|
w, h = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR)
|
||||||
|
self._width = w
|
||||||
|
self._height = h
|
||||||
|
|
||||||
|
self.connect('size-request', self._size_request_cb)
|
||||||
|
|
||||||
|
screen = self.get_screen()
|
||||||
|
screen.connect('size-changed', self._screen_size_changed_cb)
|
||||||
|
|
||||||
|
self._button = gtk.Button()
|
||||||
|
self._button.set_relief(gtk.RELIEF_NONE)
|
||||||
|
|
||||||
|
self._icon = Icon(icon_name='view-return',
|
||||||
|
icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR)
|
||||||
|
self._icon.show()
|
||||||
|
self._button.add(self._icon)
|
||||||
|
|
||||||
|
self._button.show()
|
||||||
|
self.add(self._button)
|
||||||
|
|
||||||
|
def connect_button_press(self, cb):
|
||||||
|
self._button.connect('button-press-event', cb)
|
||||||
|
|
||||||
|
def _reposition(self):
|
||||||
|
x = gtk.gdk.screen_width() - self._width
|
||||||
|
self.move(x, 0)
|
||||||
|
|
||||||
|
def _size_request_cb(self, widget, req):
|
||||||
|
self._width = req.width
|
||||||
|
self._height = req.height
|
||||||
|
self._reposition()
|
||||||
|
|
||||||
|
def _screen_size_changed_cb(self, screen):
|
||||||
|
self._reposition()
|
||||||
|
|
||||||
|
class Window(gtk.Window):
|
||||||
|
|
||||||
|
__gproperties__ = {
|
||||||
|
'enable-fullscreen-mode': (bool, None, None, True,
|
||||||
|
gobject.PARAM_READWRITE),
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, **args):
|
||||||
|
self._enable_fullscreen_mode = True
|
||||||
|
|
||||||
|
gtk.Window.__init__(self, **args)
|
||||||
|
|
||||||
self.connect('realize', self.__window_realize_cb)
|
self.connect('realize', self.__window_realize_cb)
|
||||||
self.connect('window-state-event', self.__window_state_event_cb)
|
self.connect('window-state-event', self.__window_state_event_cb)
|
||||||
self.connect('key-press-event', self.__key_press_cb)
|
self.connect('key-press-event', self.__key_press_cb)
|
||||||
@ -42,6 +103,24 @@ class Window(gtk.Window):
|
|||||||
self.add(self._vbox)
|
self.add(self._vbox)
|
||||||
self._vbox.show()
|
self._vbox.show()
|
||||||
|
|
||||||
|
self._is_fullscreen = False
|
||||||
|
self._unfullscreen_button = UnfullscreenButton()
|
||||||
|
self._unfullscreen_button.set_transient_for(self)
|
||||||
|
self._unfullscreen_button.connect_button_press(
|
||||||
|
self.__unfullscreen_button_pressed)
|
||||||
|
|
||||||
|
def do_get_property(self, prop):
|
||||||
|
if prop.name == 'enable-fullscreen-mode':
|
||||||
|
return self._enable_fullscreen_mode
|
||||||
|
else:
|
||||||
|
return gtk.Window.do_get_property(self, prop)
|
||||||
|
|
||||||
|
def do_set_property(self, prop, val):
|
||||||
|
if prop.name == 'enable-fullscreen-mode':
|
||||||
|
self._enable_fullscreen_mode = val
|
||||||
|
else:
|
||||||
|
gtk.Window.do_set_property(self, prop, val)
|
||||||
|
|
||||||
def set_canvas(self, canvas):
|
def set_canvas(self, canvas):
|
||||||
if self.canvas:
|
if self.canvas:
|
||||||
self._event_box.remove(self.canvas)
|
self._event_box.remove(self.canvas)
|
||||||
@ -102,20 +181,40 @@ class Window(gtk.Window):
|
|||||||
window.window.set_group(group.window)
|
window.window.set_group(group.window)
|
||||||
|
|
||||||
def __window_state_event_cb(self, window, event):
|
def __window_state_event_cb(self, window, event):
|
||||||
|
if not (event.changed_mask & gtk.gdk.WINDOW_STATE_FULLSCREEN):
|
||||||
|
return False
|
||||||
|
|
||||||
if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
|
if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
|
||||||
if self.toolbox is not None:
|
if self.toolbox is not None:
|
||||||
self.toolbox.hide()
|
self.toolbox.hide()
|
||||||
if self.tray is not None:
|
if self.tray is not None:
|
||||||
self.tray.hide()
|
self.tray.hide()
|
||||||
elif event.new_window_state == 0:
|
|
||||||
|
self._is_fullscreen = True
|
||||||
|
if self.props.enable_fullscreen_mode:
|
||||||
|
self._unfullscreen_button.show()
|
||||||
|
|
||||||
|
else:
|
||||||
if self.toolbox is not None:
|
if self.toolbox is not None:
|
||||||
self.toolbox.show()
|
self.toolbox.show()
|
||||||
if self.tray is not None:
|
if self.tray is not None:
|
||||||
self.tray.show()
|
self.tray.show()
|
||||||
|
|
||||||
|
self._is_fullscreen = False
|
||||||
|
if self.props.enable_fullscreen_mode:
|
||||||
|
self._unfullscreen_button.hide()
|
||||||
|
|
||||||
def __key_press_cb(self, widget, event):
|
def __key_press_cb(self, widget, event):
|
||||||
|
key = gtk.gdk.keyval_name(event.keyval)
|
||||||
if event.state & gtk.gdk.MOD1_MASK:
|
if event.state & gtk.gdk.MOD1_MASK:
|
||||||
if gtk.gdk.keyval_name(event.keyval) == 'space':
|
if key == 'space':
|
||||||
self.tray.props.visible = not self.tray.props.visible
|
self.tray.props.visible = not self.tray.props.visible
|
||||||
return True
|
return True
|
||||||
|
elif key == 'Escape' and self._is_fullscreen and \
|
||||||
|
self.props.enable_fullscreen_mode:
|
||||||
|
self.unfullscreen()
|
||||||
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def __unfullscreen_button_pressed(self, widget, event):
|
||||||
|
self.unfullscreen()
|
||||||
|
@ -198,7 +198,7 @@ class Shell(gobject.GObject):
|
|||||||
new_level = model.props.zoom_level
|
new_level = model.props.zoom_level
|
||||||
|
|
||||||
if new_level == ShellModel.ZOOM_HOME:
|
if new_level == ShellModel.ZOOM_HOME:
|
||||||
self._frame.show(Frame.MODE_HOME)
|
self._frame.show(Frame.MODE_NON_INTERACTIVE)
|
||||||
|
|
||||||
if self._zoom_level == ShellModel.ZOOM_HOME:
|
if self._zoom_level == ShellModel.ZOOM_HOME:
|
||||||
self._frame.hide()
|
self._frame.hide()
|
||||||
|
@ -44,6 +44,8 @@ class ClipboardIcon(RadioToolButton):
|
|||||||
self._preview = None
|
self._preview = None
|
||||||
self._activity = None
|
self._activity = None
|
||||||
self.owns_clipboard = False
|
self.owns_clipboard = False
|
||||||
|
self.props.sensitive = False
|
||||||
|
self.props.active = False
|
||||||
|
|
||||||
self._icon = Icon()
|
self._icon = Icon()
|
||||||
self._icon.props.xo_color = profile.get_color()
|
self._icon.props.xo_color = profile.get_color()
|
||||||
@ -80,6 +82,10 @@ class ClipboardIcon(RadioToolButton):
|
|||||||
|
|
||||||
def _put_in_clipboard(self):
|
def _put_in_clipboard(self):
|
||||||
logging.debug('ClipboardIcon._put_in_clipboard')
|
logging.debug('ClipboardIcon._put_in_clipboard')
|
||||||
|
|
||||||
|
if self._percent < 100:
|
||||||
|
raise ValueError('Object is not complete, cannot be put into the clipboard.')
|
||||||
|
|
||||||
targets = self._get_targets()
|
targets = self._get_targets()
|
||||||
if targets:
|
if targets:
|
||||||
clipboard = gtk.Clipboard()
|
clipboard = gtk.Clipboard()
|
||||||
@ -125,14 +131,19 @@ class ClipboardIcon(RadioToolButton):
|
|||||||
self.child.drag_source_set_icon_name(self._icon.props.icon_name)
|
self.child.drag_source_set_icon_name(self._icon.props.icon_name)
|
||||||
|
|
||||||
self._name = name
|
self._name = name
|
||||||
self._percent = percent
|
|
||||||
self._preview = preview
|
self._preview = preview
|
||||||
self._activity = activity
|
self._activity = activity
|
||||||
self.palette.set_state(name, percent, preview, activity,
|
self.palette.set_state(name, percent, preview, activity,
|
||||||
self._is_bundle(obj['FORMATS']))
|
self._is_bundle(obj['FORMATS']))
|
||||||
|
|
||||||
if self.props.active:
|
old_percent = self._percent
|
||||||
self._put_in_clipboard()
|
self._percent = percent
|
||||||
|
if self._percent == 100:
|
||||||
|
self.props.sensitive = True
|
||||||
|
|
||||||
|
# Clipboard object became complete. Make it the active one.
|
||||||
|
if old_percent < 100 and self._percent == 100:
|
||||||
|
self.props.active = True
|
||||||
|
|
||||||
def _notify_active_cb(self, widget, pspec):
|
def _notify_active_cb(self, widget, pspec):
|
||||||
if self.props.active:
|
if self.props.active:
|
||||||
|
@ -62,7 +62,6 @@ class ClipboardBox(hippo.CanvasBox):
|
|||||||
hippo.CanvasBox.__init__(self)
|
hippo.CanvasBox.__init__(self)
|
||||||
self._icons = {}
|
self._icons = {}
|
||||||
self._context_map = _ContextMap()
|
self._context_map = _ContextMap()
|
||||||
self._selected_icon = None
|
|
||||||
|
|
||||||
self._tray = VTray()
|
self._tray = VTray()
|
||||||
self.append(hippo.CanvasWidget(widget=self._tray), hippo.PACK_EXPAND)
|
self.append(hippo.CanvasWidget(widget=self._tray), hippo.PACK_EXPAND)
|
||||||
@ -109,17 +108,10 @@ class ClipboardBox(hippo.CanvasBox):
|
|||||||
icon = ClipboardIcon(object_id, name, group)
|
icon = ClipboardIcon(object_id, name, group)
|
||||||
self._tray.add_item(icon, 0)
|
self._tray.add_item(icon, 0)
|
||||||
icon.show()
|
icon.show()
|
||||||
|
|
||||||
self._set_icon_selected(icon)
|
|
||||||
self._icons[object_id] = icon
|
self._icons[object_id] = icon
|
||||||
|
|
||||||
logging.debug('ClipboardBox: ' + object_id + ' was added.')
|
logging.debug('ClipboardBox: ' + object_id + ' was added.')
|
||||||
|
|
||||||
def _set_icon_selected(self, icon):
|
|
||||||
logging.debug('_set_icon_selected')
|
|
||||||
icon.props.active = True
|
|
||||||
self._selected_icon = icon
|
|
||||||
|
|
||||||
def _object_deleted_cb(self, cb_service, object_id):
|
def _object_deleted_cb(self, cb_service, object_id):
|
||||||
icon = self._icons[object_id]
|
icon = self._icons[object_id]
|
||||||
self._tray.remove_item(icon)
|
self._tray.remove_item(icon)
|
||||||
|
@ -59,14 +59,20 @@ class ClipboardPanelWindow(FrameWindow):
|
|||||||
targets = clipboard.wait_for_targets()
|
targets = clipboard.wait_for_targets()
|
||||||
for target in targets:
|
for target in targets:
|
||||||
if target not in ('TIMESTAMP', 'TARGETS', 'MULTIPLE', 'SAVE_TARGETS'):
|
if target not in ('TIMESTAMP', 'TARGETS', 'MULTIPLE', 'SAVE_TARGETS'):
|
||||||
|
logging.debug('Asking for target %s.' % target)
|
||||||
selection = clipboard.wait_for_contents(target)
|
selection = clipboard.wait_for_contents(target)
|
||||||
if selection:
|
if not selection:
|
||||||
|
logging.warning('no data for selection target %s.' % target)
|
||||||
|
continue
|
||||||
self._add_selection(key, selection)
|
self._add_selection(key, selection)
|
||||||
|
|
||||||
cb_service.set_object_percent(key, percent=100)
|
cb_service.set_object_percent(key, percent=100)
|
||||||
|
|
||||||
def _add_selection(self, key, selection):
|
def _add_selection(self, key, selection):
|
||||||
if selection.data:
|
if not selection.data:
|
||||||
|
logging.warning('no data for selection target %s.' % selection.type)
|
||||||
|
return
|
||||||
|
|
||||||
logging.debug('adding type ' + selection.type + '.')
|
logging.debug('adding type ' + selection.type + '.')
|
||||||
|
|
||||||
cb_service = clipboardservice.get_instance()
|
cb_service = clipboardservice.get_instance()
|
||||||
|
@ -85,7 +85,7 @@ class _KeyListener(object):
|
|||||||
class Frame(object):
|
class Frame(object):
|
||||||
MODE_MOUSE = 0
|
MODE_MOUSE = 0
|
||||||
MODE_KEYBOARD = 1
|
MODE_KEYBOARD = 1
|
||||||
MODE_HOME = 2
|
MODE_NON_INTERACTIVE = 2
|
||||||
|
|
||||||
def __init__(self, shell):
|
def __init__(self, shell):
|
||||||
self.mode = None
|
self.mode = None
|
||||||
@ -239,7 +239,7 @@ class Frame(object):
|
|||||||
|
|
||||||
def _clipboard_object_added_cb(self, cb_service, object_id, name):
|
def _clipboard_object_added_cb(self, cb_service, object_id, name):
|
||||||
if not self.visible:
|
if not self.visible:
|
||||||
self.show()
|
self.show(self.MODE_NON_INTERACTIVE)
|
||||||
gobject.timeout_add(2000, lambda: self.hide())
|
gobject.timeout_add(2000, lambda: self.hide())
|
||||||
|
|
||||||
def _enter_notify_cb(self, window, event):
|
def _enter_notify_cb(self, window, event):
|
||||||
|
@ -15,9 +15,10 @@
|
|||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import logging
|
||||||
import signal
|
import signal
|
||||||
import math
|
|
||||||
from gettext import gettext as _
|
from gettext import gettext as _
|
||||||
|
import re
|
||||||
|
|
||||||
import gobject
|
import gobject
|
||||||
import gtk
|
import gtk
|
||||||
@ -26,9 +27,7 @@ import dbus
|
|||||||
|
|
||||||
from hardware import hardwaremanager
|
from hardware import hardwaremanager
|
||||||
from sugar.graphics import style
|
from sugar.graphics import style
|
||||||
from sugar.graphics.xocolor import XoColor
|
from sugar.graphics.palette import Palette
|
||||||
from sugar.graphics.palette import Palette, CanvasInvoker
|
|
||||||
from sugar.graphics.icon import CanvasIcon
|
|
||||||
from sugar.profile import get_profile
|
from sugar.profile import get_profile
|
||||||
from sugar import env
|
from sugar import env
|
||||||
|
|
||||||
@ -38,6 +37,8 @@ from view.home.MyIcon import MyIcon
|
|||||||
from model.shellmodel import ShellModel
|
from model.shellmodel import ShellModel
|
||||||
from hardware import schoolserver
|
from hardware import schoolserver
|
||||||
|
|
||||||
|
_logger = logging.getLogger('HomeBox')
|
||||||
|
|
||||||
class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
|
class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
|
||||||
__gtype_name__ = 'SugarHomeBox'
|
__gtype_name__ = 'SugarHomeBox'
|
||||||
|
|
||||||
@ -171,6 +172,11 @@ class _MyIcon(MyIcon):
|
|||||||
palette.menu.append(item)
|
palette.menu.append(item)
|
||||||
item.show()
|
item.show()
|
||||||
|
|
||||||
|
item = gtk.MenuItem(_('About this XO'))
|
||||||
|
item.connect('activate', self._about_activate_cb)
|
||||||
|
palette.menu.append(item)
|
||||||
|
item.show()
|
||||||
|
|
||||||
self.set_palette(palette)
|
self.set_palette(palette)
|
||||||
|
|
||||||
def _reboot_activate_cb(self, menuitem):
|
def _reboot_activate_cb(self, menuitem):
|
||||||
@ -206,6 +212,65 @@ class _MyIcon(MyIcon):
|
|||||||
if self._profile.is_registered():
|
if self._profile.is_registered():
|
||||||
self.get_palette().menu.remove(menuitem)
|
self.get_palette().menu.remove(menuitem)
|
||||||
|
|
||||||
|
def _about_activate_cb(self, menuitem):
|
||||||
|
dialog = gtk.Dialog(_('About this XO'),
|
||||||
|
self.palette,
|
||||||
|
gtk.DIALOG_MODAL |
|
||||||
|
gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||||
|
(gtk.STOCK_OK, gtk.RESPONSE_OK))
|
||||||
|
|
||||||
|
not_available = _('Not available')
|
||||||
|
build = self._read_file('/boot/olpc_build')
|
||||||
|
if build is None:
|
||||||
|
build = not_available
|
||||||
|
label_build = gtk.Label('Build: %s' % build)
|
||||||
|
label_build.set_alignment(0, 0.5)
|
||||||
|
label_build.show()
|
||||||
|
dialog.vbox.pack_start(label_build)
|
||||||
|
|
||||||
|
firmware = self._read_file('/ofw/openprom/model')
|
||||||
|
if firmware is None:
|
||||||
|
firmware = not_available
|
||||||
|
else:
|
||||||
|
firmware = re.split(" +", firmware)
|
||||||
|
if len(firmware) == 3:
|
||||||
|
firmware = firmware[1]
|
||||||
|
label_firmware = gtk.Label('Firmware: %s' % firmware)
|
||||||
|
label_firmware.set_alignment(0, 0.5)
|
||||||
|
label_firmware.show()
|
||||||
|
dialog.vbox.pack_start(label_firmware)
|
||||||
|
|
||||||
|
serial = self._read_file('/ofw/serial-number')
|
||||||
|
if serial is None:
|
||||||
|
serial = not_available
|
||||||
|
label_serial = gtk.Label('Serial Number: %s' % serial)
|
||||||
|
label_serial.set_alignment(0, 0.5)
|
||||||
|
label_serial.show()
|
||||||
|
dialog.vbox.pack_start(label_serial)
|
||||||
|
|
||||||
|
dialog.set_default_response(gtk.RESPONSE_OK)
|
||||||
|
dialog.connect('response', self._response_cb)
|
||||||
|
dialog.show()
|
||||||
|
|
||||||
|
def _read_file(self, path):
|
||||||
|
if os.access(path, os.R_OK) == 0:
|
||||||
|
_logger.error('read_file() No such file or directory: %s', path)
|
||||||
|
return None
|
||||||
|
|
||||||
|
fd = open(path, 'r')
|
||||||
|
value = fd.read()
|
||||||
|
fd.close()
|
||||||
|
if value:
|
||||||
|
value = value.strip('\n')
|
||||||
|
return value
|
||||||
|
else:
|
||||||
|
_logger.error('read_file() No information in file or directory: %s', path)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _response_cb(self, widget, response_id):
|
||||||
|
if response_id == gtk.RESPONSE_OK:
|
||||||
|
widget.destroy()
|
||||||
|
|
||||||
def _close_emulator(self):
|
def _close_emulator(self):
|
||||||
if os.environ.has_key('SUGAR_EMULATOR_PID'):
|
if os.environ.has_key('SUGAR_EMULATOR_PID'):
|
||||||
pid = int(os.environ['SUGAR_EMULATOR_PID'])
|
pid = int(os.environ['SUGAR_EMULATOR_PID'])
|
||||||
|
@ -101,7 +101,7 @@ class ActivityIcon(CanvasIcon):
|
|||||||
|
|
||||||
palette.set_primary_text(self._activity.get_title())
|
palette.set_primary_text(self._activity.get_title())
|
||||||
|
|
||||||
resume_menu_item = MenuItem(_('Resume'), 'zoom-activity')
|
resume_menu_item = MenuItem(_('Resume'), 'activity-start')
|
||||||
resume_menu_item.connect('activate', self._resume_activate_cb)
|
resume_menu_item.connect('activate', self._resume_activate_cb)
|
||||||
palette.menu.append(resume_menu_item)
|
palette.menu.append(resume_menu_item)
|
||||||
resume_menu_item.show()
|
resume_menu_item.show()
|
||||||
|
Loading…
Reference in New Issue
Block a user