hotwire-ssh r5 - in trunk/hotssh: . hotvte



Author: walters
Date: Fri May 23 01:51:46 2008
New Revision: 5
URL: http://svn.gnome.org/viewvc/hotwire-ssh?rev=5&view=rev

Log:
Make msgarea global, handle NM changes better


Modified:
   trunk/hotssh/hotvte/vtewindow.py
   trunk/hotssh/sshwindow.py

Modified: trunk/hotssh/hotvte/vtewindow.py
==============================================================================
--- trunk/hotssh/hotvte/vtewindow.py	(original)
+++ trunk/hotssh/hotvte/vtewindow.py	Fri May 23 01:51:46 2008
@@ -24,7 +24,7 @@
 import dbus,dbus.glib,dbus.service
 
 from hotssh.hotvte.vteterm import VteTerminalWidget
-
+from hotssh.hotlib_ui.msgarea import MsgAreaController
 from hotssh.hotlib_ui.quickfind import QuickFindWindow
 
 _logger = logging.getLogger("hotvte.VteWindow")
@@ -96,6 +96,9 @@
         self.__create_ui()
         vbox.pack_start(self.__ui.get_widget('/Menubar'), expand=False)
         
+        self.__msgarea_mgr = MsgAreaController()
+        vbox.pack_start(self.__msgarea_mgr, expand=False)        
+        
         self.connect("key-press-event", self.__on_keypress)
                 
         self.__title = title
@@ -156,6 +159,9 @@
     
     def _get_vbox(self):
         return self.__vbox
+    
+    def _get_msgarea_mgr(self):
+        return self.__msgarea_mgr
 
     def __on_page_switch(self, n, p, pn):
         _logger.debug("got page switch, pn=%d", pn)

Modified: trunk/hotssh/sshwindow.py
==============================================================================
--- trunk/hotssh/sshwindow.py	(original)
+++ trunk/hotssh/sshwindow.py	Fri May 23 01:51:46 2008
@@ -792,8 +792,12 @@
         self._get_notebook().connect('switch-page', self.__on_page_switch)
 
         try:
+            self.__cached_nm_connected = None
             self.__nm_proxy = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
             self.__nm_proxy.connect_to_signal('StateChange', self.__on_nm_state_change)
+            dbus.Interface(self.__nm_proxy, 'org.freedesktop.DBus.Properties').Get('org.freedesktop.NetworkManager',
+                                                                                   'State', reply_handler=self.__on_nm_state_change,
+                                                                                   error_handler=self.__on_dbus_error)
         except dbus.DBusException, e:
             _logger.debug("Couldn't find NetworkManager")
             self.__nm_proxy = None
@@ -861,19 +865,37 @@
         if len(widget.ssh_options) > 1:
             text += _('; Options: ') + (' '.join(map(gobject.markup_escape_text, widget.ssh_options)))        
         id = self.__statusbar.push(self.__statusbar_ctx, text)
-        
-    def __on_nm_state_change(self, *args):
-        self.__sync_nm_state()
-        
-    def __sync_nm_state(self):
-        self.__nm_proxy.GetActiveConnections(reply_handler=self.__on_nm_connections, error_handler=self.__on_dbus_error)
-        
-    def __on_dbus_error(self, *args):
-        _logger.debug("caught DBus error: %r", args, exc_info=True)
+
+    def __on_dbus_error(self, *args, **kwargs):
+        _logger.error("DBus error: %r %r", args, kwargs)
         
     @log_except(_logger)        
-    def __on_nm_connections(self, connections):
-        _logger.debug("nm connections: %s", connections)    
+    def __on_nm_state_change(self, *args):
+        if len(args) > 1:
+            (_, curstate) = args
+        else:
+            curstate = args[0]
+        _logger.debug("nm state: %s", curstate)
+        connected = curstate == 3
+        if (self.__cached_nm_connected is not None) and \
+            (not self.__cached_nm_connected) and connected:
+            self.__do_network_change_notify()
+        self.__cached_nm_connected = connected            
+            
+    def __do_network_change_notify(self):
+        mgr = self._get_msgarea_mgr()
+        msgarea = mgr.new_from_text_and_icon(gtk.STOCK_INFO, _('Network connection changed'), 
+                                                            buttons=[(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)])
+        reconnect = self.__action_group.get_action('ReconnectAll')
+        msgarea.add_stock_button_with_text(reconnect.get_property('label'), 
+                                           reconnect.get_property('stock-id'), gtk.RESPONSE_ACCEPT)
+        msgarea.connect('response', self.__on_msgarea_response)
+        msgarea.show_all()
+        
+    def __on_msgarea_response(self, msgarea, respid):
+        if respid == gtk.RESPONSE_ACCEPT:
+            reconnect = self.__action_group.get_action('ReconnectAll')
+            reconnect.activate()       
         
     @log_except(_logger)        
     def __on_host_status(self, hostmon, host, connected, latency):
@@ -939,6 +961,7 @@
              _('Open a SFTP connection'), self.__open_sftp_cb),            
             ('ConnectionMenu', None, _('Connection')),
             ('Reconnect', gtk.STOCK_CONNECT, _('_Reconnect'), '<control><shift>R', _('Reset connection to server'), self.__reconnect_cb),
+            ('ReconnectAll', gtk.STOCK_CONNECT, _('Re_connect All'), None, _('Reset all connections'), self.__reconnect_all_cb),            
             ]
         self.__action_group = self._merge_ui(self.__actions, self.__ui_string)
         
@@ -986,6 +1009,11 @@
         notebook = self._get_notebook()        
         widget = notebook.get_nth_page(notebook.get_current_page())
         widget.ssh_reconnect()
+        
+    @log_except(_logger)        
+    def __reconnect_all_cb(self, a):
+        for widget in self._get_notebook().get_children():        
+            widget.ssh_reconnect()
 
 class SshApp(VteApp):
     def __init__(self):



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]