diff --git a/CHANGES b/CHANGES index 7556ef8..437cb5d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,269 @@ ------------------------------------------------------------ +revno: 382 +committer: Adam Blackburn +branch nick: 1.6 +timestamp: Tue 2009-05-05 11:58:36 +0800 +message: + merged notifications branch + ------------------------------------------------------------ + revno: 371.1.13 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Tue 2009-05-05 10:34:44 +0800 + message: + added support for disabling notifications in setup.py + ------------------------------------------------------------ + revno: 371.1.12 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Tue 2009-05-05 10:17:10 +0800 + message: + merged latest 1.6 + ------------------------------------------------------------ + revno: 371.1.11 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Sun 2009-05-03 17:31:18 +0800 + message: + Added icons for wireless networks and disconnect states + ------------------------------------------------------------ + revno: 371.1.10 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Sun 2009-05-03 17:27:31 +0800 + message: + merge latest 1.6 + ------------------------------------------------------------ + revno: 371.1.9 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Sun 2009-05-03 17:26:29 +0800 + message: + added images to wired network connection notifications + ------------------------------------------------------------ + revno: 371.1.8 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Sun 2009-05-03 10:32:10 +0800 + message: + Added support for instantly enabling/disabling notifications when the preference is changed + ------------------------------------------------------------ + revno: 371.1.7 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Sun 2009-05-03 09:50:09 +0800 + message: + Fixed the libglade warnings when loading the GTK GUI + ------------------------------------------------------------ + revno: 371.1.6 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Sun 2009-05-03 09:33:32 +0800 + message: + Merge latest 1.6 + ------------------------------------------------------------ + revno: 371.1.5 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Sat 2009-05-02 14:01:30 +0800 + message: + Disable the enable notification option if pynotify isn't installed + ------------------------------------------------------------ + revno: 371.1.4 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Sat 2009-05-02 12:47:05 +0800 + message: + Merge latest 1.6 + ------------------------------------------------------------ + revno: 371.1.3 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Sat 2009-05-02 12:43:43 +0800 + message: + Reworded notifications and added new entries to translations.py + ------------------------------------------------------------ + revno: 371.1.2 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Fri 2009-05-01 14:32:09 +0800 + message: + added support for enabling/disabling notifications + ------------------------------------------------------------ + revno: 371.1.1 + committer: Adam Blackburn + branch nick: libnotify-support-ng + timestamp: Fri 2009-05-01 13:46:21 +0800 + message: + Initial notification support +------------------------------------------------------------ +revno: 381 +committer: Adam Blackburn +branch nick: 1.6 +timestamp: Sun 2009-05-03 22:00:24 +0800 +message: + print wicd's version number on daemon start + ------------------------------------------------------------ + revno: 379.1.1 + committer: Adam Blackburn + branch nick: 1.6 + timestamp: Sun 2009-05-03 17:20:02 +0800 + message: + Updated translations.py to include all translations from old translations.py +------------------------------------------------------------ +revno: 380 +committer: Adam Blackburn +branch nick: 1.6 +timestamp: Sun 2009-05-03 21:58:11 +0800 +message: + print wicd's version number on daemon start +------------------------------------------------------------ +revno: 379 +committer: Andrew Psaltis +branch nick: 1.6 +timestamp: Sat 2009-05-02 14:08:07 -0400 +message: + Merged bugfixes from r321 of experimental-nacl. + ------------------------------------------------------------ + revno: 202.2.30 + committer: Andrew Psaltis + branch nick: experimental-nacl + timestamp: Fri 2009-05-01 22:23:40 -0400 + message: + Merge r375 of mainline 1.6. + ------------------------------------------------------------ + revno: 202.2.29 + committer: Andrew Psaltis + branch nick: experimental-nacl + timestamp: Fri 2009-05-01 22:13:15 -0400 + message: + Some more bugfixes... + Fixed unencrypted network support in both UIs. + Fixed marking the Static IP checkbox in wicd-curses. + Made the checkboxes in the the network properties dialogs in wicd-curses act + like those in wicd-client. + Filter the urwid popen2 warning in wicd-curses. + ------------------------------------------------------------ + revno: 202.2.28 + committer: Andrew Psaltis + branch nick: experimental-nacl + timestamp: Fri 2009-05-01 13:02:44 -0400 + message: + Merged with r272 of mainline 1.6. +------------------------------------------------------------ +revno: 378 +committer: Adam Blackburn +branch nick: 1.6 +timestamp: Sat 2009-05-02 15:32:58 +0800 +message: + Updated INSTALL to use update_translations_py before get_translations +------------------------------------------------------------ +revno: 377 +committer: Adam Blackburn +branch nick: 1.6 +timestamp: Sat 2009-05-02 15:30:09 +0800 +message: + Added automatically generated translations.py +------------------------------------------------------------ +revno: 376 +committer: Adam Blackburn +branch nick: 1.6 +timestamp: Sat 2009-05-02 15:24:50 +0800 +message: + added support for automatically retrieving translations.py +------------------------------------------------------------ +revno: 375 +committer: Dan O'Reilly +branch nick: experimental +timestamp: Fri 2009-05-01 20:26:46 -0400 +message: + Fix bug where shared essid settings couldn't be disabled once they were turned on. +------------------------------------------------------------ +revno: 374 +committer: Dan O'Reilly +branch nick: experimental +timestamp: Fri 2009-05-01 20:20:40 -0400 +message: + Fix crash when saving settings for unencrypted networks. + Remove unneeded function in prefs.py +------------------------------------------------------------ +revno: 373 +committer: Adam Blackburn +branch nick: 1.6 +timestamp: Fri 2009-05-01 21:58:53 +0800 +message: + Merge 1.6-rworkman (thanks!) + ------------------------------------------------------------ + revno: 365.1.8 + committer: Robby Workman + branch nick: 1.6-rworkman + timestamp: Tue 2009-04-28 10:51:16 -0500 + message: + Tweaks to NEWS file. + ------------------------------------------------------------ + revno: 365.1.7 + committer: Robby Workman + branch nick: 1.6-rworkman + timestamp: Tue 2009-04-28 10:50:23 -0500 + message: + Merged mainline. This will require one more change to the NEWS file + to handle conflicts. + ------------------------------------------------------------ + revno: 365.1.6 + committer: Robby Workman + branch nick: 1.6-rworkman + timestamp: Sun 2009-04-26 21:38:10 -0500 + message: + Clarified some required versions in INSTALL + ------------------------------------------------------------ + revno: 365.1.5 + committer: Robby Workman + branch nick: 1.6-rworkman + timestamp: Sat 2009-04-25 23:17:33 -0500 + message: + Use set_icon_name() instead of set_icon_from_file() in gui.py ; this + allows gtk to use the themed icons (and presumably the correct size + and all that good stuff). + ------------------------------------------------------------ + revno: 365.1.4 + committer: Robby Workman + branch nick: 1.6-rworkman + timestamp: Sat 2009-04-25 22:55:12 -0500 + message: + Synced CHANGES file with mainline. + Minor tweaks to NEWS file (mostly formatting). + ------------------------------------------------------------ + revno: 365.1.3 + committer: Robby Workman + branch nick: 1.6-rworkman + timestamp: Wed 2009-04-22 19:53:08 -0500 + message: + Added NEWS file with major changes since 1.5.x. + Updated CHANGES file with 'bzr log' output as of r367. +------------------------------------------------------------ +revno: 372 +committer: Adam Blackburn +branch nick: 1.6 +timestamp: Fri 2009-05-01 13:41:13 +0800 +message: + Also catch AttributeErrors when guessing data types +------------------------------------------------------------ +revno: 371 +committer: Dan O'Reilly +branch nick: experimental +timestamp: Mon 2009-04-27 19:17:01 -0400 +message: + Correctly handle case where a key is all digits and starts with a '0'. + Remove some unused imports. + Simplfy code that checks for valid wpa_supplicant drivers. +------------------------------------------------------------ +revno: 370 +committer: Adam Blackburn +branch nick: 1.6 +timestamp: Sun 2009-04-26 08:03:59 +0900 +message: + Updated version numbers +------------------------------------------------------------ revno: 369 committer: Adam Blackburn branch nick: 1.6 diff --git a/NEWS b/NEWS index 536b3f1..e3b0eaf 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,7 @@ Major Changes: - Reworked the Preferences menu to be more in line with GNOME standards - Added support for global scripts - Made it possible to have optional entries in encryption templates +- Added ability to show libnotify notifications on status change Minor Changes and Other Enchancements: - Better autoconnection behavior diff --git a/data/wicd.glade b/data/wicd.glade index 0fe8d7a..c42ddb1 100644 --- a/data/wicd.glade +++ b/data/wicd.glade @@ -1,25 +1,23 @@ - - - + + + 450 400 True Wicd Network Manager - GTK_WIN_POS_CENTER + center 550 - GDK_GRAVITY_CENTER - - + center True True - GTK_TOOLBAR_BOTH_HORIZ - GTK_ICON_SIZE_MENU + both-horiz + 0 True @@ -31,8 +29,8 @@ True + gtk-network True - gtk-network True True @@ -40,12 +38,12 @@ True + Create an ad-hoc network True - Create an ad-hoc network - True + False - + True gtk-add @@ -54,15 +52,15 @@ + Find a hidden network True Enter a hidden network to try to locate. - Find a hidden network - True + False - + True - network-wireless + gtk-find @@ -74,6 +72,9 @@ + + False + @@ -86,6 +87,7 @@ + False True @@ -99,6 +101,7 @@ + False True @@ -112,6 +115,7 @@ + False True @@ -125,6 +129,7 @@ + False True @@ -139,12 +144,14 @@ + False True False + 0 @@ -165,12 +172,12 @@ True False - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC + automatic + automatic True - GTK_SHADOW_NONE + none True @@ -198,15 +205,17 @@ 3 + 0 - True - Cancel the current connection attempt gtk-cancel + True + False + False + Cancel the current connection attempt True - 0 @@ -238,8 +247,8 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 5 Configure Scripts - GTK_WIN_POS_CENTER_ON_PARENT - GDK_WINDOW_TYPE_HINT_DIALOG + center-on-parent + dialog False @@ -259,6 +268,7 @@ False False + 0 @@ -272,6 +282,9 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Pre-connection Script: + + 0 + @@ -302,6 +315,9 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Post-connection Script: + + 0 + @@ -332,6 +348,9 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Disconnection Script: + + 0 + @@ -359,32 +378,41 @@ True - GTK_BUTTONBOX_END + end + gtk-cancel True True - gtk-cancel + False True - 0 + + False + False + 0 + + gtk-ok + 1 True True - gtk-ok + False True - 1 + False + False 1 False - GTK_PACK_END + end + 0 @@ -392,8 +420,8 @@ 5 - GTK_WIN_POS_CENTER_ON_PARENT - GDK_WINDOW_TYPE_HINT_DIALOG + center-on-parent + dialog False @@ -414,17 +442,17 @@ True True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC + automatic + automatic True - GTK_RESIZE_QUEUE - GTK_SHADOW_NONE + queue + none True - 18 + 20 2 4 4 @@ -433,14 +461,14 @@ 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. - Always switch to a wired connection when available - 0 True @@ -490,10 +518,10 @@ is already active. 12 + Automatically reconnect on network connection loss True True - Automatically reconnect on network connection loss - 0 + False True @@ -525,10 +553,10 @@ is already active. 12 + Use last wired network profile True True - Use last wired network profile - 0 + False True True @@ -547,10 +575,10 @@ is already active. 12 + Prompt for wired network profile True True - Prompt for wired network profile - 0 + False True True pref_use_last_radio @@ -570,10 +598,10 @@ is already active. 12 + Use default wired network profile True True - Use default wired network profile - 0 + False True True pref_use_last_radio @@ -766,10 +794,10 @@ is already active. 12 + Use global DNS servers True True - Use global DNS servers - 0 + False True @@ -840,11 +868,11 @@ is already active. 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. - Always show wired interface - 0 True @@ -856,6 +884,41 @@ is already active. + + + True + 0 + <b>Notifications</b> + True + + + 2 + 18 + 19 + + + + + + True + 12 + + + Display notifications about connection status + True + True + False + True + + + + + 2 + 19 + 20 + + + @@ -870,8 +933,8 @@ is already active. General Settings - tab False + tab @@ -885,13 +948,13 @@ is already active. True True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC + automatic + automatic True - GTK_RESIZE_QUEUE - GTK_SHADOW_NONE + queue + none True @@ -931,23 +994,24 @@ is already active. True + Automatic (recommended) True True - Automatic (recommended) - 0 + False True True False + 0 + ip True True - ip - 0 + False True True flush_auto_radio @@ -959,10 +1023,10 @@ is already active. + route True True - route - 0 + False True True flush_auto_radio @@ -990,23 +1054,24 @@ is already active. True + Automatic (recommended) True True - Automatic (recommended) - 0 + False True True False + 0 + ethtool True True - ethtool - 0 + False True True link_auto_radio @@ -1018,10 +1083,10 @@ is already active. + mii-tool True True - mii-tool - 0 + False True True link_auto_radio @@ -1049,24 +1114,25 @@ is already active. True + Automatic (recommended) True True - Automatic (recommended) - 0 + False True True dhclient_radio False + 0 + dhclient True True - dhclient - 0 + False True True @@ -1077,10 +1143,10 @@ is already active. + dhcpcd True True - dhcpcd - 0 + False True True dhclient_radio @@ -1092,10 +1158,10 @@ is already active. + pump True True - pump - 0 + False True True dhclient_radio @@ -1147,23 +1213,24 @@ is already active. True + Automatic (recommended) True True - Automatic (recommended) - 0 + False True True False + 0 + gksudo True True - gksudo - 0 + False True True sudo_auto_radio @@ -1175,10 +1242,10 @@ is already active. + kdesu True True - kdesu - 0 + False True True sudo_auto_radio @@ -1190,10 +1257,10 @@ is already active. + ktsuss True True - ktsuss - 0 + False True True sudo_auto_radio @@ -1228,9 +1295,9 @@ is already active. External Programs - tab 1 False + tab @@ -1270,6 +1337,7 @@ to read its description. False + 0 @@ -1316,10 +1384,10 @@ to read its description. 12 + Use dBm to measure signal strength True True - Use dBm to measure signal strength - 0 + False True @@ -1337,10 +1405,10 @@ to read its description. 12 + Enable debug mode True True - Enable debug mode - 0 + False True @@ -1477,9 +1545,9 @@ WPA supplicant driver. Advanced Settings - tab 2 False + tab @@ -1490,34 +1558,41 @@ WPA supplicant driver. True - GTK_BUTTONBOX_END + end + gtk-cancel True True True - gtk-cancel True - 0 + + False + False + 0 + + gtk-ok + 1 True True True - gtk-ok True - 1 + False + False 1 False - GTK_PACK_END + end + 0 diff --git a/in/wicd=wpath.py.in b/in/wicd=wpath.py.in index a4f17ef..d1fbbc1 100755 --- a/in/wicd=wpath.py.in +++ b/in/wicd=wpath.py.in @@ -71,6 +71,7 @@ no_install_kde = %NO_INSTALL_KDE% no_install_acpi = %NO_INSTALL_ACPI% no_install_docs = %NO_INSTALL_DOCS% no_install_ncurses = %NO_INSTALL_NCURSES% +no_use_notifications = %NO_USE_NOTIFICATIONS% def chdir(file): """Change directory to the location of the specified file. diff --git a/setup.py b/setup.py index 4ebc6aa..fdee577 100755 --- a/setup.py +++ b/setup.py @@ -92,7 +92,8 @@ class configure(Command): ('no-install-acpi', None, 'do not install the suspend.d and resume.d acpi scripts'), ('no-install-pmutils', None, 'do not install the pm-utils hooks'), ('no-install-docs', None, 'do not install the auxiliary documentation'), - ('no-install-ncurses', None, 'do not install the ncurses client') + ('no-install-ncurses', None, 'do not install the ncurses client'), + ('no-use-notifications', None, 'do not ever allow the use of libnotify notifications') ] def initialize_options(self): @@ -127,6 +128,7 @@ class configure(Command): self.no_install_pmutils = False self.no_install_docs = False self.no_install_ncurses = False + self.no_use_notifications = False # Determine the default init file location on several different distros diff --git a/wicd/gui.py b/wicd/gui.py index e792579..3971c42 100644 --- a/wicd/gui.py +++ b/wicd/gui.py @@ -141,10 +141,12 @@ class WiredProfileChooser: class appGui(object): """ The main wicd GUI class. """ - def __init__(self, standalone=False): + def __init__(self, standalone=False, tray=None): """ Initializes everything needed for the GUI. """ setup_dbus() + self.tray = tray + gladefile = os.path.join(wpath.share, "wicd.glade") self.wTree = gtk.glade.XML(gladefile) self.window = self.wTree.get_widget("window1") @@ -305,7 +307,7 @@ class appGui(object): def settings_dialog(self, widget, event=None): """ Displays a general settings dialog. """ if not self.pref: - self.pref = PreferencesDialog(self.wTree) + self.pref = PreferencesDialog(self, self.wTree) else: self.pref.load_preferences_diag() if self.pref.run() == 1: diff --git a/wicd/prefs.py b/wicd/prefs.py index 80634b4..a8da776 100644 --- a/wicd/prefs.py +++ b/wicd/prefs.py @@ -41,6 +41,8 @@ wired = None from translations import language +USER_SETTINGS_DIR = os.path.expanduser('~/.wicd/') + def setup_dbus(): global daemon, wireless, wired daemon = dbusmanager.get_interface('daemon') @@ -49,8 +51,9 @@ def setup_dbus(): class PreferencesDialog(object): """ Class for handling the wicd preferences dialog window. """ - def __init__(self, wTree): + def __init__(self, parent, wTree): setup_dbus() + self.parent = parent self.wTree = wTree self.prep_settings_diag() self.load_preferences_diag() @@ -141,6 +144,24 @@ class PreferencesDialog(object): 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 + try: + import pynotify + except ImportError: + 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_widget('label2').hide() self.wTree.get_widget("notebook2").set_current_page(0) @@ -221,6 +242,19 @@ class PreferencesDialog(object): [width, height] = self.dialog.get_size() daemon.WriteWindowSize(width, height, "pref") + + 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. """ @@ -305,6 +339,9 @@ class PreferencesDialog(object): 'use_last_used_profile') + self.notificationscheckbox = setup_label("pref_use_libnotify", + 'display_notifications') + # DHCP Clients self.dhcpautoradio = setup_label("dhcp_auto_radio", "wicd_auto_config") self.dhclientradio = self.wTree.get_widget("dhclient_radio") diff --git a/wicd/translations.py b/wicd/translations.py index 7de3616..e5e72f1 100644 --- a/wicd/translations.py +++ b/wicd/translations.py @@ -55,7 +55,7 @@ def get_gettext(): _ = lang.gettext return _ -# Generated automatically on Sat, 02 May 2009 02:29:29 CDT +# Generated automatically on Mon, 04 May 2009 23:56:04 CDT _ = get_gettext() language = {} language['resetting_ip_address'] = _('''Resetting IP address...''') @@ -64,6 +64,7 @@ language['no_dhcp_offers'] = _('''Connection Failed: No DHCP offers received.''' language['more_help'] = _('''For more detailed help, consult the wicd-curses(8) man page.''') language['bad_pass'] = _('''Connection Failed: Bad password''') language['cannot_start_daemon'] = _('''Unable to connect to wicd daemon DBus interface. This typically means there was a problem starting the daemon. Check the wicd log for more information.''') +language['verifying_association'] = _('''Verifying access point association...''') language['wired_always_on'] = _('''Always show wired interface''') language['could_not_connect'] = _('''Could not connect to wicd's D-Bus interface. Check the wicd log for error messages.''') language['path_to_pac_file'] = _('''Path to PAC File''') @@ -212,3 +213,5 @@ language['display_notifications'] = _('''Display notifications about connection language['connection_established'] = _('''Connection established''') language['disconnected'] = _('''Disconnected''') language['establishing_connection'] = _('''Establishing connection...''') +language['association_failed'] = _('''Connection failed: Could not contact the wireless access point.''') +language['access_denied'] = _('''Unable to contact the wicd dameon due to an access denied error from DBus. Please check your DBus configuration.''') diff --git a/wicd/wicd-client.py b/wicd/wicd-client.py index 0c34f7e..7c9d100 100755 --- a/wicd/wicd-client.py +++ b/wicd/wicd-client.py @@ -43,6 +43,18 @@ import pango import atexit from dbus import DBusException +HAS_NOTIFY = True +try: + import pygtk + pygtk.require('2.0') + import pynotify + if not pynotify.init("Wicd"): + print 'could not initalize pynotify' + HAS_NOTIFY = False +except ImportError: + print 'import failed' + HAS_NOTIFY = False + # Wicd specific imports from wicd import wpath from wicd import misc @@ -63,6 +75,11 @@ if not hasattr(gtk, "StatusIcon"): print 'Unable to load tray icon: Missing both egg.trayicon and gtk.StatusIcon modules.' ICON_AVAIL = False +print "Has notifications support", HAS_NOTIFY + +if wpath.no_use_notifications: + print 'Notifications disabled during setup.py configure' + misc.RenameProcess("wicd-client") if __name__ == '__main__': @@ -115,10 +132,11 @@ class TrayIcon(object): else: self.tr = self.StatusTrayIconGUI() self.icon_info = self.TrayConnectionInfo(self.tr, animate) + self.tr.icon_info = self.icon_info def is_embedded(self): if USE_EGG: - raise NotImplementedError + raise NotImplementedError() else: return self.tr.is_embedded() @@ -138,12 +156,37 @@ class TrayIcon(object): self.max_snd_gain = 10000 self.max_rcv_gain = 10000 self.animate = animate + + # keep track of the last state to provide appropriate + # notifications + self._last_bubble = None + self.last_state = None + self.should_notify = True + + self.use_notify = os.path.exists(os.path.join( + os.path.expanduser('~/.wicd'), + 'USE_NOTIFICATIONS')) + if DBUS_AVAIL: self.update_tray_icon() else: handle_no_dbus() self.set_not_connected_state() + def _show_notification(self, title, details, image=None): + if self.should_notify: + 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() + + self.should_notify = False + @catchdbus def wired_profile_chooser(self): """ Launch the wired profile chooser. """ @@ -154,8 +197,12 @@ class TrayIcon(object): """ Sets the icon info for a wired state. """ wired_ip = info[0] self.tr.set_from_file(os.path.join(wpath.images, "wired.png")) - self.tr.set_tooltip(language['connected_to_wired'].replace('$A', - wired_ip)) + status_string = language['connected_to_wired'].replace('$A', + wired_ip) + self.tr.set_tooltip(status_string) + self._show_notification(language['wired_network'], + language['connection_established'], + 'network-wired') @catchdbus def set_wireless_state(self, info): @@ -169,22 +216,38 @@ class TrayIcon(object): if wireless.GetWirelessProperty(cur_net_id, "encryption"): lock = "-lock" - - self.tr.set_tooltip(language['connected_to_wireless'] + status_string = (language['connected_to_wireless'] .replace('$A', self.network) .replace('$B', sig_string) - .replace('$C', str(wireless_ip))) + .replace('$C', str(wireless_ip))) + self.tr.set_tooltip(status_string) self.set_signal_image(int(strength), lock) + self._show_notification(self.network, + language['connection_established'], + 'network-wireless') + 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 = language['wired_network'] + wired = True else: cur_network = info[1] - self.tr.set_tooltip(language['connecting'] + " to " + - cur_network + "...") + status_string = language['connecting'] + " to " + \ + cur_network + "..." + self.tr.set_tooltip(status_string) self.tr.set_from_file(os.path.join(wpath.images, "no-signal.png")) + if wired: + self._show_notification(cur_network, + language['establishing_connection'], + 'network-wired') + else: + self._show_notification(cur_network, + language['establishing_connection'], + 'network-wireless') + @catchdbus def set_not_connected_state(self, info=None): @@ -198,6 +261,7 @@ class TrayIcon(object): else: status = language['not_connected'] self.tr.set_tooltip(status) + self._show_notification(language['disconnected'], None, 'stop') @catchdbus def update_tray_icon(self, state=None, info=None): @@ -206,6 +270,14 @@ class TrayIcon(object): if not state or not info: [state, info] = daemon.GetConnectionStatus() + + # should this state change display a notification? + self.should_notify = not wpath.no_use_notifications and \ + (self.last_state != state) and \ + HAS_NOTIFY and \ + self.use_notify + + self.last_state = state if state == misc.WIRED: self.set_wired_state(info) @@ -552,7 +624,7 @@ class TrayIcon(object): def toggle_wicd_gui(self): """ Toggles the wicd GUI. """ if not self.gui_win: - self.gui_win = gui.appGui() + self.gui_win = gui.appGui(tray=self) elif not self.gui_win.is_visible: self.gui_win.show_win() else: diff --git a/wicd/wicd-daemon.py b/wicd/wicd-daemon.py index 17f3e2d..e0230d9 100644 --- a/wicd/wicd-daemon.py +++ b/wicd/wicd-daemon.py @@ -1667,6 +1667,8 @@ def main(argv): print 'wicd initializing...' print '---------------------------' + print 'wicd is version', wpath.version, wpath.revision + # Open the DBUS session bus = dbus.SystemBus() wicd_bus = dbus.service.BusName('org.wicd.daemon', bus=bus)