On Mon, Jun 27, 2011 at 9:44 AM, Gary Martin <garycmar...@googlemail.com> wrote: > Hi Sascha, > > On 27 Jun 2011, at 12:27, Sascha Silbe <si...@activitycentral.com> wrote: > >> This duplicates the existing functionality in the Control Panel for more >> convenient access. Disabling wifi devices can save power, thereby increasing >> battery life. >> >> Signed-off-by: Sascha Silbe <si...@activitycentral.com> >> --- >> >> This is fully working but I'm not sure about the correct way to change >> the label of a MenuItem. Accessing it via MenuItem.child seems hacky. >> Suggestions? >> >> We could also do with a better icon. Maybe something like the circles >> from emblem-outofrange combined with the arrow from emblem-charging, >> striking out the arrow depending on the current action (disable or enable >> wifi)? > > I'll have a think. > >> Since the wiki is down I've uploaded the screenshot to the scratch area on my >> own server [1,2]. >> >> [1] http://sascha.silbe.org/tmp/sugar-wifi-conn-disable.png >> [2] http://sascha.silbe.org/tmp/sugar-wifi-enable.png > > Thanks for the screenshots. For the sugar-wifi-enable palette can we loose > the empty section at the top, or perhaps if that's complicated we can place > some descriptive text there so it doesn't look like a bug? > > Would the text better read as "Enable my wireless radio" and "Disable my > wireless radio"?
"Wireless radio" is a bit redundant, do you think? :) -walter > > How does this interact with Mesh/Adhoc? I assume their icons will vanish from > the neighbourhood as well, and their palettes will have the same > enable/disable radio menu option? > > Regards, > --Gary > >> >> extensions/deviceicon/network.py | 57 >> ++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 57 insertions(+), 0 deletions(-) >> >> diff --git a/extensions/deviceicon/network.py >> b/extensions/deviceicon/network.py >> index 9a74237..85ca884 100644 >> --- a/extensions/deviceicon/network.py >> +++ b/extensions/deviceicon/network.py >> @@ -72,12 +72,15 @@ class WirelessPalette(Palette): >> __gsignals__ = { >> 'deactivate-connection': (gobject.SIGNAL_RUN_FIRST, >> gobject.TYPE_NONE, >> ([])), >> + 'disable-wifi': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, []), >> + 'enable-wifi': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, []), >> } >> >> def __init__(self, primary_text): >> Palette.__init__(self, label=primary_text) >> >> self._disconnect_item = None >> + self._enabled = True >> >> self._channel_label = gtk.Label() >> self._channel_label.props.xalign = 0.0 >> @@ -109,6 +112,13 @@ class WirelessPalette(Palette): >> self.__disconnect_activate_cb) >> self.menu.append(self._disconnect_item) >> >> + label = glib.markup_escape_text(_('Disable all wireless devices')) >> + self._powercontrol_item = MenuItem(label, 'system-shutdown') >> + self._powercontrol_item.connect('activate', >> + self.__powercontrol_activate_cb) >> + self._powercontrol_item.show() >> + self.menu.append(self._powercontrol_item) >> + >> def set_connecting(self): >> self.props.secondary_text = _('Connecting...') >> >> @@ -132,9 +142,26 @@ class WirelessPalette(Palette): >> self._disconnect_item.hide() >> self.set_content(None) >> >> + def set_enabled(self, enabled): >> + self._enabled = enabled >> + if enabled: >> + label = glib.markup_escape_text(_('Disable all wireless >> devices')) >> + else: >> + self.set_disconnected() >> + label = glib.markup_escape_text(_('Enable wireless devices')) >> + >> + # FIXME: what's the right way to do this? >> + self._powercontrol_item.child.set_markup(label) >> + >> def __disconnect_activate_cb(self, menuitem): >> self.emit('deactivate-connection') >> >> + def __powercontrol_activate_cb(self, menuitem): >> + if self._enabled: >> + self.emit('disable-wifi') >> + else: >> + self.emit('enable-wifi') >> + >> def _set_frequency(self, frequency): >> channel = network.frequency_to_channel(frequency) >> self._set_channel(channel) >> @@ -402,6 +429,8 @@ class WirelessDeviceView(ToolButton): >> self._palette = WirelessPalette(self._name) >> self._palette.connect('deactivate-connection', >> self.__deactivate_connection_cb) >> + self._palette.connect('disable-wifi', self.__disable_wifi_cb) >> + self._palette.connect('enable-wifi', self.__enable_wifi_cb) >> self.set_palette(self._palette) >> self._palette.set_group_id('frame') >> >> @@ -420,6 +449,16 @@ class WirelessDeviceView(ToolButton): >> path=self._device.object_path, >> dbus_interface=_NM_DEVICE_IFACE) >> >> + obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) >> + network_manager = dbus.Interface(obj, _NM_IFACE) >> + self._nm_props = dbus.Interface(network_manager, >> dbus.PROPERTIES_IFACE) >> + self._nm_props.connect_to_signal('PropertiesChanged', >> + self.__nm_props_changed_cb, >> + dbus_interface=_NM_IFACE) >> + self._nm_props.Get(_NM_IFACE, 'XWirelessEnabled', >> + reply_handler=self.__nm_wifi_enabled_reply_cb, >> + error_handler=self.__nm_wifi_enabled_error_cb) >> + >> def disconnect(self): >> self._bus.remove_signal_receiver(self.__state_changed_cb, >> signal_name='StateChanged', >> @@ -578,6 +617,24 @@ class WirelessDeviceView(ToolButton): >> def __activate_error_cb(self, err): >> logging.debug('Failed to create network: %s', err) >> >> + def __nm_wifi_enabled_reply_cb(self, enabled): >> + self._palette.set_enabled(enabled) >> + >> + def __nm_wifi_enabled_error_cb(self, error): >> + logging.error('Could not determine whether wifi is enabled: %r', >> error) >> + >> + def __nm_props_changed_cb(self, changed): >> + if 'WirelessEnabled' not in changed: >> + return >> + >> + self._palette.set_enabled(changed['WirelessEnabled']) >> + >> + def __disable_wifi_cb(self, palette_): >> + self._nm_props.Set(_NM_IFACE, 'WirelessEnabled', False) >> + >> + def __enable_wifi_cb(self, palette_): >> + self._nm_props.Set(_NM_IFACE, 'WirelessEnabled', True) >> + >> >> class OlpcMeshDeviceView(ToolButton): >> _ICON_NAME = 'network-mesh' >> -- >> 1.7.2.5 >> > _______________________________________________ > Sugar-devel mailing list > Sugar-devel@lists.sugarlabs.org > http://lists.sugarlabs.org/listinfo/sugar-devel > -- Walter Bender Sugar Labs http://www.sugarlabs.org _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel