[Sugar-devel] [DESIGN] [PATCH RFC sugar] Wireless network Frame device: add suport for disabling wireless devices
Walter Bender
walter.bender at gmail.com
Mon Jun 27 09:49:38 EDT 2011
On Mon, Jun 27, 2011 at 9:44 AM, Gary Martin <garycmartin at googlemail.com> wrote:
> Hi Sascha,
>
> On 27 Jun 2011, at 12:27, Sascha Silbe <silbe at 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 <silbe at 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 at lists.sugarlabs.org
> http://lists.sugarlabs.org/listinfo/sugar-devel
>
--
Walter Bender
Sugar Labs
http://www.sugarlabs.org
More information about the Sugar-devel
mailing list