From f3bee99e799ac9bc05b72cdbef3f05de1d00e24d Mon Sep 17 00:00:00 2001 From: gryf Date: Sat, 1 Aug 2020 18:58:58 +0200 Subject: [PATCH] Removing GUI related files. --- curses/wicd-curses.py | 26 +- data/wicd.png | 1 - data/wicd.ui | 1750 ----------------- gnome-shell/extension.js | 29 - gnome-shell/metadata.json | 1 - gtk/configscript.py | 175 -- gtk/gui.py | 962 --------- gtk/guiutil.py | 288 --- gtk/netentry.py | 1311 ------------ gtk/prefs.py | 491 ----- gtk/wicd-client.py | 1187 ----------- icons/128x128/apps/wicd-gtk.png | Bin 6282 -> 0 bytes icons/16x16/apps/wicd-gtk.png | Bin 608 -> 0 bytes icons/192x192/apps/wicd-gtk.png | Bin 10339 -> 0 bytes icons/22x22/apps/wicd-gtk.png | Bin 877 -> 0 bytes icons/24x24/apps/wicd-gtk.png | Bin 922 -> 0 bytes icons/32x32/apps/wicd-gtk.png | Bin 1240 -> 0 bytes icons/36x36/apps/wicd-gtk.png | Bin 1379 -> 0 bytes icons/48x48/apps/wicd-gtk.png | Bin 1899 -> 0 bytes icons/64x64/apps/wicd-gtk.png | Bin 2663 -> 0 bytes icons/72x72/apps/wicd-gtk.png | Bin 2890 -> 0 bytes icons/96x96/apps/wicd-gtk.png | Bin 4419 -> 0 bytes icons/scalable/apps/wicd-gtk.svg | 178 -- images/16x16/status/signal-100.png | Bin 512 -> 0 bytes images/16x16/status/signal-25.png | Bin 521 -> 0 bytes images/16x16/status/signal-50.png | Bin 517 -> 0 bytes images/16x16/status/signal-75.png | Bin 519 -> 0 bytes images/22x22/status/bad-signal-lock.png | Bin 1051 -> 0 bytes images/22x22/status/bad-signal.png | Bin 1051 -> 0 bytes images/22x22/status/both-bad-signal-lock.png | Bin 1022 -> 0 bytes images/22x22/status/both-bad-signal.png | Bin 1022 -> 0 bytes images/22x22/status/both-good-signal-lock.png | Bin 1034 -> 0 bytes images/22x22/status/both-good-signal.png | Bin 1034 -> 0 bytes images/22x22/status/both-high-signal-lock.png | Bin 946 -> 0 bytes images/22x22/status/both-high-signal.png | Bin 946 -> 0 bytes images/22x22/status/both-low-signal-lock.png | Bin 1014 -> 0 bytes images/22x22/status/both-low-signal.png | Bin 1014 -> 0 bytes images/22x22/status/good-signal-lock.png | Bin 1054 -> 0 bytes images/22x22/status/good-signal.png | Bin 1054 -> 0 bytes images/22x22/status/high-signal-lock.png | Bin 978 -> 0 bytes images/22x22/status/high-signal.png | Bin 978 -> 0 bytes images/22x22/status/idle-bad-signal-lock.png | Bin 1051 -> 0 bytes images/22x22/status/idle-bad-signal.png | Bin 1051 -> 0 bytes images/22x22/status/idle-good-signal-lock.png | Bin 1054 -> 0 bytes images/22x22/status/idle-good-signal.png | Bin 1054 -> 0 bytes images/22x22/status/idle-high-signal-lock.png | Bin 978 -> 0 bytes images/22x22/status/idle-high-signal.png | Bin 978 -> 0 bytes images/22x22/status/idle-low-signal-lock.png | Bin 1061 -> 0 bytes images/22x22/status/idle-low-signal.png | Bin 1061 -> 0 bytes images/22x22/status/low-signal-lock.png | Bin 1061 -> 0 bytes images/22x22/status/low-signal.png | Bin 1061 -> 0 bytes images/22x22/status/no-signal.png | Bin 1101 -> 0 bytes .../status/receiving-bad-signal-lock.png | Bin 1051 -> 0 bytes images/22x22/status/receiving-bad-signal.png | Bin 1051 -> 0 bytes .../status/receiving-good-signal-lock.png | Bin 1055 -> 0 bytes images/22x22/status/receiving-good-signal.png | Bin 1055 -> 0 bytes .../status/receiving-high-signal-lock.png | Bin 978 -> 0 bytes images/22x22/status/receiving-high-signal.png | Bin 978 -> 0 bytes .../status/receiving-low-signal-lock.png | Bin 1058 -> 0 bytes images/22x22/status/receiving-low-signal.png | Bin 1058 -> 0 bytes images/22x22/status/signal-100.png | Bin 779 -> 0 bytes images/22x22/status/signal-25.png | Bin 804 -> 0 bytes images/22x22/status/signal-50.png | Bin 794 -> 0 bytes images/22x22/status/signal-75.png | Bin 790 -> 0 bytes .../status/transmitting-bad-signal-lock.png | Bin 1018 -> 0 bytes .../22x22/status/transmitting-bad-signal.png | Bin 1018 -> 0 bytes .../status/transmitting-good-signal-lock.png | Bin 1032 -> 0 bytes .../22x22/status/transmitting-good-signal.png | Bin 1032 -> 0 bytes .../status/transmitting-high-signal-lock.png | Bin 941 -> 0 bytes .../22x22/status/transmitting-high-signal.png | Bin 941 -> 0 bytes .../status/transmitting-low-signal-lock.png | Bin 1032 -> 0 bytes .../22x22/status/transmitting-low-signal.png | Bin 1032 -> 0 bytes images/22x22/status/wired.png | Bin 1245 -> 0 bytes images/24x24/status/signal-100.png | Bin 848 -> 0 bytes images/24x24/status/signal-25.png | Bin 900 -> 0 bytes images/24x24/status/signal-50.png | Bin 881 -> 0 bytes images/24x24/status/signal-75.png | Bin 868 -> 0 bytes images/32x32/status/signal-100.png | Bin 1245 -> 0 bytes images/32x32/status/signal-25.png | Bin 1323 -> 0 bytes images/32x32/status/signal-50.png | Bin 1306 -> 0 bytes images/32x32/status/signal-75.png | Bin 1274 -> 0 bytes images/36x36/status/signal-100.png | Bin 1440 -> 0 bytes images/36x36/status/signal-25.png | Bin 1477 -> 0 bytes images/36x36/status/signal-50.png | Bin 1462 -> 0 bytes images/36x36/status/signal-75.png | Bin 1436 -> 0 bytes images/48x48/devices/wired-gui.png | Bin 3282 -> 0 bytes images/48x48/status/signal-100.png | Bin 2004 -> 0 bytes images/48x48/status/signal-25.png | Bin 1841 -> 0 bytes images/48x48/status/signal-50.png | Bin 1916 -> 0 bytes images/48x48/status/signal-75.png | Bin 1959 -> 0 bytes images/original/status/signal-100.png | Bin 1894 -> 0 bytes images/original/status/signal-25.png | Bin 1545 -> 0 bytes images/original/status/signal-50.png | Bin 1667 -> 0 bytes images/original/status/signal-75.png | Bin 1792 -> 0 bytes images/scalable/devices/wired-gui.svg | 682 ------- other/wicd-gtk.xpm | 156 -- other/wicd-tray.desktop | 16 - other/wicd.desktop | 14 - scripts/wicd-gtk | 12 - setup.py | 41 - 100 files changed, 12 insertions(+), 7308 deletions(-) delete mode 100644 data/wicd.png delete mode 100644 data/wicd.ui delete mode 100644 gnome-shell/extension.js delete mode 100644 gnome-shell/metadata.json delete mode 100644 gtk/configscript.py delete mode 100644 gtk/gui.py delete mode 100644 gtk/guiutil.py delete mode 100644 gtk/netentry.py delete mode 100644 gtk/prefs.py delete mode 100644 gtk/wicd-client.py delete mode 100644 icons/128x128/apps/wicd-gtk.png delete mode 100644 icons/16x16/apps/wicd-gtk.png delete mode 100644 icons/192x192/apps/wicd-gtk.png delete mode 100644 icons/22x22/apps/wicd-gtk.png delete mode 100644 icons/24x24/apps/wicd-gtk.png delete mode 100644 icons/32x32/apps/wicd-gtk.png delete mode 100644 icons/36x36/apps/wicd-gtk.png delete mode 100644 icons/48x48/apps/wicd-gtk.png delete mode 100644 icons/64x64/apps/wicd-gtk.png delete mode 100644 icons/72x72/apps/wicd-gtk.png delete mode 100644 icons/96x96/apps/wicd-gtk.png delete mode 100644 icons/scalable/apps/wicd-gtk.svg delete mode 100644 images/16x16/status/signal-100.png delete mode 100644 images/16x16/status/signal-25.png delete mode 100644 images/16x16/status/signal-50.png delete mode 100644 images/16x16/status/signal-75.png delete mode 100644 images/22x22/status/bad-signal-lock.png delete mode 100644 images/22x22/status/bad-signal.png delete mode 100644 images/22x22/status/both-bad-signal-lock.png delete mode 100644 images/22x22/status/both-bad-signal.png delete mode 100644 images/22x22/status/both-good-signal-lock.png delete mode 100644 images/22x22/status/both-good-signal.png delete mode 100644 images/22x22/status/both-high-signal-lock.png delete mode 100644 images/22x22/status/both-high-signal.png delete mode 100644 images/22x22/status/both-low-signal-lock.png delete mode 100644 images/22x22/status/both-low-signal.png delete mode 100644 images/22x22/status/good-signal-lock.png delete mode 100644 images/22x22/status/good-signal.png delete mode 100644 images/22x22/status/high-signal-lock.png delete mode 100644 images/22x22/status/high-signal.png delete mode 100644 images/22x22/status/idle-bad-signal-lock.png delete mode 100644 images/22x22/status/idle-bad-signal.png delete mode 100644 images/22x22/status/idle-good-signal-lock.png delete mode 100644 images/22x22/status/idle-good-signal.png delete mode 100644 images/22x22/status/idle-high-signal-lock.png delete mode 100644 images/22x22/status/idle-high-signal.png delete mode 100644 images/22x22/status/idle-low-signal-lock.png delete mode 100644 images/22x22/status/idle-low-signal.png delete mode 100644 images/22x22/status/low-signal-lock.png delete mode 100644 images/22x22/status/low-signal.png delete mode 100644 images/22x22/status/no-signal.png delete mode 100644 images/22x22/status/receiving-bad-signal-lock.png delete mode 100644 images/22x22/status/receiving-bad-signal.png delete mode 100644 images/22x22/status/receiving-good-signal-lock.png delete mode 100644 images/22x22/status/receiving-good-signal.png delete mode 100644 images/22x22/status/receiving-high-signal-lock.png delete mode 100644 images/22x22/status/receiving-high-signal.png delete mode 100644 images/22x22/status/receiving-low-signal-lock.png delete mode 100644 images/22x22/status/receiving-low-signal.png delete mode 100644 images/22x22/status/signal-100.png delete mode 100644 images/22x22/status/signal-25.png delete mode 100644 images/22x22/status/signal-50.png delete mode 100644 images/22x22/status/signal-75.png delete mode 100644 images/22x22/status/transmitting-bad-signal-lock.png delete mode 100644 images/22x22/status/transmitting-bad-signal.png delete mode 100644 images/22x22/status/transmitting-good-signal-lock.png delete mode 100644 images/22x22/status/transmitting-good-signal.png delete mode 100644 images/22x22/status/transmitting-high-signal-lock.png delete mode 100644 images/22x22/status/transmitting-high-signal.png delete mode 100644 images/22x22/status/transmitting-low-signal-lock.png delete mode 100644 images/22x22/status/transmitting-low-signal.png delete mode 100644 images/22x22/status/wired.png delete mode 100644 images/24x24/status/signal-100.png delete mode 100644 images/24x24/status/signal-25.png delete mode 100644 images/24x24/status/signal-50.png delete mode 100644 images/24x24/status/signal-75.png delete mode 100644 images/32x32/status/signal-100.png delete mode 100644 images/32x32/status/signal-25.png delete mode 100644 images/32x32/status/signal-50.png delete mode 100644 images/32x32/status/signal-75.png delete mode 100644 images/36x36/status/signal-100.png delete mode 100644 images/36x36/status/signal-25.png delete mode 100644 images/36x36/status/signal-50.png delete mode 100644 images/36x36/status/signal-75.png delete mode 100644 images/48x48/devices/wired-gui.png delete mode 100644 images/48x48/status/signal-100.png delete mode 100644 images/48x48/status/signal-25.png delete mode 100644 images/48x48/status/signal-50.png delete mode 100644 images/48x48/status/signal-75.png delete mode 100644 images/original/status/signal-100.png delete mode 100644 images/original/status/signal-25.png delete mode 100644 images/original/status/signal-50.png delete mode 100644 images/original/status/signal-75.png delete mode 100644 images/scalable/devices/wired-gui.svg delete mode 100644 other/wicd-gtk.xpm delete mode 100644 other/wicd-tray.desktop delete mode 100644 other/wicd.desktop delete mode 100755 scripts/wicd-gtk diff --git a/curses/wicd-curses.py b/curses/wicd-curses.py index 351ea01..ad90de4 100644 --- a/curses/wicd-curses.py +++ b/curses/wicd-curses.py @@ -1211,7 +1211,6 @@ def main(): # This is a wrapper around a function that calls another a function that # is a wrapper around a infinite loop. Fun. urwid.set_encoding('utf8') - ui.run_wrapper(run) @@ -1276,21 +1275,20 @@ setup_dbus() if __name__ == '__main__': - #try: - # parser = OptionParser(version="wicd-curses-%s (using wicd %s)" % - # (CURSES_REV, daemon.Hello()), - # prog="wicd-curses") - #except Exception as e: - # if "DBus.Error.AccessDenied" in e.get_dbus_name(): - # print(_('ERROR: wicd-curses was denied access to the wicd daemon: ' - # 'please check that your user is in the "$A" group.') - # .replace('$A', '\033[1;34m' + wpath.wicd_group + '\033[0m')) - # sys.exit(1) - # else: - # raise + try: + parser = OptionParser(version="wicd-curses-%s (using wicd %s)" % + (CURSES_REV, daemon.Hello()), + prog="wicd-curses") + except Exception as e: + if "DBus.Error.AccessDenied" in e.get_dbus_name(): + print(_('ERROR: wicd-curses was denied access to the wicd daemon: ' + 'please check that your user is in the "$A" group.') + .replace('$A', '\033[1;34m' + wpath.wicd_group + '\033[0m')) + sys.exit(1) + else: + raise # parser.add_option("-d", "--debug", action="store_true", dest='debug', # help="enable logging of wicd-curses (currently does nothing)") - parser = OptionParser(prog="wicd-curses") (options, args) = parser.parse_args() main() diff --git a/data/wicd.png b/data/wicd.png deleted file mode 100644 index f81ee30..0000000 --- a/data/wicd.png +++ /dev/null @@ -1 +0,0 @@ -link /opt/wicd/images/wicd.png \ No newline at end of file diff --git a/data/wicd.ui b/data/wicd.ui deleted file mode 100644 index 2905daf..0000000 --- a/data/wicd.ui +++ /dev/null @@ -1,1750 +0,0 @@ - - - - - - 450 - 400 - True - Wicd Network Manager - center - 550 - wicd-gtk - center - - - - - - True - vertical - - - True - both-horiz - True - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - - - True - - - gtk-network - True - True - True - accelgroup1 - - - True - - - Create an ad-hoc network - True - image1 - False - - - - - - Find a hidden network - True - Enter a hidden network to try to locate. - image2 - False - - - - - - Forget network settings - True - Remove settings for saved networks - image3 - True - - - - - - - - - - - - False - - - - - True - True - _Refresh - True - gtk-refresh - - - - False - True - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - _Disconnect All - True - gtk-disconnect - - - - False - True - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - _Switch Off Wi-Fi - True - gtk-media-stop - - - - False - True - - - - - True - True - _Preferences - True - gtk-preferences - - - - False - True - - - - - True - True - _About - True - gtk-about - - - - False - True - - - - - True - GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK - True - _Quit - True - gtk-quit - - - - False - True - - - - - False - 0 - - - - - True - 0 - 10 - 10 - Choose from the networks below: - True - - - False - 1 - - - - - True - False - automatic - automatic - - - True - none - - - True - 3 - vertical - - - - - - - - - - 2 - - - - - 4 - - - Connecting... - True - Connecting... - - - 3 - 0 - - - - - gtk-cancel - True - False - False - Cancel the current connection attempt - True - - - - False - 3 - 1 - - - - - False - 3 - - - - - True - - - False - 4 - - - - - - - 416 - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - Configure Scripts - center-on-parent - dialog - False - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - vertical - 2 - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - vertical - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Configure scripts to run for this network: - - - False - False - 0 - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - 150 - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Pre-connection Script: - - - 0 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - 1 - - - - - False - False - 5 - 1 - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - 150 - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Post-connection Script: - - - 0 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - 1 - - - - - False - False - 5 - 2 - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - 150 - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Pre-disconnection Script: - - - 0 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - 1 - - - - - False - False - 5 - 3 - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - 150 - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Post-disconnection Script: - - - 0 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - 1 - - - - - False - False - 5 - 4 - - - - - 1 - - - - - True - end - - - gtk-cancel - True - True - False - True - - - False - False - 0 - - - - - gtk-ok - True - True - False - True - - - False - False - 1 - - - - - False - end - 0 - - - - - - button3 - button4 - - - - 5 - center-on-parent - dialog - False - - - True - vertical - 2 - - - True - True - - - True - 12 - 12 - 12 - 12 - - - True - True - automatic - automatic - - - True - queue - none - - - True - 22 - 2 - 4 - 4 - - - True - - - Always switch to a wired connection when available - True - True - False - True - If selected, wicd will automatically connect to a wired network -as soon as a cable is plugged in, even if a wireless connection -is already active. - True - - - - - 2 - 4 - 5 - - 24 - - - - - True - 24 - - - True - 0 - DNS domain: - - - - - 7 - 8 - - - - - - True - True - - - 1 - 2 - 7 - 8 - GTK_FILL - - - - - True - 12 - - - Show never connect networks - True - True - False - True - - - - - 2 - 19 - 20 - - - - - - True - 0 - <b>Never Connect</b> - True - - - 2 - 18 - 19 - - - - - - True - 12 - - - Automatically reconnect on network connection loss - True - True - False - True - - - - - 2 - 17 - 18 - - - - - - True - 0 - <b>Automatic Reconnection</b> - True - - - 2 - 16 - 17 - - - - - - True - 12 - - - Use last wired network profile - True - True - False - True - True - - - - - 2 - 15 - 16 - - - - - - True - 12 - - - Prompt for wired network profile - True - True - False - True - True - pref_use_last_radio - - - - - 2 - 14 - 15 - - - - - - True - 12 - - - Use default wired network profile - True - True - False - True - True - pref_use_last_radio - - - - - 2 - 13 - 14 - - - - - - True - 0 - <b>Wired automatic connection</b> - True - - - 2 - 12 - 13 - - - - - - True - 12 - - - True - 0 - Wired interface: - - - - - 2 - 3 - - - - - - True - 12 - - - True - 0 - Wireless interface: - - - - - 1 - 2 - - - - - - True - True - - - 1 - 2 - 2 - 3 - - - - - - True - True - - - 1 - 2 - 1 - 2 - - - - - - True - 0 - <b>Network Interfaces</b> - True - - - 2 - - - - - - True - 24 - - - True - 0 - DNS server 3: - - - - - 11 - 12 - - - - - - True - True - - - 1 - 2 - 11 - 12 - - - - - - True - 24 - - - True - 0 - DNS server 2: - - - - - 10 - 11 - - - - - - True - 24 - - - True - 0 - DNS server 1: - - - - - 9 - 10 - - - - - - True - 24 - - - True - 0 - Search domain: - - - - - 8 - 9 - - - - - - True - 12 - - - Use global DNS servers - True - True - False - True - - - - - 2 - 6 - 7 - - - - - - True - 0 - <b>Global DNS Servers</b> - True - - - 2 - 5 - 6 - - - - - - True - True - - - 1 - 2 - 10 - 11 - - - - - - True - True - - - 1 - 2 - 9 - 10 - - - - - - True - True - - - 1 - 2 - 8 - 9 - - - - - - True - 24 - - - Always show wired interface - True - True - False - If enabled, the wired network interface will always be displayed in the main window. This can be useful if your wired network card does not detect when the interface is connected to a cable. - True - - - - - 2 - 3 - 4 - - - - - - True - 0 - <b>Notifications</b> - True - - - 2 - 20 - 21 - - - - - - True - 12 - - - Display notifications about connection status - True - True - False - True - - - - - 2 - 21 - 22 - - - - - - - - - - - - - - True - General Settings - - - False - - - - - True - 12 - 12 - 12 - 12 - - - True - True - automatic - automatic - - - True - queue - none - - - True - 8 - - - True - 0 - <b>Route Table Flushing</b> - True - - - 4 - 5 - - - - - - True - 0 - <b>Wired Link Detection</b> - True - - - 2 - 3 - - - - - - True - 12 - - - True - vertical - - - Automatic (recommended) - True - True - False - True - True - - - False - 0 - - - - - ip - True - True - False - True - True - flush_auto_radio - - - False - 1 - - - - - route - True - True - False - True - True - flush_auto_radio - - - False - 2 - - - - - - - 5 - 6 - - - - - - True - 12 - - - True - vertical - - - Automatic (recommended) - True - True - False - True - True - - - False - 0 - - - - - ethtool - True - True - False - True - True - link_auto_radio - - - False - 1 - - - - - mii-tool - True - True - False - True - True - link_auto_radio - - - False - 2 - - - - - - - 3 - 4 - - - - - - True - 12 - - - True - vertical - - - Automatic (recommended) - True - True - False - True - True - dhclient_radio - - - False - 0 - - - - - dhcpcd - True - True - False - True - True - dhclient_radio - - - False - 1 - - - - - pump - True - True - False - True - True - dhclient_radio - - - False - 2 - - - - - dhclient - True - True - False - True - True - - - False - 3 - - - - - udhcpc - True - True - False - True - True - dhclient_radio - - - False - 4 - - - - - - - 1 - 2 - - - - - - True - 0 - <b>DHCP Client</b> - True - - - - - - - - True - 0 - <b>Graphical Sudo Application</b> - True - - - 6 - 7 - - - - - - True - 12 - - - True - vertical - - - Automatic (recommended) - True - True - False - True - True - - - False - 0 - - - - - gksudo - True - True - False - True - True - sudo_auto_radio - - - False - 1 - - - - - kdesu - True - True - False - True - True - sudo_auto_radio - - - False - 2 - - - - - ktsuss - True - True - False - True - True - sudo_auto_radio - - - False - 3 - - - - - - - 7 - 8 - - - - - - - - - - - 1 - - - - - True - External Programs - - - 1 - False - - - - - True - 12 - 12 - 12 - 12 - - - True - 11 - 2 - - - True - 0 - Hover your mouse over the selected backend -to read its description. - True - - - 1 - 2 - 5 - 6 - - - - - - True - vertical - - - True - - - False - 0 - - - - - 1 - 2 - 1 - 2 - - - - - - True - - - 2 - 3 - GTK_FILL - - - - - - True - 12 - - - True - 0 - Driver: - - - - - 1 - 2 - - - - - - True - 12 - - - Use dBm to measure signal strength - True - True - False - True - - - - - 2 - 9 - 10 - - - - - - True - 12 - - - Enable debug mode - True - True - False - True - - - - - 2 - 7 - 8 - - - - - - True - 0 - <b>Wireless Interface</b> - True - - - 2 - 8 - 9 - - - - - - True - 0 - <b>WPA Supplicant</b> - True - - - 2 - - - - - - True - 0 - <b>Debugging</b> - True - - - 2 - 6 - 7 - - - - - - True - 12 - - - True - 0 - Backend: - - - - - 4 - 5 - - - - - - True - True - - - 1 - 2 - 4 - 5 - - - - - - True - 0 - <b>Backend</b> - True - - - 2 - 3 - 4 - - - - - - True - 0 - You should almost always use wext as the -WPA supplicant driver. - True - - - 1 - 2 - 2 - 3 - - - - - - True - - - 5 - 6 - GTK_FILL - - - - - - True - 12 - - - Ping static gateways after connecting to verify association - True - True - False - True - - - - - 2 - 10 - 11 - - - - - - - - 2 - - - - - True - Advanced Settings - - - 2 - False - - - - - 1 - - - - - True - end - - - gtk-cancel - True - True - True - True - - - False - False - 0 - - - - - gtk-ok - True - True - True - True - - - False - False - 1 - - - - - False - end - 0 - - - - - - button2 - button1 - - - - True - gtk-add - - - True - gtk-find - - - True - gtk-delete - - - diff --git a/gnome-shell/extension.js b/gnome-shell/extension.js deleted file mode 100644 index 8302c94..0000000 --- a/gnome-shell/extension.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright © 2012, David Paleino - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License Version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -const StatusIconDispatcher = imports.ui.statusIconDispatcher; - -function init(metadata) { -} - -function enable() { - StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS['wicd-client.py'] = 'wicd-gtk'; -} - -function disable() { - StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS['wicd-client.py'] = ''; -} diff --git a/gnome-shell/metadata.json b/gnome-shell/metadata.json deleted file mode 100644 index 38b03f7..0000000 --- a/gnome-shell/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"shell-version": ["3.4.2"], "uuid": "wicd@code.hanskalabs.net", "name": "WICD Network Manager", "description": "Show status of WICD"} \ No newline at end of file diff --git a/gtk/configscript.py b/gtk/configscript.py deleted file mode 100644 index 0544fa0..0000000 --- a/gtk/configscript.py +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/env python3 -"""configscript -- Configure the scripts for a particular network. - -Script for configuring the scripts for a network passed in as a -command line argument. This needs to run a separate process because -editing scripts requires root access, and the GUI/Tray are typically -run as the current user. - -""" -# -# Copyright (C) 2007-2009 Adam Blackburn -# Copyright (C) 2007-2009 Dan O'Reilly -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License Version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -import sys -import os -import gtk - -from wicd import wpath -from wicd.translations import _ -from wicd import dbusmanager -from wicd.configmanager import ConfigManager - -dbus = dbusmanager.DBusManager() -dbus.connect_to_dbus() - -wireless = dbus.get_interface("wireless") -wired = dbus.get_interface("wired") - -wireless_conf = wpath.etc + 'wireless-settings.conf' -wired_conf = wpath.etc + 'wired-settings.conf' - - -def none_to_blank(text): - """Converts special string cases to a blank string. - - If text is None, 'None', or '' then this method will - return '', otherwise it will just return str(text). - - """ - if text in (None, "None", ""): - return "" - else: - return str(text) - - -def blank_to_none(text): - """Convert an empty or null string to 'None'.""" - if text in ("", None): - return "None" - else: - return str(text) - - -def get_script_info(network, network_type): - """ - Read script info from disk and load it into the configuration dialog - """ - info = {} - if network_type == "wired": - con = ConfigManager(wired_conf) - section = network - else: - bssid = wireless.GetWirelessProperty(int(network), "bssid") - con = ConfigManager(wireless_conf) - section = bssid - - if con.has_section(section): - info["pre_entry"] = con.get(section, "beforescript", None) - info["post_entry"] = con.get(section, "afterscript", None) - info["pre_disconnect_entry"] = con.get(section, - "predisconnectscript", None) - info["post_disconnect_entry"] = con.get(section, - "postdisconnectscript", None) - return info - - -def write_scripts(network, network_type, script_info): - """Writes script info to disk and loads it into the daemon.""" - if network_type == "wired": - con = ConfigManager(wired_conf) - con.set(network, "beforescript", script_info["pre_entry"]) - con.set(network, "afterscript", script_info["post_entry"]) - con.set(network, "predisconnectscript", - script_info["pre_disconnect_entry"]) - con.set(network, "postdisconnectscript", - script_info["post_disconnect_entry"]) - con.write() - wired.ReloadConfig() - wired.ReadWiredNetworkProfile(network) - wired.SaveWiredNetworkProfile(network) - else: - bssid = wireless.GetWirelessProperty(int(network), "bssid") - con = ConfigManager(wireless_conf) - con.set(bssid, "beforescript", script_info["pre_entry"]) - con.set(bssid, "afterscript", script_info["post_entry"]) - con.set(bssid, "predisconnectscript", - script_info["pre_disconnect_entry"]) - con.set(bssid, "postdisconnectscript", - script_info["post_disconnect_entry"]) - con.write() - wireless.ReloadConfig() - wireless.ReadWirelessNetworkProfile(int(network)) - wireless.SaveWirelessNetworkProfile(int(network)) - - -def main(argv): - """Runs the script configuration dialog.""" - if len(argv) < 2: - print('Network id to configure is missing, aborting.') - sys.exit(1) - - network = argv[1] - network_type = argv[2] - - script_info = get_script_info(network, network_type) - - gladefile = os.path.join(wpath.gtk, "wicd.ui") - wTree = gtk.Builder() - wTree.set_translation_domain('wicd') - wTree.add_from_file(gladefile) - dialog = wTree.get_object("configure_script_dialog") - wTree.get_object("pre_label").set_label(_('Pre-connection Script') + ":") - wTree.get_object("post_label").set_label(_('Post-connection Script') + ":") - wTree.get_object("pre_disconnect_label").\ - set_label(_('Pre-disconnection Script') + ":") - wTree.get_object("post_disconnect_label").\ - set_label(_('Post-disconnection Script') + ":") - wTree.get_object("window1").hide() - - pre_entry = wTree.get_object("pre_entry") - post_entry = wTree.get_object("post_entry") - pre_disconnect_entry = wTree.get_object("pre_disconnect_entry") - post_disconnect_entry = wTree.get_object("post_disconnect_entry") - - pre_entry.set_text(none_to_blank(script_info.get("pre_entry"))) - post_entry.set_text(none_to_blank(script_info.get("post_entry"))) - pre_disconnect_entry.set_text( - none_to_blank(script_info.get("pre_disconnect_entry")) - ) - post_disconnect_entry.set_text( - none_to_blank(script_info.get("post_disconnect_entry")) - ) - - dialog.show_all() - - result = dialog.run() - if result == 1: - script_info["pre_entry"] = blank_to_none(pre_entry.get_text()) - script_info["post_entry"] = blank_to_none(post_entry.get_text()) - script_info["pre_disconnect_entry"] = \ - blank_to_none(pre_disconnect_entry.get_text()) - script_info["post_disconnect_entry"] = \ - blank_to_none(post_disconnect_entry.get_text()) - write_scripts(network, network_type, script_info) - dialog.destroy() - - -if __name__ == '__main__': - if os.getuid() != 0: - print("Root privileges are required to configure scripts. Exiting.") - sys.exit(0) - main(sys.argv) diff --git a/gtk/gui.py b/gtk/gui.py deleted file mode 100644 index 75aaf49..0000000 --- a/gtk/gui.py +++ /dev/null @@ -1,962 +0,0 @@ -#!/usr/bin/env python3 -"""gui -- The main wicd GUI module. - -Module containing the code for the main wicd GUI. - -""" - -# -# Copyright (C) 2007-2009 Adam Blackburn -# Copyright (C) 2007-2009 Dan O'Reilly -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License Version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -import os -import sys -import time - -from gi.repository import GLib as gobject -import gtk -from itertools import chain -from dbus import DBusException - -from wicd import misc -from wicd import wpath -from wicd import dbusmanager -from wicd.misc import noneToString -from wicd.translations import _, language -import prefs -from prefs import PreferencesDialog -import netentry -from netentry import WiredNetworkEntry, WirelessNetworkEntry -from guiutil import error, LabelEntry - -if __name__ == '__main__': - wpath.chdir(__file__) - -proxy_obj = daemon = wireless = wired = bus = None -DBUS_AVAIL = False - - -def setup_dbus(force=True): - """Initialize DBus.""" - global bus, daemon, wireless, wired, DBUS_AVAIL - try: - dbusmanager.connect_to_dbus() - except DBusException: - if force: - print("Can't connect to the daemon, ' + \ - 'trying to start it automatically...") - if not misc.PromptToStartDaemon(): - print("Failed to find a graphical sudo program, ' + \ - 'cannot continue.") - return False - try: - dbusmanager.connect_to_dbus() - except DBusException: - error(None, _("Could not connect to wicd's D-Bus interface. " - "Check the wicd log for error messages.")) - return False - else: - return False - prefs.setup_dbus() - netentry.setup_dbus() - bus = dbusmanager.get_bus() - dbus_ifaces = dbusmanager.get_dbus_ifaces() - daemon = dbus_ifaces['daemon'] - wireless = dbus_ifaces['wireless'] - wired = dbus_ifaces['wired'] - DBUS_AVAIL = True - - return True - - -def handle_no_dbus(from_tray=False): - """Handle the case where no DBus is available.""" - global DBUS_AVAIL - DBUS_AVAIL = False - if from_tray: - return False - print("Wicd daemon is shutting down!") - error(None, _('The wicd daemon has shut down. The UI will not function ' - 'properly until it is restarted.'), block=False) - return False - - -class WiredProfileChooser: - """Class for displaying the wired profile chooser.""" - def __init__(self): - """Initializes and runs the wired profile chooser.""" - # Import and init WiredNetworkEntry to steal some of the - # functions and widgets it uses. - wired_net_entry = WiredNetworkEntry() - - dialog = gtk.Dialog( - title=_('Wired connection detected'), - flags=gtk.DIALOG_MODAL, - buttons=(gtk.STOCK_CONNECT, 1, gtk.STOCK_CANCEL, 2) - ) - dialog.set_has_separator(False) - dialog.set_size_request(400, 150) - instruct_label = gtk.Label( - _('Select or create a wired profile to connect with') + ':\n' - ) - stoppopcheckbox = gtk.CheckButton( - _('Stop Showing Autoconnect pop-up temporarily') - ) - - wired_net_entry.is_full_gui = False - instruct_label.set_alignment(0, 0) - stoppopcheckbox.set_active(False) - - # Remove widgets that were added to the normal WiredNetworkEntry - # so that they can be added to the pop-up wizard. - wired_net_entry.vbox_top.remove(wired_net_entry.hbox_temp) - wired_net_entry.vbox_top.remove(wired_net_entry.profile_help) - - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(instruct_label, fill=False, expand=False) - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(wired_net_entry.profile_help, False, False) - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(wired_net_entry.hbox_temp, False, False) - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(stoppopcheckbox, False, False) - dialog.show_all() - - wired_profiles = wired_net_entry.combo_profile_names - wired_net_entry.profile_help.hide() - if wired_net_entry.profile_list is not None: - wired_profiles.set_active(0) - print("wired profiles found") - else: - print("no wired profiles found") - wired_net_entry.profile_help.show() - - response = dialog.run() - if response == 1: - print(('reading profile ', wired_profiles.get_active_text())) - wired.ReadWiredNetworkProfile(wired_profiles.get_active_text()) - wired.ConnectWired() - else: - if stoppopcheckbox.get_active(): - daemon.SetForcedDisconnect(True) - dialog.destroy() - - -def get_wireless_prop(net_id, prop): - """Get wireless property.""" - return wireless.GetWirelessProperty(net_id, prop) - - -class appGui(object): - """The main wicd GUI class.""" - def __init__(self, standalone=False, tray=None): - """Initializes everything needed for the GUI.""" - setup_dbus() - - if not daemon: - errmsg = _("Error connecting to wicd service via D-Bus. " - "Please ensure the wicd service is running.") - d = gtk.MessageDialog(parent=None, - flags=gtk.DIALOG_MODAL, - type=gtk.MESSAGE_ERROR, - buttons=gtk.BUTTONS_OK, - message_format=errmsg) - d.run() - sys.exit(1) - - self.tray = tray - - gladefile = os.path.join(wpath.gtk, "wicd.ui") - self.wTree = gtk.Builder() - self.wTree.set_translation_domain('wicd') - self.wTree.add_from_file(gladefile) - self.window = self.wTree.get_object("window1") - width = int(gtk.gdk.screen_width() / 2) - if width > 530: - width = 530 - self.window.resize(width, int(gtk.gdk.screen_height() / 1.7)) - - dic = { - "refresh_clicked": self.refresh_clicked, - "quit_clicked": self.exit, - "rfkill_clicked": self.switch_rfkill, - "disconnect_clicked": self.disconnect_all, - "main_exit": self.exit, - "cancel_clicked": self.cancel_connect, - "hidden_clicked": self.connect_hidden, - "preferences_clicked": self.settings_dialog, - "about_clicked": self.about_dialog, - "create_adhoc_clicked": self.create_adhoc_network, - "forget_network_clicked": self.forget_network, - } - self.wTree.connect_signals(dic) - - # Set some strings in the GUI - they may be translated - label_instruct = self.wTree.get_object("label_instructions") - label_instruct.set_label(_('Choose from the networks below:')) - - probar = self.wTree.get_object("progressbar") - probar.set_text(_('Connecting')) - - self.disconnect_all_button = self.wTree.get_object('disconnect_button') - self.rfkill_button = self.wTree.get_object("rfkill_button") - self.all_network_list = self.wTree.get_object("network_list_vbox") - self.all_network_list.show_all() - self.wired_network_box = gtk.VBox(False, 0) - self.wired_network_box.show_all() - self.network_list = gtk.VBox(False, 0) - self.all_network_list.pack_start(self.wired_network_box, False, False) - self.all_network_list.pack_start(self.network_list, True, True) - self.network_list.show_all() - self.status_area = self.wTree.get_object("connecting_hbox") - self.status_bar = self.wTree.get_object("statusbar") - menu = self.wTree.get_object("menu1") - - self.status_area.hide_all() - - self.window.set_icon_name('wicd-gtk') - self.statusID = None - self.first_dialog_load = True - self.is_visible = True - self.pulse_active = False - self.pref = None - self.standalone = standalone - self.wpadrivercombo = None - self.connecting = False - self.refreshing = False - self.prev_state = None - self.update_cb = None - self._wired_showing = False - self.network_list.set_sensitive(False) - label = gtk.Label("%s..." % _('Scanning')) - self.network_list.pack_start(label) - label.show() - self.wait_for_events(0.2) - self.window.connect('delete_event', self.exit) - self.window.connect('key-release-event', self.key_event) - daemon.SetGUIOpen(True) - bus.add_signal_receiver(self.dbus_scan_finished, 'SendEndScanSignal', - 'org.wicd.daemon.wireless') - bus.add_signal_receiver(self.dbus_scan_started, 'SendStartScanSignal', - 'org.wicd.daemon.wireless') - bus.add_signal_receiver(self.update_connect_buttons, 'StatusChanged', - 'org.wicd.daemon') - bus.add_signal_receiver(self.handle_connection_results, - 'ConnectResultsSent', 'org.wicd.daemon') - bus.add_signal_receiver(lambda: setup_dbus(force=False), - "DaemonStarting", "org.wicd.daemon") - bus.add_signal_receiver(self._do_statusbar_update, 'StatusChanged', - 'org.wicd.daemon') - if standalone: - bus.add_signal_receiver(handle_no_dbus, "DaemonClosing", - "org.wicd.daemon") - - self._do_statusbar_update(*daemon.GetConnectionStatus()) - self.wait_for_events(0.1) - self.update_cb = misc.timeout_add(2, self.update_statusbar) - self.refresh_clicked() - - def handle_connection_results(self, results): - """Handle connection results.""" - if results not in ['success', 'aborted'] and self.is_visible: - error(self.window, language[results], block=False) - - def create_adhoc_network(self, widget=None): - """Shows a dialog that creates a new adhoc network.""" - print("Starting the Ad-Hoc Network Creation Process...") - dialog = gtk.Dialog( - title=_('Create an Ad-Hoc Network'), - flags=gtk.DIALOG_MODAL, - buttons=(gtk.STOCK_CANCEL, 2, gtk.STOCK_OK, 1) - ) - dialog.set_has_separator(False) - dialog.set_size_request(400, -1) - self.chkbox_use_encryption = \ - gtk.CheckButton(_('Use Encryption (WEP only)')) - self.chkbox_use_encryption.set_active(False) - ip_entry = LabelEntry(_('IP') + ':') - essid_entry = LabelEntry(_('ESSID') + ':') - channel_entry = LabelEntry(_('Channel') + ':') - self.key_entry = LabelEntry(_('Key') + ':') - self.key_entry.set_auto_hidden(True) - self.key_entry.set_sensitive(False) - - chkbox_use_ics = \ - gtk.CheckButton(_('Activate Internet Connection Sharing')) - - self.chkbox_use_encryption.connect("toggled", - self.toggle_encrypt_check) - channel_entry.entry.set_text('3') - essid_entry.entry.set_text('My_Adhoc_Network') - ip_entry.entry.set_text('169.254.12.10') # Just a random IP - - vbox_ah = gtk.VBox(False, 0) - self.wired_network_box = gtk.VBox(False, 0) - vbox_ah.pack_start(self.chkbox_use_encryption, False, False) - vbox_ah.pack_start(self.key_entry, False, False) - vbox_ah.show() - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(essid_entry) - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(ip_entry) - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(channel_entry) - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(chkbox_use_ics) - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(vbox_ah) - # pylint: disable-msg=E1101 - dialog.vbox.set_spacing(5) - dialog.show_all() - response = dialog.run() - if response == 1: - wireless.CreateAdHocNetwork( - essid_entry.entry.get_text(), - channel_entry.entry.get_text(), - ip_entry.entry.get_text().strip(), - "WEP", - self.key_entry.entry.get_text(), - self.chkbox_use_encryption.get_active(), - False) # chkbox_use_ics.get_active()) - - dialog.destroy() - - def forget_network(self, widget=None): - """ - Shows a dialog that lists saved wireless networks, and lets the user - delete them. - """ - wireless.ReloadConfig() - dialog = gtk.Dialog( - title=_('List of saved networks'), - flags=gtk.DIALOG_MODAL, - buttons=(gtk.STOCK_DELETE, 1, gtk.STOCK_OK, 2) - ) - dialog.set_has_separator(True) - dialog.set_size_request(400, 200) - - networks = gtk.ListStore(str, str) - for entry in wireless.GetSavedWirelessNetworks(): - if entry[1] != 'None': - networks.append(entry) - else: - networks.append((entry[0], - _('Global settings for this ESSID'))) - tree = gtk.TreeView(model=networks) - tree.get_selection().set_mode(gtk.SELECTION_MULTIPLE) - - cell = gtk.CellRendererText() - - column = gtk.TreeViewColumn(_('ESSID'), cell, text=0) - tree.append_column(column) - - column = gtk.TreeViewColumn(_('BSSID'), cell, text=1) - tree.append_column(column) - - scroll = gtk.ScrolledWindow() - scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - scroll.add(tree) - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(scroll) - # pylint: disable-msg=E1101 - dialog.vbox.set_spacing(5) - dialog.show_all() - response = dialog.run() - if response == 1: - model, pathlist = tree.get_selection().get_selected_rows() - to_remove = dict(essid=[], bssid=[]) - if pathlist: - for row in pathlist: - it = model.get_iter(path=row) - to_remove['essid'].append( - misc.noneToString(model.get_value(it, 0)) - ) - to_remove['bssid'].append(model.get_value(it, 1)) - - confirm = gtk.MessageDialog( - flags=gtk.DIALOG_MODAL, - type=gtk.MESSAGE_INFO, - buttons=gtk.BUTTONS_YES_NO, - message_format=_('Are you sure you want to discard ' - 'settings for the selected networks?')) - confirm.format_secondary_text('\n'.join(to_remove['essid'])) - response = confirm.run() - if response == gtk.RESPONSE_YES: - for x in to_remove['bssid']: - wireless.DeleteWirelessNetwork(x) - wireless.ReloadConfig() - confirm.destroy() - dialog.destroy() - - def toggle_encrypt_check(self, widget=None): - """Toggles the encryption key entry box for the ad-hoc dialog.""" - self.key_entry.set_sensitive(self.chkbox_use_encryption.get_active()) - - def switch_rfkill(self, widget=None): - """Switches wifi card on/off.""" - wireless.SwitchRfKill() - if wireless.GetRfKillEnabled(): - self.rfkill_button.set_stock_id(gtk.STOCK_MEDIA_PLAY) - self.rfkill_button.set_label(_('Switch On Wi-Fi')) - else: - self.rfkill_button.set_stock_id(gtk.STOCK_MEDIA_STOP) - self.rfkill_button.set_label(_('Switch Off Wi-Fi')) - - def disconnect_all(self, widget=None): - """Disconnects from any active network.""" - def handler(*args): - gobject.idle_add(self.all_network_list.set_sensitive, True) - - self.all_network_list.set_sensitive(False) - daemon.Disconnect(reply_handler=handler, error_handler=handler) - - def about_dialog(self, widget, event=None): - """Displays an about dialog.""" - dialog = gtk.AboutDialog() - dialog.set_name("Wicd") - dialog.set_version(daemon.Hello()) - dialog.set_authors([ - "Tom Van Braeckel", - "Adam Blackburn", - "Dan O'Reilly", - "Andrew Psaltis", - "David Paleino" - ]) - dialog.set_website("http://launchpad.net/wicd") - dialog.run() - dialog.destroy() - - def key_event(self, widget, event=None): - """Handle key-release-events.""" - if event.state & gtk.gdk.CONTROL_MASK and \ - gtk.gdk.keyval_name(event.keyval) in ["w", "q"]: - self.exit() - - def settings_dialog(self, widget, event=None): - """Displays a general settings dialog.""" - if not self.pref: - self.pref = PreferencesDialog(self, self.wTree) - else: - self.pref.load_preferences_diag() - if self.pref.run() == 1: - self.pref.save_results() - self.pref.hide() - - def connect_hidden(self, widget): - """Prompts the user for a hidden network, then scans for it.""" - dialog = gtk.Dialog( - title=('Hidden Network'), - flags=gtk.DIALOG_MODAL, - buttons=(gtk.STOCK_CONNECT, 1, gtk.STOCK_CANCEL, 2) - ) - dialog.set_has_separator(False) - lbl = gtk.Label(_('Hidden Network ESSID')) - textbox = gtk.Entry() - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(lbl) - # pylint: disable-msg=E1101 - dialog.vbox.pack_start(textbox) - dialog.show_all() - button = dialog.run() - if button == 1: - answer = textbox.get_text() - dialog.destroy() - self.refresh_networks(None, True, answer) - else: - dialog.destroy() - - def cancel_connect(self, widget): - """Alerts the daemon to cancel the connection process.""" - # should cancel a connection if there is one in progress - cancel_button = self.wTree.get_object("cancel_button") - cancel_button.set_sensitive(False) - daemon.CancelConnect() - # Prevents automatic reconnecting if that option is enabled - daemon.SetForcedDisconnect(True) - - def pulse_progress_bar(self): - """Pulses the progress bar while connecting to a network.""" - if not self.pulse_active: - return False - if not self.is_visible: - return True - try: - gobject.idle_add(self.wTree.get_object("progressbar").pulse) - except Exception: - pass - return True - - def update_statusbar(self): - """Triggers a status update in wicd-monitor.""" - if not self.is_visible: - return True - - daemon.UpdateState() - if self.connecting: - # If we're connecting, don't wait for the monitor to send - # us a signal, since it won't until the connection is made. - self._do_statusbar_update(*daemon.GetConnectionStatus()) - return True - - def _do_statusbar_update(self, state, info): - """Actually perform the statusbar update.""" - if not self.is_visible: - return True - - if state == misc.WIRED: - return self.set_wired_state(info) - elif state == misc.WIRELESS: - return self.set_wireless_state(info) - elif state == misc.CONNECTING: - return self.set_connecting_state(info) - elif state in (misc.SUSPENDED, misc.NOT_CONNECTED): - return self.set_not_connected_state(info) - return True - - def set_wired_state(self, info): - """Set wired state.""" - if self.connecting: - # Adjust our state from connecting->connected. - self._set_not_connecting_state() - self.set_status( - _('Connected to wired network (IP: $A)').replace('$A', info[0]) - ) - return True - - def set_wireless_state(self, info): - """Set wireless state.""" - if self.connecting: - # Adjust our state from connecting->connected. - self._set_not_connecting_state() - self.set_status(_('Connected to $A at $B (IP: $C)').replace - ('$A', info[1]).replace - ('$B', daemon.FormatSignalForPrinting(info[2])).replace - ('$C', info[0])) - return True - - def set_not_connected_state(self, info): - """Set not connected state.""" - if self.connecting: - # Adjust our state from connecting->not-connected. - self._set_not_connecting_state() - self.set_status(_('Not connected')) - return True - - def _set_not_connecting_state(self): - """Set not-connecting state.""" - if self.connecting: - if self.update_cb: - gobject.source_remove(self.update_cb) - self.update_cb = misc.timeout_add(2, self.update_statusbar) - self.connecting = False - if self.pulse_active: - self.pulse_active = False - gobject.idle_add(self.all_network_list.set_sensitive, True) - gobject.idle_add(self.status_area.hide_all) - if self.statusID: - gobject.idle_add(self.status_bar.remove_message, 1, self.statusID) - - def set_connecting_state(self, info): - """Set connecting state.""" - if not self.connecting: - if self.update_cb: - gobject.source_remove(self.update_cb) - self.update_cb = misc.timeout_add(500, self.update_statusbar, - milli=True) - self.connecting = True - if not self.pulse_active: - self.pulse_active = True - misc.timeout_add(100, self.pulse_progress_bar, milli=True) - gobject.idle_add(self.all_network_list.set_sensitive, False) - gobject.idle_add(self.status_area.show_all) - if self.statusID: - gobject.idle_add(self.status_bar.remove_message, 1, self.statusID) - if info[0] == "wireless": - stat = wireless.CheckWirelessConnectingMessage() - gobject.idle_add(self.set_status, "%s: %s" % (info[1], stat)) - elif info[0] == "wired": - gobject.idle_add(self.set_status, _('Wired Network') + ': ' + - wired.CheckWiredConnectingMessage()) - return True - - def update_connect_buttons(self, state=None, x=None, force_check=False): - """Updates the connect/disconnect buttons for the GUI. - - If force_check is given, update the buttons even if the - current network state is the same as the previous. - - """ - if not DBUS_AVAIL: - return - if not state: - state, x = daemon.GetConnectionStatus() - - self.disconnect_all_button.set_sensitive( - state in [misc.WIRED, misc.WIRELESS] - ) - if self.prev_state != state or force_check: - apbssid = wireless.GetApBssid() - for entry in chain(self.network_list, self.wired_network_box): - if hasattr(entry, "update_connect_button"): - entry.update_connect_button(state, apbssid) - self.prev_state = state - - def set_status(self, msg): - """Sets the status bar message for the GUI.""" - self.statusID = self.status_bar.push(1, msg) - - def dbus_scan_finished(self): - """Calls for a non-fresh update of the gui window. - - This method is called after a wireless scan is completed. - - """ - if not DBUS_AVAIL: - return - gobject.idle_add(self.refresh_networks, None, False, None) - - def dbus_scan_started(self): - """Called when a wireless scan starts.""" - if not DBUS_AVAIL: - return - self.network_list.set_sensitive(False) - - def _remove_items_from_vbox(self, vbox): - """Remove items fro a VBox.""" - for z in vbox: - vbox.remove(z) - z.destroy() - del z - - def refresh_clicked(self, widget=None): - """Kick off an asynchronous wireless scan.""" - if not DBUS_AVAIL or self.connecting: - return - self.refreshing = True - - # Remove stuff already in there. - self._remove_items_from_vbox(self.wired_network_box) - self._remove_items_from_vbox(self.network_list) - label = gtk.Label("%s..." % _('Scanning')) - self.network_list.pack_start(label) - self.network_list.show_all() - if wired.CheckPluggedIn() or daemon.GetAlwaysShowWiredInterface(): - printLine = True # In this case we print a separator. - wirednet = WiredNetworkEntry() - self.wired_network_box.pack_start(wirednet, False, False) - wirednet.connect_button.connect("clicked", self.connect, - "wired", 0, wirednet) - wirednet.disconnect_button.connect("clicked", self.disconnect, - "wired", 0, wirednet) - wirednet.advanced_button.connect("clicked", - self.edit_advanced, "wired", 0, - wirednet) - state, x = daemon.GetConnectionStatus() - wirednet.update_connect_button(state) - - self._wired_showing = True - else: - self._wired_showing = False - - wireless.Scan(False) - - def refresh_networks(self, widget=None, fresh=True, hidden=None): - """Refreshes the network list. - - If fresh=True, scans for wireless networks and displays the results. - If a ethernet connection is available, or the user has chosen to, - displays a Wired Network entry as well. - If hidden isn't None, will scan for networks after running - iwconfig essid . - - """ - if fresh: - if hidden: - wireless.SetHiddenNetworkESSID(noneToString(hidden)) - self.refresh_clicked() - return - print("refreshing...") - self.network_list.set_sensitive(False) - self._remove_items_from_vbox(self.network_list) - self.wait_for_events() - printLine = False # We don't print a separator by default. - if self._wired_showing: - printLine = True - num_networks = wireless.GetNumberOfNetworks() - instruct_label = self.wTree.get_object("label_instructions") - if num_networks > 0: - skip_never_connect = not daemon.GetShowNeverConnect() - instruct_label.show() - for x in range(0, num_networks): - if skip_never_connect and \ - misc.to_bool(get_wireless_prop(x, 'never')): - continue - if printLine: - sep = gtk.HSeparator() - self.network_list.pack_start(sep, padding=10, fill=False, - expand=False) - sep.show() - else: - printLine = True - tempnet = WirelessNetworkEntry(x) - self.network_list.pack_start(tempnet, False, False) - tempnet.connect_button.connect("clicked", - self.connect, "wireless", x, - tempnet) - tempnet.disconnect_button.connect("clicked", - self.disconnect, "wireless", - x, tempnet) - tempnet.advanced_button.connect("clicked", - self.edit_advanced, "wireless", - x, tempnet) - else: - instruct_label.hide() - if wireless.GetKillSwitchEnabled(): - label = gtk.Label(_('Wireless Kill Switch Enabled') + ".") - else: - label = gtk.Label(_('No wireless networks found.')) - self.network_list.pack_start(label) - label.show() - self.update_connect_buttons(force_check=True) - self.network_list.set_sensitive(True) - self.refreshing = False - - def save_settings(self, nettype, networkid, networkentry): - """Verifies and saves the settings for the network entry.""" - entry = networkentry.advanced_dialog - opt_entlist = [] - req_entlist = [] - - # First make sure all the Addresses entered are valid. - if entry.chkbox_static_ip.get_active(): - req_entlist = [entry.txt_ip, entry.txt_netmask] - opt_entlist = [entry.txt_gateway] - - if entry.chkbox_static_dns.get_active() and \ - not entry.chkbox_global_dns.get_active(): - for ent in [entry.txt_dns_1, entry.txt_dns_2, entry.txt_dns_3]: - opt_entlist.append(ent) - - # Required entries. - for lblent in req_entlist: - lblent.set_text(lblent.get_text().strip()) - if not misc.IsValidIP(lblent.get_text()): - error(self.window, _('Invalid address in $A entry.'). - replace('$A', lblent.label.get_label())) - return False - - # Optional entries, only check for validity if they're entered. - for lblent in opt_entlist: - lblent.set_text(lblent.get_text().strip()) - if lblent.get_text() and not misc.IsValidIP(lblent.get_text()): - error(self.window, _('Invalid address in $A entry.'). - replace('$A', lblent.label.get_label())) - return False - - # Now save the settings. - if nettype == "wireless": - if not networkentry.save_wireless_settings(networkid): - return False - - elif nettype == "wired": - if not networkentry.save_wired_settings(): - return False - - return True - - def edit_advanced(self, widget, ttype, networkid, networkentry): - """Display the advanced settings dialog. - - Displays the advanced settings dialog and saves any changes made. - If errors occur in the settings, an error message will be displayed - and the user won't be able to save the changes until the errors - are fixed. - - """ - dialog = networkentry.advanced_dialog - dialog.set_values() - dialog.show_all() - while True: - if self.run_settings_dialog(dialog, ttype, networkid, - networkentry): - break - dialog.hide() - - def run_settings_dialog(self, dialog, nettype, networkid, networkentry): - """Runs the settings dialog. - - Runs the settings dialog and returns True if settings are saved - successfully, and false otherwise. - - """ - result = dialog.run() - if result == gtk.RESPONSE_ACCEPT: - if self.save_settings(nettype, networkid, networkentry): - return True - else: - return False - return True - - def check_encryption_valid(self, networkid, entry): - """Make sure that encryption settings are properly filled in.""" - # Make sure no entries are left blank - if entry.chkbox_encryption.get_active(): - encryption_info = entry.encryption_info - for entry_info in list(encryption_info.values()): - if entry_info[0].entry.get_text() == "" and \ - entry_info[1] == 'required': - error(self.window, "%s (%s)" % - (_('Required encryption information is missing.'), - entry_info[0].label.get_label())) - return False - # Make sure the checkbox is checked when it should be - elif (not entry.chkbox_encryption.get_active() and - wireless.GetWirelessProperty(networkid, "encryption")): - error(self.window, _('This network requires encryption to be ' - 'enabled.')) - return False - return True - - def _wait_for_connect_thread_start(self): - """Wait for the connect thread to start.""" - self.wTree.get_object("progressbar").pulse() - if not self._connect_thread_started: - return True - else: - misc.timeout_add(2, self.update_statusbar) - self.update_statusbar() - return False - - def connect(self, widget, nettype, networkid, networkentry): - """Initiates the connection process in the daemon.""" - def handler(*args): - self._connect_thread_started = True - - def setup_interface_for_connection(): - """Initialize interface for connection.""" - cancel_button = self.wTree.get_object("cancel_button") - cancel_button.set_sensitive(True) - self.all_network_list.set_sensitive(False) - if self.statusID: - gobject.idle_add( - self.status_bar.remove_message, 1, self.statusID) - gobject.idle_add( - self.set_status, _('Disconnecting active connections...')) - gobject.idle_add(self.status_area.show_all) - self.wait_for_events() - self._connect_thread_started = False - - if nettype == "wireless": - if not self.check_encryption_valid(networkid, - networkentry.advanced_dialog): - self.edit_advanced(None, nettype, networkid, networkentry) - return False - setup_interface_for_connection() - wireless.ConnectWireless(networkid, reply_handler=handler, - error_handler=handler) - elif nettype == "wired": - setup_interface_for_connection() - wired.ConnectWired(reply_handler=handler, error_handler=handler) - - gobject.source_remove(self.update_cb) - misc.timeout_add(100, self._wait_for_connect_thread_start, milli=True) - - def disconnect(self, widget, nettype, networkid, networkentry): - """Disconnects from the given network. - - Keyword arguments: - widget -- The disconnect button that was pressed. - event -- unused - nettype -- "wired" or "wireless", depending on the network entry type. - networkid -- unused - networkentry -- The NetworkEntry containing the disconnect button. - - """ - def handler(*args): - gobject.idle_add(self.all_network_list.set_sensitive, True) - gobject.idle_add(self.network_list.set_sensitive, True) - - widget.hide() - networkentry.connect_button.show() - daemon.SetForcedDisconnect(True) - self.network_list.set_sensitive(False) - if nettype == "wired": - wired.DisconnectWired(reply_handler=handler, error_handler=handler) - else: - wireless.DisconnectWireless(reply_handler=handler, - error_handler=handler) - - def wait_for_events(self, amt=0): - """Wait for any pending gtk events to finish before moving on. - - Keyword arguments: - amt -- a number specifying the number of ms to wait before checking - for pending events. - - """ - time.sleep(amt) - while gtk.events_pending(): - gtk.main_iteration() - - def exit(self, widget=None, event=None): - """Hide the wicd GUI. - - This method hides the wicd GUI and writes the current window size - to disc for later use. This method normally does NOT actually - destroy the GUI, it just hides it. - - """ - self.window.hide() - gobject.source_remove(self.update_cb) - bus.remove_signal_receiver(self._do_statusbar_update, 'StatusChanged', - 'org.wicd.daemon') - [width, height] = self.window.get_size() - try: - daemon.SetGUIOpen(False) - except DBusException: - pass - - if self.standalone: - sys.exit(0) - - self.is_visible = False - return True - - def show_win(self): - """Brings the GUI out of the hidden state. - - Method to show the wicd GUI, alert the daemon that it is open, - and refresh the network list. - - """ - self.window.present() - self.window.deiconify() - self.wait_for_events() - self.is_visible = True - daemon.SetGUIOpen(True) - self.wait_for_events(0.1) - gobject.idle_add(self.refresh_clicked) - self._do_statusbar_update(*daemon.GetConnectionStatus()) - bus.add_signal_receiver(self._do_statusbar_update, 'StatusChanged', - 'org.wicd.daemon') - self.update_cb = misc.timeout_add(2, self.update_statusbar) - - -if __name__ == '__main__': - setup_dbus() - app = appGui(standalone=True) - mainloop = gobject.MainLoop() - mainloop.run() diff --git a/gtk/guiutil.py b/gtk/guiutil.py deleted file mode 100644 index 6fefa55..0000000 --- a/gtk/guiutil.py +++ /dev/null @@ -1,288 +0,0 @@ -"""guiutil - A collection of commonly used gtk/gui functions and classes.""" -# -# Copyright (C) 2007 - 2009 Adam Blackburn -# Copyright (C) 2007 - 2009 Dan O'Reilly -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License Version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -import gtk -import os.path - -import wicd.wpath as wpath - -HAS_NOTIFY = True -try: - import pynotify - if not pynotify.init("Wicd"): - print('Could not initalize pynotify') - HAS_NOTIFY = False -except ImportError: - print("Importing pynotify failed, notifications disabled.") - HAS_NOTIFY = False - -print(("Has notifications support", HAS_NOTIFY)) - -if wpath.no_use_notifications: - print('Notifications disabled during setup.py configure') - - -def can_use_notify(): - """Check whether WICD is allowed to use notifications.""" - use_notify = os.path.exists(os.path.join(os.path.expanduser('~/.wicd'), - 'USE_NOTIFICATIONS') - ) - return use_notify and HAS_NOTIFY and not wpath.no_use_notifications - - -def error(parent, message, block=True): - """Shows an error dialog.""" - def delete_event(dialog, i): - """Handle dialog destroy.""" - dialog.destroy() - - if can_use_notify() and not block: - notification = pynotify.Notification("ERROR", message, "error") - notification.show() - return - dialog = gtk.MessageDialog(parent, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, - gtk.BUTTONS_OK) - dialog.set_markup(message) - if not block: - dialog.present() - dialog.connect("response", delete_event) - else: - dialog.run() - dialog.destroy() - - -def alert(parent, message, block=True): - """Shows an warning dialog.""" - def delete_event(dialog, i): - """Handle dialog destroy.""" - dialog.destroy() - - dialog = gtk.MessageDialog(parent, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, - gtk.BUTTONS_OK) - dialog.set_markup(message) - if not block: - dialog.present() - dialog.connect("response", delete_event) - else: - dialog.run() - dialog.destroy() - - -def string_input(prompt, secondary, textbox_label): - """Dialog with a label and an entry.""" - # based on a version of a PyGTK text entry from - # http://ardoris.wordpress.com/2008/07/05/pygtk-text-entry-dialog/ - - def dialog_response(entry, dialog, response): - """Handle dialog response.""" - dialog.response(response) - - dialog = gtk.MessageDialog( - None, - gtk.DIALOG_MODAL, - gtk.MESSAGE_QUESTION, - gtk.BUTTONS_OK_CANCEL, - None) - - # set the text - dialog.set_markup("" + prompt + "") - # add the secondary text - dialog.format_secondary_markup(secondary) - - entry = gtk.Entry() - # allow the user to press enter instead of clicking OK - entry.connect("activate", dialog_response, dialog, gtk.RESPONSE_OK) - - # create an hbox and pack the label and entry in - hbox = gtk.HBox() - hbox.pack_start(gtk.Label(textbox_label), False, 4, 4) - hbox.pack_start(entry) - - # pack the boxes and show the dialog - # pylint: disable-msg=E1101 - dialog.vbox.pack_end(hbox, True, True, 0) - dialog.show_all() - - if dialog.run() == gtk.RESPONSE_OK: - text = entry.get_text() - dialog.destroy() - return text - else: - dialog.destroy() - return None - - -class SmallLabel(gtk.Label): - """Small GtkLabel.""" - def __init__(self, text=''): - gtk.Label.__init__(self, text) - self.set_size_request(50, -1) - - -class LeftAlignedLabel(gtk.Label): - """GtkLabel with text aligned to left.""" - def __init__(self, label=None): - gtk.Label.__init__(self, label) - self.set_alignment(0.0, 0.5) - - -class LabelEntry(gtk.HBox): - """A label on the left with a textbox on the right.""" - def __init__(self, text): - gtk.HBox.__init__(self) - self.entry = gtk.Entry() - self.entry.set_size_request(200, -1) - self.label = LeftAlignedLabel() - self.label.set_text(text) - self.label.set_size_request(170, -1) - self.pack_start(self.label, fill=True, expand=True) - self.pack_start(self.entry, fill=False, expand=False) - self.label.show() - self.entry.show() - self.entry.connect('focus-out-event', self.hide_characters) - self.entry.connect('focus-in-event', self.show_characters) - self.auto_hide_text = False - self.show() - - def set_text(self, text): - """Set text of the GtkEntry.""" - # For compatibility... - self.entry.set_text(text) - - def get_text(self): - """Get text of the GtkEntry.""" - return self.entry.get_text() - - def set_auto_hidden(self, value): - """Set auto-hide of the text of GtkEntry.""" - self.entry.set_visibility(False) - self.auto_hide_text = value - - def show_characters(self, widget=None, event=None): - """When the box has focus, show the characters.""" - if self.auto_hide_text and widget: - self.entry.set_visibility(True) - - def set_sensitive(self, value): - """Set sensitivity of the widget.""" - self.entry.set_sensitive(value) - self.label.set_sensitive(value) - - def hide_characters(self, widget=None, event=None): - """When the box looses focus, hide them.""" - if self.auto_hide_text and widget: - self.entry.set_visibility(False) - - -class GreyLabel(gtk.Label): - """Creates a grey gtk.Label.""" - def __init__(self): - gtk.Label.__init__(self) - - def set_label(self, text): - self.set_markup(text) - self.set_alignment(0, 0) - - -class ProtectedLabelEntry(gtk.HBox): - """A LabelEntry with a CheckButton that protects the entry text.""" - def __init__(self, label_text): - gtk.HBox.__init__(self) - self.entry = gtk.Entry() - self.entry.set_size_request(200, -1) - self.entry.set_visibility(False) - self.label = LeftAlignedLabel() - self.label.set_text(label_text) - self.label.set_size_request(165, -1) - self.check = gtk.CheckButton() - self.check.set_size_request(5, -1) - self.check.set_active(False) - self.check.set_focus_on_click(False) - self.pack_start(self.label, fill=True, expand=True) - self.pack_start(self.check, fill=True, expand=True) - self.pack_start(self.entry, fill=False, expand=False) - self.label.show() - self.check.show() - self.entry.show() - self.check.connect('clicked', self.click_handler) - self.show() - - def set_entry_text(self, text): - """Set text of the GtkEntry.""" - # For compatibility... - self.entry.set_text(text) - - def get_entry_text(self): - """Get text of the GtkEntry.""" - return self.entry.get_text() - - def set_sensitive(self, value): - """Set sensitivity of the widget.""" - self.entry.set_sensitive(value) - self.label.set_sensitive(value) - self.check.set_sensitive(value) - - def click_handler(self, widget=None, event=None): - """Handle clicks.""" - active = self.check.get_active() - self.entry.set_visibility(active) - - -class LabelCombo(gtk.HBox): - """A label on the left with a combobox on the right.""" - - def __init__(self, text): - gtk.HBox.__init__(self) - self.combo = gtk.ComboBox() - self.combo.set_size_request(200, -1) - self.label = LeftAlignedLabel() - self.label.set_text(text) - self.label.set_size_request(170, -1) - cell = gtk.CellRendererText() - self.combo.pack_start(cell, True) - self.combo.add_attribute(cell, 'text', 0) - self.pack_start(self.label, fill=True, expand=True) - self.pack_start(self.combo, fill=False, expand=False) - self.label.show() - self.combo.show() - self.show() - - def get_active(self): - """Return the selected item in the GtkComboBox.""" - return self.combo.get_active() - - def set_active(self, index): - """Set given item in the GtkComboBox.""" - self.combo.set_active(index) - - def get_active_text(self): - """Return the selected item's text in the GtkComboBox.""" - return self.combo.get_active_text() - - def get_model(self): - """Return the GtkComboBox's model.""" - return self.combo.get_model() - - def set_model(self, model=None): - """Set the GtkComboBox's model.""" - self.combo.set_model(model) - - def set_sensitive(self, value): - """Set sensitivity of the widget.""" - self.combo.set_sensitive(value) - self.label.set_sensitive(value) diff --git a/gtk/netentry.py b/gtk/netentry.py deleted file mode 100644 index 2e0701c..0000000 --- a/gtk/netentry.py +++ /dev/null @@ -1,1311 +0,0 @@ -"""netentry -- Network entry widgets for the GUI. - -This module provides GUI widgets used to represent wired and wireless -entries in the GUI's network list, as well as any settings dialogs -contained within them. - -""" -# -# Copyright (C) 2008-2009 Adam Blackburn -# Copyright (C) 2008-2009 Dan O'Reilly -# Copyright (C) 2009 Andrew Psaltis -# Copyright (C) 2011 David Paleino -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License Version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -import os - -import gtk - -import wicd.misc as misc -import wicd.wpath as wpath -import wicd.dbusmanager as dbusmanager -from wicd.misc import noneToString, stringToNone, noneToBlankString, to_bool -from guiutil import error, LabelEntry, GreyLabel, LeftAlignedLabel -from guiutil import string_input, ProtectedLabelEntry, LabelCombo - -from wicd.translations import language, _ - -# These get set when a NetworkEntry is instantiated. -daemon = None -wired = None -wireless = None - - -def setup_dbus(): - """Initialize DBus.""" - global daemon, wireless, wired - daemon = dbusmanager.get_interface('daemon') - wireless = dbusmanager.get_interface('wireless') - wired = dbusmanager.get_interface('wired') - - -class AdvancedSettingsDialog(gtk.Dialog): - """Advanced settings dialog.""" - def __init__(self, network_name=None): - """Build the base advanced settings dialog. - - This class isn't used by itself, instead it is used as a parent for - the WiredSettingsDialog and WirelessSettingsDialog. - - """ - # if no network name was passed, just use Properties as the title - if network_name: - title = '%s - %s' % (network_name, _('Properties')) - else: - title = _('Properties') - - gtk.Dialog.__init__( - self, - title=title, - flags=gtk.DIALOG_MODAL, - buttons=( - gtk.STOCK_CANCEL, - gtk.RESPONSE_REJECT, - gtk.STOCK_OK, - gtk.RESPONSE_ACCEPT - ) - ) - - self.set_default_size() - - self.connect('show', lambda *a, **k: self.set_default_size()) - - # Set up the Advanced Settings Dialog. - self.txt_ip = LabelEntry(_('IP')) - self.txt_ip.entry.connect('focus-out-event', self.set_defaults) - self.txt_netmask = LabelEntry(_('Netmask')) - self.txt_gateway = LabelEntry(_('Gateway')) - self.txt_search_dom = LabelEntry(_('Search domain')) - self.txt_domain = LabelEntry(_('DNS domain')) - self.txt_dns_1 = LabelEntry(_('DNS server') + ' 1') - self.txt_dns_2 = LabelEntry(_('DNS server') + ' 2') - self.txt_dns_3 = LabelEntry(_('DNS server') + ' 3') - dhcp_hostname_hbox = gtk.HBox(False, 0) - self.chkbox_use_dhcp_hostname = gtk.CheckButton() - self.txt_dhcp_hostname = LabelEntry("DHCP Hostname") - dhcp_hostname_hbox.pack_start( - self.chkbox_use_dhcp_hostname, fill=False, expand=False) - dhcp_hostname_hbox.pack_start(self.txt_dhcp_hostname) - self.chkbox_static_ip = gtk.CheckButton(_('Use Static IPs')) - self.chkbox_static_dns = gtk.CheckButton(_('Use Static DNS')) - self.chkbox_global_dns = gtk.CheckButton(_('Use global DNS servers')) - self.hbox_dns = gtk.HBox(False, 0) - self.hbox_dns.pack_start(self.chkbox_static_dns) - self.hbox_dns.pack_start(self.chkbox_global_dns) - - # Set up the script settings button - self.script_button = gtk.Button() - script_image = gtk.Image() - script_image.set_from_stock(gtk.STOCK_EXECUTE, 4) - script_image.set_padding(4, 0) - # self.script_button.set_alignment(.5, .5) - self.script_button.set_image(script_image) - self.script_button.set_label(_('Scripts')) - - self.button_hbox = gtk.HBox(False, 2) - self.button_hbox.pack_start( - self.script_button, fill=False, expand=False) - self.button_hbox.show() - - self.swindow = gtk.ScrolledWindow() - self.swindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - self.viewport = gtk.Viewport() - self.viewport.set_shadow_type(gtk.SHADOW_NONE) - self.cvbox = gtk.VBox() - self.viewport.add(self.cvbox) - self.swindow.add(self.viewport) - # pylint: disable-msg=E1101 - self.vbox.pack_start(self.swindow) - - assert(isinstance(self.cvbox, gtk.VBox)) - self.cvbox.pack_start(self.chkbox_static_ip, fill=False, expand=False) - self.cvbox.pack_start(self.txt_ip, fill=False, expand=False) - self.cvbox.pack_start(self.txt_netmask, fill=False, expand=False) - self.cvbox.pack_start(self.txt_gateway, fill=False, expand=False) - self.cvbox.pack_start(self.hbox_dns, fill=False, expand=False) - self.cvbox.pack_start(self.txt_domain, fill=False, expand=False) - self.cvbox.pack_start(self.txt_search_dom, fill=False, expand=False) - self.cvbox.pack_start(self.txt_dns_1, fill=False, expand=False) - self.cvbox.pack_start(self.txt_dns_2, fill=False, expand=False) - self.cvbox.pack_start(self.txt_dns_3, fill=False, expand=False) - self.cvbox.pack_start(dhcp_hostname_hbox, fill=False, expand=False) - self.cvbox.pack_end( - self.button_hbox, fill=False, expand=False, padding=5) - - # Connect the events to the actions - self.chkbox_static_ip.connect("toggled", self.toggle_ip_checkbox) - self.chkbox_static_dns.connect("toggled", self.toggle_dns_checkbox) - self.chkbox_global_dns.connect( - "toggled", self.toggle_global_dns_checkbox) - self.chkbox_use_dhcp_hostname.connect( - 'toggled', - self.toggle_dhcp_hostname_checkbox - ) - - # Start with all disabled, then they will be enabled later. - self.chkbox_static_ip.set_active(False) - self.chkbox_static_dns.set_active(False) - - def set_default_size(self): - """Set default window size.""" - width, height = self.get_size() - s_height = gtk.gdk.screen_height() - if s_height < 768: - height = s_height * .75 - else: - height = 600 - self.resize(int(width), int(height)) - - def set_defaults(self, widget=None, event=None): - """Put some default values into entries to help the user out.""" - self.txt_ip.set_text(self.txt_ip.get_text().strip()) - ip = self.txt_ip.get_text() # For easy typing :) - netmask = self.txt_netmask - gateway = self.txt_gateway - if misc.IsValidIP(ip): - # Only do these things if it's IPv4 - if misc.IsValidIPv4(ip): - # Make sure the gateway box is blank - if stringToNone(gateway.get_text()) is None: - # Fill it in with a .1 at the end - gateway.set_text(ip[:ip.rindex('.')] + '.1') - - # Make sure the netmask is blank - if stringToNone(netmask.get_text()) is None: - # Fill in the most common one - if ip.startswith('172'): - netmask.set_text('255.240.0.0') - elif ip.startswith('10'): - netmask.set_text('255.0.0.0') - else: - # 192.168 and all other cases - netmask.set_text('255.255.255.0') - elif ip != '': - error(None, _('Invalid IP address entered.')) - - def reset_static_checkboxes(self): - """Enable the right stuff.""" - if stringToNone(self.txt_ip.get_text()): - self.chkbox_static_ip.set_active(True) - self.chkbox_static_dns.set_active(True) - self.chkbox_static_dns.set_sensitive(False) - else: - self.chkbox_static_ip.set_active(False) - self.chkbox_static_dns.set_sensitive(True) - - if stringToNone(self.txt_dns_1.get_text()) or \ - self.chkbox_global_dns.get_active(): - self.chkbox_static_dns.set_active(True) - else: - self.chkbox_static_dns.set_active(False) - - # This will properly disable unused boxes. - self.toggle_ip_checkbox() - self.toggle_dns_checkbox() - self.toggle_global_dns_checkbox() - - def toggle_ip_checkbox(self, widget=None): - """Toggle entries/checkboxes based on the static IP checkbox.""" - # Should disable the static IP text boxes, and also enable the DNS - # checkbox when disabled and disable when enabled. - if self.chkbox_static_ip.get_active(): - self.chkbox_static_dns.set_active(True) - self.chkbox_static_dns.set_sensitive(False) - else: - self.chkbox_static_dns.set_sensitive(True) - - self.txt_ip.set_sensitive(self.chkbox_static_ip.get_active()) - self.txt_netmask.set_sensitive(self.chkbox_static_ip.get_active()) - self.txt_gateway.set_sensitive(self.chkbox_static_ip.get_active()) - - def toggle_dns_checkbox(self, widget=None): - """Toggle entries and checkboxes based on the static dns checkbox.""" - # Should disable the static DNS boxes - if self.chkbox_static_ip.get_active(): - self.chkbox_static_dns.set_active(True) - self.chkbox_static_dns.set_sensitive(False) - - self.chkbox_global_dns.set_sensitive(self.chkbox_static_dns. - get_active()) - - search_list = [self.txt_dns_1, self.txt_dns_2, self.txt_dns_3, - self.txt_domain, self.txt_search_dom] - if self.chkbox_static_dns.get_active(): - # If global dns is on, don't use local dns - for w in search_list: - w.set_sensitive(not self.chkbox_global_dns.get_active()) - else: - for w in search_list: - w.set_sensitive(False) - self.chkbox_global_dns.set_active(False) - - def toggle_dhcp_hostname_checkbox(self, widget=None): - """Set widget sensitivity.""" - self.txt_dhcp_hostname.set_sensitive( - self.chkbox_use_dhcp_hostname.get_active()) - - def toggle_global_dns_checkbox(self, widget=None): - """Set the DNS entries' sensitivity based on the Global checkbox.""" - global_dns_active = daemon.GetUseGlobalDNS() - if not global_dns_active and self.chkbox_global_dns.get_active(): - error( - None, - _('Global DNS has not been enabled in general preferences.') - ) - self.chkbox_global_dns.set_active(False) - if daemon.GetUseGlobalDNS() and self.chkbox_static_dns.get_active(): - for w in [self.txt_dns_1, self.txt_dns_2, self.txt_dns_3, - self.txt_domain, self.txt_search_dom]: - w.set_sensitive(not self.chkbox_global_dns.get_active()) - - def toggle_encryption(self, widget=None): - """ - Toggle the encryption combobox based on the encryption checkbox. - """ - active = self.chkbox_encryption.get_active() - self.vbox_encrypt_info.set_sensitive(active) - self.combo_encryption.set_sensitive(active) - - def destroy_called(self, *args): - """Clean up everything.""" - super(AdvancedSettingsDialog, self).destroy() - self.destroy() - del self - - def save_settings(self, networkid=None): - """Save settings common to wired and wireless settings dialogs.""" - if self.chkbox_static_ip.get_active(): - self.set_net_prop("ip", noneToString(self.txt_ip.get_text())) - self.set_net_prop( - "netmask", noneToString(self.txt_netmask.get_text())) - self.set_net_prop( - "gateway", noneToString(self.txt_gateway.get_text())) - else: - self.set_net_prop("ip", '') - self.set_net_prop("netmask", '') - self.set_net_prop("gateway", '') - - if self.chkbox_static_dns.get_active() and \ - not self.chkbox_global_dns.get_active(): - self.set_net_prop('use_static_dns', True) - self.set_net_prop('use_global_dns', False) - self.set_net_prop( - 'dns_domain', noneToString(self.txt_domain.get_text())) - self.set_net_prop( - "search_domain", noneToString(self.txt_search_dom.get_text())) - self.set_net_prop("dns1", noneToString(self.txt_dns_1.get_text())) - self.set_net_prop("dns2", noneToString(self.txt_dns_2.get_text())) - self.set_net_prop("dns3", noneToString(self.txt_dns_3.get_text())) - elif (self.chkbox_static_dns.get_active() and - self.chkbox_global_dns.get_active()): - self.set_net_prop('use_static_dns', True) - self.set_net_prop('use_global_dns', True) - else: - self.set_net_prop('use_static_dns', False) - self.set_net_prop('use_global_dns', False) - self.set_net_prop('dns_domain', '') - self.set_net_prop("search_domain", '') - self.set_net_prop("dns1", '') - self.set_net_prop("dns2", '') - self.set_net_prop("dns3", '') - self.set_net_prop('usedhcphostname', - self.chkbox_use_dhcp_hostname.get_active()) - self.set_net_prop("dhcphostname", noneToString(self.txt_dhcp_hostname. - get_text())) - - def change_encrypt_method(self, widget=None): - """Load all the entries for a given encryption method.""" - for z in self.vbox_encrypt_info: - z.destroy() # Remove stuff in there already - ID = self.combo_encryption.get_active() - methods = self.encrypt_types - self.encryption_info = {} - - # If nothing is selected, select the first entry. - if ID == -1: - self.combo_encryption.set_active(0) - ID = 0 - - for type_ in ['required', 'optional']: - fields = methods[ID][type_] - for field in fields: - try: - field_text = language[field[1].lower().replace(' ', '_')] - except KeyError: - field_text = field[1].replace(' ', '_') - - if field in methods[ID]['protected']: - box = ProtectedLabelEntry(field_text) - else: - box = LabelEntry(field_text) - - self.vbox_encrypt_info.pack_start(box) - # Add the data to a dict, so that the information - # can be easily accessed by giving the name of the wanted - # data. - self.encryption_info[field[0]] = [box, type_] - - if self.wired: - box.entry.set_text(noneToBlankString( - wired.GetWiredProperty(field[0]))) - else: - box.entry.set_text( - noneToBlankString(wireless. - GetWirelessProperty(self.networkID, - field[0]))) - self.vbox_encrypt_info.show_all() - - -class WiredSettingsDialog(AdvancedSettingsDialog): - """Wired settings dialog.""" - def __init__(self, name): - """Build the wired settings dialog.""" - AdvancedSettingsDialog.__init__(self, _('Wired Network')) - - # So we can test if we are wired or wireless (for - # change_encrypt_method()) - self.wired = True - - # This section is largely copied from WirelessSettingsDialog, but with - # some changes - # - # Set up encryption stuff - self.combo_encryption = gtk.combo_box_new_text() - self.chkbox_encryption = gtk.CheckButton(_('Use Encryption')) - # Make the vbox to hold the encryption stuff. - self.vbox_encrypt_info = gtk.VBox(False, 0) - self.chkbox_encryption.set_active( - bool(wired.GetWiredProperty('encryption_enabled'))) - self.combo_encryption.set_sensitive(False) - self.encrypt_types = misc.LoadEncryptionMethods(wired=True) - - # Build the encryption menu - for x, enc_type in enumerate(self.encrypt_types): - self.combo_encryption.append_text(enc_type['name']) - self.combo_encryption.set_active(0) - self.change_encrypt_method() - self.toggle_encryption() - - self.cvbox.pack_start(self.chkbox_encryption, False, False) - self.cvbox.pack_start(self.combo_encryption, False, False) - self.cvbox.pack_start(self.vbox_encrypt_info, False, False) - - # Connect signals. - self.chkbox_encryption.connect("toggled", self.toggle_encryption) - self.combo_encryption.connect("changed", self.change_encrypt_method) - - self.des = self.connect("destroy", self.destroy_called) - self.script_button.connect("clicked", self.edit_scripts) - self.prof_name = name - - def set_net_prop(self, option, value): - """Sets the given option to the given value for this network.""" - wired.SetWiredProperty(option, value) - - def edit_scripts(self, widget=None, event=None): - """Launch the script editting dialog.""" - profile = self.prof_name - cmdend = [os.path.join(wpath.gtk, "configscript.py"), profile, "wired"] - if os.getuid() != 0: - cmdbase = misc.get_sudo_cmd( - _('You must enter your password to configure scripts'), - prog_num=daemon.GetSudoApp() - ) - if not cmdbase: - error(None, _("Could not find a graphical sudo program. " - "The script editor could not be launched. " - "You'll have to edit scripts directly your " - "configuration " - "file.")) - return - cmdbase.extend(cmdend) - misc.LaunchAndWait(cmdbase) - else: - misc.LaunchAndWait(cmdend) - - def set_values(self): - """Fill in the Gtk.Entry objects with the correct values.""" - self.txt_ip.set_text(self.format_entry("ip")) - self.txt_netmask.set_text(self.format_entry("netmask")) - self.txt_gateway.set_text(self.format_entry("gateway")) - - self.txt_dns_1.set_text(self.format_entry("dns1")) - self.txt_dns_2.set_text(self.format_entry("dns2")) - self.txt_dns_3.set_text(self.format_entry("dns3")) - self.txt_domain.set_text(self.format_entry("dns_domain")) - self.txt_search_dom.set_text(self.format_entry("search_domain")) - self.chkbox_global_dns.set_active( - bool(wired.GetWiredProperty("use_global_dns"))) - - dhcphname = wired.GetWiredProperty("dhcphostname") - if dhcphname is None: - dhcphname = os.uname()[1] - - self.txt_dhcp_hostname.set_text(dhcphname) - self.reset_static_checkboxes() - - self.chkbox_encryption.set_active( - bool(wired.GetWiredProperty('encryption_enabled'))) - self.change_encrypt_method() - self.toggle_encryption() - - def save_settings(self, networkid=None): - """Save settings to disk.""" - # Check encryption info - encrypt_info = self.encryption_info - self.set_net_prop( - "encryption_enabled", - self.chkbox_encryption.get_active() - ) - if self.chkbox_encryption.get_active(): - print("setting encryption info...") - encrypt_methods = self.encrypt_types - self.set_net_prop( - "enctype", - encrypt_methods[self.combo_encryption.get_active()]['type'] - ) - # Make sure all required fields are filled in. - for entry_info in list(encrypt_info.values()): - if entry_info[0].entry.get_text() == "" and \ - entry_info[1] == 'required': - error( - self, - "%s (%s)" % ( - _('Required encryption information is missing.'), - entry_info[0].label.get_label() - ) - ) - return False - # Now save all the entries. - for entry_key, entry_info in list(encrypt_info.items()): - self.set_net_prop(entry_key, - noneToString(entry_info[0].entry.get_text())) - else: - print("no encryption specified...") - self.set_net_prop("enctype", "None") - AdvancedSettingsDialog.save_settings(self) - wired.SaveWiredNetworkProfile(self.prof_name) - return True - - def format_entry(self, label): - """Helper method to fetch and format wired properties.""" - return noneToBlankString(wired.GetWiredProperty(label)) - - def destroy_called(self, *args): - """Clean up everything.""" - self.disconnect(self.des) - super(WiredSettingsDialog, self).destroy_called() - self.destroy() - del self - - -class WirelessSettingsDialog(AdvancedSettingsDialog): - """Wireless settings dialog.""" - def __init__(self, networkID): - """Build the wireless settings dialog.""" - AdvancedSettingsDialog.__init__( - self, wireless.GetWirelessProperty(networkID, 'essid')) - # So we can test if we are wired or wireless (for - # change_encrypt_method()) - self.wired = False - - # Set up encryption stuff - self.networkID = networkID - self.combo_encryption = gtk.combo_box_new_text() - self.chkbox_encryption = gtk.CheckButton(_('Use Encryption')) - self.chkbox_global_settings = gtk.CheckButton( - _('Use these settings for all networks sharing this essid')) - - rate_vbox = gtk.VBox(False, 0) - - self.combo_rate = LabelCombo(_('Wireless bitrate')) - rates = gtk.ListStore(str) - self.bitrates = wireless.GetAvailableBitrates() - self.bitrates.append('auto') - for br in self.bitrates: - rates.append((br,)) - self.combo_rate.set_model(rates) - self.chkbox_lower_rate = gtk.CheckButton(_('Allow lower bitrates')) - rate_vbox.pack_start(self.combo_rate) - rate_vbox.pack_start(self.chkbox_lower_rate) - - # Make the vbox to hold the encryption stuff. - self.vbox_encrypt_info = gtk.VBox(False, 0) - self.toggle_encryption() - self.chkbox_encryption.set_active(False) - self.combo_encryption.set_sensitive(False) - self.encrypt_types = misc.LoadEncryptionMethods() - - information_button = gtk.Button(stock=gtk.STOCK_INFO) - self.button_hbox.pack_start(information_button, False, False) - information_button.connect( - 'clicked', - lambda *a, **k: WirelessInformationDialog(networkID, self) - ) - information_button.show() - - # Build the encryption menu - activeID = -1 # Set the menu to this item when we are done - for x, enc_type in enumerate(self.encrypt_types): - self.combo_encryption.append_text(enc_type['name']) - if enc_type['type'] == wireless.GetWirelessProperty(networkID, - "enctype"): - activeID = x - self.combo_encryption.set_active(activeID) - if activeID != -1: - self.chkbox_encryption.set_active(True) - self.combo_encryption.set_sensitive(True) - self.vbox_encrypt_info.set_sensitive(True) - else: - self.combo_encryption.set_active(0) - self.change_encrypt_method() - - self.cvbox.pack_start(rate_vbox, False, False) - self.cvbox.pack_start(self.chkbox_global_settings, False, False) - self.cvbox.pack_start(self.chkbox_encryption, False, False) - self.cvbox.pack_start(self.combo_encryption, False, False) - self.cvbox.pack_start(self.vbox_encrypt_info, False, False) - - # Connect signals. - self.chkbox_encryption.connect("toggled", self.toggle_encryption) - self.combo_encryption.connect("changed", self.change_encrypt_method) - self.script_button.connect("clicked", self.edit_scripts) - self.des = self.connect("destroy", self.destroy_called) - - def destroy_called(self, *args): - """Clean up everything.""" - self.disconnect(self.des) - super(WirelessSettingsDialog, self).destroy_called() - self.destroy() - del self - - def edit_scripts(self, widget=None, event=None): - """Launch the script editting dialog.""" - cmdend = [os.path.join(wpath.gtk, "configscript.py"), - str(self.networkID), "wireless"] - if os.getuid() != 0: - cmdbase = misc.get_sudo_cmd( - _('You must enter your password to configure scripts'), - prog_num=daemon.GetSudoApp() - ) - if not cmdbase: - error(None, _("Could not find a graphical sudo program. The " - "script editor could not be launched. You'll " - "have to edit scripts directly your " - "configuration file.")) - return - cmdbase.extend(cmdend) - misc.LaunchAndWait(cmdbase) - else: - misc.LaunchAndWait(cmdend) - - def set_net_prop(self, option, value): - """Sets the given option to the given value for this network.""" - wireless.SetWirelessProperty(self.networkID, option, value) - - def set_values(self): - """Set the various network settings to the right values.""" - networkID = self.networkID - self.txt_ip.set_text(self.format_entry(networkID, "ip")) - self.txt_netmask.set_text(self.format_entry(networkID, "netmask")) - self.txt_gateway.set_text(self.format_entry(networkID, "gateway")) - - self.chkbox_global_dns.set_active( - bool(wireless.GetWirelessProperty(networkID, 'use_global_dns'))) - self.chkbox_static_dns.set_active( - bool(wireless.GetWirelessProperty(networkID, 'use_static_dns'))) - - self.txt_dns_1.set_text(self.format_entry(networkID, "dns1")) - self.txt_dns_2.set_text(self.format_entry(networkID, "dns2")) - self.txt_dns_3.set_text(self.format_entry(networkID, "dns3")) - self.txt_domain.set_text(self.format_entry(networkID, "dns_domain")) - self.txt_search_dom.set_text( - self.format_entry(networkID, "search_domain")) - - self.reset_static_checkboxes() - self.chkbox_encryption.set_active( - bool(wireless.GetWirelessProperty(networkID, 'encryption'))) - self.chkbox_global_settings.set_active( - bool(wireless.GetWirelessProperty(networkID, - 'use_settings_globally'))) - - self.chkbox_use_dhcp_hostname.set_active( - bool(wireless.GetWirelessProperty(networkID, 'usedhcphostname'))) - - dhcphname = wireless.GetWirelessProperty(networkID, "dhcphostname") - if dhcphname is None: - dhcphname = os.uname()[1] - self.txt_dhcp_hostname.set_text(dhcphname) - - self.toggle_dhcp_hostname_checkbox() - - # TODO: get the value from the config - chosen_bitrate = wireless.GetWirelessProperty(networkID, 'bitrate') - if chosen_bitrate not in self.bitrates: - chosen_bitrate = 'auto' - self.combo_rate.set_active(self.bitrates.index(chosen_bitrate)) - self.chkbox_lower_rate.set_active( - bool( - wireless.GetWirelessProperty(networkID, 'allow_lower_bitrates') - ) - ) - - activeID = -1 # Set the menu to this item when we are done - user_enctype = wireless.GetWirelessProperty(networkID, "enctype") - for x, enc_type in enumerate(self.encrypt_types): - if enc_type['type'] == user_enctype: - activeID = x - - self.combo_encryption.set_active(activeID) - if activeID != -1: - self.chkbox_encryption.set_active(True) - self.combo_encryption.set_sensitive(True) - self.vbox_encrypt_info.set_sensitive(True) - else: - self.combo_encryption.set_active(0) - self.change_encrypt_method() - - def save_settings(self, networkid=None): - # Check encryption info - encrypt_info = self.encryption_info - if self.chkbox_encryption.get_active(): - print("setting encryption info...") - encrypt_methods = self.encrypt_types - self.set_net_prop( - "enctype", - encrypt_methods[self.combo_encryption.get_active()]['type'] - ) - # Make sure all required fields are filled in. - for entry_info in list(encrypt_info.values()): - if entry_info[0].entry.get_text() == "" and \ - entry_info[1] == 'required': - error( - self, - "%s (%s)" % ( - _('Required encryption information is missing.'), - entry_info[0].label.get_label() - ) - ) - return False - # Now save all the entries. - for entry_key, entry_info in list(encrypt_info.items()): - self.set_net_prop(entry_key, - noneToString(entry_info[0].entry.get_text())) - elif (not self.chkbox_encryption.get_active() and - wireless.GetWirelessProperty(networkid, "encryption")): - # Encrypt checkbox is off, but the network needs it. - error(self, _('This network requires encryption to be enabled.')) - return False - else: - print("no encryption specified...") - self.set_net_prop("enctype", "None") - AdvancedSettingsDialog.save_settings(self) - - if self.chkbox_global_settings.get_active(): - self.set_net_prop('use_settings_globally', True) - else: - self.set_net_prop('use_settings_globally', False) - wireless.RemoveGlobalEssidEntry(networkid) - - if self.combo_rate.get_active() == -1: - self.set_net_prop('bitrate', 'auto') - else: - self.set_net_prop( - 'bitrate', - self.bitrates[self.combo_rate.get_active()] - ) - self.set_net_prop( - 'allow_lower_bitrates', - bool(self.chkbox_lower_rate.get_active()) - ) - wireless.SaveWirelessNetworkProfile(networkid) - return True - - def format_entry(self, networkid, label): - """Helper method for fetching/formatting wireless properties.""" - return noneToBlankString(wireless.GetWirelessProperty(networkid, - label)) - - -class NetworkEntry(gtk.HBox): - """Network entry.""" - def __init__(self): - """Base network entry class. - - Provides gtk objects used by both the WiredNetworkEntry and - WirelessNetworkEntry classes. - - """ - setup_dbus() - gtk.HBox.__init__(self, False, 2) - self.image = gtk.Image() - self.pack_start(self.image, False, False) - - # Create an HBox to hold the buttons - self.buttons_hbox = gtk.HBox(False, 6) - - # Set up the Connect button - self.connect_button = gtk.Button(stock=gtk.STOCK_CONNECT) - self.connect_hbox = gtk.HBox(False, 2) - self.connect_hbox.pack_start(self.connect_button, False, False) - self.connect_hbox.show() - - # Set up the Disconnect button - self.disconnect_button = gtk.Button(stock=gtk.STOCK_DISCONNECT) - self.connect_hbox.pack_start(self.disconnect_button, False, False) - - # Create a label to hold the name of the entry - self.name_label = gtk.Label() - self.name_label.set_alignment(0, 0.5) - - # Set up the VBox that goes in the gtk.Expander - self.expander_vbox = gtk.VBox(False, 1) - self.expander_vbox.show() - self.pack_end(self.expander_vbox) - - # Set up the advanced settings button - self.advanced_button = gtk.Button() - self.advanced_image = gtk.Image() - self.advanced_image.set_from_stock(gtk.STOCK_EDIT, 4) - self.advanced_image.set_padding(4, 0) - self.advanced_button.set_alignment(.5, .5) - self.advanced_button.set_label(_('Properties')) - self.advanced_button.set_image(self.advanced_image) - - self.buttons_hbox.pack_start(self.connect_hbox, False, False) - self.buttons_hbox.pack_start(self.advanced_button, False, False) - - self.vbox_top = gtk.VBox(False, 0) - self.expander_vbox.pack_start(self.name_label) - self.expander_vbox.pack_start(self.vbox_top) - self.expander_vbox.pack_start(self.buttons_hbox) - - def destroy_called(self, *args): - """Clean up everything.""" - super(NetworkEntry, self).destroy() - self.destroy() - del self - - -class WiredNetworkEntry(NetworkEntry): - """Wired network entry.""" - def __init__(self): - """Load the wired network entry.""" - NetworkEntry.__init__(self) - # Center the picture and pad it a bit - self.image.set_padding(0, 0) - self.image.set_alignment(.5, .5) - self.image.set_size_request(60, -1) - self.image.set_from_icon_name("wired-gui", gtk.ICON_SIZE_DND) - self.image.show() - self.connect_button.show() - - self.name_label.set_use_markup(True) - self.name_label.set_label("" + _('Wired Network') + "") - - self.is_full_gui = True - - self.button_add = gtk.Button(stock=gtk.STOCK_ADD) - self.button_delete = gtk.Button(stock=gtk.STOCK_DELETE) - self.profile_help = gtk.Label(_('To connect to a wired network, you ' - 'must create a network profile. To ' - 'create a network profile, type a ' - 'name that describes this network, ' - 'and press Add.')) - self.chkbox_default_profile = gtk.CheckButton(_('Use as default ' - 'profile (overwrites ' - 'any previous ' - 'default)')) - self.combo_profile_names = gtk.combo_box_new_text() - - # Format the profile help label. - self.profile_help.set_justify(gtk.JUSTIFY_LEFT) - self.profile_help.set_line_wrap(True) - - # Pack the various VBox objects. - self.hbox_temp = gtk.HBox(False, 0) - self.hbox_def = gtk.HBox(False, 0) - self.vbox_top.pack_start(self.profile_help, True, True) - self.vbox_top.pack_start(self.hbox_def) - self.vbox_top.pack_start(self.hbox_temp) - self.hbox_temp.pack_start(self.combo_profile_names, True, True) - self.hbox_temp.pack_start(self.button_add, False, False) - self.hbox_temp.pack_start(self.button_delete, False, False) - self.hbox_def.pack_start(self.chkbox_default_profile, False, False) - - # Connect events - self.button_add.connect("clicked", self.add_profile) - self.button_delete.connect("clicked", self.remove_profile) - self.chkbox_default_profile.connect("toggled", - self.toggle_default_profile) - self.combo_profile_names.connect("changed", self.change_profile) - - # Build profile list. - self.profile_list = wired.GetWiredProfileList() - default_prof = wired.GetDefaultWiredNetwork() - if self.profile_list: - starting_index = 0 - for x, prof in enumerate(self.profile_list): - self.combo_profile_names.append_text(prof) - if default_prof == prof: - starting_index = x - self.combo_profile_names.set_active(starting_index) - else: - print("no wired profiles found") - self.profile_help.show() - - self.advanced_dialog = \ - WiredSettingsDialog(self.combo_profile_names.get_active_text()) - - # Show everything, but hide the profile help label. - self.show_all() - self.profile_help.hide() - - # Toggle the default profile checkbox to the correct state. - if to_bool(wired.GetWiredProperty("default")): - self.chkbox_default_profile.set_active(True) - else: - self.chkbox_default_profile.set_active(False) - - self.check_enable() - self.wireddis = self.connect("destroy", self.destroy_called) - - def destroy_called(self, *args): - """Clean up everything.""" - self.disconnect(self.wireddis) - self.advanced_dialog.destroy_called() - del self.advanced_dialog - super(WiredNetworkEntry, self).destroy_called() - self.destroy() - del self - - def save_wired_settings(self): - """Save wired network settings.""" - return self.advanced_dialog.save_settings() - - def check_enable(self): - """Disable objects if the profile list is empty.""" - profile_list = wired.GetWiredProfileList() - if not profile_list: - self.button_delete.set_sensitive(False) - self.connect_button.set_sensitive(False) - self.advanced_button.set_sensitive(False) - - def update_connect_button(self, state, apbssid=None): - """Update the connection/disconnect button for this entry.""" - if state == misc.WIRED: - self.disconnect_button.show() - self.connect_button.hide() - else: - self.disconnect_button.hide() - self.connect_button.show() - - def add_profile(self, widget): - """Add a profile to the profile list.""" - response = string_input( - "Enter a profile name", "The profile name will not be used by the " - "computer. It allows you to easily distinguish between different " - "network profiles.", - "Profile name:" - ).strip() - - # if response is "" or None - if not response: - error(None, "Invalid profile name", block=True) - return False - - profile_name = response - profile_list = wired.GetWiredProfileList() - if profile_list: - if profile_name in profile_list: - return False - - self.profile_help.hide() - wired.CreateWiredNetworkProfile(profile_name, False) - self.combo_profile_names.prepend_text(profile_name) - self.combo_profile_names.set_active(0) - self.advanced_dialog.prof_name = profile_name - if self.is_full_gui: - self.button_delete.set_sensitive(True) - self.connect_button.set_sensitive(True) - self.advanced_button.set_sensitive(True) - - def remove_profile(self, widget): - """Remove a profile from the profile list.""" - print("removing profile") - profile_name = self.combo_profile_names.get_active_text() - wired.DeleteWiredNetworkProfile(profile_name) - self.combo_profile_names.remove_text(self.combo_profile_names. - get_active()) - self.combo_profile_names.set_active(0) - self.advanced_dialog.prof_name = \ - self.combo_profile_names.get_active_text() - if not wired.GetWiredProfileList(): - self.profile_help.show() - entry = self.combo_profile_names.child - entry.set_text("") - if self.is_full_gui: - self.button_delete.set_sensitive(False) - self.advanced_button.set_sensitive(False) - self.connect_button.set_sensitive(False) - else: - self.profile_help.hide() - - def toggle_default_profile(self, widget): - """Change the default profile.""" - if self.chkbox_default_profile.get_active(): - # Make sure there is only one default profile at a time - wired.UnsetWiredDefault() - wired.SetWiredProperty("default", - self.chkbox_default_profile.get_active()) - wired.SaveWiredNetworkProfile( - self.combo_profile_names.get_active_text()) - - def change_profile(self, widget): - """Called when a new profile is chosen from the list.""" - # Make sure the name doesn't change everytime someone types something - if self.combo_profile_names.get_active() > -1: - if not self.is_full_gui: - return - - profile_name = self.combo_profile_names.get_active_text() - wired.ReadWiredNetworkProfile(profile_name) - - if hasattr(self, 'advanced_dialog'): - self.advanced_dialog.prof_name = profile_name - self.advanced_dialog.set_values() - - is_default = wired.GetWiredProperty("default") - self.chkbox_default_profile.set_active(to_bool(is_default)) - - def format_entry(self, label): - """Help method for fetching/formatting wired properties.""" - return noneToBlankString(wired.GetWiredProperty(label)) - - -class WirelessNetworkEntry(NetworkEntry): - """Wireless network entry.""" - def __init__(self, networkID): - """Build the wireless network entry.""" - NetworkEntry.__init__(self) - - self.networkID = networkID - self.image.set_padding(0, 0) - self.image.set_alignment(.5, .5) - self.image.set_size_request(60, -1) - self.image.show() - self.essid = noneToBlankString( - wireless.GetWirelessProperty(networkID, "essid")) - self.lbl_strength = GreyLabel() - self.lbl_encryption = GreyLabel() - self.lbl_channel = GreyLabel() - - print(("ESSID : " + self.essid)) - self.chkbox_autoconnect = gtk.CheckButton( - _('Automatically connect to this network')) - self.chkbox_neverconnect = gtk.CheckButton( - _('Never connect to this network')) - - self.set_signal_strength( - wireless.GetWirelessProperty(networkID, 'quality'), - wireless.GetWirelessProperty(networkID, 'strength') - ) - self.set_encryption( - wireless.GetWirelessProperty(networkID, 'encryption'), - wireless.GetWirelessProperty(networkID, 'encryption_method') - ) - self.set_channel(wireless.GetWirelessProperty(networkID, 'channel')) - self.name_label.set_use_markup(True) - self.name_label.set_label( - "%s %s %s %s" % ( - self._escape(self.essid), - self.lbl_strength.get_label(), - self.lbl_encryption.get_label(), - self.lbl_channel.get_label(), - ) - ) - # Add the wireless network specific parts to the NetworkEntry - # VBox objects. - self.vbox_top.pack_start(self.chkbox_autoconnect, False, False) - self.vbox_top.pack_start(self.chkbox_neverconnect, False, False) - - if to_bool(self.format_entry(networkID, "automatic")): - self.chkbox_autoconnect.set_active(True) - else: - self.chkbox_autoconnect.set_active(False) - - if to_bool(self.format_entry(networkID, "never")): - self.chkbox_autoconnect.set_sensitive(False) - self.connect_button.set_sensitive(False) - self.chkbox_neverconnect.set_active(True) - else: - self.chkbox_neverconnect.set_active(False) - - # Connect signals. - self.chkbox_autoconnect.connect("toggled", self.update_autoconnect) - self.chkbox_neverconnect.connect("toggled", self.update_neverconnect) - - # Show everything - self.show_all() - self.advanced_dialog = WirelessSettingsDialog(networkID) - self.wifides = self.connect("destroy", self.destroy_called) - - def _escape(self, val): - """Escapes special characters so they're displayed correctly.""" - return val.replace("&", "&"). \ - replace("<", "<"). \ - replace(">", ">"). \ - replace("'", "'"). \ - replace('"', """) - - def save_wireless_settings(self, networkid): - """Save wireless network settings.""" - return self.advanced_dialog.save_settings(networkid) - - def update_autoconnect(self, widget=None): - """Called when the autoconnect checkbox is toggled.""" - wireless.SetWirelessProperty( - self.networkID, - "automatic", - noneToString(self.chkbox_autoconnect. get_active()) - ) - wireless.SaveWirelessNetworkProperty(self.networkID, "automatic") - - def update_neverconnect(self, widget=None): - """Called when the neverconnect checkbox is toggled.""" - wireless.SetWirelessProperty( - self.networkID, - "never", - noneToString(self.chkbox_neverconnect.get_active()) - ) - wireless.SaveWirelessNetworkProperty(self.networkID, "never") - if self.chkbox_neverconnect.get_active(): - self.chkbox_autoconnect.set_sensitive(False) - self.connect_button.set_sensitive(False) - else: - self.chkbox_autoconnect.set_sensitive(True) - self.connect_button.set_sensitive(True) - - def destroy_called(self, *args): - """Clean up everything.""" - self.disconnect(self.wifides) - self.advanced_dialog.destroy_called() - del self.advanced_dialog - super(WirelessNetworkEntry, self).destroy_called() - self.destroy() - del self - - def update_connect_button(self, state, apbssid): - """Update the connection/disconnect button for this entry.""" - if to_bool(self.format_entry(self.networkID, "never")): - self.connect_button.set_sensitive(False) - if not apbssid: - apbssid = wireless.GetApBssid() - if state == misc.WIRELESS and \ - apbssid == wireless.GetWirelessProperty(self.networkID, "bssid"): - self.disconnect_button.show() - self.connect_button.hide() - else: - self.disconnect_button.hide() - self.connect_button.show() - - def set_signal_strength(self, strength, dbm_strength): - """Set the signal strength displayed in the WirelessNetworkEntry.""" - if strength: - strength = int(strength) - else: - strength = -1 - if dbm_strength: - dbm_strength = int(dbm_strength) - else: - dbm_strength = -100 - display_type = daemon.GetSignalDisplayType() - if daemon.GetWPADriver() == 'ralink legacy' or display_type == 1: - # Use the -xx dBm signal strength to display a signal icon - # I'm not sure how accurately the dBm strength is being - # "converted" to strength bars, so suggestions from people - # for a better way would be welcome. - if dbm_strength >= -60: - signal_img = 'signal-100' - elif dbm_strength >= -70: - signal_img = 'signal-75' - elif dbm_strength >= -80: - signal_img = 'signal-50' - else: - signal_img = 'signal-25' - ending = "dBm" - disp_strength = str(dbm_strength) - else: - # Uses normal link quality, should be fine in most cases - if strength > 75: - signal_img = 'signal-100' - elif strength > 50: - signal_img = 'signal-75' - elif strength > 25: - signal_img = 'signal-50' - else: - signal_img = 'signal-25' - ending = "%" - disp_strength = str(strength) - self.image.set_from_icon_name(signal_img, gtk.ICON_SIZE_DND) - self.lbl_strength.set_label(disp_strength + ending) - self.image.show() - - def set_encryption(self, on, ttype): - """Set the encryption value for the WirelessNetworkEntry.""" - if on and ttype: - self.lbl_encryption.set_label(str(ttype)) - if on and not ttype: - self.lbl_encryption.set_label(_('Secured')) - if not on: - self.lbl_encryption.set_label(_('Unsecured')) - - def set_channel(self, channel): - """Set the channel value for the WirelessNetworkEntry.""" - self.lbl_channel.set_label(_('Channel') + ' ' + str(channel)) - - def format_entry(self, networkid, label): - """Helper method for fetching/formatting wireless properties.""" - return noneToBlankString(wireless.GetWirelessProperty(networkid, - label)) - - -class WirelessInformationDialog(gtk.Dialog): - """Wireless information dialog.""" - def __init__(self, networkID, parent): - gtk.Dialog.__init__(self, parent=parent) - - # Make the combo box. - self.lbl_strength = gtk.Label() - self.lbl_strength.set_alignment(0, 0.5) - self.lbl_encryption = gtk.Label() - self.lbl_encryption.set_alignment(0, 0.5) - self.lbl_mac = gtk.Label() - self.lbl_mac.set_alignment(0, 0.5) - self.lbl_channel = gtk.Label() - self.lbl_channel.set_alignment(0, 0.5) - self.lbl_mode = gtk.Label() - self.lbl_mode.set_alignment(0, 0.5) - self.hbox_status = gtk.HBox(False, 5) - - # Set the values of the network info labels. - self.set_signal_strength( - wireless.GetWirelessProperty(networkID, 'quality'), - wireless.GetWirelessProperty(networkID, 'strength') - ) - self.set_mac_address(wireless.GetWirelessProperty(networkID, 'bssid')) - self.set_mode(wireless.GetWirelessProperty(networkID, 'mode')) - self.set_channel(wireless.GetWirelessProperty(networkID, 'channel')) - self.set_encryption( - wireless.GetWirelessProperty(networkID, 'encryption'), - wireless.GetWirelessProperty(networkID, 'encryption_method') - ) - - self.set_title('Network Information') - vbox = self.vbox - self.set_has_separator(False) - table = gtk.Table(5, 2) - table.set_col_spacings(12) - # pylint: disable-msg=E1101 - vbox.pack_start(table) - - # Pack the network status HBox. - table.attach(LeftAlignedLabel('Signal strength:'), 0, 1, 0, 1) - table.attach(self.lbl_strength, 1, 2, 0, 1) - - table.attach(LeftAlignedLabel('Encryption type:'), 0, 1, 1, 2) - table.attach(self.lbl_encryption, 1, 2, 1, 2) - - table.attach(LeftAlignedLabel('Access point address:'), 0, 1, 2, 3) - table.attach(self.lbl_mac, 1, 2, 2, 3) - - table.attach(LeftAlignedLabel('Mode:'), 0, 1, 3, 4) - table.attach(self.lbl_mode, 1, 2, 3, 4) - - table.attach(LeftAlignedLabel('Channel:'), 0, 1, 4, 5) - table.attach(self.lbl_channel, 1, 2, 4, 5) - - # pylint: disable-msg=E1101 - vbox.show_all() - - self.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE) - self.show() - self.run() - self.destroy() - - def set_signal_strength(self, strength, dbm_strength): - """Set the signal strength displayed in the WirelessNetworkEntry.""" - if strength is not None: - strength = int(strength) - else: - strength = -1 - if dbm_strength is not None: - dbm_strength = int(dbm_strength) - else: - dbm_strength = -100 - display_type = daemon.GetSignalDisplayType() - if daemon.GetWPADriver() == 'ralink legacy' or display_type == 1: - # Use the -xx dBm signal strength to display a signal icon - # I'm not sure how accurately the dBm strength is being - # "converted" to strength bars, so suggestions from people - # for a better way would be welcome. - if dbm_strength >= -60: - signal_img = 'signal-100.png' - elif dbm_strength >= -70: - signal_img = 'signal-75.png' - elif dbm_strength >= -80: - signal_img = 'signal-50.png' - else: - signal_img = 'signal-25.png' - ending = "dBm" - disp_strength = str(dbm_strength) - else: - # Uses normal link quality, should be fine in most cases - if strength > 75: - signal_img = 'signal-100.png' - elif strength > 50: - signal_img = 'signal-75.png' - elif strength > 25: - signal_img = 'signal-50.png' - else: - signal_img = 'signal-25.png' - ending = "%" - disp_strength = str(strength) - self.lbl_strength.set_label(disp_strength + ending) - - def set_mac_address(self, address): - """Set the MAC address for the WirelessNetworkEntry.""" - self.lbl_mac.set_label(str(address)) - - def set_encryption(self, on, ttype): - """Set the encryption value for the WirelessNetworkEntry.""" - if on and ttype: - self.lbl_encryption.set_label(str(ttype)) - if on and not ttype: - self.lbl_encryption.set_label(_('Secured')) - if not on: - self.lbl_encryption.set_label(_('Unsecured')) - - def set_channel(self, channel): - """Set the channel value for the WirelessNetworkEntry.""" - self.lbl_channel.set_label(_('Channel') + ' ' + str(channel)) - - def set_mode(self, mode): - """Set the mode value for the WirelessNetworkEntry.""" - self.lbl_mode.set_label(str(mode)) - - def format_entry(self, networkid, label): - """Helper method for fetching/formatting wireless properties.""" - return noneToBlankString(wireless.GetWirelessProperty(networkid, - label)) diff --git a/gtk/prefs.py b/gtk/prefs.py deleted file mode 100644 index d293a60..0000000 --- a/gtk/prefs.py +++ /dev/null @@ -1,491 +0,0 @@ -#!/usr/bin/env python3 - -"""prefs -- Wicd Preferences Dialog. - -Displays the main settings dialog window for wicd and -handles recieving/sendings the settings from/to the daemon. - -""" - -# -# Copyright (C) 2008-2009 Adam Blackburn -# Copyright (C) 2008-2009 Dan O'Reilly -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License Version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -import os - -import gtk -from gi.repository import GObject as gobject -try: - import pynotify -except ImportError: - pynotify = None - -from wicd import misc -from wicd import wpath -from wicd import dbusmanager -from wicd.misc import checkboxTextboxToggle, noneToBlankString -from wicd.translations import _ - -daemon = None -wireless = None -wired = None - -USER_SETTINGS_DIR = os.path.expanduser('~/.wicd/') - - -def setup_dbus(): - """Initialize DBus.""" - global daemon, wireless, wired - daemon = dbusmanager.get_interface('daemon') - wireless = dbusmanager.get_interface('wireless') - wired = dbusmanager.get_interface('wired') - - -class PreferencesDialog(object): - """Class for handling the wicd preferences dialog window.""" - def __init__(self, parent, wTree): - setup_dbus() - self.parent = parent - self.wTree = wTree - - self.ethtoolradio = None - self.miitoolradio = None - - self.wpadrivercombo = None - self.wpadrivers = None - self.backends = None - self.backendcombo = None - self.be_descriptions = None - self.preferwiredcheckbox = None - self.useGlobalDNSCheckbox = None - self.displaytypecheckbox = None - self.verifyapcheckbox = None - self.debugmodecheckbox = None - self.wiredcheckbox = None - self.showneverconnectcheckbox = None - self.reconnectcheckbox = None - self.notificationscheckbox = None - - self.usedefaultradiobutton = None - self.lastusedradiobutton = None - self.showlistradiobutton = None - - self.kdesuradio = None - self.gksudoradio = None - self.sudoautoradio = None - self.ktsussradio = None - - self.dhclientradio = None - self.dhcpautoradio = None - self.pumpradio = None - self.udhcpcradio = None - self.dhcpcdradio = None - - self.linkautoradio = None - self.routeflushradio = None - self.ipflushradio = None - self.flushautoradio = None - - self.dialog = None - self.entryWiredInterface = None - self.entryWirelessInterface = None - - self.dns1Entry = None - self.dns2Entry = None - self.dns3Entry = None - self.searchDomEntry = None - self.dnsDomEntry = None - - self.prep_settings_diag() - self.load_preferences_diag() - - def _setup_external_app_radios(self, radio_list, get_method, set_method): - """Generic function for setting up external app radios.""" - # Disable radios for apps that aren't installed. - for app in radio_list[1:]: - app.set_sensitive(daemon.GetAppAvailable(app.get_label())) - selected_app = get_method() - # Make sure the app we want to select is actually available. - if radio_list[selected_app].get_property("sensitive"): - radio_list[selected_app].set_active(True) - else: - # If it isn't, default to Automatic. - set_method(misc.AUTO) - radio_list[misc.AUTO].set_active(True) - - def load_preferences_diag(self): - """Loads data into the preferences Dialog.""" - - self.wiredcheckbox.set_active(daemon.GetAlwaysShowWiredInterface()) - self.reconnectcheckbox.set_active(daemon.GetAutoReconnect()) - self.debugmodecheckbox.set_active(daemon.GetDebugMode()) - self.displaytypecheckbox.set_active(daemon.GetSignalDisplayType()) - self.verifyapcheckbox.set_active(daemon.GetShouldVerifyAp()) - self.preferwiredcheckbox.set_active(daemon.GetPreferWiredNetwork()) - self.showneverconnectcheckbox.set_active(daemon.GetShowNeverConnect()) - - dhcp_list = [self.dhcpautoradio, self.dhclientradio, self.dhcpcdradio, - self.pumpradio, self.udhcpcradio] - self._setup_external_app_radios( - dhcp_list, daemon.GetDHCPClient, daemon.SetDHCPClient) - - wired_link_list = [self.linkautoradio, self.ethtoolradio, - self.miitoolradio] - self._setup_external_app_radios( - wired_link_list, - daemon.GetLinkDetectionTool, - daemon.SetLinkDetectionTool - ) - - flush_list = [self.flushautoradio, self.ipflushradio, - self.routeflushradio] - self._setup_external_app_radios( - flush_list, daemon.GetFlushTool, daemon.SetFlushTool) - - sudo_list = [self.sudoautoradio, self.gksudoradio, self.kdesuradio, - self.ktsussradio] - self._setup_external_app_radios( - sudo_list, daemon.GetSudoApp, daemon.SetSudoApp) - - auto_conn_meth = daemon.GetWiredAutoConnectMethod() - if auto_conn_meth == 1: - self.usedefaultradiobutton.set_active(True) - elif auto_conn_meth == 2: - self.showlistradiobutton.set_active(True) - elif auto_conn_meth == 3: - self.lastusedradiobutton.set_active(True) - - self.entryWirelessInterface.set_text(daemon.GetWirelessInterface()) - self.entryWiredInterface.set_text(daemon.GetWiredInterface()) - - def_driver = daemon.GetWPADriver() - try: - self.wpadrivercombo.set_active(self.wpadrivers.index(def_driver)) - except ValueError: - self.wpadrivercombo.set_active(0) - - self.useGlobalDNSCheckbox.connect( - "toggled", - checkboxTextboxToggle, - ( - self.dns1Entry, self.dns2Entry, self.dns3Entry, - self.dnsDomEntry, self.searchDomEntry - ) - ) - - dns_addresses = daemon.GetGlobalDNSAddresses() - self.useGlobalDNSCheckbox.set_active(daemon.GetUseGlobalDNS()) - self.dns1Entry.set_text(noneToBlankString(dns_addresses[0])) - self.dns2Entry.set_text(noneToBlankString(dns_addresses[1])) - self.dns3Entry.set_text(noneToBlankString(dns_addresses[2])) - self.dnsDomEntry.set_text(noneToBlankString(dns_addresses[3])) - self.searchDomEntry.set_text(noneToBlankString(dns_addresses[4])) - - if not daemon.GetUseGlobalDNS(): - self.searchDomEntry.set_sensitive(False) - self.dnsDomEntry.set_sensitive(False) - self.dns1Entry.set_sensitive(False) - self.dns2Entry.set_sensitive(False) - self.dns3Entry.set_sensitive(False) - - cur_backend = daemon.GetSavedBackend() - try: - self.backendcombo.set_active(self.backends.index(cur_backend)) - except ValueError: - self.backendcombo.set_active(0) - - self.notificationscheckbox.set_active( - os.path.exists( - os.path.join(USER_SETTINGS_DIR, 'USE_NOTIFICATIONS') - )) - - # if pynotify isn't installed disable the option - if not pynotify: - self.notificationscheckbox.set_active(False) - self.notificationscheckbox.set_sensitive(False) - - # if notifications were disabled with the configure flag - if wpath.no_use_notifications: - self.notificationscheckbox.set_active(False) - self.notificationscheckbox.hide() - self.wTree.get_object('label2').hide() - - self.wTree.get_object("notebook2").set_current_page(0) - - def run(self): - """Runs the preferences dialog window.""" - return self.dialog.run() - - def hide(self): - """Hides the preferences dialog window.""" - self.dialog.hide() - - def destroy(self): - """Destroy dialog.""" - self.dialog.destroy() - - def show_all(self): - """Shows the preferences dialog window.""" - self.dialog.show() - - def save_results(self): - """Pushes the selected settings to the daemon.""" - daemon.SetUseGlobalDNS(self.useGlobalDNSCheckbox.get_active()) - # Strip whitespace from DNS entries - for i in [self.dns1Entry, self.dns2Entry, self.dns3Entry, - self.dnsDomEntry, self.searchDomEntry]: - i.set_text(i.get_text().strip()) - daemon.SetGlobalDNS( - self.dns1Entry.get_text(), - self.dns2Entry.get_text(), - self.dns3Entry.get_text(), - self.dnsDomEntry.get_text(), - self.searchDomEntry.get_text() - ) - daemon.SetWirelessInterface(self.entryWirelessInterface.get_text()) - daemon.SetWiredInterface(self.entryWiredInterface.get_text()) - daemon.SetWPADriver(self.wpadrivers[self.wpadrivercombo.get_active()]) - daemon.SetAlwaysShowWiredInterface(self.wiredcheckbox.get_active()) - daemon.SetAutoReconnect(self.reconnectcheckbox.get_active()) - daemon.SetDebugMode(self.debugmodecheckbox.get_active()) - daemon.SetSignalDisplayType(int(self.displaytypecheckbox.get_active())) - daemon.SetShouldVerifyAp(bool(self.verifyapcheckbox.get_active())) - daemon.SetPreferWiredNetwork( - bool(self.preferwiredcheckbox.get_active())) - daemon.SetShowNeverConnect( - bool(self.showneverconnectcheckbox.get_active())) - if self.showlistradiobutton.get_active(): - daemon.SetWiredAutoConnectMethod(2) - elif self.lastusedradiobutton.get_active(): - daemon.SetWiredAutoConnectMethod(3) - else: - daemon.SetWiredAutoConnectMethod(1) - - daemon.SetBackend(self.backends[self.backendcombo.get_active()]) - - # External Programs Tab - if self.dhcpautoradio.get_active(): - dhcp_client = misc.AUTO - elif self.dhclientradio.get_active(): - dhcp_client = misc.DHCLIENT - elif self.dhcpcdradio.get_active(): - dhcp_client = misc.DHCPCD - elif self.pumpradio.get_active(): - dhcp_client = misc.PUMP - else: - dhcp_client = misc.UDHCPC - daemon.SetDHCPClient(dhcp_client) - - if self.linkautoradio.get_active(): - link_tool = misc.AUTO - elif self.ethtoolradio.get_active(): - link_tool = misc.ETHTOOL - else: - link_tool = misc.MIITOOL - daemon.SetLinkDetectionTool(link_tool) - - if self.flushautoradio.get_active(): - flush_tool = misc.AUTO - elif self.ipflushradio.get_active(): - flush_tool = misc.IP - else: - flush_tool = misc.ROUTE - daemon.SetFlushTool(flush_tool) - - if self.sudoautoradio.get_active(): - sudo_tool = misc.AUTO - elif self.gksudoradio.get_active(): - sudo_tool = misc.GKSUDO - elif self.kdesuradio.get_active(): - sudo_tool = misc.KDESU - else: - sudo_tool = misc.KTSUSS - daemon.SetSudoApp(sudo_tool) - - [width, height] = self.dialog.get_size() - - not_path = os.path.join(USER_SETTINGS_DIR, 'USE_NOTIFICATIONS') - if self.notificationscheckbox.get_active(): - if not os.path.exists(not_path): - open(not_path, 'w') - else: - if os.path.exists(not_path): - os.remove(not_path) - # if this GUI was started by a tray icon, - # instantly change the notifications there - if self.parent.tray: - self.parent.tray.icon_info.use_notify = \ - self.notificationscheckbox.get_active() - - def set_label(self, glade_str, label): - """Sets the label for the given widget in wicd.glade.""" - self.wTree.get_object(glade_str).set_label(label) - - def prep_settings_diag(self): - """Set up anything that doesn't have to be persisted later.""" - def build_combobox(lbl): - """Sets up a ComboBox using the given widget name.""" - liststore = gtk.ListStore(gobject.TYPE_STRING) - combobox = self.wTree.get_object(lbl) - combobox.clear() - combobox.set_model(liststore) - cell = gtk.CellRendererText() - combobox.pack_start(cell, True) - combobox.add_attribute(cell, 'text', 0) - return combobox - - def setup_label(name, lbl=""): - """Sets up a label for the given widget name.""" - widget = self.wTree.get_object(name) - # if lbl: - # widget.set_label(lbl) - if widget is None: - raise ValueError('widget %s does not exist' % name) - return widget - - # External Programs tab - # self.wTree.get_object("gen_settings_label").set_label(_('General ' - # 'Settings')) - # self.wTree.get_object("ext_prog_label").set_label(_('External ' - # 'Programs')) - # self.wTree.get_object("dhcp_client_label").set_label(_('DHCP ' - # 'Client')) - # self.wTree.get_object("wired_detect_label").set_label(_('Wired Link ' - # 'Detection')) - # self.wTree.get_object("route_flush_label").set_label(_('Route Table ' - # 'Flushing')) - # self.wTree.get_object("pref_backend_label").set_label(_('Backend') + - # ":") - - # entryWiredAutoMethod = self.wTree.get_object("pref_wired_auto_label") - # entryWiredAutoMethod.set_label('Wired Autoconnect Setting:') - # entryWiredAutoMethod.set_alignment(0, 0) - # atrlist = pango.AttrList() - # atrlist.insert(pango.AttrWeight(pango.WEIGHT_BOLD, 0, 50)) - # entryWiredAutoMethod.set_attributes(atrlist) - - # self.set_label("pref_dns1_label", "%s 1" % _('DNS server')) - # self.set_label("pref_dns2_label", "%s 2" % _('DNS server')) - # self.set_label("pref_dns3_label", "%s 3" % _('DNS server')) - # self.set_label("pref_search_dom_label", "%s:" % _('Search domain')) - # self.set_label("pref_wifi_label", "%s:" % _('Wireless Interface')) - # self.set_label("pref_wired_label", "%s:" % _('Wired Interface')) - # self.set_label("pref_driver_label", "%s:" % _('WPA Supplicant ' - # 'Driver')) - - self.dialog = self.wTree.get_object("pref_dialog") - self.dialog.set_title(_('Preferences')) - self.dialog.set_icon_name('wicd-gtk') - width = int(gtk.gdk.screen_width() / 2.4) - if width > 450: - width = 450 - self.dialog.resize(width, int(gtk.gdk.screen_height() / 2)) - - self.wiredcheckbox = setup_label("pref_always_check", - _('''Always show wired interface''')) - self.preferwiredcheckbox = setup_label("pref_prefer_wired_check", - "prefer_wired") - - self.reconnectcheckbox = setup_label("pref_auto_check", - _('Automatically reconnect on ' - 'connection loss')) - self.showneverconnectcheckbox = setup_label( - "pref_show_never_connect_check", _('Show never connect networks')) - self.debugmodecheckbox = setup_label("pref_debug_check", - _('Enable debug mode')) - self.displaytypecheckbox = setup_label( - "pref_dbm_check", _('Use dBm to measure signal strength')) - self.verifyapcheckbox = setup_label( - "pref_verify_ap_check", - _('Ping static gateways after connecting to verify association')) - self.usedefaultradiobutton = setup_label( - "pref_use_def_radio", - _('Use default profile on wired autoconnect')) - self.showlistradiobutton = setup_label( - "pref_prompt_radio", - _('Prompt for profile on wired autoconnect')) - self.lastusedradiobutton = setup_label( - "pref_use_last_radio", - _('Use last used profile on wired autoconnect')) - - self.notificationscheckbox = setup_label( - "pref_use_libnotify", - _('Display notifications about connection status')) - - # DHCP Clients - self.dhcpautoradio = setup_label( - "dhcp_auto_radio", _('Automatic (recommended)')) - self.dhclientradio = self.wTree.get_object("dhclient_radio") - self.pumpradio = self.wTree.get_object("pump_radio") - self.dhcpcdradio = self.wTree.get_object("dhcpcd_radio") - self.udhcpcradio = self.wTree.get_object("udhcpc_radio") - - # Wired Link Detection Apps - self.linkautoradio = setup_label("link_auto_radio", - _('Automatic (recommended)')) - self.linkautoradio = setup_label("link_auto_radio") - self.ethtoolradio = setup_label("ethtool_radio") - self.miitoolradio = setup_label("miitool_radio") - - # Route Flushing Apps - self.flushautoradio = setup_label("flush_auto_radio", - _('Automatic (recommended)')) - self.ipflushradio = setup_label("ip_flush_radio") - self.routeflushradio = setup_label("route_flush_radio") - - # Graphical Sudo Apps - self.sudoautoradio = setup_label("sudo_auto_radio", - _('Automatic (recommended)')) - self.gksudoradio = setup_label("gksudo_radio") - self.kdesuradio = setup_label("kdesu_radio") - self.ktsussradio = setup_label("ktsuss_radio") - - # Replacement for the combo box hack - self.wpadrivercombo = build_combobox("pref_wpa_combobox") - self.wpadrivers = wireless.GetWpaSupplicantDrivers() - self.wpadrivers.append("ralink_legacy") - self.wpadrivers.append('none') - - for x in self.wpadrivers: - self.wpadrivercombo.append_text(x) - - self.entryWirelessInterface = self.wTree.get_object("pref_wifi_entry") - self.entryWiredInterface = self.wTree.get_object("pref_wired_entry") - - # Set up global DNS stuff - self.useGlobalDNSCheckbox = setup_label("pref_global_check", - 'use_global_dns') - self.searchDomEntry = self.wTree.get_object("pref_search_dom_entry") - self.dnsDomEntry = self.wTree.get_object("pref_dns_dom_entry") - self.dns1Entry = self.wTree.get_object("pref_dns1_entry") - self.dns2Entry = self.wTree.get_object("pref_dns2_entry") - self.dns3Entry = self.wTree.get_object("pref_dns3_entry") - - self.backendcombo = build_combobox("pref_backend_combobox") - self.backendcombo.connect("changed", self.be_combo_changed) - # Load backend combobox - self.backends = daemon.GetBackendList() - self.be_descriptions = daemon.GetBackendDescriptionDict() - - for x in self.backends: - if x: - if x == 'ioctl': - x = 'ioctl NOT SUPPORTED' - self.backendcombo.append_text(x) - - def be_combo_changed(self, combo): - """Update the description label for the given backend.""" - self.backendcombo.set_tooltip_text( - self.be_descriptions[self.backends[combo.get_active()]]) diff --git a/gtk/wicd-client.py b/gtk/wicd-client.py deleted file mode 100644 index adc2682..0000000 --- a/gtk/wicd-client.py +++ /dev/null @@ -1,1187 +0,0 @@ -#!/usr/bin/env python3 -"""wicd - wireless connection daemon frontend implementation - -This module implements a usermode frontend for wicd. It updates connection -information, provides an (optional) tray icon, and allows for launching of -the wicd GUI and Wired Profile Chooser. - -class TrayIcon() -- Parent class of TrayIconGUI and IconConnectionInfo. - class TrayConnectionInfo() -- Child class of TrayIcon which provides - and updates connection status. - class TrayIconGUI() -- Child class of TrayIcon which implements the tray. - icon itself. Parent class of StatusTrayIconGUI and EggTrayIconGUI. - class IndicatorTrayIconGUI() -- Implements the tray icon using - appindicator.Indicator. - class StatusTrayIconGUI() -- Implements the tray icon using a - gtk.StatusIcon. - class EggTrayIconGUI() -- Implements the tray icon using egg.trayicon. - def usage() -- Prints usage information. - def main() -- Runs the wicd frontend main loop. - -""" - -# -# Copyright (C) 2007 - 2009 Adam Blackburn -# Copyright (C) 2007 - 2009 Dan O'Reilly -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License Version 2 as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# - -import atexit -import getopt -import os -import sys - -from dbus import DBusException -import gtk -from gi.repository import GLib as gobject -import pango - -import pygtk - -try: - import appindicator -except ImportError: - appindicator = None - -try: - import pynotify -except ImportError: - pynotify = None - -# Wicd specific imports -from wicd import wpath -from wicd import misc -from wicd import dbusmanager -import gui -from guiutil import error, can_use_notify - -from wicd.translations import _ - - -pygtk.require('2.0') - -if pynotify and not pynotify.init("Wicd"): - pynotify = None - -ICON_AVAIL = True -USE_EGG = False -# Import egg.trayicon if we're using an older gtk version -if not hasattr(gtk, "StatusIcon"): - try: - import egg.trayicon - USE_EGG = True - except ImportError: - print('Unable to load tray icon: Missing both egg.trayicon and ' - 'gtk.StatusIcon modules.') - ICON_AVAIL = False - -misc.RenameProcess("wicd-client") - -if __name__ == '__main__': - wpath.chdir(__file__) - -daemon = wireless = wired = lost_dbus_id = None -DBUS_AVAIL = False - -theme = gtk.icon_theme_get_default() -theme.append_search_path(wpath.images) - - -def catchdbus(func): - """Decorator to catch DBus exceptions.""" - def wrapper(*args, **kwargs): - try: - return func(*args, **kwargs) - except DBusException as e: - if e.get_dbus_name() is not None and \ - "DBus.Error.AccessDenied" in e.get_dbus_name(): - error(None, - _('Unable to contact the Wicd daemon due to an access ' - 'denied error from DBus. Please check that your user ' - 'is in the $A group.').replace("$A", "%s" % - wpath.wicd_group)) - raise DBusException(e) - else: - print(("warning: ignoring exception %s" % e)) - return None - wrapper.__name__ = func.__name__ - wrapper.__module__ = func.__module__ - wrapper.__dict__ = func.__dict__ - wrapper.__doc__ = func.__doc__ - return wrapper - - -class NetworkMenuItem(gtk.ImageMenuItem): - """Network menu item.""" - def __init__(self, lbl, is_active=False): - gtk.ImageMenuItem.__init__(self) - self.label = gtk.Label(lbl) - if is_active: - atrlist = pango.AttrList() - atrlist.insert(pango.AttrWeight(pango.WEIGHT_BOLD, 0, 50)) - self.label.set_attributes(atrlist) - self.label.set_justify(gtk.JUSTIFY_LEFT) - self.label.set_alignment(0, 0) - self.add(self.label) - self.label.show() - - -class TrayIcon(object): - """Base Tray Icon class. - - Base Class for implementing a tray icon to display network status. - - """ - def __init__(self, animate, displaytray=True, displayapp=False): - self.cur_sndbytes = -1 - self.cur_rcvbytes = -1 - self.last_sndbytes = -1 - self.last_rcvbytes = -1 - self.max_snd_gain = 10000 - self.max_rcv_gain = 10000 - - if appindicator: - self.tr = self.IndicatorTrayIconGUI(self) - elif USE_EGG: - self.tr = self.EggTrayIconGUI(self) - else: - self.tr = self.StatusTrayIconGUI(self) - if displayapp: - self.tr.toggle_wicd_gui() - self.icon_info = self.TrayConnectionInfo(self, self.tr, animate) - self.tr.icon_info = self.icon_info - print(('displaytray %s' % displaytray)) - self.tr.visible(displaytray) - - def is_embedded(self): - if USE_EGG: - raise NotImplementedError() - else: - return self.tr.is_embedded() # pylint: disable-msg=E1103 - - def get_bandwidth_bytes(self): - """Gets the amount of byte sent sine the last time I checked""" - dev_dir = '/sys/class/net/' - iface = daemon.GetCurrentInterface() - - for fldr in os.listdir(dev_dir): - if fldr == iface: - dev_dir = dev_dir + fldr + "/statistics/" - break - - try: - self.cur_rcvbytes = int( - open(dev_dir + "rx_bytes", "r").read().strip()) - self.cur_sndbytes = int( - open(dev_dir + "tx_bytes", "r").read().strip()) - except (IOError, OSError, ValueError): - self.cur_sndbytes = -1 - self.cur_rcvbytes = -1 - - class TrayConnectionInfo(object): - """Class for updating the tray icon status.""" - def __init__(self, parent, tr, animate=True): - """Initialize variables needed for the icon status methods.""" - self.last_strength = -2 - self.still_wired = False - self.network = '' - self.tried_reconnect = False - self.connection_lost_counter = 0 - self.tr = tr - self.last_sndbytes = -1 - self.last_rcvbytes = -1 - self.max_snd_gain = 10000 - self.max_rcv_gain = 10000 - self.animate = animate - - self.parent = parent - - self.network_name = '' # SSID - self.network_type = 'none' # Wired/Wireless/None - self.network_str = '' # Signal Strength - self.network_addr = '0.0.0.0' # IP Address - self.network_br = '' # Bitrate - - # keep track of the last state to provide appropriate - # notifications - self._last_bubble = None - self.last_state = None - self.should_notify = True - - if DBUS_AVAIL: - self.update_tray_icon() - else: - handle_no_dbus() - self.set_not_connected_state() - - # Initial update of the tooltip - self.update_tooltip() - - def update_tooltip(self): - """ - Updates the trayicon tooltip based on current connection status - """ - if (self.network_type == "none"): - self.tr.set_tooltip(_('Not connected')) - elif (self.network_type == "wireless"): - self.tr.set_tooltip(_('Connected to $A at $B (IP: $C)') - .replace('$A', self.network_name) - .replace('$B', self.network_str) - .replace('$C', self.network_addr)) - elif (self.network_type == "wired"): - self.tr.set_tooltip(_('Connected to wired network (IP: $A)') - .replace('$A', self.network_addr)) - elif (self.network_type == "killswitch"): - self.tr.set_tooltip(_('Not connected') + "(" + - _('Wireless Kill Switch Enabled') + ")") - elif (self.network_type == "no_daemon"): - self.tr.set_tooltip(_('Wicd daemon unreachable')) - - return True - - def _show_notification(self, title, details, image=None): - if self.should_notify: - try: - if not self._last_bubble: - self._last_bubble = pynotify.Notification( - title, details, image) - self._last_bubble.show() - else: - self._last_bubble.clear_actions() - self._last_bubble.clear_hints() - self._last_bubble.update(title, details, image) - self._last_bubble.show() - except Exception as e: - if hasattr(e, 'message') and e.message != '': - msg = e.message - elif hasattr(e, 'args') and len(e.args) > 0: - msg = e.args[-1] - else: - msg = str(e) - print(("Exception during notification: %s" % msg)) - - self.should_notify = False - - @catchdbus - def wired_profile_chooser(self): - """Launch the wired profile chooser.""" - gui.WiredProfileChooser() - daemon.SetNeedWiredProfileChooser(False) - - def set_wired_state(self, info): - """Sets the icon info for a wired state.""" - wired_ip = info[0] - self.network_addr = str(info[0]) - self.network_type = "wired" - self.tr.set_from_name('wired') - # status_string = _('Connected to wired network (IP: $A)'). \ - # replace('$A',wired_ip) - # self.tr.set_tooltip(status_string) - self._show_notification(_('Wired Network'), - _('Connection established'), - 'network-wired') - - self.update_tooltip() - - @catchdbus - def set_wireless_state(self, info): - """Sets the icon info for a wireless state.""" - lock = '' - wireless_ip = info[0] - self.network = info[1] - strength = info[2] - cur_net_id = int(info[3]) - sig_string = daemon.FormatSignalForPrinting(str(strength)) - self.network_type = "wireless" - self.network_addr = str(info[0]) - self.network_name = info[1] - self.network_str = sig_string - self.network_br = info[4] - self.set_signal_image(int(info[2]), lock) - - if wireless.GetWirelessProperty(cur_net_id, "encryption"): - lock = "-lock" - # status_string = (_('Connected to $A at $B (IP: $C)') - # .replace('$A', self.network) - # .replace('$B', sig_string) - # .replace('$C', str(wireless_ip))) - # self.tr.set_tooltip(status_string) - self.set_signal_image(int(strength), lock) - self._show_notification(self.network, - _('Connection established'), - 'network-wireless') - - self.update_tooltip() - - def set_connecting_state(self, info): - """Sets the icon info for a connecting state.""" - wired = False - if info[0] == 'wired' and len(info) == 1: - cur_network = _('Wired Network') - wired = True - else: - cur_network = info[1] - status_string = _('Connecting') + " to " + cur_network + "..." - self.update_tooltip() - # self.tr.set_tooltip(status_string) - self.tr.set_from_name('no-signal') - if wired: - self._show_notification(cur_network, - _('Establishing connection...'), - 'network-wired') - else: - self._show_notification(cur_network, - _('Establishing connection...'), - 'network-wireless') - - @catchdbus - def set_not_connected_state(self, info=None): - """Set the icon info for the not connected state.""" - self.tr.set_from_name('no-signal') - if not DBUS_AVAIL: - status = _('Wicd daemon unreachable') - elif wireless.GetKillSwitchEnabled(): - status = (_('Not connected') + " (" + - _('Wireless Kill Switch Enabled') + ")") - else: - status = _('Not connected') - # self.tr.set_tooltip(status) - self._show_notification(_('Disconnected'), None, 'stop') - self.update_tooltip() - - @catchdbus - def update_tray_icon(self, state=None, info=None): - """Updates the tray icon and current connection status.""" - if not DBUS_AVAIL: - return False - - if not state or not info: - [state, info] = daemon.GetConnectionStatus() - - # should this state change display a notification? - self.should_notify = (can_use_notify() and - self.last_state != state) - - self.last_state = state - - if state == misc.WIRED: - self.set_wired_state(info) - elif state == misc.WIRELESS: - self.set_wireless_state(info) - elif state == misc.CONNECTING: - self.set_connecting_state(info) - elif state in (misc.SUSPENDED, misc.NOT_CONNECTED): - self.set_not_connected_state(info) - else: - print('Invalid state returned!!!') - return False - return True - - @catchdbus - def set_signal_image(self, wireless_signal, lock): - """Sets the tray icon image for an active wireless connection.""" - if self.animate: - TrayIcon.get_bandwidth_bytes(self.parent) - prefix = self.get_bandwidth_activity() - else: - prefix = 'idle-' - if daemon.GetSignalDisplayType() == 0: - if wireless_signal > 75: - signal_img = "high-signal" - elif wireless_signal > 50: - signal_img = "good-signal" - elif wireless_signal > 25: - signal_img = "low-signal" - else: - signal_img = "bad-signal" - else: - if wireless_signal >= -60: - signal_img = "high-signal" - elif wireless_signal >= -70: - signal_img = "good-signal" - elif wireless_signal >= -80: - signal_img = "low-signal" - else: - signal_img = "bad-signal" - img_name = ''.join([prefix, signal_img, lock]) - self.tr.set_from_name(img_name) - - @catchdbus - def get_bandwidth_activity(self): - """Determines what network activity state we are in.""" - transmitting = False - receiving = False - - dev_dir = '/sys/class/net/' - wiface = daemon.GetWirelessInterface() - for fldr in os.listdir(dev_dir): - if fldr == wiface: - dev_dir = dev_dir + fldr + "/statistics/" - break - try: - rcvbytes = int(open(dev_dir + "rx_bytes", "r").read().strip()) - sndbytes = int(open(dev_dir + "tx_bytes", "r").read().strip()) - except IOError: - sndbytes = None - rcvbytes = None - - if not rcvbytes or not sndbytes: - return 'idle-' - - # Figure out receiving data info. - activity = self.is_network_active(self.parent.cur_rcvbytes, - self.parent.max_rcv_gain, - self.parent.last_rcvbytes) - receiving = activity[0] - self.parent.max_rcv_gain = activity[1] - self.parent.last_rcvbytes = activity[2] - - # Figure out out transmitting data info. - activity = self.is_network_active(self.parent.cur_sndbytes, - self.parent.max_snd_gain, - self.parent.last_sndbytes) - transmitting = activity[0] - self.parent.max_snd_gain = activity[1] - self.parent.last_sndbytes = activity[2] - - if transmitting and receiving: - return 'both-' - elif transmitting: - return 'transmitting-' - elif receiving: - return 'receiving-' - else: - return 'idle-' - - def is_network_active(self, bytes, max_gain, last_bytes): - """Determines if a network is active. - - Determines if a network is active by looking at the - number of bytes sent since the previous check. This method - is generic, and can be used to determine activity in both - the sending and receiving directions. - - Returns: - A tuple containing three elements: - 1) a boolean specifying if the network is active. - 2) an int specifying the maximum gain the network has had. - 3) an int specifying the last recorded number of bytes sent. - - """ - active = False - if last_bytes == -1: - last_bytes = bytes - elif bytes > (last_bytes + float(max_gain / 20.0)): - last_bytes = bytes - active = True - - gain = bytes - last_bytes - if gain > max_gain: - max_gain = gain - return (active, max_gain, last_bytes) - - class TrayIconGUI(object): - """Base Tray Icon UI class. - - Implements methods and variables used by both egg/StatusIcon - tray icons. - - """ - def __init__(self, parent): - self.list = [] - self.label = None - self.data = None - - menu = """ - - - - - - - - - - - - """ - actions = [ - ('Menu', None, 'Menu'), - ('Connect', gtk.STOCK_CONNECT, _('Connect')), - ('Info', gtk.STOCK_INFO, _('_Connection Info'), None, - _('Information about the current connection'), - self.on_conn_info), - ('Quit', gtk.STOCK_QUIT, _('_Quit'), None, - _('Quit wicd-tray-icon'), self.on_quit), - ] - actg = gtk.ActionGroup('Actions') - actg.add_actions(actions) - self.manager = gtk.UIManager() - self.manager.insert_action_group(actg, 0) - self.manager.add_ui_from_string(menu) - self.menu = (self.manager.get_widget('/Menubar/Menu/Quit'). - props.parent) - self.gui_win = None - self.current_icon_name = None - self._is_scanning = False - net_menuitem = self.manager.get_widget("/Menubar/Menu/Connect/") - if not appindicator: - net_menuitem.connect("activate", self.on_net_menu_activate) - - self.parent = parent - self.time = 2 # Time between updates - self.cont = 'Stop' - self.conn_info_txt = '' - - def tray_scan_started(self): - """Callback for when a wireless scan is started.""" - if not DBUS_AVAIL: - return - self._is_scanning = True - self.init_network_menu() - - def tray_scan_ended(self): - """Callback for when a wireless scan finishes.""" - if not DBUS_AVAIL: - return - self._is_scanning = False - self.populate_network_menu() - - def on_activate(self, data=None): - """Opens the wicd GUI.""" - if DBUS_AVAIL: - self.toggle_wicd_gui() - else: - # error(None, - # _('The wicd daemon is unavailable, so your request ' - # 'cannot be completed')) - pass - - def on_quit(self, widget=None): - """Closes the tray icon.""" - sys.exit(0) - - def on_about(self, data=None): - """Opens the About Dialog.""" - dialog = gtk.AboutDialog() - dialog.set_name('Wicd Tray Icon') - dialog.set_version('2.0') - dialog.set_comments('An icon that shows your network connectivity') - dialog.set_website('http://launchpad.net/wicd') - dialog.run() - dialog.destroy() - - def on_conn_info(self, data=None): - """Opens the Connection Information Dialog""" - window = gtk.Dialog( - "Wicd Connection Info", - None, - 0, - (gtk.STOCK_OK, gtk.RESPONSE_CLOSE) - ) - - # Create labels - self.label = gtk.Label() - self.data = gtk.Label() - self.data.set_selectable(True) - self.label.show() - self.data.show() - self.list = [] - self.list.append(self.data) - self.list.append(self.label) - - # Setup table - table = gtk.Table(1, 2) - table.set_col_spacings(12) - table.attach(self.label, 0, 1, 0, 1) - table.attach(self.data, 1, 2, 0, 1) - - # Setup Window - content = window.get_content_area() - content.pack_start(table, True, True, 0) - content.show_all() - - # Start updates - self.cont = 'Go' - gobject.timeout_add(5000, self.update_conn_info_win, self.list) - self.update_conn_info_win(self.list) - - window.run() - - # Destroy window and stop updates - window.destroy() - self.cont = 'Stop' - - def update_conn_info_win(self, *args): - """Updates the information in the connection summary window""" - if (self.cont == "Stop"): - return False - - [state, info] = daemon.GetConnectionStatus() - [rx, tx] = self.get_current_bandwidth() - - # Choose info for the data - if state == misc.WIRED: - text = (_("$A\n$B KB/s\n$C KB/s") - .replace('$A', str(info[0])) # IP - .replace('$B', str(rx)) # RX - .replace('$C', str(tx))) # TX - elif state == misc.WIRELESS: - text = (_("$A\n$B\n$C\n$D\n$E KB/s\n$F KB/s") - .replace('$A', str(info[1])) # SSID - .replace('$B', str(info[4])) # Speed - .replace('$C', str(info[0])) # IP - .replace('$D', - daemon.FormatSignalForPrinting(str(info[2]))) - .replace('$E', str(rx)) - .replace('$F', str(tx))) - else: - text = '' - - # Choose info for the labels - self.list[0].set_text('\n' + text) - if state == misc.WIRED: - self.list[1].set_text(_("Wired\nIP:\nRX:\nTX:")) - elif state == misc.WIRELESS: - self.list[1].set_text(_("Wireless\nSSID:\nSpeed:\nIP:\n" - "Strength:\nRX:\nTX:")) - elif state == misc.CONNECTING: - self.list[1].set_text(_('Connecting')) - elif state in (misc.SUSPENDED, misc.NOT_CONNECTED): - self.list[1].set_text(_('Disconnected')) - - return True - - def get_current_bandwidth(self): - """ - Calculates the current bandwidth based on sent/received bytes - divided over time. Unit is in KB/s - """ - self.parent.get_bandwidth_bytes() - rxb = self.parent.cur_rcvbytes - self.parent.last_rcvbytes - txb = self.parent.cur_sndbytes - self.parent.last_sndbytes - - self.parent.last_rcvbytes = self.parent.cur_rcvbytes - self.parent.last_sndbytes = self.parent.cur_sndbytes - - rx_rate = float(rxb / (self.time * 1024)) - tx_rate = float(txb / (self.time * 1024)) - - return (rx_rate, tx_rate) - - def _add_item_to_menu(self, net_menu, lbl, type_, n_id, is_connecting, - is_active): - """Add an item to the network list submenu.""" - def network_selected(widget, net_type, net_id): - """Callback method for a menu item selection.""" - if net_type == "__wired__": - wired.ConnectWired() - else: - wireless.ConnectWireless(net_id) - - item = NetworkMenuItem(lbl, is_active) - image = gtk.Image() - - if type_ == "__wired__": - image.set_from_icon_name("network-wired", - gtk.ICON_SIZE_SMALL_TOOLBAR) - else: - image.set_from_icon_name(self._get_img(n_id), - gtk.ICON_SIZE_SMALL_TOOLBAR) - item.set_image(image) - del image - item.connect("activate", network_selected, type_, n_id) - net_menu.append(item) - item.show() - if is_connecting: - item.set_sensitive(False) - del item - - @catchdbus - def _get_img(self, net_id): - """Determines which image to use for the wireless entries.""" - def fix_strength(val, default): - """Assigns given strength to a default value if needed.""" - return val and int(val) or default - - def get_prop(prop): - return wireless.GetWirelessProperty(net_id, prop) - - strength = fix_strength(get_prop("quality"), -1) - dbm_strength = fix_strength(get_prop('strength'), -100) - - if daemon.GetWPADriver() == 'ralink legacy' or \ - daemon.GetSignalDisplayType() == 1: - if dbm_strength >= -60: - signal_img = 'signal-100' - elif dbm_strength >= -70: - signal_img = 'signal-75' - elif dbm_strength >= -80: - signal_img = 'signal-50' - else: - signal_img = 'signal-25' - else: - if strength > 75: - signal_img = 'signal-100' - elif strength > 50: - signal_img = 'signal-75' - elif strength > 25: - signal_img = 'signal-50' - else: - signal_img = 'signal-25' - return signal_img - - @catchdbus - def on_net_menu_activate(self, item): - """Trigger a background scan to populate the network menu. - - Called when the network submenu is moused over. We - sleep briefly, clear pending gtk events, and if - we're still being moused over we trigger a scan. - This is to prevent scans when the user is just - mousing past the menu to select another menu item. - - """ - def dummy(x=None): - pass - - if self._is_scanning: - return True - - self.init_network_menu() - gobject.timeout_add(800, self._trigger_scan_if_needed, item) - - @catchdbus - def _trigger_scan_if_needed(self, item): - """Trigger a scan if the network menu is being hovered over.""" - while gtk.events_pending(): - gtk.main_iteration() - if item.state != gtk.STATE_PRELIGHT: - return True - wireless.Scan(False) - return False - - @catchdbus - def populate_network_menu(self, data=None): - """Populates the network list submenu.""" - def get_prop(net_id, prop): - return wireless.GetWirelessProperty(net_id, prop) - - net_menuitem = self.manager.get_widget("/Menubar/Menu/Connect/") - submenu = net_menuitem.get_submenu() - self._clear_menu(submenu) - if not DBUS_AVAIL: - net_menuitem.show() - return - - is_connecting = daemon.CheckIfConnecting() - num_networks = wireless.GetNumberOfNetworks() - [status, info] = daemon.GetConnectionStatus() - - if daemon.GetAlwaysShowWiredInterface() or \ - wired.CheckPluggedIn(): - if status == misc.WIRED: - is_active = True - else: - is_active = False - self._add_item_to_menu(submenu, "Wired Network", "__wired__", - 0, is_connecting, is_active) - sep = gtk.SeparatorMenuItem() - submenu.append(sep) - sep.show() - - if num_networks > 0: - skip_never_connect = not daemon.GetShowNeverConnect() - for x in range(0, num_networks): - if (skip_never_connect and - misc.to_bool(get_prop(x, "never"))): - continue - essid = get_prop(x, "essid") - if status == misc.WIRELESS and info[1] == essid: - is_active = True - else: - is_active = False - self._add_item_to_menu(submenu, essid, "wifi", x, - is_connecting, is_active) - else: - no_nets_item = gtk.MenuItem(_('No wireless networks found.')) - no_nets_item.set_sensitive(False) - no_nets_item.show() - submenu.append(no_nets_item) - - submenu.reposition() - net_menuitem.show() - - def init_network_menu(self): - """Set the right-click network menu to the scanning state.""" - net_menuitem = self.manager.get_widget("/Menubar/Menu/Connect/") - submenu = net_menuitem.get_submenu() - self._clear_menu(submenu) - - loading_item = gtk.MenuItem(_('Scanning') + "...") - loading_item.set_sensitive(False) - loading_item.show() - submenu.append(loading_item) - net_menuitem.show() - - def _clear_menu(self, menu): - """Clear the right-click menu.""" - for item in menu.get_children(): - menu.remove(item) - item.destroy() - - def toggle_wicd_gui(self): - """Toggles the wicd GUI.""" - if not self.gui_win: - self.gui_win = gui.appGui(tray=self) - elif not self.gui_win.is_visible: - self.gui_win.show_win() - else: - self.gui_win.exit() - return True - - if USE_EGG: - class EggTrayIconGUI(TrayIconGUI): - """Tray Icon for gtk < 2.10. - - Uses the deprecated egg.trayicon module to implement the tray icon. - Since it relies on a deprecated module, this class is only used - for machines running versions of GTK < 2.10. - - """ - def __init__(self, parent): - """Initializes the tray icon""" - TrayIcon.TrayIconGUI.__init__(self, parent) - self.tooltip = gtk.Tooltips() - self.eb = gtk.EventBox() - self.tray = egg.trayicon.TrayIcon("WicdTrayIcon") - self.pic = gtk.Image() - self.tooltip.set_tip(self.eb, "Initializing wicd...") - self.pic.set_from_name('no-signal') - - self.eb.connect('button_press_event', self.tray_clicked) - self.eb.add(self.pic) - self.tray.add(self.eb) - self.tray.show_all() - - def tray_clicked(self, widget, event): - """Handles tray mouse click events.""" - if event.button == 1: - self.toggle_wicd_gui() - elif event.button == 3: - self.init_network_menu() - self.menu.popup(None, None, None, event.button, event.time) - - def set_from_file(self, val=None): - """Calls set_from_file on the gtk.Image for the tray icon.""" - self.pic.set_from_file( - os.path.join( - wpath.images, 'hicolor/22x22/status/%s.png' % val - ) - ) - - def set_tooltip(self, val): - """Set the tooltip for this tray icon. - - Sets the tooltip for the gtk.ToolTips associated with this - tray icon. - - """ - self.tooltip.set_tip(self.eb, val) - - def visible(self, val): - """Set if the icon is visible or not. - - If val is True, makes the icon visible, if val is False, - hides the tray icon. - - """ - if val: - self.tray.show_all() - else: - self.tray.hide_all() - - if hasattr(gtk, "StatusIcon"): - class StatusTrayIconGUI(gtk.StatusIcon, TrayIconGUI): - """Class for creating the wicd tray icon on gtk > 2.10. - - Uses gtk.StatusIcon to implement a tray icon. - - """ - def __init__(self, parent): - TrayIcon.TrayIconGUI.__init__(self, parent) - gtk.StatusIcon.__init__(self) - - self.current_icon_name = '' - self.set_visible(True) - self.connect('activate', self.on_activate) - self.connect('popup-menu', self.on_popup_menu) - self.set_from_name('no-signal') - self.set_tooltip("Initializing wicd...") - - def on_popup_menu(self, status, button, timestamp): - """Opens the right click menu for the tray icon.""" - self.init_network_menu() - self.menu.popup(None, None, gtk.status_icon_position_menu, - button, timestamp, self) - - def set_from_name(self, name=None): - """Sets a new tray icon picture.""" - if name != self.current_icon_name: - self.current_icon_name = name - gtk.StatusIcon.set_from_icon_name(self, name) - - def visible(self, val): - """Set if the icon is visible or not. - - If val is True, makes the icon visible, if val is False, - hides the tray icon. - - """ - self.set_visible(val) - - if appindicator: - class IndicatorTrayIconGUI(gtk.StatusIcon, TrayIconGUI): - """Class for creating the wicd AppIndicator. - This is required on recent versions of Unity (>=13.04). - - Uses appindicator.Indicator to implement a tray icon. - - """ - def __init__(self, parent): - TrayIcon.TrayIconGUI.__init__(self, parent) - self.ind = appindicator.Indicator("wicd", "wicd-gtk", - appindicator. - CATEGORY_SYSTEM_SERVICES, - wpath.images) - self.current_icon_name = '' - - # Rescaning when hovering over the net_menu doesn't work. - # (AFAICT, AppIndicator menus don't report PRELIGHT status.) - # We use a separate menu item instead. - rescan = gtk.MenuItem("Rescan") - self.menu.prepend(rescan) - rescan.connect("activate", self.on_rescan) - rescan.show() - - sep = gtk.SeparatorMenuItem() - self.menu.prepend(sep) - sep.show() - - # AppIndicator does not support tooltips so we use a - # menu item to contain what was the tooltip. - # - # Also, since AppIndicator does not support actions on - # clicking the tray icon, we use this tooltip menu - # item to toggle the GUI - self.tooltip_item = gtk.MenuItem("Initializing wicd...") - self.menu.prepend(self.tooltip_item) - self.tooltip_item.connect("activate", self.on_activate) - self.tooltip_item.show() - - self.ind.set_menu(self.menu) - - def on_rescan(self, *data): - """Triggers a network rescan that updates the 'Connect' menu - when the 'Rescan' menu item is selected. - """ - self.init_network_menu() - wireless.Scan(False) - - def set_from_file(self, path=None): - """Sets a new tray icon picture.""" - if path != self.current_icon_path: - self.current_icon_path = path - self.ind.set_icon(path) - - def set_from_name(self, name=None): - """Sets a new tray icon picture.""" - if name != self.current_icon_name: - self.current_icon_name = name - self.ind.set_icon(name) - - def visible(self, val): - """Set if the icon is visible or not. - - If val is True, makes the icon visible, if val is False, - hides the tray icon. - - """ - self.ind.set_status(val and appindicator.STATUS_ACTIVE or - appindicator.STATUS_PASSIVE) - - def set_tooltip(self, str): - """Set the tooltip for this tray icon. - - Since AppIndicators do not support tooltips, actually - sets the label for the top menu item associated with - this tray icon. - - """ - self.tooltip_item.set_label(str) - - -def usage(): - """Print usage information.""" - print(""" -wicd %s -wireless (and wired) connection daemon front-end. - -Arguments: -\t-t\t--tray\tRun the wicd tray icon only. -\t-n\t--no-tray\tRun wicd without the tray icon. -\t-h\t--help\t\tPrint this help information. -\t-a\t--no-animate\tRun the tray without network traffic tray animations. -\t-o\t--only-notifications\tDon't display anything except notifications. -""" % wpath.version) - - -def setup_dbus(force=True): - """Initialize DBus.""" - global daemon, wireless, wired, DBUS_AVAIL, lost_dbus_id - print("Connecting to daemon...") - try: - dbusmanager.connect_to_dbus() - except DBusException: - if force: - print("Can't connect to the daemon, trying to start it " - "automatically...") - misc.PromptToStartDaemon() - try: - dbusmanager.connect_to_dbus() - except DBusException: - error(None, _("Could not connect to wicd's D-Bus interface. " - "Check the wicd log for error messages.")) - return False - else: - return False - - if lost_dbus_id: - gobject.source_remove(lost_dbus_id) - lost_dbus_id = None - dbus_ifaces = dbusmanager.get_dbus_ifaces() - daemon = dbus_ifaces['daemon'] - wireless = dbus_ifaces['wireless'] - wired = dbus_ifaces['wired'] - DBUS_AVAIL = True - print("Connected.") - return True - - -def on_exit(): - """Handle GUI exit.""" - if DBUS_AVAIL: - try: - daemon.SetGUIOpen(False) - except DBusException: - pass - - -def handle_no_dbus(): - """Called when dbus announces its shutting down.""" - global DBUS_AVAIL, lost_dbus_id - DBUS_AVAIL = False - gui.handle_no_dbus(from_tray=True) - print("Wicd daemon is shutting down!") - err_msg = _('The wicd daemon has shut down. The UI will not function ' - 'properly until it is restarted.') - lost_dbus_id = misc.timeout_add(5, lambda: error(None, err_msg, - block=False)) - return False - - -@catchdbus -def main(argv): - """The main frontend program. - - Keyword arguments: - argv -- The arguments passed to the script. - - """ - try: - opts, args = getopt.getopt( - sys.argv[1:], - 'tnhao', - ['help', 'no-tray', 'tray', 'no-animate', 'only-notifications'] - ) - except getopt.GetoptError: - # Print help information and exit - usage() - sys.exit(2) - - use_tray = True - animate = True - display_app = True - for opt, a in opts: - if opt in ('-h', '--help'): - usage() - sys.exit(0) - elif opt in ('-t', '--tray'): - display_app = False - elif opt in ('-n', '--no-tray'): - use_tray = False - elif opt in ('-a', '--no-animate'): - animate = False - elif opt in ('-o', '--only-notifications'): - print("only displaying notifications") - use_tray = False - display_app = False - else: - usage() - sys.exit(2) - - print('Loading...') - setup_dbus() - atexit.register(on_exit) - - if display_app and not use_tray or not ICON_AVAIL: - gui.appGui(standalone=True) - mainloop = gobject.MainLoop() - mainloop.run() - sys.exit(0) - - # Set up the tray icon GUI and backend - tray_icon = TrayIcon(animate, displaytray=use_tray, displayapp=display_app) - - # Check to see if wired profile chooser was called before icon - # was launched (typically happens on startup or daemon restart). - if DBUS_AVAIL and daemon.GetNeedWiredProfileChooser(): - daemon.SetNeedWiredProfileChooser(False) - tray_icon.icon_info.wired_profile_chooser() - - bus = dbusmanager.get_bus() - bus.add_signal_receiver(tray_icon.icon_info.wired_profile_chooser, - 'LaunchChooser', 'org.wicd.daemon') - bus.add_signal_receiver(tray_icon.icon_info.update_tray_icon, - 'StatusChanged', 'org.wicd.daemon') - bus.add_signal_receiver(tray_icon.tr.tray_scan_ended, 'SendEndScanSignal', - 'org.wicd.daemon.wireless') - bus.add_signal_receiver(tray_icon.tr.tray_scan_started, - 'SendStartScanSignal', 'org.wicd.daemon.wireless') - bus.add_signal_receiver( - lambda: ( - handle_no_dbus() or tray_icon.icon_info.set_not_connected_state() - ), - "DaemonClosing", - 'org.wicd.daemon' - ) - bus.add_signal_receiver(lambda: setup_dbus(force=False), "DaemonStarting", - "org.wicd.daemon") - print('Done loading.') - mainloop = gobject.MainLoop() - mainloop.run() - - -if __name__ == '__main__': - main(sys.argv) diff --git a/icons/128x128/apps/wicd-gtk.png b/icons/128x128/apps/wicd-gtk.png deleted file mode 100644 index a54662336affc164be33488be048c1f9f64d0141..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6282 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 T-Rl1y1ppN#O~rBr%dr0eoHXC| diff --git a/icons/16x16/apps/wicd-gtk.png b/icons/16x16/apps/wicd-gtk.png deleted file mode 100644 index 5d946ff82feee37d24356537a036e36736c9b0a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmV-m0-ybfP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOM% z6fqorG)R#E00H1hL_t(I%eB)_OO#O*$MMfRGmefA^E7Y^Ke&$&O& zIh+%r;i_r?j7_%jKIHjL{}Jwr|IF>s`G z#Dn?}9sW+6d-b8-(osZ-MGkt^6dFiPET`I)yokoUPg@;GUP2t4N{xBl6pBZ>1N)PQ z?TqvI$1u2DdDgz-7$%X(+LXP;8CR;#gGb+oZI9EH><%=?TVyaXKMgt(J#Ks%!ft%T zEZSY2d#Jsr2Rxsjk`CDsZ;6SDfl#>Akx0VV%wo2g#n}={e9NQ-kwi9jiD)Dic(*ty zKx<(=m|Pfgylf9fFpUow)>qzPDm?^t71k+;@IF0BS@eY2=1_lX98|?B4WtG|BTaaN z8G%NpQ-f+_n?Yass87wIP0^E3>|DiL_v=Hn<#oPvSzzg$qt)HIj0+VrNM>u%=34cf zqh(_#$_vg3tW0Zf=@Zwtd{z+oZDtyDmfRF|2es=6)CkI7SpcXH) uwve^lyw&4lh!mxI4v)yFb2pf5Lmo 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 DflsXn diff --git a/icons/24x24/apps/wicd-gtk.png b/icons/24x24/apps/wicd-gtk.png deleted file mode 100644 index 42f8a7bf3aa0d17c428a446d913c1754edc5c4c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-Y)P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOM% z6fhu2Km}I-00SCHL_t(Y$F-D8XcSo#hQE4rD%E+|=~icqraNee-4S~gTH+W6(OI}q z@T~|UzVNLP4Je8Wk$~VvoP`_3L1!@_j4s3(#0Qd%E|f?#pahApgcd`Lbdt8Zj*F^P z+NL{g6n`kVb^iaJ|K4-Yy&CzE05$X~EQBVh{A!nb1=jiokm zqaBD*aMi0S`?(ttN|kd=6eY?TZiR*Ql>@+Ux%4kAF6$*76&97f1In2=Oq%_#_#73M zlqZ4dV^q0%k?uO-L9GDCawb*)@jMCV0+l(j!`zPuJ$1q)_3zPOHQNH8k(h8eB)}|B zKF?gr>dH=_CXYciD=VI`z`r6ZHiLaZL1Mz5Dhr4>2Xrg!1b_GUcv6jeZia`58=DIj zC0eq9|H8u<${a7&WIjh?!u^NPPd;OeiE zvW1;hV;$Ey;^at}U?>TlYF`+?3YI{h_1+W4jVAi69^ez;1MUI8y6jrFY{Mio-82|Y z-n@_Ydr~&|RS5fPRD9@Jn-*`RD<(G9=wD7}mAR&1i-nH)Rq4db;Zy0&B(VWqfhk(Z z6TP##2xv8Kq9LF)E5%V@5Kswd5&AM+V?Cz^@vDwWua#6u*&RF`aSzRidcwa3E-|~r z&s6;nH}WRS;4J_FZ6PsZ5|;-qc}#;5MFC!Qv>t$Kg8(<2a9zm*hN41yt>lzKA#SWeWjnCkt*!v; zP}oA;SPv*!`UBjK2qRG;W<1X3nmH26ATgoY|Ej=>mt`5O$-AR@W;b?BI5F7<7JW@? zv~ppZvkRYcdcp>pa*{g{;c~U$Q;z4qnJT;38%)s}vVpA=Fxbe!V1}09Fd7Gny^0aa z)YJHsM?jnV*cCD;2Tr0ZkEu}405kak6gz_gMfu72=>|#>z73e~jzhrcv-}K5y5ony wq3>P5^{l!V`u-m;fnLO52>4h;lNyiw0x`n!2TUS3E&u=k07*qoM6N<$g0K3PbN~PV diff --git a/icons/32x32/apps/wicd-gtk.png b/icons/32x32/apps/wicd-gtk.png deleted file mode 100644 index fb05a6d3191ea53b135a05ae93360cbec143c39b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1240 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 VcZw|#R#N}~002ovPDHLkV1nFH;^6=Q diff --git a/icons/72x72/apps/wicd-gtk.png b/icons/72x72/apps/wicd-gtk.png deleted file mode 100644 index d3c45e9828feaf22abfcbb6831b1ad06718a7774..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2890 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 JPDHLkV1gqFE6M-> diff --git a/icons/scalable/apps/wicd-gtk.svg b/icons/scalable/apps/wicd-gtk.svg deleted file mode 100644 index 2f46f58..0000000 --- a/icons/scalable/apps/wicd-gtk.svg +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/images/16x16/status/signal-100.png b/images/16x16/status/signal-100.png deleted file mode 100644 index 0eb0288135678e1b595b7f86fa5d13f99ecfcae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)bBw50004>NklV!>rJYc`G#kkPHeCnW41GWi z>!w;YaUV!o=%B84aogNYC(y=9Ss121`l}Q6W^)W0UIrD)9_n9yIzH){k`ER}>C5QD zomMsL26oay<9B>noAvqkBP}MnO$cx3xyM`_2@Ne*5-^bR-l}d8NWd5|B5^<;40(zkNGJxaNb957F%Vjq z@B~9l`T!2ah=H7oe8J`H79S!bL7pag5$213|AoIavKGZY$_hmQ0000lx2{)?R25a#lu{On=;|q8_si~rGj0nI zn%VF9&nJ(c4G=LS;?!DuAR>pLP>YBWk(vnCP643`wRQG|LDQ(h&b|BFj{rd1whhd@ zZpdr^f)W|_-i}KtJNEPV`?3aCj$_Jjae-~qL}TqVgz6Xx6CxlHMeqHvl=2l6ZmEjP zIbSix-n2`vUw$+x#qP<;k9eu`9Jl)!5fc$jVoVtTK~<|5<2C2)IsgD7wusaK=r7Cf z-e0Fb^Laa&ES1&OuJ-SWiUbi^z7Rr%h+qsQ@BJYFd;`J_A`<7^6abHG$~i+~Ex8!Z z#e^6YatYJvtd}z{#+X{>9GLmWY&O5$>2$J+hPG|jVr=gG`!D3nb#uv`EW4YF*gOQvrv?U1JIRDce!^h(C`0z!c4DX zNM8;QhMyEv5iwZnMzIMWuLZ0%y`m^yl%+0pRyq?EMOEdLQVW^xT>*}F-Ypu=Pfc!; zUYuOk`@4IB6cKS|j2UT`BLL`%2#ZJ;3D>Rwx2j3kvc4f{+8WM(>GJBcia6(-%Mijk zF>e5Z5^-?O3{%V>%-0{|JJBqr-_soF+jc_;o?~6X{4Chhi6Rmbfp^XgB<1g*u%#+C z#JFkeRTw z?gP`zDy^n%31JDCRbxZy=L?d6kr0?EIOmR3@c;=oh)ArlGen%2x=xW})ZAnaV!3SJ z1q>dNX<;pw9DJimQxQUVR8{lGx0_ZJ(Nc0=^L73F-+$pRVMy#IL{%p#00000NkvXX Hu0mjf0ruXJ diff --git a/images/16x16/status/signal-75.png b/images/16x16/status/signal-75.png deleted file mode 100644 index 599df255c7e3c153c95a1bf09ff127cceccffb5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)5}D|1$$C@hwv(h9((i<8ObslfBkPi|$M z?|0aIIqVMJXUKwx(H6yi4B^eGzyj;*+0g9)`?DM5@ zz#@i-t{7u(nrZcNN;>*xeg4f4?(uK`BSr|i&2{O#Q`gE(@aP~hja4ox0RTi{rIZtq z+U&%)H@q5_eO^>Ph4n&P3F6g|hcR)~0s;&fq6%Tac8Lh0mEppe4iOIw1)=~^Vj``g z)*CAmi0ELHM@WhF1y~a!25c_vD6g)NC)IOTa^@}X+}(fwg}<{Y2~s(+V3+^^002ov JPDHLkV1mhL;cfr` diff --git a/images/22x22/status/bad-signal-lock.png b/images/22x22/status/bad-signal-lock.png deleted file mode 100644 index 0b5ff2f3e0b4d3e91c9be1ae8be163b9dd9f7784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcmV+$1mydPP)<2u#W{zn`rrTf zD{O6TBhsl#F)e{HwOMO4D2jqst3^>1?CtH9)jG%OYNG^iZf~8Qy!HOot?eB!Z~`KV zh?Qdu5kn~71KfD?8qT?{WHCnaJV!(r8X7La{eAtk;~Je+s8&D$6)TgNAypEygsM`j z)i5)hbHo^N&XsUV2@f@|qpKQ-QC2D-Wky5{Q^iaV{nKi-==McqA8ZGpW` zwXvk-SQEu=(aTJgG*$CbNvnXReNswjN?-}ISf;iFrhw8|U8N`rn$0FLMnVXrlqiZ~ zzj+W*vu42!Rj+KF`+y{O(?hb7#-uoUgjny_IMYvP|$9WL|K<*x1WmO%GP?oTIO= zZx_J#)dC~W4{_qTO++Bia}MGKBLq*LJ3`3O{su3;G+HKg4(~mx+67mpz;A49$2;%6 z`)7<%kg}pyJDzMdo98+W#SENSE#&L1y*8I#7#-Z%*+Esir(35#7cSJ_0qzJ;2QF5E z0`TqP;v?_kYVUtS%bG-fW_tQnP3cfE-g_I|*!a!N(!Zke V`jvzgn`;07002ovPDHLkV1jbs@Z|si diff --git a/images/22x22/status/bad-signal.png b/images/22x22/status/bad-signal.png deleted file mode 100644 index 0b5ff2f3e0b4d3e91c9be1ae8be163b9dd9f7784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcmV+$1mydPP)<2u#W{zn`rrTf zD{O6TBhsl#F)e{HwOMO4D2jqst3^>1?CtH9)jG%OYNG^iZf~8Qy!HOot?eB!Z~`KV zh?Qdu5kn~71KfD?8qT?{WHCnaJV!(r8X7La{eAtk;~Je+s8&D$6)TgNAypEygsM`j z)i5)hbHo^N&XsUV2@f@|qpKQ-QC2D-Wky5{Q^iaV{nKi-==McqA8ZGpW` zwXvk-SQEu=(aTJgG*$CbNvnXReNswjN?-}ISf;iFrhw8|U8N`rn$0FLMnVXrlqiZ~ zzj+W*vu42!Rj+KF`+y{O(?hb7#-uoUgjny_IMYvP|$9WL|K<*x1WmO%GP?oTIO= zZx_J#)dC~W4{_qTO++Bia}MGKBLq*LJ3`3O{su3;G+HKg4(~mx+67mpz;A49$2;%6 z`)7<%kg}pyJDzMdo98+W#SENSE#&L1y*8I#7#-Z%*+Esir(35#7cSJ_0qzJ;2QF5E z0`TqP;v?_kYVUtS%bG-fW_tQnP3cfE-g_I|*!a!N(!Zke V`jvzgn`;07002ovPDHLkV1jbs@Z|si diff --git a/images/22x22/status/both-bad-signal-lock.png b/images/22x22/status/both-bad-signal-lock.png deleted file mode 100644 index 38cb205d1cf25befc86860bed1f5f695336396f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 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 Ef>3DiEC2ui diff --git a/images/22x22/status/both-good-signal.png b/images/22x22/status/both-good-signal.png deleted file mode 100644 index 2bb8626115fed56a57b7aec896a69d254b3fb623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1034 zcmV+l1oiugP)6pvmk5p$@Jf?!GXPY@3kPeKby1tovLf>e+m1b@*)!9&HEv|Wr%li8Vh=Y2fP z%xc<1OZ_fvbwtZsfb+a2d-Rs|J!p(l2!ykL=gi9 z(2+41ZScy>&n#THh^pe8!#M|lsxmw>JPVk9U_^`v0wSma9=w3;{Ea4U(&JrFmSr8V z_a1{W09Hh*K-j|_QUwL1@ZT#K1r>!yyLj(AAmgZ6Nmq+gM@%|N(EGG3SP8`--DshF$6VC{M9XvLOs&XiGxrgOTGDVXZ z;utl1_+iiO^lK8|1_8B-h=7Ba%)2?b-{NWUBPd$RZtp`7fX`6%)DWx$#s3R%zVdXy zy<*D^BgMFSkD}ll>UPj-m1sYrE|wIZcZ-roQ#vr4<+Kh^i|hPeLCcj^@EN#-t?g}& zW3Xi;dlcWlcdu03&EVnfT`pzmcKL#di3tYGCQiGGa~Fi^sp$gj=~4K&D&gH4#Ns5k zsZ=Z?SZiAVwwwHc*QI?6I(-wSg)@oP&)iTkf_V z7=sugFb1teJoWUGIAh2(I06oe$85B>_3-lBum0hj6GSjTlDffmyFJ>mNEM7|HLSFf zIOXIMv*UkygJL>1O7WR&%q#$J+GewPyV-1>B|pFb_~OQmTejXf;>vqhufDOqzTRG2 zTl;3fRPc0@RHi~CAG4}@Uql`NtgNg^tJSI)5r3Epu(-JRX74#0r12f#VBa|q-c zWPX1B#Ms!_YtNoO{fRkqCQu;DvLoQ>iHWVxuV427HL>_2ps|2VNCqh>!`agKKD?#4BafIsgCw07*qoM6N<$ Ef>3DiEC2ui diff --git a/images/22x22/status/both-high-signal-lock.png b/images/22x22/status/both-high-signal-lock.png deleted file mode 100644 index 51328361c7313fb12fc11ca6ec496ff7d7a6849c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15NyiP)K!{`)5K>tuD?4~ zn>rN)0mc}N2qp*sa7iM!ZvE1DXa4oMSfioM7aw2#P()rH1unet)>qF*QCtuN5k(9b zKqsm&S>x$bKf?UzP|B6^EMP`~5iueNh@c91@B*^?HyX8xr;{9oz+eo36_Fwk_N|pv zK>^A1_XOiN1ntgmZUkV`wjl4X~UV@@sx7!C01mGR2_t7{@ZQBENp_%KF{a5c% z6p{o@cF|&y!-K4w8t?t*u;e_wo#+m*&04IfwV2!7`V= zZ#u5m>$%{W#!LqG^m&+PLoFfKY{BjT*me{Xh9PP18G)4kM-br5nF>3>w*;E@k1Txv z7&|_80AP=W1sywHBn~Z8n?VG@H%y zqzw#!Pp@6OX)CoMRo=XE<)w{{jrQ8w+833=2@)L!i)00&s(*^eUjVDCtI}$<3PxmP z1uQKseZRcCybDk&R7f;V#ZpBEdO%hni;IgVtJUhWkDNXGo;i0eP{27i1fHqaH$S<0 z)dQ4*GKuE5Pb(som6et6!Z57;u)dCn3=of|p>xhHEG&fMK^e#J;i{_CslR-0>nFR U@&3O7H2?qr07*qoM6N<$f-Cv5lK=n! diff --git a/images/22x22/status/both-high-signal.png b/images/22x22/status/both-high-signal.png deleted file mode 100644 index 51328361c7313fb12fc11ca6ec496ff7d7a6849c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15NyiP)K!{`)5K>tuD?4~ zn>rN)0mc}N2qp*sa7iM!ZvE1DXa4oMSfioM7aw2#P()rH1unet)>qF*QCtuN5k(9b zKqsm&S>x$bKf?UzP|B6^EMP`~5iueNh@c91@B*^?HyX8xr;{9oz+eo36_Fwk_N|pv zK>^A1_XOiN1ntgmZUkV`wjl4X~UV@@sx7!C01mGR2_t7{@ZQBENp_%KF{a5c% z6p{o@cF|&y!-K4w8t?t*u;e_wo#+m*&04IfwV2!7`V= zZ#u5m>$%{W#!LqG^m&+PLoFfKY{BjT*me{Xh9PP18G)4kM-br5nF>3>w*;E@k1Txv z7&|_80AP=W1sywHBn~Z8n?VG@H%y zqzw#!Pp@6OX)CoMRo=XE<)w{{jrQ8w+833=2@)L!i)00&s(*^eUjVDCtI}$<3PxmP z1uQKseZRcCybDk&R7f;V#ZpBEdO%hni;IgVtJUhWkDNXGo;i0eP{27i1fHqaH$S<0 z)dQ4*GKuE5Pb(som6et6!Z57;u)dCn3=of|p>xhHEG&fMK^e#J;i{_CslR-0>nFR U@&3O7H2?qr07*qoM6N<$f-Cv5lK=n! diff --git a/images/22x22/status/both-low-signal-lock.png b/images/22x22/status/both-low-signal-lock.png deleted file mode 100644 index 7ab10fdd9b96b3ae1b8d415692d3340b21f469f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 zcmVf9F+I_t^8@$!LfKCovdMa5GDnK?E6) zfRkj1~96oViMnZa>Btgfn8@4Be| znoLJ86jk+Zy>rh!_tcY_F&vT{Q0KqnC@}em+_sth8IMRze{uclr$=UwJQ*hr=OUa$ z6h#1pQ0mT|U!S;e{^C49Q51OZiK2*Ft;X8g+UJtq7zLbs@X^h4A>aT6NQN+Mx{1v+ zdHK`^7tUYA%<$ghy$8U|XpA>b0B#g85J?IZtQm$thIY20$S6(>fXcG$1BVb0asaWU zI#3%zofte?McKeipaA=Ogb?~b-h1*q@4xpVURrwfg-dV0|1lPD&JjY0Zhe2-@9yp; zst8l|1}ulk7_&{%G$qe-(ljN@GD4{KZ*D%QfVch*$KJej_1R#9YQhfQov_JS!sHY- zKE>JQU7T}B>g${&36hwbd%OZ39~;NaV90egr~nui42lf040HR05UAJdm>JGFy!SZg zNRkBC-F;wqHjGCl15(AjlR^|D3)oP1W=5Xpgb*r%P6vU9e-on%)^~-0_t@SJmS?2@ zq>Ktl^yU|rhtf7+iveM_g z%+1X)8Qx(c$(f$?gz?G|aU65}*jZJ;fvVNf%^fb-?M6-z9FjwV>WC3>5^n>S)2E-t(%-OFtYOryM3Qi>VkuX0^3*(Z zenwWH5O7v~BUj>FwJT2d@9nI9_~IYldm-U~!j}_Smd%)1*W(6Gmc-Fko)yeLb@FJr zmqN(t9lHjY#AA)wCE&HV-EM!^Zns|nT#xIQ*RI_faoXyW%a`A3wOX6&>+3g_=3sfx zK3%!gA4zOx4~~No`nf*up2m`f9F+I_t^8@$!LfKCovdMa5GDnK?E6) zfRkj1~96oViMnZa>Btgfn8@4Be| znoLJ86jk+Zy>rh!_tcY_F&vT{Q0KqnC@}em+_sth8IMRze{uclr$=UwJQ*hr=OUa$ z6h#1pQ0mT|U!S;e{^C49Q51OZiK2*Ft;X8g+UJtq7zLbs@X^h4A>aT6NQN+Mx{1v+ zdHK`^7tUYA%<$ghy$8U|XpA>b0B#g85J?IZtQm$thIY20$S6(>fXcG$1BVb0asaWU zI#3%zofte?McKeipaA=Ogb?~b-h1*q@4xpVURrwfg-dV0|1lPD&JjY0Zhe2-@9yp; zst8l|1}ulk7_&{%G$qe-(ljN@GD4{KZ*D%QfVch*$KJej_1R#9YQhfQov_JS!sHY- zKE>JQU7T}B>g${&36hwbd%OZ39~;NaV90egr~nui42lf040HR05UAJdm>JGFy!SZg zNRkBC-F;wqHjGCl15(AjlR^|D3)oP1W=5Xpgb*r%P6vU9e-on%)^~-0_t@SJmS?2@ zq>Ktl^yU|rhtf7+iveM_g z%+1X)8Qx(c$(f$?gz?G|aU65}*jZJ;fvVNf%^fb-?M6-z9FjwV>WC3>5^n>S)2E-t(%-OFtYOryM3Qi>VkuX0^3*(Z zenwWH5O7v~BUj>FwJT2d@9nI9_~IYldm-U~!j}_Smd%)1*W(6Gmc-Fko)yeLb@FJr zmqN(t9lHjY#AA)wCE&HV-EM!^Zns|nT#xIQ*RI_faoXyW%a`A3wOX6&>+3g_=3sfx zK3%!gA4zOx4~~No`nf*up2m`^*YUFlX|^QqtQreonv)%C4o1$w|cI;`1*yd?Z3gm35X~n zmhLe`3?aP-xcJ;SAMdnAvrBRYj z0W2vyh9`((5 zbpYShku&nx5RY_jA_BEqjdr|Xn|-WE$uEWEPUJLYAAaVtx_S9-gz@y6Oji1b8~aDzP?^_ z)!sc&)6>&G&dkhg0CYLO4_u|9Di1I*F)`BH+k5eubLT#B=g(&bN2X+WU|{9*n>Q7p zQ#@*^e|wHAMP5XDW@l%=&-1+Rr@MC%k$uF2xsEZ$v9YndgA9}MkI)vQ9ZOz#Gusl8 zGeCCK=O0lSaN&o)KDcd!LyPZ!cH=UjzEsutpU@;w^*YUFlX|^QqtQreonv)%C4o1$w|cI;`1*yd?Z3gm35X~n zmhLe`3?aP-xcJ;SAMdnAvrBRYj z0W2vyh9`((5 zbpYShku&nx5RY_jA_BEqjdr|Xn|-WE$uEWEPUJLYAAaVtx_S9-gz@y6Oji1b8~aDzP?^_ z)!sc&)6>&G&dkhg0CYLO4_u|9Di1I*F)`BH+k5eubLT#B=g(&bN2X+WU|{9*n>Q7p zQ#@*^e|wHAMP5XDW@l%=&-1+Rr@MC%k$uF2xsEZ$v9YndgA9}MkI)vQ9ZOz#Gusl8 zGeCCK=O0lSaN&o)KDcd!LyPZ!cH=UjzEsutpU@;w zSW&1TxTzE&i_k?0>Y`-r%8d&})J=rLeZq+LR2IlCQU<3-+TAYIWF#f zAusQ};DO=Jy)*MWXZ~mATro2anus`{kE3mL_=PZq6FEGvbtn7H%>E8t7CrjqoiE-W z9T|PhdyjJtCxY`HfSBiU@7}ND?@iyB%B9I6_A|KqQ8XJ;1?Ff(FQObcKhGd5ON z`K1SNeSNI}KiJ)=zWDMR=XZAh1p_A_qKH`0#}F}u;yb{_=PvY&^u&qr0$drWkmVb+ zcBfhb1yrnXVuqAX%;J$!2!(`g$!qDV24WPE3P|A*5yMn5J3`~~Xa@j005vnLgrbIO zj#-99E&3XHxc9Ipx0Uk{%Qq`qjFA{48Y5W5EH7MJ1XDm+U0dr3ZY9q_j+)VEG^p3> zG@DIgjKwZmQxFhWG=#CSv7X?G@rhE32&zhqvCA}9;-!QG)=?hXEF@tIAnY}o93L9O zxlm?l|52bt@LmWWd=MOP=FC%U`S0;o)Q^4NK>tAh9zYoAOPM@5&LjN~5P>8~IEWXF zGz}z)BTW;uvdR-rPO%(@$gJ6RLq%l2;Dzn&-Td0?ulm_n2rxT4J2^Z&eDUeCXFqV~&Uu5br(|MmZ1uBSw-jK|SIDh*`3xdbU07K7Ax+bf zpO%*qkv8JtUssGV&dkiD$9#oIr*pGHi(qCuB614wJ>9pP2hM-B_UYYdo#2l?`S3EJ zp^U2WKcN7K$hW80pP7y^wgnSHu!-?+em1lCAEKC;5z$mBi~s-t07*qoM6N<$f~XI= A_W%F@ diff --git a/images/22x22/status/high-signal.png b/images/22x22/status/high-signal.png deleted file mode 100644 index 6223add7aded22c9a30d0dd5a62cc247e2343254..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmV;@11 zSW&1TxTzE&i_k?0>Y`-r%8d&})J=rLeZq+LR2IlCQU<3-+TAYIWF#f zAusQ};DO=Jy)*MWXZ~mATro2anus`{kE3mL_=PZq6FEGvbtn7H%>E8t7CrjqoiE-W z9T|PhdyjJtCxY`HfSBiU@7}ND?@iyB%B9I6_A|KqQ8XJ;1?Ff(FQObcKhGd5ON z`K1SNeSNI}KiJ)=zWDMR=XZAh1p_A_qKH`0#}F}u;yb{_=PvY&^u&qr0$drWkmVb+ zcBfhb1yrnXVuqAX%;J$!2!(`g$!qDV24WPE3P|A*5yMn5J3`~~Xa@j005vnLgrbIO zj#-99E&3XHxc9Ipx0Uk{%Qq`qjFA{48Y5W5EH7MJ1XDm+U0dr3ZY9q_j+)VEG^p3> zG@DIgjKwZmQxFhWG=#CSv7X?G@rhE32&zhqvCA}9;-!QG)=?hXEF@tIAnY}o93L9O zxlm?l|52bt@LmWWd=MOP=FC%U`S0;o)Q^4NK>tAh9zYoAOPM@5&LjN~5P>8~IEWXF zGz}z)BTW;uvdR-rPO%(@$gJ6RLq%l2;Dzn&-Td0?ulm_n2rxT4J2^Z&eDUeCXFqV~&Uu5br(|MmZ1uBSw-jK|SIDh*`3xdbU07K7Ax+bf zpO%*qkv8JtUssGV&dkiD$9#oIr*pGHi(qCuB614wJ>9pP2hM-B_UYYdo#2l?`S3EJ zp^U2WKcN7K$hW80pP7y^wgnSHu!-?+em1lCAEKC;5z$mBi~s-t07*qoM6N<$f~XI= A_W%F@ diff --git a/images/22x22/status/idle-bad-signal-lock.png b/images/22x22/status/idle-bad-signal-lock.png deleted file mode 100644 index 0b5ff2f3e0b4d3e91c9be1ae8be163b9dd9f7784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcmV+$1mydPP)<2u#W{zn`rrTf zD{O6TBhsl#F)e{HwOMO4D2jqst3^>1?CtH9)jG%OYNG^iZf~8Qy!HOot?eB!Z~`KV zh?Qdu5kn~71KfD?8qT?{WHCnaJV!(r8X7La{eAtk;~Je+s8&D$6)TgNAypEygsM`j z)i5)hbHo^N&XsUV2@f@|qpKQ-QC2D-Wky5{Q^iaV{nKi-==McqA8ZGpW` zwXvk-SQEu=(aTJgG*$CbNvnXReNswjN?-}ISf;iFrhw8|U8N`rn$0FLMnVXrlqiZ~ zzj+W*vu42!Rj+KF`+y{O(?hb7#-uoUgjny_IMYvP|$9WL|K<*x1WmO%GP?oTIO= zZx_J#)dC~W4{_qTO++Bia}MGKBLq*LJ3`3O{su3;G+HKg4(~mx+67mpz;A49$2;%6 z`)7<%kg}pyJDzMdo98+W#SENSE#&L1y*8I#7#-Z%*+Esir(35#7cSJ_0qzJ;2QF5E z0`TqP;v?_kYVUtS%bG-fW_tQnP3cfE-g_I|*!a!N(!Zke V`jvzgn`;07002ovPDHLkV1jbs@Z|si diff --git a/images/22x22/status/idle-bad-signal.png b/images/22x22/status/idle-bad-signal.png deleted file mode 100644 index 0b5ff2f3e0b4d3e91c9be1ae8be163b9dd9f7784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcmV+$1mydPP)<2u#W{zn`rrTf zD{O6TBhsl#F)e{HwOMO4D2jqst3^>1?CtH9)jG%OYNG^iZf~8Qy!HOot?eB!Z~`KV zh?Qdu5kn~71KfD?8qT?{WHCnaJV!(r8X7La{eAtk;~Je+s8&D$6)TgNAypEygsM`j z)i5)hbHo^N&XsUV2@f@|qpKQ-QC2D-Wky5{Q^iaV{nKi-==McqA8ZGpW` zwXvk-SQEu=(aTJgG*$CbNvnXReNswjN?-}ISf;iFrhw8|U8N`rn$0FLMnVXrlqiZ~ zzj+W*vu42!Rj+KF`+y{O(?hb7#-uoUgjny_IMYvP|$9WL|K<*x1WmO%GP?oTIO= zZx_J#)dC~W4{_qTO++Bia}MGKBLq*LJ3`3O{su3;G+HKg4(~mx+67mpz;A49$2;%6 z`)7<%kg}pyJDzMdo98+W#SENSE#&L1y*8I#7#-Z%*+Esir(35#7cSJ_0qzJ;2QF5E z0`TqP;v?_kYVUtS%bG-fW_tQnP3cfE-g_I|*!a!N(!Zke V`jvzgn`;07002ovPDHLkV1jbs@Z|si diff --git a/images/22x22/status/idle-good-signal-lock.png b/images/22x22/status/idle-good-signal-lock.png deleted file mode 100644 index 9109295b1c5a6d92bbcf0431179707200bfddbfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1054 zcmV+(1mXLMP)^*YUFlX|^QqtQreonv)%C4o1$w|cI;`1*yd?Z3gm35X~n zmhLe`3?aP-xcJ;SAMdnAvrBRYj z0W2vyh9`((5 zbpYShku&nx5RY_jA_BEqjdr|Xn|-WE$uEWEPUJLYAAaVtx_S9-gz@y6Oji1b8~aDzP?^_ z)!sc&)6>&G&dkhg0CYLO4_u|9Di1I*F)`BH+k5eubLT#B=g(&bN2X+WU|{9*n>Q7p zQ#@*^e|wHAMP5XDW@l%=&-1+Rr@MC%k$uF2xsEZ$v9YndgA9}MkI)vQ9ZOz#Gusl8 zGeCCK=O0lSaN&o)KDcd!LyPZ!cH=UjzEsutpU@;w^*YUFlX|^QqtQreonv)%C4o1$w|cI;`1*yd?Z3gm35X~n zmhLe`3?aP-xcJ;SAMdnAvrBRYj z0W2vyh9`((5 zbpYShku&nx5RY_jA_BEqjdr|Xn|-WE$uEWEPUJLYAAaVtx_S9-gz@y6Oji1b8~aDzP?^_ z)!sc&)6>&G&dkhg0CYLO4_u|9Di1I*F)`BH+k5eubLT#B=g(&bN2X+WU|{9*n>Q7p zQ#@*^e|wHAMP5XDW@l%=&-1+Rr@MC%k$uF2xsEZ$v9YndgA9}MkI)vQ9ZOz#Gusl8 zGeCCK=O0lSaN&o)KDcd!LyPZ!cH=UjzEsutpU@;w zSW&1TxTzE&i_k?0>Y`-r%8d&})J=rLeZq+LR2IlCQU<3-+TAYIWF#f zAusQ};DO=Jy)*MWXZ~mATro2anus`{kE3mL_=PZq6FEGvbtn7H%>E8t7CrjqoiE-W z9T|PhdyjJtCxY`HfSBiU@7}ND?@iyB%B9I6_A|KqQ8XJ;1?Ff(FQObcKhGd5ON z`K1SNeSNI}KiJ)=zWDMR=XZAh1p_A_qKH`0#}F}u;yb{_=PvY&^u&qr0$drWkmVb+ zcBfhb1yrnXVuqAX%;J$!2!(`g$!qDV24WPE3P|A*5yMn5J3`~~Xa@j005vnLgrbIO zj#-99E&3XHxc9Ipx0Uk{%Qq`qjFA{48Y5W5EH7MJ1XDm+U0dr3ZY9q_j+)VEG^p3> zG@DIgjKwZmQxFhWG=#CSv7X?G@rhE32&zhqvCA}9;-!QG)=?hXEF@tIAnY}o93L9O zxlm?l|52bt@LmWWd=MOP=FC%U`S0;o)Q^4NK>tAh9zYoAOPM@5&LjN~5P>8~IEWXF zGz}z)BTW;uvdR-rPO%(@$gJ6RLq%l2;Dzn&-Td0?ulm_n2rxT4J2^Z&eDUeCXFqV~&Uu5br(|MmZ1uBSw-jK|SIDh*`3xdbU07K7Ax+bf zpO%*qkv8JtUssGV&dkiD$9#oIr*pGHi(qCuB614wJ>9pP2hM-B_UYYdo#2l?`S3EJ zp^U2WKcN7K$hW80pP7y^wgnSHu!-?+em1lCAEKC;5z$mBi~s-t07*qoM6N<$f~XI= A_W%F@ diff --git a/images/22x22/status/idle-high-signal.png b/images/22x22/status/idle-high-signal.png deleted file mode 100644 index 6223add7aded22c9a30d0dd5a62cc247e2343254..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmV;@11 zSW&1TxTzE&i_k?0>Y`-r%8d&})J=rLeZq+LR2IlCQU<3-+TAYIWF#f zAusQ};DO=Jy)*MWXZ~mATro2anus`{kE3mL_=PZq6FEGvbtn7H%>E8t7CrjqoiE-W z9T|PhdyjJtCxY`HfSBiU@7}ND?@iyB%B9I6_A|KqQ8XJ;1?Ff(FQObcKhGd5ON z`K1SNeSNI}KiJ)=zWDMR=XZAh1p_A_qKH`0#}F}u;yb{_=PvY&^u&qr0$drWkmVb+ zcBfhb1yrnXVuqAX%;J$!2!(`g$!qDV24WPE3P|A*5yMn5J3`~~Xa@j005vnLgrbIO zj#-99E&3XHxc9Ipx0Uk{%Qq`qjFA{48Y5W5EH7MJ1XDm+U0dr3ZY9q_j+)VEG^p3> zG@DIgjKwZmQxFhWG=#CSv7X?G@rhE32&zhqvCA}9;-!QG)=?hXEF@tIAnY}o93L9O zxlm?l|52bt@LmWWd=MOP=FC%U`S0;o)Q^4NK>tAh9zYoAOPM@5&LjN~5P>8~IEWXF zGz}z)BTW;uvdR-rPO%(@$gJ6RLq%l2;Dzn&-Td0?ulm_n2rxT4J2^Z&eDUeCXFqV~&Uu5br(|MmZ1uBSw-jK|SIDh*`3xdbU07K7Ax+bf zpO%*qkv8JtUssGV&dkiD$9#oIr*pGHi(qCuB614wJ>9pP2hM-B_UYYdo#2l?`S3EJ zp^U2WKcN7K$hW80pP7y^wgnSHu!-?+em1lCAEKC;5z$mBi~s-t07*qoM6N<$f~XI= A_W%F@ diff --git a/images/22x22/status/idle-low-signal-lock.png b/images/22x22/status/idle-low-signal-lock.png deleted file mode 100644 index c569e5cdd824f74e8c3d675bc52b3c78f660abaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1061 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 V^@Lnc*=GO%002ovPDHLkV1m>I@z?+W diff --git a/images/22x22/status/receiving-bad-signal.png b/images/22x22/status/receiving-bad-signal.png deleted file mode 100644 index 0d54c5d10520431631ff890b3e85893400d0ab76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcmV+$1mydPP)D!6iCElImnkc1d~ZIa&i?wdKs#l7z} z2`}P-%bojUKIc2%b7sWM*c&3^fCm2^W5Dns-&$t&mml!q`1e12cVq12*i@EfIOlL8 zxGV!8#VGghKNw$JxHt{a?RJSVl4Tho1g>Ad{6jFA{40A|MU@!@H}4FV(LL=X_c3{X%3Y5jwhZMx4q0i~4sU{%H8 z9Do;*1`zgepEd&nr1oD8oPmkK&Niyr2gMjE%d-F63%{`N&g}BXpL~uf&N)=o-&^}b zx3_l@>8Vmo6;&l^WT&-GQ52MANl_GZI-N?bb8Kv^SKx;`kB-e>_~6{5on0_+0wRit zRb#C3nd&{j`8Qw3Ifsb!ea`b75n+6Mq5=;O4bzRA^j4u-0|iv9N@9l8Nz4+eN~6)h z%y7;TW5hXE!Kv)qS3KL}sTh?~0jV+~Vwfssx^GTdmZ)kqU*rkc_CU=HtD&f&8Zql) zNvp9YipRyEW~!~Jis!IT? zJPaWqB7J{D2!s&udA?p5xbV`ymT zF@PUx1SX#y=g3nJ5rI6<*^3v95IlMA2q8y@*LnVh=_;vnc<)iwKDcfQe5(%Gfsph-DB>|eiRBb2# z->$6O@!lUf==i5sufDamw${FN>()=N&CK*W$;=QDM1&t7tajg?zi`x>*`|p64RGz+ zHQCzQ%3W{o9*Cu-rQa@JzT5&>Us=KGQ*B?o`bymuz}(#2{hOON6=3uBZL~hs27*Q8*z)r7uOWn!cUM;tk$uF2eVtNDv$L~-LqiO}o7p1~ zISpio|GY0U;N0CSSMCh5;)@$!%>(LdRh|C{tu%@J!s6n~n$kWo-g_HsweFc&`WKx# V^@Lnc*=GO%002ovPDHLkV1m>I@z?+W diff --git a/images/22x22/status/receiving-good-signal-lock.png b/images/22x22/status/receiving-good-signal-lock.png deleted file mode 100644 index 752c233d6f79a61a3e9b7ec07efc3bd3f859a218..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1055 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 diff --git a/images/22x22/status/receiving-low-signal.png b/images/22x22/status/receiving-low-signal.png deleted file mode 100644 index f0db6131a42a45f7fbd8afc5e23c12fbf37998ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1058 zcmV+-1l{|IP)GXM91MN)?bn}ptFT)8z`V+v56VdZekWtRVtMVW`=VP z?>)}B2q(&S!aVEIRE#*OfW(f77^aGuo_MD$OH?(!FLDgF9;lgNZ76D}ddyl_(DU^`^T4BK zU1v{U@pv^9#C3LOVq$`-zQft9WT@)VGcgfqnld}{V$3li<}ZZMXF1mvO5#TViyDd( zP=|<%K8OQ^G)wmY(xYa{$nY@ErEQnGUlA=rk_c%6Nh&zt{Q2jw;!jLVL={nurX>jj z0|Q3@=|ClCdS;R*o_vT1WLZWpUNG`JCCeOno}twpo_Tf-8owjfLR4{PhzR0BClsW$ zTHRl}`sRJ_y&!R-vgOY-8jX>Tp_qXatK`{U*=#ZU^xSx;7og>FngA1FbbM+VxSDQl zZT+;hwe@OSPyoKVb?bIIIQB@I-oJ6$11Em$}Z}Jyk0!E5EF+uGRoJY=D)~&$bl3l>#g*EKHA%j$VHL!iCS=#fynS-;_*E zOzeDl^QHpmVFS@t_v~~?QxO?lTU+}%&-1Zg@7_g3P7qJ$I)o7B=jU_kO)NAYU8^eA zkz!v&W`U&N`h6+^F4ewUy=^@ccj}9eKUoAcZBNyw_2WxKe!M?@?S&A+iDA+-wc(kM c?wDEl4>Q{WH>l&m@c;k-07*qoM6N<$g6Q+&oB#j- diff --git a/images/22x22/status/signal-100.png b/images/22x22/status/signal-100.png deleted file mode 100644 index 4aaba84388d27feaa56923b532690992bad9e94a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmV+m1N8ifP)UrPUAMb70oo&(uTTe)B!FJx-=KP-UDUKUp5J<~d+C*m}q`srO$ZbJEw&F>%&eGf3 zu2`h(2?a|i$UPg6-IqUn@jQBJnP;BsTwb~U>hEvL>*i{ZAR+rQCYdi$3sFNuY7+{w zC7*59Z5wr0AH_8SoCwqnKJ2cr_U_m9&mUN)UWT%rch2v={q-B~9n0O~!69HuzJw%G za3O!Pe;SGgb?eD!XR!6*8ka^V7(nh0RVWKMcem}w=UQWCuT!$=a`Ae#XfcODoMW}R z(&l@;_mM#VUcgL)a-*6Axe@Eh4vCjA zPax83cmfR#Ld^y2OjUyqu4rgz)SzUr2(qp_v`3u1P_>G+E>vocSK?#P$Y|hLTj{It zUgWVq*g5c(tx&y2wlYfN%Y!~N?(4%Kz>Am2R#%CWKKT28{R84L3~~ZRC^Y~8002ov JPDHLkV1fhgbPxal diff --git a/images/22x22/status/signal-25.png b/images/22x22/status/signal-25.png deleted file mode 100644 index 2e271abb904c8426b43427bbf006e125857dce15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 804 zcmV+<1Ka$GP)E+>YY1Q$f{Ex_ z6uWg*-XY@AU~u)<@!lkJj$0z~&bfm)j(?iX{&;jTn0YBllKY5wpsG*2zw9n8T-rs% z003xaWM&SLk_&c>0sw%BXGAn3q7o6+%t%!uGg}mq>zz&t=fYW*-E{130m8Aga&UBX zGTC_iWc#&|)QEUQMB~%v(;5sA4D98W836#D3&(MM*E#nU0`4+%*6a5+*49?W003qN zZQCw}5I&MtX3HzX9V8SaYMJmPNs?d6vfMZqW@dHH0W(*TMaP|P{nxxKJt6=i0uhx& z^bCncMN!lMKmdkjz^Wl-=Dy3m|Ka0^Kzv#HCeP~|4zKIRkfo*-|6j%kvg6^*H}p+#o8SXFX8O;dE8KY#zugtt&9I zeh6Vz+V;c2;L4A$U0#WZ&k%7p&-2RA5D^uTnkb4+n#S+DYWp{%vIO&{0ky3mBEd~Fi9{(rkS*vkHq;% z_r2ZseAKCO5tS@vGh`*?h1xz8#Y+*r$^SO|y1<>=cW~q8jjvqgJ}X7HN+}x;H-CTV zUl-0I)SOwOs;V476`aG``Y4|Y-rT(J0Jow=B*s+6e{84cyZfZ2kUBUKT~UpfnaEBB z1GqdG_}iv#3vlBLqqiPBo$TCq-emyEd%rgr41S)sk2g*Qd*?=VUEgBny;}9xn1+6N zxV+8Gg^1Y9V5Xjd`cyE3g@}lmrvN$t3uaa`gQ`|$wkjf5o28mgg#Y~h>+2r+iPLn< zi&>l6!=vf5$&de*2tZ)w=MI=m4_^c_Vlpx!Vj}|);Y7Fz2cLRpUqDkwGCzRMpM-(G zo0-kbDCfLdO8GEn=`OC1wiql7WCuQ|>-yee-v4qUTy;C*SP2pZu@!VjxjvqnFcUKq zfCYek0OPLh0uh18*o<7!(s+ku|7hcfYu-7L(5BSQ!bdkhpV*hTR9T60gvPEe{p_5E z-o0{)2;eX8+|zE_MpJXfR+;H)-^MYgUd;-T zWM>i@wK6Pj;9lwTf|>V;d3!pW^~T1`tjvg2RUM?1c05h)nWT@%Y?PE;})6%=EU&I?G9Vgy^eT!6P=A@+6>3ky3NZLG8uY?L5^h(w|$Mlqrz4io3h z?7iR5=fgs=nr28PU}PjraEU-U%UGRkNQ=_4;==Zrtqd7uMs5 z)oO*l?*lRS90KoNxX{i7e{}1EplsWXicUV-e!465$1JJ_4i-#gOU*6<@H4>$DC7Z@| zKKd&i$4{b8Xj)JxA!3xZ9hK2e?4N1510V+&M0_edhV@Gbctc30!tt>7>8>vH>)A#x znov=e#nU5R{mEcqlPD;Y3I#q~E|=fLdH&*5_#O@fFf=qtm}R7OYoxxRn@BPvBU$#S zQKyzaVZ2SIyPXxN-7%8Qb(Q2?u3C zlo1)pqE9yIi6lz~b29P{?mLpwrD3(A?w8dM?^~yy7x`q`INpEr%h%pLX#3gO(NHP+ z%(0E^jr{5UIVc3`)|1i3!dB;q`Xvz=6O@Q&X5JT(pSwGD^97MwtCum_xRt$}&zj9) zXkJ6HGN|}=?|mT9zb{~>tW~JQ>{&nn5gQYgzV8oft-p77()V6Dp?V3?<{{PCJ+pWo z;tdT|E5|zXG=fNX@e~AtM&b?C3l+^Cjfjben3w}G55sb~*`2e;t$L=2 U8y-D4kpKVy07*qoM6N<$f|rkN`~Uy| diff --git a/images/22x22/status/transmitting-bad-signal-lock.png b/images/22x22/status/transmitting-bad-signal-lock.png deleted file mode 100644 index 41878ae9db706e3586e4102446b355720cb92329..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmVnLZorF)AAY=XZR+UM@gzx5Ra68` z5&(kta_`>#>BS2dPXe^tZM^p+NkW!otgWqmDsODJ>poTR;yuV zs4CujRJDXtf(91PIw!%fuI=X2vMpl3te2&kQ4|GLT||1|ezV=8N$0u6h+*J8=6A4K zjr?go$WJGlPVquXtAN(IF7FL0cLp(lFWB7LBF}T0%_iP^vMeKnK%VEl;z6$m5B}cl z^Dfl{^?IEoNl4Qa=Nz?K4d)zbnld{x+W|-V93G}Fyr(S75Roe1EX&BU440-20M{(q zok4m?ZvBTKz}(z;m1)0oRb_a1_$h!J%2In~xJJ?{!K&RQ_m-ZhA}S=RSeo1#>U3aZ_Lf@>mU(9MEL3c zo%Xxu-Wzddwk;xm1FWvDN~6(8RU{sS0xT^p{kFWkyaTYgzK->61C?HTwTuE_VPRo* za&q#W7f+q~T2G%&3zkQ+ee=8P*CW98&6~u|t~L-XBI7G7E5Bx0cJ%h0JBY|W z;=wiyA%yw)`HVv)2H?!>iHMv4lEVk@Qv$qv`^uGDgQEEI+BfHb=sK=i{}Wnz68VM2 o#aCho`^-4!Y-(rccQXtB08xR}a85y36951J07*qoM6N<$g2r#$3;+NC diff --git a/images/22x22/status/transmitting-bad-signal.png b/images/22x22/status/transmitting-bad-signal.png deleted file mode 100644 index 41878ae9db706e3586e4102446b355720cb92329..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmVnLZorF)AAY=XZR+UM@gzx5Ra68` z5&(kta_`>#>BS2dPXe^tZM^p+NkW!otgWqmDsODJ>poTR;yuV zs4CujRJDXtf(91PIw!%fuI=X2vMpl3te2&kQ4|GLT||1|ezV=8N$0u6h+*J8=6A4K zjr?go$WJGlPVquXtAN(IF7FL0cLp(lFWB7LBF}T0%_iP^vMeKnK%VEl;z6$m5B}cl z^Dfl{^?IEoNl4Qa=Nz?K4d)zbnld{x+W|-V93G}Fyr(S75Roe1EX&BU440-20M{(q zok4m?ZvBTKz}(z;m1)0oRb_a1_$h!J%2In~xJJ?{!K&RQ_m-ZhA}S=RSeo1#>U3aZ_Lf@>mU(9MEL3c zo%Xxu-Wzddwk;xm1FWvDN~6(8RU{sS0xT^p{kFWkyaTYgzK->61C?HTwTuE_VPRo* za&q#W7f+q~T2G%&3zkQ+ee=8P*CW98&6~u|t~L-XBI7G7E5Bx0cJ%h0JBY|W z;=wiyA%yw)`HVv)2H?!>iHMv4lEVk@Qv$qv`^uGDgQEEI+BfHb=sK=i{}Wnz68VM2 o#aCho`^-4!Y-(rccQXtB08xR}a85y36951J07*qoM6N<$g2r#$3;+NC diff --git a/images/22x22/status/transmitting-good-signal-lock.png b/images/22x22/status/transmitting-good-signal-lock.png deleted file mode 100644 index baa6c1c4607c6a5bd8c35753a0581957512096f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1032 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 P00000NkvXXu0mjfa-+5V diff --git a/images/22x22/status/transmitting-high-signal.png b/images/22x22/status/transmitting-high-signal.png deleted file mode 100644 index 9907e5ded3280e3b5b67f2e743b0652de8fd1669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 941 zcmV;e15*5nP)GK~y-6jg(DjTvZguf9KviZ<=Oi+9nw~soKQSQfkHQ<3cwo zgrLeZq+s-jI&C;bRXX6C(nkBj$a zI+K}KJn$axgZsPx^FQYvQB`_FL<~^m=`k_(rkloy?ESHMEB;ee|8YYW9r)(f&8rjR z6VF;}F~(p-FxCR#lSJ;^`J?v9%%$mA+XIWwzqoKsMBW_+E_`_Dqcaa4JSrIxtWm5} zoPf1p44irW6_^>GO1V;=0?aTlB7&+CfRHF5D8Yj9ijhDZCwUfOFb2ShND+v7{*^)q z^m-pB5P~A&F$6*gx!_K?bLZZA`MvpzAENWGYjrA1Vcob^ye{l1KBzcmapdipKxe+KIB9tmE|kkXYM&nTkkv;JMxHwZ|7Py!Ka; zB!UPAXvfKDv)Me?{ymrmFQnp#X@;4^tbbXT0})Vw`h2S^NGsRrUV?$-i_0h8Dl7 P00000NkvXXu0mjfa-+5V diff --git a/images/22x22/status/transmitting-low-signal-lock.png b/images/22x22/status/transmitting-low-signal-lock.png deleted file mode 100644 index a1a02effba42c402c97d5bb18b86e79ed8121753..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1032 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 Hu0mjfDi5AY diff --git a/images/24x24/status/signal-75.png b/images/24x24/status/signal-75.png deleted file mode 100644 index ba46fb391e909dad5476288621c580cd8faac4bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmV-q1DpJbP);6Opak&b*32Mz@h90-Dr6hvCvM3k6rX$6IJCzVvy zz2}~L&i-+r;wXbaK#*P!u)on-8+ereedwYNeS7=%d@`AQ<-M;8^MNpb{nOswLAWTO zZ5m9cQ-rDt0KD^F7e`0&!T>QP5pm>P&CEAM^?B$0*13U?_CJ_w(6^Y%YOuIk+j6;j zaC&dMy16&FUcL9xd;e<);fuTL^>^n6R#-mnYP`Y3Sl|1Oh;6R+-tfsx06pX`3PV@`C`L3-|V8Bh52 z7vJqhiB@<-aib+0@{$(oK~oQdGgU7lEi=zWON#&{a~!Kz=>mu(#O+&aq`*=Z||OzhY)2~P^QV^ zwOq-~MMzO5XdX9OWs04kgdFG#$@y=XTS>tP(UV?{`bLyN+&bh;;Y3`(9*bN8# zL(Q5?u}lg5B+9S}0Hcl&Dpa&osyg#pUu`k<|IU}HILSp*5|cFy1i&1T8NlBAD9r2d zTe?TtC08tm!D2g>)ZivaNg&3?C?&fgMb|GA^|FIo5D1vW#F&^E4rCyJhzLZUfXaZ4 zwr#h6Ke^hq^1F9BeVI%E0000JC9^n6@}M6=iFOW z{hGl>YLJGUU%)RQAazcNVka#43g#-=^9)xGiFkRJE_nyao zEP^qzC4vc>iRdMr_t6rwlGpvghkyLwOgHT(b$k0gN8CDf=^Xop<)5eJ zxR%!qP>R3`z!?xg2m}zrvz@xv<+TGiLo76RZwN+l*w$zdpIL%j^0ArQ%^lR>v6uMo(02GAG??-(-Z zP!0~QSnClljvmq`-NC|hiwcs(>APSQVct!#?XLv*@T2!1OUA4mH_CBnUT+pZ?U%#x zqkf}5)o2(|F*wAiP>j^Lh;w#u=vrE z0uB!i6T>JC>zSILfhh?CEmkzFndIcOGo$B3c`$MQdY&eZ7-*<)gcybl_EgdHi1z9k zSmFpq&|$9Vt+F1ExOvfIJTErIn{kcRPiR=(V0}bi8b(BPd8&L4o}Jsf-tBk zM+#_hL@B@i-LKx5HyfI&cU890;&{CA&!0TAx8MGu9qj=~P$zM@o@A41 ztXN|~#R(2igClpYbC0%@$kSDM2tg8&1du7Slo^{XNG6o2JiYkzJ=utx>lo3O&URSd zJRX;;<@W#{AAJvpeUV{H%3dm$ZSpcj2rigmR47$~o`PP2oP~mnX|u~)$d^}FAP@vZ zAPJCEo=s1_&m8dNQ0lRx{%eWTLC?nyz~fur!>KS>7&RK3Exc_osaw0?CB6+oLP8P( zDS^45%rmxSBWK%E3Ip_)JA)qdp`x{Ny=|ziJn>IFVBxfG&^FLw;c1dc`DM-(AqIyR zk06M%%xRvv{n}-En7*=-2t<@ujSkfm~w5lw<2ijf9; zX>6E*0ssMry$lc)BL;^xX+xy9V31<)mkvq5Q_wTONhC#1c}|i+gg6WYQ;-FaO+h)I zWiI799)-!Ehf%39qI-=croJh_UvTY@=%NTl_OMBP>^j?A#`gNm9;B;u$*u3$a)pPB zhiB!OMzk{P`MIRTD|=Y1=_*S-D?)S3D9d086900000NkvXX Hu0mjffiF?0 diff --git a/images/32x32/status/signal-25.png b/images/32x32/status/signal-25.png deleted file mode 100644 index d9c3b01bac6c7d68296fb23edc3989d049b47711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1323 zcmV+`1=RY9P)bUD89mR;-22}9 ze%W!FxHJ|JKDsF^D%kTA_yeriAR+z$D!=j^aoJN0$3mwno>28sE*uNN17Jl8NV$n)TR`^J>x}&*A=Q-!h0OvTz|2yPm|KQrSe|D>?db`)F ze`scVIqN}6>0XTS=B>@!C*frisHz&>Zq31<50Vg(C?Zd~-TMB)!J|=l`4SVL1yu#f z%FNbO_3C^+U(|Jd_(BN${&#P?o&7zG9v$)1qXnwk;nL-G`Q@*EZUkVYBLR}Z%xW`R zHM1)r`0BX{e0+1WFJ6B9=J(%Z&UuovPGXEtPR1ukzj^Do$HSH3D8(3^699hdz27If zRhH#HHaE8(KR1D_d3D$y{GuodG2-`Z0m}ONE7u`%T5aY+RWDLx<39w0@ttq>klCm&QwQP^I>e`gUMvJyR)-<|KQ-!4UzxpG6RsE z^NFSu5sJvdi9oy`d+&FPqWGjNi}$y-w!hefD=Whv)O9^1`HY2sldMTzG_$WQ7K`t#tPYBejo0ojzk~eja1Wqtnxr2ZKmuk~kz7;NueWU*2ZR1m=HjDAa$z(E|&Tj(v>rw&mRJ+fu zGx^UFNj{BPjO|x@z3z^PfS@e52>?$rknD({48`8=k30=7D;VPhO><<^$+#C&{R{zh z&b0u>-uwMdr?WMg%yvejLpz(2nFW%ys$MX&D=DS#^m^T?IBz17mQ_3lF!J7ScRHQF zkH;s6LGRvGs2X!_5mSSvF`G>b6Y-zr$}E^!&&)2F*|$nw&Ml0{@D zB9BSlD~j;pWHK3X4GRMN?pM!dRC6855dwt`(7~ zh>VW;3S0bcrkApoO)x)L6-ZV&be%+8aSJYEfzvEK}wEo z8_+bMoF+sBaL(DXVyDizqpIrsr)}cF@!>H6fpbor6Gx&X*#)?ob9%Mg?>!I^h`1o) zmhS2$%IwNTZIIcZ2at+j3Y z-LecHeEaop{5oglbULMTzR;|zS@YGD@~~-}*L&US9l}0XEao0C{x#pgK3e*s>CN)I{EDIfp<002ovPDHLkV1h{+k7fV> diff --git a/images/32x32/status/signal-50.png b/images/32x32/status/signal-50.png deleted file mode 100644 index b040f0d3a08f32f52923947f29394a41f7845fd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1306 zcmV+#1?BpQP)%Z^<~6^8#+RePVk z&pxMbaiuM{*eIyNe2QXgPGN4wqs_8A^7Tr z0dC&-U?yI^_swsAi<~4cz`ftNpfapSK79{+H5uR@Hxyl08m8Kd*1^%18`JTlbf66dO=eMvNR*itWni3 z=A3IYJE*7i>2m=-`Ry;R7tTs*K4Th|7~3=J*Nd}N`@!j=|JDESG6RsE^U2Hz5sFCf zL?GTTz4!krisIvX%ftj4|%dx94wG)#R;bh6IrOuRHKu0FDcQN-(R7!{Fj(?T3@oVx5kqD@`D9 z&e40{dG8+qxFaHeX`1Huzx&PgI1JJAX`d(n9DtyvrE{(f@4xf*URh09vJ%Dl;`lhZb0|*d-1k9`= zxu>dM8OJd;Tg^$h(%$*$Bs#SeBh%0#bxY`CeOUH409;3R3bPDB7R2PBLy%!z(I$lm z|MQ?a^4XfjIDUEBO#kVe0H9n{UI2KKf#k$N%FwLtes|&x)C{C?Ex9{!!(wTJ)c~$@ za{_7tEg5n&No{7g9L&mIFyTdhF|$CjR@GfIJ4`8kW7^ak5oZud=ODfV@Ys8QXEK?* zyIid=dCK#G7xfEK7m(oJ1alw`A;!=8IOP$F4GS`m3d z^3za+Kd;uC$7UvS?!y-aAVtJPL}`|TJ^Tc!J*etLM=xVnq_JgW<)4|&`F;zS!JL@$ zNXFjlnwj{_hzyYA90mZZ5Wava&VeJsuQJug!C(el@QIebz+{rn8p_w)JAOeUBBJScpz-==->^l4U z?%vLE=(b<8(t4U^Qj;+aig9CYt^;rj-S%rNm;qI9mJ8;wW*W*4&B0RUuFT5KW<%$E zp;>pb=Bqj7tzjI#R!^&68|+Vg-+92GStmK`D>)~hv(ATMSY7^#FLkMZ12ySk-nulK Q>i_@%07*qoM6N<$f_cksj{pDw diff --git a/images/32x32/status/signal-75.png b/images/32x32/status/signal-75.png deleted file mode 100644 index 537ed8c4c838d050f9591ece9384012f71ead42b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1274 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 diff --git a/images/36x36/status/signal-50.png b/images/36x36/status/signal-50.png deleted file mode 100644 index 3220899811a3eb79c618628bab075260fb48440a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1462 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 diff --git a/images/48x48/status/signal-100.png b/images/48x48/status/signal-100.png deleted file mode 100644 index bfd17d87637d1f22b9d55521e994ec42f3f80c1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2004 zcmV;_2P^oAP)?|Lwy@G4AhselB3M`n{s`N2krZkn*s6sQLGUGoMvQs6$$R&n zv)5YlV_58S&x?tIH<0HO?$~TN#oA}DF+awbdjU7N!3}P3gB$!GL!QP>z4Xe9FN}G4 zxt&~WNc2FAWHg5_M%x+3<>2zD?HcOSNMNc3u~EpZ5MD)^NvNgB;^1Y9pIdZ!DhVV5 zkuIJlAS96pxHwD=qc}!!vFh}vlz>13S&RlGl*k&0O(2sbK~a@jr`*I-Nr0J}j1p-8 zp$SgOlw=kHv!tF**xYrdJ(UCko=$V)sGwvbERiF`o6{GQzUycg4LzR-fuH^1#V=## zX9Llb;ZCtE4Lt{H1zJD`z{5634DT$=Ra{v@cq=X!rn4>tX25k!3 zlOXVUZFQfR0wEb(HAVt1CPN1r7TIB+7l~O50Az+ZT`Y|RkVqt5jIIXLLDM0omiFQM zz$frI8V8wyL`pJiBIiU%ASl841a`Whf5$4k_d4+4TBwxjXNxH$%$vHk%1Z+7}=pzC5U7q8JfsKViM}CS^U}r ze*W8+egc(`k+JuT7PQ6F7xS?n(ULew72p0f!$NGH^8( z7={|H7_A6Q03c{#9O1MgkVr-ZVz_uWj%Mgf!*c1c>-)f)AN}iBbfaH@uqSf_VsY_H zm+@$@Kitdid|7s{9j0ZYe_0imv0gTvus9BMQjuoCp^6Buj&0fL!` z2>5XLGGts1E*E>*J?v|+m6B0))pBwP$$483-?x?r~%(Kjkp9uru5z+gzMn~AlF z#n?+{*Ot9*;qv|uMmby%5rI%dAR-VI==Ga;i5;K>g|eDa)Sz!1mWIJ#6oj zXG6;cz7mjJ+f-Kt>e|_=Wv?TLu1}~4*0BNt5sC`66x0m}0iZ&yf$;jv-@p8gX*+o^ zBh$^(&1p7bj2^A;{jy&?xM<_DzxLg)|8QyCgOLXUsfnC|tG+v}1Y?U7D>7{#kH>3M z8pkT52c21+b%?XWIpB02_Nb|zV%a`1xb!%EJ0tKzBAf| zu|I5FE)4zk+~kh|{CS@{Bm$IVA|vSL@L?RwVB0U)FA?#^-j|E_mV=0hQWan=QV3#R zcPOP|gIjv{3;>8sf?R8eBp4~{817=jX}zN_LC^Ze<}XAg2udQSWY7R5Fsd_stPLzkQ5NAsIk#`K17)W6F>n; z2$^J3(t}|x)(6^>NY;mT&O{!}Iv6Vf7zPHLEZ7T7r24d$106xXBCLtfWLAJPC@3si zSZ{CTbbjBbB1sC9NDG9!ST~H`(H7%)RARpPPX|A8tS13*Y-H5)cp!-&j}v0lfKN`_ z4h}Xfb@I*a4Y%bON5~pZh)AjmSd@j8%)~|t^kmkP>A3NCaR5OGNir#nMEF{UV>pLj zS5)d-;~((Skw_+UH4I*5prc`jYTKCYH2)=e&o(x~TYV^?~ mZ;rQbaDyA%;08DNU*ex*B{IYPDI7)s0000j diff --git a/images/48x48/status/signal-25.png b/images/48x48/status/signal-25.png deleted file mode 100644 index e698b2a22c9bc842fa76cbfc9a77edd8618382e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1841 zcmV-12hRA3P)300QiEz1w#RY84s49BU`rAdiU!- z&e?kr=(f>lWK(h=L{+b@=3oP(|47rMjx^w4G-|zME-xfu$ zZ)RgN8=LYdrnHw*+G(2R#cW!B`S|hEZn%mB@;qlz6dVltLQ((_KqG<)AiDrIvn+hR zy|a^ttDPN0O8@|bgaGsae2gg*5q~8KIEWV@kZ>eDfShFC%+^S%nTe|UmE~nzNdg9X zBReEPGBdNn%$%9!W;RgObydCHEAr|}5+INO)FKj`b5TU5&bcF!`)0P|z27pkr)61Q zP6Yn)>0f`)?Pl*AS*lv2s&z`KiH%k<)zxfT&W?^o<#0G0ef05%J0MI%l86vM5|IkP z7{D%oO%Zt*Lip$Y{^8{mah`X7)+_QK12Q6cY-R@}_f&05H9fDZ`f&*1$Pco=#=DiD-LBMso9prfq=bUQ~A#-I#?^m>1UtaUB2j_Uj_k^ zMv^eIU}gnLGc!lBr>fsj)!Vb#?0YwEto{8e5&$3|iPLESAdu{|EwTWx6oQwp4+@;; z5&;+h6_MnnFiR77w}$s{5TfC|9OIX8_-yX~VMKz8E33~m3Pr(jQ2ms3jX zS(cR-Ch*B8cYf)dyKZJvQ_j><8JjeVO`OzCJuAz4Iv$UYCzHv;k3Rlz>wq3CUvs`v6{w$R^20&bfOV z8xKc!{`lwOH5L83$h?9YNx(!vK<0TL+h|PzjGS`^Rb9RHG%98mNOl1XNJcw>H?zEx zW$#?SzWTSb2Pf%Cc1bRgyw?7Xs_N>x?)3-#XP4Q9q%{>!GUG|n6{@;S+DL@qtm-Z4 z)A_uls@GNZo2vSq!Jz-UOCca4YzuG-;1IwI0AB)lbT&bhiB z3HAYOlYAy3j{w~FZv3y!&F9^V6b$*61W3;FR?b+xfG6J~uif^@xhb5?IsiZ;k!9g) z+hV&9%>ColC;_13z0cmd2Ii>)pdh(Ia^1`tGm9bf{gsuKjWUt1ayAK4C zz4jeuW?oebGre~0+KPpL{QeI=&9jhbRMQkKrO2j<8e^lgvQCq6y*HUvlNg`;uPOv_1Y5vFhT*T+I^rQIdRS%k{o*PUy|JH zbh5{j$;5@uvrPseKnm0{CL=5nbptdtP?sS_8!5!UM$yymY64Lj&5Y;GLY`#D%z7kM zRcU5ErPNc^BJbtH`BEkVZEHkZv1R~9-uqnuTOovpqtT=r;?V(N1|%bBWK@C)nAKoi z3#zF^agtni){N#pP?*^@l9ib?s;bVr{$Mb8aLz0=ci2M!yWaa3BsW6{k77&@jt-B@ z^YuB^B-%nYGw+=Epu;@@jA+!+)IlvErHoCJvx!7C3#ro?Fz@*@MeN#rH77Y}4<-!rZ{0dSOM*|4sg?W(GJ7xsZ>xC>ubC;n|FPz7TIVg#!SGMyskxyGWf z)6%pnU)jznLjcc7J^^rlcewXrbUYgW7ZZH-X~ppJ7WZs{DS;ncs=kE(4oa_Ta0wkpM zcc?02Y!G9Oswy#?HBdd&ritf_#i!Nut+Qv&IWJDWc7xfD90dS1Gq$_!lB%v&b#-fX zZS{+GAILx~k#uI(Yp+y#X0~Q#@2lzus`|tC-uqS^^wup(N~9T>5~vEQ3R7~{G@fM{ z>bzKPmiig)-o<1xqpC_f(>PQ1lIp5z`nGENplQ-%I-S0}dGnoL19$*{)9KVy(}_-M zLCp%DTuyakN-HtOn{{2^?u2jv0A*DZ0wv6=s;QEu1~r9h@-e24s^;U-BwJi>FR;J@ f3oNj}{}TTOH>z-slV9?U00000NkvXXu0mjfNSFkytm01zl5Ktvw4<2bf) zcgOvzuDbW0bM{&cs=CuooIpp4X{26KsRs8}Y43gZUTf_GT;dX!xWpwc@qY}vh(Z1F z4}bdlWYYe6GM%iGoROT-bx>=4zt*~)bAGs(ckkZ4{q8tj#01*5)pR=5`o_9RG5`XQ zVK_F}E`WQfNw4ob+G*28Z4Ch?2&)8^-6EKv2q4x{8#9aPV)nH~0}_NFDFSFEt&`l6 zEX7MM@({kkpWzk_;qUk{j-R!`*LArfq*wTc{c^m{|%T6f>KL5Dp|g zCb=DBd_eMUx9FbD3H;^HuYO}ZZeEtuxih=_P;1R~V4uD37xQj$v^VQ^c6W|`_~RdJ zOCZdunF&BOvmU?;0i0 z?liG^XM1OR4q*FXb&3*0nsgNOH~Hx7_{ajTfG;&y+^Z3}-4?%`5}x0W4w&bFV&Ly&3^D08CO^ z@&8E+PTYO7)_S99n(o{Qy!P8yevzVXsQQ9nkDNRA+A$9c=C1Rh?-qT(zkBSje)lIo zz4K{|rI{5oTbS8K2%!%l97%c%U|Z6CNp}Uk`R40ypWjM+p}h62vFs}*4I;CRyfZJy zQHvu>!=W|vy*U;SZg=e-fICl_=#M*@Q;?DXnn8e_^nF>K)*Qf52w|@u`t!R{)ddIx z!~ii`@v-Q1F9AbMfo!WqQ`@ect?kMdL`h>wYm%-?DkSCZVHk$V`o{WupE(OzH-|<6 z<}?c)R6M{uDc5AkV-6ijO+)SDhpSF9NjlrlYwrG>yT4f7zqq!s{+rL9M!kbA957Iz zTP@jY?gIK_^xZ7h!$Z!7hZwHU&(f%wA%rljEWu*{k0iZkX14*n8N=}#_wU^w|M!Hj zq=WOfP@X{|5MWlS$&0~jr1#14A~DZLEO`{_nti;mtwdqzbxy<%P4h%JrsadPHsaJu z02sv>n{y|?#W55Kt287J$TiV@WS$8hB(Jds>zUH@6X?{Q%0fD=ZiLXR_JJg6BI(LX z!K1rRNx!=J+$Pf-zx&nq+VQB8bg&kBDJr?J=B!~pct0C<_vii5JiqhpAN{PeGKY!- zPLnervw;d!-GmZZy`^Hoc+@_9(K^)uo>f+}kV!Tt{s~aC8vLZCsI8NPyC;&9TI=R$ z)bwd1KlhMeKK3;kkY z!>kKc+i^6^KI|!1!L*V#CHYESle@1CL%((P+SPYfKXAbM)jp6V9fuJ1CGEr*|0U^O zGivS}&*mX*9Ny9>5s(aIgX%IASs7s7A=Y_PXGbX78qm_1L(oXB-dCL0E;1{v{A&)y-1~Q23~90+O25^5P`5+HKd|{aQbCpTBC(d2HfOfk0KdoL>X+4+1MYTW=tx4W zhMJSSw7pV27{7EKcm)77pU>%DA;IX&wQ_YiHLkT@DW$wH48zUXq&)x_`av+b!07Iz zOYQ{eaIdixAGz0dc68iaUTS5v#s-^)%yf5E9fFzrcD)$n7p!?m_guAfgPBpE>eE%H3fN(X9d_7ZhyP>9W!%*7 zUw-*Z-E#TTa=F}h_w~H)o9Z1^y;VwiXV`51e*N0DHeE&nUDt87T5@giu9f6GFI8@~*qz ziZR}B_v^!E^WmJpFJAfCi)i_2gJq|wQmeUY^;`-|$u^X}_M_gho8SBDkKO?3BBCNf z04gFQfHmd|EF!O`lwP@aeEi{D;?j)YLhD~MF(-XcXm7MlMLw;_Cza!I(f+n=_&We^ zJS3%u)4c!)nB4{fp-XHJmxe2Jymsjbd=k&Ys4!L-Oh}5ugVTaRlhPVRZOyfV zgz%_M-~%-gfCDfQ(U?*()$rH}JdZCx{S7D!Ow3(e4VDc$D#|7!pN%ryAL8b2@@5SH z6p18TcMo$q-6u(RkM6!_W>1>gb61~!S|2-s7w~0N{1w$RR16Lihlx^IQJ67u52{KCXZI&NqK>?Ta|VZ@r+hK%sCroCZY=6(v@bP+4PTje;rwAR<*ndJ#DYA&en} zQ<8T9+#>ll$?F7O``fFpUffFD{@B}J35)PK2(#0R!3GsQQz@r~`J|W4@i1&|;LUUl z;MxlSe$9gHBTS~~8!Z@BsuamShAd+&mQ(O%x&!W$-bE-6bYB6C05$+lLkP!X&KGy1 zqmKwCAQ&7T9o{<4D{4^IM6ipc5edz?9*S2K&rm1`2GWvJTZO{u0!oZ*Bq6OHdlnkm zBX|Jd;$SdZaCkD-R8iZC?CQ1(;CW70mYF~elf!gzZqq0hfnnA7V!1$f^wsHku_j3zc+VyVnAGl$W0>Y(yy zw>b9$TN`n1B>*g9jLn4!47LFRL7_~=$dXYPis}`GMvE{RBOmBF`-ss8=tMvq2Bn56 z1Lcr8rs_ErFX5p&(9HcnBDo}aG?fC6X0|f-D@RW};psPj{^d8Cu2G|#yH<6r%36z+ zl5Nbrp5^tO^;pjGo8SHV4~LOGXg(A0;PA#c<#%O`M(f~Gqcq)?fWcs_s4P<&od`ft zQCUQpp)649*1rV+&D;;9xv1^?B--TeOI1B=7K<^Rba#ImT7i?rX@gM*rEV(gx-y@P z9M%>2hA;fb0ABBX1BZd)bhsI{DzsFVp>XU6^n;n*>UCH@>heWI0z&|pqC|pdCpAk< zSYSUK?M=NTO@MLk2MWov5W+o@@5UJaN%E~`vAA}&UWasR@ed*q1jXTv)2L7?Dhe`2 z49TjU!X~HK+Zmj;jieZ+oL(k5q=9{Mv()*%JUaRih!7Mogdj}dtZ^a)BwK{Goga0G z*xV18h!g-lfYTV`Z2&h?O0S=toV4kr9@F6ILd%tP(_k9lN_ip>XvYD zSa5m**n)z{7$Va_C#&|~T1Ao+I^oq|s#0@B$rqlD4NBe>Ep1|Fs#2C}D z-4Tb8=MK@5K^tZ53JXUJsnNy3f?Yh1BV-CEM8rc7Fa|~@(j5zl2+KAsoA=oWK@dWc zbPCO3I?1pUWzh@QfxG2hXv}apoi2t40xHZHu|cYxwRPq1jSd~4Q`|_aCYmd9&KO1t z?zet__yD6c0q0mu>%wL+Z52;4%p@YgRwyAdhDO@1!`??$@o@2e;{#&O6`(ul4!5~j z`F|QYZ1+i!kXc&ucm7L1-~epvi_*3qpiHOg;!gN^b*(75AP*z@qO^O}YTb^T<~Km` z`9J5&NdVjyocDxzekuTNV z&zsqc&pi8VPEXm#>7sN_HrJ*ll{KiBm^r4lbcb!(YkJ@wHqre{^5Po03%~d>@tOU0|qtV2uG_Rs&aaE2I0F<05fRT)5=5(jcp>?xZ tYh9RGw>~{>cH`|GcGzKu9d`I%;$QK7YFW%fKZ*bV002ovPDHLkV1i{8g}?v+ diff --git a/images/original/status/signal-100.png b/images/original/status/signal-100.png deleted file mode 100644 index 744a12b8c77b34d340a52346994b049d8c4d0467..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1894 zcmV-s2buVZP)7=lMev{ z3*q68w-N?lfPt|d7C(Rq2x-A#M{6)UJ^iT6i2FJiSykOT8W_=_W{6a&(x{Ua=RVFo zkwOx0^ZMkEzy9?4;fwDOjAU9OHR#RZi_^A7-74Ev+jbfL*PDIQ8pg^p6(I*agX5QN`_-HOEL!n8(}%EoE~pj6j}YPClhe9R02RElgLP<1wsSf9o7sw zH}rV>$XlKid$!9twio{Q_|s3n_lsWwKuRKLAc)*u0Y|{Zp%Szb&=RowBLiSFpIknS!84Ig zWDi6O#O$J{ihj|tjEh_$Iv(#q$$+Kps1S*eothP+7KIjrRZG2BGBBD%8gh-Z#9?Dv z3|dsQDzp+(_LyLZ-DE}*fk24S#o%J}qVQt$`zE7sS|K?kQwY{%93}8TI6R(s+=N5R zrIH|t%tS^YEa2+!=Av_F-$F{e!Q@(ITyql$ z1RM?%qZeDVQZ4;{=ZvMoih^J!!gunz7<8-BuN#(&ZM`}la=O@K61g#|5EPO%kyA1% z!LhJx29Br4eDG+%c)!wY=+JD3Moxq{T?|?jy(pHdT!!RL&m?oOR1g%9B|#<=$yj@c zEF>!u|2~Egaoi%jP=<{OpwmsLs{P;&d``sR^sW7pF z#3o%FUTh}-Mym#^0+T()X^YdiW-}wXX4J*HQJbMJ4a?Tyd6&$bJb&-m_sdw4SS@)X zo5Qy*dS%edhUI)Km(TfWeF)${#;EAoKu{7P!L^wUD#~6udR6wJ|N(cy+MDFW29WG9*iJS_DV_^L3HcnGv=#rq2SraiheF`{} zDIiM4P%DN9drUH5RFJRC8LmUqsKu$pGw(*Gb3w_nbFr++$V84oPlu;d;dB(p@on6i znGS-5Ajp(t)&wU|jw^@LBOcoZC-3bs!GNaj)l7D3w(GUk`WwB*UDZt40AgRq9`IF_ z#J0+I-DJ6($ zPBCgp+%YptE)XFSl;lp8)<&+%UOSdy;XFcWxs6jQIy(;@i-CZx7rS&eENn93_@Djt zzg%}C6I-n3*Msqs;HpZBUOSgz;XIWX>up@mhK_a%7YCeCi?UZ^A1w7&5TpPi011f5 z`Y8o1@lw`Fb1kXZQ~nLA!NN zfSIzJH{#}WbC?DqhG*~m^|6cq!64|#ut4^pcZbbRn-%?#27frDGx&kLFu zdg*Mka9gH0dF=)TQVNRzC?jO3tkb~pc;e>a2~O>-KKa@WfiwWbfe0fRwhm3}CcQN* zb22$x#Y?c<7{5fA!_}d)qF*;Imou(kR-azpl-Z1w*q<prGlEvYrzd%X|k?R0tjDeujU|5^7vrWg8v)4tK5DH5zsN+Bi zh$56KEaN-!=t~$LzL^A*k{G|Y3&qszOIi7yav5Gl!&M3g`jr&Xs7ihk7D zBJz#aN3g!86NrdVq(~`m!2DO&aBk0G(UC|V&I|ON_A8W)jSCm+{wkPYVvTSlcjgb; zm2FvM-d^O3^Lr(;zuA{eVW~u&hP7NuK^ZHCqqF+%yZ5=VyQ~A5eU$Si%4*Q2Y)iv3 z*Eo9dhG*>u+HRHsVtv0`JgpjawCqO@^(%)rChy0$h?+>IkSvL)nYl_d zeQ^5ZX`9FX!8dPl$*=m?d0Ng$GL!o&7+fW1Jyx5X=);3^*w};qLHUr$Os)sBb;d9} g8Sd%kG_@Z251cp*kL~XcAOHXW07*qoM6N<$g7fx(hyVZp diff --git a/images/original/status/signal-25.png b/images/original/status/signal-25.png deleted file mode 100644 index c4e12d4584ab75a3a5925222eb5ce593362c9c50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1545 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 N002ovPDHLkV1mqW7&ZU^ diff --git a/images/original/status/signal-75.png b/images/original/status/signal-75.png deleted file mode 100644 index eaadde4bf8c6c4bda3d671f89ef0e34ad270b0dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1792 zcmV+b2mknqP)8n3t))^ zOMVC}SRr<7y^F+x-@t+$EA~;8MHGPrL`kqoVvjwZdGFnOySwTf7I)rwY!X=+!NlEa z^0s;W&AUgY-fJMX-AxLkf;QX#pKw2Fx1aDV9T_iL@6_UrZCPd@r+xBI%4 zeO}w$-PQiVfdSZ#08jv&0=N(0V*q#VfByL*eSK>F@7oLS8JKkdOi}`n0n8;WBpph6 zNmB3b{k8r5?u7>Ll%v%p?~iZ;*UFBEIYHKRQ@0%L@<2ru!i?BY>7t8qI8F zW+!I$2*8n~&%CvG;lThH%uE2>%tinw03HDNH-Jw7dA!$Z(pXAMmc+=f~@XD=Q?P|fG zpmGEu5Me}^%dMfNijpdZTs3smQ+H-|Hg5yxoa7!!kW3^yl8fARUp;8Pef#$OtslSj zMMM_)OAWNgtE^``_Mwe|{Oy>>a&w@26>&D6kQ%1V@K&-0G^K zo{kufH+FiYf8;{|=U|#D3P%VsA}lnqSwpp|k_t+$DqUii&v%muK-*zv0l)#&vmm<3 zIj?H1mkXLBN2D+aN(3{(ITducxmqSTPwE!H?CwRm%8G_!giK;4qI3B?;G$>{Qbw0E zx@(uw>r!Bf1|%jEXq@Pk1ZN?q!|AGUITCDfQEu`~fuJM^5{+UeG>2@F)$Q+S(RQ)- z%9Vks8UaBQE71c!v68h-)wmvQIPGn9JdeGjXXPr!Cv2u@0WVFhG?czz90qJwd$IiV z%D@a9U?vbU>Wr19i=3-UE*QE&{S20$isV%lMMYZz2n7Od>MB+=V$f(aEWT{({{xuV z00wBQ6x>1+D^-+SG<1Xdd5T%SC|5Y5V7wp~=WS$wA8H&bXP`}N%PqI5(OrumLkM-m1^T*rONA{ovI3*@_cJ{5IrKXyz#;$1Ws>)LYU>Ck+ zqNLa+n~v5TUYklO8v4t4v3u-~KnoK%1wh3t5OOs%Oqa4~oG)a{FS4*;GNqi5XPsma zlF70u%?|APQ!+ZAMM0F&L($w?X((gCIE?7~%$?KAfr*C*I0PC+BO(PNxmtF$uA=M| zjS=MY$ie`F!3;KKQ_0emzRPvT?FcOj2k{(3!)*5;Ezj?ofa_<)*<4a0IVZU! z`8vt(MZ~GQpS=3U8>PD$Z-C}giXnoUsMh7l*>Y2zHI|*j`i=7!lUwmEArll$QX(Rg zoG4n}xqR+yyEpu`Z(hK{m;H6^r==v3+V)UrqMWI$Znjqs&ohTIj%~eKkz_~;MnsU) i93gjyyW8sYbp9VteBzG4L)u0F0000 - - - - - - image/svg+xml - - - - Lapo Calamandrei - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/other/wicd-gtk.xpm b/other/wicd-gtk.xpm deleted file mode 100644 index a0f4052..0000000 --- a/other/wicd-gtk.xpm +++ /dev/null @@ -1,156 +0,0 @@ -/* XPM */ -static char *wicd_client[] = { -/* columns rows colors chars-per-pixel */ -"32 32 118 2", -" c black", -". c #000100", -"X c #000200", -"o c #000300", -"O c #000301", -"+ c #000401", -"@ c #000501", -"# c #000601", -"$ c #000801", -"% c #000901", -"& c #000902", -"* c #000B02", -"= c #000F02", -"- c #001303", -"; c #001403", -": c #001804", -"> c #001B04", -", c #001E05", -"< c #001F05", -"1 c #002105", -"2 c #002205", -"3 c #002406", -"4 c #002706", -"5 c #002907", -"6 c #002D07", -"7 c #003008", -"8 c #003108", -"9 c #003408", -"0 c #003509", -"q c #003709", -"w c #003809", -"e c #003909", -"r c #003A09", -"t c #003C0A", -"y c #003F0A", -"u c #00400A", -"i c #00420B", -"p c #00440B", -"a c #00450B", -"s c #00460B", -"d c #004A0C", -"f c #004C0C", -"g c #004E0D", -"h c #004F0D", -"j c #00520D", -"k c #00530D", -"l c #00570E", -"z c #00590E", -"x c #005D0F", -"c c #006110", -"v c #006410", -"b c #006510", -"n c #006811", -"m c #006A11", -"M c #006D11", -"N c #006E12", -"B c #007012", -"V c #007312", -"C c #007613", -"Z c #007913", -"A c #008115", -"S c #008215", -"D c #008315", -"F c #008616", -"G c #008716", -"H c #008A16", -"J c #008B16", -"K c #008C16", -"L c #008E17", -"P c #008F17", -"I c #009017", -"U c #009117", -"Y c #009518", -"T c #009D19", -"R c #00A01A", -"E c #00A61B", -"W c #00A71B", -"Q c #00A81B", -"! c #00A91B", -"~ c #00AF1C", -"^ c #00B01C", -"/ c #00B11D", -"( c #00B21D", -") c #00B31D", -"_ c #00B91E", -"` c #00BA1E", -"' c #00BB1E", -"] c #00BC1E", -"[ c #00BF1F", -"{ c #00C11F", -"} c #00C820", -"| c #00CA20", -" . c #00CE21", -".. c #00D222", -"X. c #00D322", -"o. c #00D422", -"O. c #00D723", -"+. c #00DB23", -"@. c #00DC23", -"#. c #00DD24", -"$. c #00E024", -"%. c #00E124", -"&. c #00E725", -"*. c #00ED26", -"=. c #00EF26", -"-. c #00EF27", -";. c #00F127", -":. c #00F227", -">. c #00F427", -",. c #00F527", -"<. c #00F828", -"1. c #00F928", -"2. c #00FB28", -"3. c #00FC29", -"4. c #00FD29", -"5. c #00FE29", -"6. c #00FF29", -"7. c None", -/* pixels */ -"7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.", -"7.7.7.7.7.7. ; 7.7.7.7.7.7.7.7.7.7.7.7.7.7. - 7.7.7.7.7.7.", -"7.7.7.7.7.5 Q < 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.> Q 6 7.7.7.7.7.", -"7.7.7.7.a :.h 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.s >.f 7.7.7.7.", -"7.7.7.0 ,.' 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7. ( <.t 7.7.7.", -"7.7.* +.6.i 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.e 6.%.= 7.7.", -"7.7.Z 6.#.. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7. o.6.S 7.7.", -"7.@ &.6.P 7.7.7.7.7.v l 7.7.7.7.7.7.7.7.j m 7.7.7.7.7.F 6.*.% 7.", -"7.a 6.6.k 7.7.7.7.j { 7.7.7.7.7.7.7.7.7.7.` z 7.7.7.7.d 6.6.g 7.", -"7.G 6.6.4 7.7.7.7.| C 7.7.7.7.7.7.7.7.7.7.B ..7.7.7.7., 6.6.I 7.", -" ) 6.6.& 7.7.7.y 6.u 7.7.7. 7.7.7.9 6.d 7.7.7.o 3.6.] ", -" | 6.1. 7.7.7.M 6.7.7.7. 7.7.7.2.V 7.7.7. -.6.X. ", -" .6.<. 7.7.7.V 6.7.7.7. 7.7.7.<.Z 7.7.7. =.6.O. ", -" [ 6.6.$ 7.7.7.x 6.7 7.7.7. 7.7.7.1 6.b 7.7.7.X 2.6.} ", -"7.T 6.6.3 7.7.7.7.;.n 7.7.7. 7.7.7.c ,.7.7.7.7.> 6.6.E ", -"7.b 6.6.h 7.7.7.7.L W 7.7.7. 7.7.7.R Y 7.7.7.7.s 6.6.N 7.", -"7.> 3.6.J 7.7.7.7.7.' s 7.7. 7.7.y [ 7.7.7.7.7.A 6.5.2 7.", -"7. ~ 6.O. 7.7.7.7.7.z O 7. 7.X l 7.7.7.7.7. .6._ 7.", -"7.7.7 2.6.r 7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.8 6.4.q 7.7.", -"7.7. D 6./ 7.7.7.7.7.7.7. 7.7.7.7.7.7.7. Q 6.K 7.7.", -"7.7.7.O ! 6.p 7.7.7.7.7.7.7. 7.7.7.7.7.7.7.t 5.^ @ 7.7.7.", -"7.7.7.7.+ H $.: 7.7.7.7.7.7. 7.7.7.7.7.7.; @.U # 7.7.7.7.", -"7.7.7.7.7.7.9 V $ 7.7.7.7.7. 7.7.7.7.7.# B w 7.7.7.7.7.", -"7.7.7.7.7.7.7.7. 7.7.7.7. 7.7.7.7. 7.7.7.7.7.7.7.7.", -"7.7.7.7.7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.", -"7.7.7.7.7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.", -"7.7.7.7.7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.", -"7.7.7.7.7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.", -"7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.", -"7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.", -"7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.", -"7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7." -}; diff --git a/other/wicd-tray.desktop b/other/wicd-tray.desktop deleted file mode 100644 index eaebcc3..0000000 --- a/other/wicd-tray.desktop +++ /dev/null @@ -1,16 +0,0 @@ -[Desktop Entry] -Categories=Network;Settings;Utility;X-GNOME-NetworkSettings; -Exec=wicd-gtk --tray -GenericName=Network Manager -Icon=wicd-gtk -Icon[en_US]=wicd-gtk -Name=Wicd Network Manager Tray -Name[en_US]=Wicd Network Manager Tray -Comment=Display network connection status in the system tray -Comment[en_US]=Display network connection status in the system tray -Comment[he]=הצגת מצב חיבור רשת במגש מערכת -Terminal=false -Type=Application -Version=1.0 -X-GNOME-Autostart-enabled=true -X-KDE-autostart-after=panel diff --git a/other/wicd.desktop b/other/wicd.desktop deleted file mode 100644 index d8e0c12..0000000 --- a/other/wicd.desktop +++ /dev/null @@ -1,14 +0,0 @@ -[Desktop Entry] -Categories=Network;Settings;Utility;X-GNOME-NetworkSettings; -Exec=wicd-gtk --no-tray -GenericName=Network Manager -Icon=wicd-gtk -Icon[en_US]=wicd-gtk -Name=Wicd Network Manager -Name[en_US]=Wicd Network Manager -Comment=Start the Wicd client without system tray icon -Comment[en_US]=Start the Wicd client without system tray icon -Comment[he]=הפעלת לקוח Wicd בלי סמל מגש מערכת -Terminal=false -Type=Application -Version=1.0 diff --git a/scripts/wicd-gtk b/scripts/wicd-gtk deleted file mode 100755 index 37eda4a..0000000 --- a/scripts/wicd-gtk +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -# check_firstrun() -if [ ! -d "$HOME/.wicd" ]; then - mkdir -p "$HOME/.wicd" -fi -# Make sure the user knows WHEREAREMYFILES ;-) -if [ -e "/var/lib/wicd/WHEREAREMYFILES" ] && [ ! -L "$HOME/.wicd/WHEREAREMYFILES" ]; then - ln -s "/var/lib/wicd/WHEREAREMYFILES" "$HOME/.wicd/WHEREAREMYFILES" -fi - -exec /usr/bin/python3 -O /usr/share/wicd/gtk/wicd-client.py $@ diff --git a/setup.py b/setup.py index fc892ab..2f89b97 100755 --- a/setup.py +++ b/setup.py @@ -437,7 +437,6 @@ class clear_generated(Command): for item in os.listdir('in'): if item.endswith('.in'): print('Removing completed', item, end=' ') - original_name = os.path.join('in', item) final_name = item[:-3].replace('=', '/') print(final_name, '...', end=' ') if os.path.exists(final_name): @@ -483,43 +482,6 @@ class install(_install): (wpath.postconnectscripts, [empty_file]) ]) - if not wpath.no_install_gtk: - data.append((wpath.desktop, ['other/wicd.desktop'])) - data.append((wpath.bin, ['scripts/wicd-client'])) - data.append((wpath.bin, ['scripts/wicd-gtk'])) - data.append((wpath.gtk, [ - 'gtk/wicd-client.py', - 'gtk/netentry.py', - 'gtk/prefs.py', - 'gtk/gui.py', - 'gtk/guiutil.py', - 'data/wicd.ui', - 'gtk/configscript.py', - ])) - data.append((wpath.autostart, ['other/wicd-tray.desktop'])) - if not wpath.no_install_man: - data.append((wpath.mandir + 'man1/', ['man/wicd-client.1'])) - for size in os.listdir('icons'): - for category in os.listdir(os.path.join('icons', size)): - imgdir = os.path.join('icons', size, category) - data.append((os.path.join(wpath.icons, size, category), - [(os.path.join(imgdir, f)) - for f in os.listdir(imgdir) - if not f.startswith('.')])) - for size in os.listdir('images'): - for category in os.listdir(os.path.join('images', size)): - imgdir = os.path.join('images', size, category) - data.append((os.path.join(wpath.images, 'hicolor', size, - category), - [(os.path.join(imgdir, f)) - for f in os.listdir(imgdir) - if not f.startswith('.')])) - data.append((wpath.pixmaps, ['other/wicd-gtk.xpm'])) - if not wpath.no_install_gnome_shell_extensions: - data.append( - (wpath.gnome_shell_extensions + 'wicd@code.hanskalabs.net', - ['gnome-shell/' + f for f in os.listdir('gnome-shell')]) - ) if not wpath.no_install_ncurses: data.append((wpath.curses, ['curses/curses_misc.py'])) data.append((wpath.curses, ['curses/prefs_curses.py'])) @@ -548,9 +510,6 @@ class install(_install): data.append((wpath.docdir, ['INSTALL', 'LICENSE', 'AUTHORS', 'README', 'CHANGES', ])) data.append((wpath.varlib, ['other/WHEREAREMYFILES'])) - if not wpath.no_install_kde: - if not wpath.no_install_gtk: - data.append((wpath.kdedir, ['other/wicd-tray.desktop'])) if not wpath.no_install_init: data.append((wpath.init, [wpath.initfile])) if not wpath.no_install_man: