Ticket #2094: 0001-Only-show-mesh-device-icon-when-mesh-is-active.patch
File 0001-Only-show-mesh-device-icon-when-mesh-is-active.patch, 8.1 KB (added by dsd, 13 years ago) |
---|
-
extensions/deviceicon/network.py
From 24c19c14c6f3020b8e210a9da4d84b66f3df1837 Mon Sep 17 00:00:00 2001 From: Daniel Drake <dsd@laptop.org> Date: Mon, 12 Jul 2010 11:30:18 -0600 Subject: [PATCH] Only show mesh device icon when mesh is active Simon pointed out that there's no reason to have the mesh device icon active when the mesh is not being used. Adapt it to behave more like the wired network device icon in this respect. --- extensions/deviceicon/network.py | 106 +++++++++++++++++++++++++------------- 1 files changed, 70 insertions(+), 36 deletions(-) diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py index 399ef78..84914ef 100644
a b class OlpcMeshDeviceView(ToolButton): 587 587 _ICON_NAME = 'network-mesh' 588 588 FRAME_POSITION_RELATIVE = 302 589 589 590 def __init__(self, device ):590 def __init__(self, device, state): 591 591 ToolButton.__init__(self) 592 592 593 593 self._bus = dbus.SystemBus() … … class OlpcMeshDeviceView(ToolButton): 613 613 self.set_palette(self._palette) 614 614 self._palette.set_group_id('frame') 615 615 616 self.update_state(state) 617 616 618 self._device_props = dbus.Interface(self._device, 617 619 'org.freedesktop.DBus.Properties') 618 self._device_props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True,619 reply_handler=self.__get_device_props_reply_cb,620 error_handler=self.__get_device_props_error_cb)621 620 self._device_props.Get(_NM_OLPC_MESH_IFACE, 'ActiveChannel', 622 621 reply_handler=self.__get_active_channel_reply_cb, 623 622 error_handler=self.__get_active_channel_error_cb) 624 623 625 self._bus.add_signal_receiver(self.__state_changed_cb,626 signal_name='StateChanged',627 path=self._device.object_path,628 dbus_interface=_NM_DEVICE_IFACE)629 624 self._bus.add_signal_receiver(self.__wireless_properties_changed_cb, 630 625 signal_name='PropertiesChanged', 631 626 path=device.object_path, 632 627 dbus_interface=_NM_OLPC_MESH_IFACE) 633 628 634 629 def disconnect(self): 635 self._bus.remove_signal_receiver(self.__state_changed_cb,636 signal_name='StateChanged',637 path=self._device.object_path,638 dbus_interface=_NM_DEVICE_IFACE)639 630 self._bus.remove_signal_receiver(self.__wireless_properties_changed_cb, 640 631 signal_name='PropertiesChanged', 641 632 path=self._device.object_path, 642 633 dbus_interface=_NM_OLPC_MESH_IFACE) 643 634 644 def __get_device_props_reply_cb(self, properties):645 if 'State' in properties:646 self._device_state = properties['State']647 self._update()648 649 def __get_device_props_error_cb(self, err):650 logging.error('Error getting the device properties: %s', err)651 652 635 def __get_active_channel_reply_cb(self, channel): 653 636 self._channel = channel 654 637 self._update_text() … … class OlpcMeshDeviceView(ToolButton): 692 675 self._palette.set_connected_with_channel(self._channel, address) 693 676 self._icon.props.base_color = profile.get_color() 694 677 self._icon.props.pulsing = False 695 else:696 self._icon.props.base_color = self._inactive_color697 self._icon.props.pulsing = False698 self._palette.set_disconnected()699 678 self._update_text() 700 679 680 def update_state(self, state): 681 self._device_state = state 682 self._update() 683 701 684 def __deactivate_connection(self, palette, data=None): 702 685 obj = self._bus.get_object(_NM_SERVICE, _NM_PATH) 703 686 netmgr = dbus.Interface(obj, _NM_IFACE) … … class GsmDeviceView(TrayIcon): 901 884 self._palette.connection_time_label.set_text(text) 902 885 903 886 class WirelessDeviceObserver(object): 904 def __init__(self, device, tray , device_type):887 def __init__(self, device, tray): 905 888 self._device = device 906 889 self._device_view = None 907 890 self._tray = tray 908 909 if device_type == network.DEVICE_TYPE_802_11_WIRELESS: 910 self._device_view = WirelessDeviceView(self._device) 911 elif device_type == network.DEVICE_TYPE_802_11_OLPC_MESH: 912 self._device_view = OlpcMeshDeviceView(self._device) 913 else: 914 raise ValueError('Unimplemented device type %d' % device_type) 915 891 self._device_view = WirelessDeviceView(self._device) 916 892 self._tray.add_device(self._device_view) 917 893 918 894 def disconnect(self): … … class WirelessDeviceObserver(object): 922 898 self._device_view = None 923 899 924 900 901 class MeshDeviceObserver(object): 902 def __init__(self, device, tray): 903 self._bus = dbus.SystemBus() 904 self._device = device 905 self._device_view = None 906 self._tray = tray 907 908 props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE) 909 props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True, 910 reply_handler=self.__get_device_props_reply_cb, 911 error_handler=self.__get_device_props_error_cb) 912 913 self._bus.add_signal_receiver(self.__state_changed_cb, 914 signal_name='StateChanged', 915 path=self._device.object_path, 916 dbus_interface=_NM_DEVICE_IFACE) 917 918 def _remove_device_view(self): 919 self._device_view.disconnect() 920 self._tray.remove_device(self._device_view) 921 del self._device_view 922 self._device_view = None 923 924 def disconnect(self): 925 if self._device_view is not None: 926 self._remove_device_view() 927 928 self._bus.remove_signal_receiver(self.__state_changed_cb, 929 signal_name='StateChanged', 930 path=self._device.object_path, 931 dbus_interface=_NM_DEVICE_IFACE) 932 933 def __get_device_props_reply_cb(self, properties): 934 if 'State' in properties: 935 self._update_state(properties['State']) 936 937 def __get_device_props_error_cb(self, err): 938 logging.error('Error getting the device properties: %s', err) 939 940 def __state_changed_cb(self, new_state, old_state, reason): 941 self._update_state(new_state) 942 943 def _update_state(self, state): 944 if state >= network.DEVICE_STATE_PREPARE \ 945 and state <= network.DEVICE_STATE_ACTIVATED: 946 if self._device_view is not None: 947 self._device_view.update_state(state) 948 return 949 950 self._device_view = OlpcMeshDeviceView(self._device, state) 951 self._tray.add_device(self._device_view) 952 else: 953 if self._device_view is not None: 954 self._remove_device_view() 955 956 925 957 class WiredDeviceObserver(object): 926 958 def __init__(self, device, tray): 927 959 self._bus = dbus.SystemBus() … … class NetworkManagerObserver(object): 1023 1055 if device_type == network.DEVICE_TYPE_802_3_ETHERNET: 1024 1056 device = WiredDeviceObserver(nm_device, self._tray) 1025 1057 self._devices[device_op] = device 1026 elif device_type in [network.DEVICE_TYPE_802_11_WIRELESS, 1027 network.DEVICE_TYPE_802_11_OLPC_MESH]: 1028 device = WirelessDeviceObserver(nm_device, self._tray, device_type) 1058 elif device_type == network.DEVICE_TYPE_802_11_WIRELESS: 1059 device = WirelessDeviceObserver(nm_device, self._tray) 1060 self._devices[device_op] = device 1061 elif device_type == network.DEVICE_TYPE_802_11_OLPC_MESH: 1062 device = MeshDeviceObserver(nm_device, self._tray) 1029 1063 self._devices[device_op] = device 1030 1064 elif device_type == network.DEVICE_TYPE_GSM_MODEM: 1031 1065 device = GsmDeviceObserver(nm_device, self._tray)