From 7c98b044f3fda1ecf237e79fc8c6129feffa26d0 Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Sun, 22 Jan 2012 11:25:22 +0100
Subject: [PATCH] don't allow to open information window when we are offline.
 Fixes #7082

---
 src/chat_control.py     | 68 ++++++++++++++++++++++-------------------
 src/gui_menu_builder.py |  5 +--
 2 files changed, 40 insertions(+), 33 deletions(-)

diff --git a/src/chat_control.py b/src/chat_control.py
index ca9c8cddc8..323dd0cf9f 100644
--- a/src/chat_control.py
+++ b/src/chat_control.py
@@ -1436,22 +1436,22 @@ class ChatControl(ChatControlBase):
 
     def __init__(self, parent_win, contact, acct, session, resource=None):
         ChatControlBase.__init__(self, self.TYPE_ID, parent_win,
-                'chat_control', contact, acct, resource)
+            'chat_control', contact, acct, resource)
 
         self.gpg_is_active = False
         # for muc use:
         # widget = self.xml.get_object('muc_window_actions_button')
         self.actions_button = self.xml.get_object('message_window_actions_button')
         id_ = self.actions_button.connect('clicked',
-                self.on_actions_button_clicked)
+            self.on_actions_button_clicked)
         self.handlers[id_] = self.actions_button
 
         self._formattings_button = self.xml.get_object('formattings_button')
 
         self._add_to_roster_button = self.xml.get_object(
-                'add_to_roster_button')
+            'add_to_roster_button')
         id_ = self._add_to_roster_button.connect('clicked',
-                self._on_add_to_roster_menuitem_activate)
+            self._on_add_to_roster_menuitem_activate)
         self.handlers[id_] = self._add_to_roster_button
 
         self._audio_button = self.xml.get_object('audio_togglebutton')
@@ -1459,14 +1459,14 @@ class ChatControl(ChatControlBase):
         self.handlers[id_] = self._audio_button
         # add a special img
         gtkgui_helpers.add_image_to_button(self._audio_button,
-                'gajim-mic_inactive')
+            'gajim-mic_inactive')
 
         self._video_button = self.xml.get_object('video_togglebutton')
         id_ = self._video_button.connect('toggled', self.on_video_button_toggled)
         self.handlers[id_] = self._video_button
         # add a special img
         gtkgui_helpers.add_image_to_button(self._video_button,
-                'gajim-cam_inactive')
+            'gajim-cam_inactive')
 
         self._send_file_button = self.xml.get_object('send_file_button')
         # add a special img for send file button
@@ -1475,30 +1475,30 @@ class ChatControl(ChatControlBase):
         img.set_from_file(path_to_upload_img)
         self._send_file_button.set_image(img)
         id_ = self._send_file_button.connect('clicked',
-                self._on_send_file_menuitem_activate)
+            self._on_send_file_menuitem_activate)
         self.handlers[id_] = self._send_file_button
 
         self._convert_to_gc_button = self.xml.get_object(
-                'convert_to_gc_button')
+            'convert_to_gc_button')
         id_ = self._convert_to_gc_button.connect('clicked',
-                self._on_convert_to_gc_menuitem_activate)
+            self._on_convert_to_gc_menuitem_activate)
         self.handlers[id_] = self._convert_to_gc_button
 
-        contact_information_button = self.xml.get_object(
-                'contact_information_button')
-        id_ = contact_information_button.connect('clicked',
-                self._on_contact_information_menuitem_activate)
-        self.handlers[id_] = contact_information_button
+        self._contact_information_button = self.xml.get_object(
+            'contact_information_button')
+        id_ = self._contact_information_button.connect('clicked',
+            self._on_contact_information_menuitem_activate)
+        self.handlers[id_] = self._contact_information_button
 
         compact_view = gajim.config.get('compact_view')
         self.chat_buttons_set_visible(compact_view)
         self.widget_set_visible(self.xml.get_object('banner_eventbox'),
-                gajim.config.get('hide_chat_banner'))
+            gajim.config.get('hide_chat_banner'))
 
         self.authentication_button = self.xml.get_object(
-                'authentication_button')
+            'authentication_button')
         id_ = self.authentication_button.connect('clicked',
-                self._on_authentication_button_clicked)
+            self._on_authentication_button_clicked)
         self.handlers[id_] = self.authentication_button
 
         # Add lock image to show chat encryption
@@ -1540,31 +1540,31 @@ class ChatControl(ChatControlBase):
 
         # Hook up signals
         id_ = self.parent_win.window.connect('motion-notify-event',
-                self._on_window_motion_notify)
+            self._on_window_motion_notify)
         self.handlers[id_] = self.parent_win.window
         message_tv_buffer = self.msg_textview.get_buffer()
         id_ = message_tv_buffer.connect('changed',
-                self._on_message_tv_buffer_changed)
+            self._on_message_tv_buffer_changed)
         self.handlers[id_] = message_tv_buffer
 
         widget = self.xml.get_object('avatar_eventbox')
         widget.set_property('height-request', gajim.config.get(
-                'chat_avatar_height'))
+            'chat_avatar_height'))
         id_ = widget.connect('enter-notify-event',
-                self.on_avatar_eventbox_enter_notify_event)
+            self.on_avatar_eventbox_enter_notify_event)
         self.handlers[id_] = widget
 
         id_ = widget.connect('leave-notify-event',
-                self.on_avatar_eventbox_leave_notify_event)
+            self.on_avatar_eventbox_leave_notify_event)
         self.handlers[id_] = widget
 
         id_ = widget.connect('button-press-event',
-                self.on_avatar_eventbox_button_press_event)
+            self.on_avatar_eventbox_button_press_event)
         self.handlers[id_] = widget
 
         widget = self.xml.get_object('location_eventbox')
         id_ = widget.connect('button-release-event',
-                self.on_location_eventbox_button_release_event)
+            self.on_location_eventbox_button_release_event)
         self.handlers[id_] = widget
 
         for key in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '0', '#'):
@@ -1613,7 +1613,7 @@ class ChatControl(ChatControlBase):
             if not resource:
                 resource = contact.resource
             session = gajim.connections[self.account].find_controlless_session(
-                    self.contact.jid, resource)
+                self.contact.jid, resource)
 
         self.setup_seclabel(self.xml.get_object('label_selector'))
         if session:
@@ -1626,8 +1626,7 @@ class ChatControl(ChatControlBase):
         # Enable encryption if needed
         self.no_autonegotiation = False
         e2e_is_active = self.session and self.session.enable_encryption
-        gpg_pref = gajim.config.get_per('contacts', contact.jid,
-                'gpg_enabled')
+        gpg_pref = gajim.config.get_per('contacts', contact.jid, 'gpg_enabled')
 
         # try GPG first
         if not e2e_is_active and gpg_pref and \
@@ -1636,15 +1635,15 @@ class ChatControl(ChatControlBase):
             self.gpg_is_active = True
             gajim.encrypted_chats[self.account].append(contact.jid)
             msg = _('GPG encryption enabled')
-            ChatControlBase.print_conversation_line(self, msg,
-                    'status', '', None)
+            ChatControlBase.print_conversation_line(self, msg, 'status', '',
+                None)
 
             if self.session:
                 self.session.loggable = gajim.config.get_per('accounts',
-                        self.account, 'log_encrypted_sessions')
+                    self.account, 'log_encrypted_sessions')
             # GPG is always authenticated as we use GPG's WoT
             self._show_lock_image(self.gpg_is_active, 'GPG', self.gpg_is_active,
-                    self.session and self.session.is_loggable(), True)
+                self.session and self.session.is_loggable(), True)
 
         self.update_ui()
         # restore previous conversation
@@ -1742,6 +1741,13 @@ class ChatControl(ChatControlBase):
         else:
             self._convert_to_gc_button.set_sensitive(False)
 
+        # Information
+        if gajim.account_is_disconnected(self.account):
+            self._contact_information_button.set_sensitive(False)
+        else:
+            self._contact_information_button.set_sensitive(True)
+
+
     def update_all_pep_types(self):
         for pep_type in self._pep_images:
             self.update_pep(pep_type)
diff --git a/src/gui_menu_builder.py b/src/gui_menu_builder.py
index 30fafc9c94..ded6e6dc19 100644
--- a/src/gui_menu_builder.py
+++ b/src/gui_menu_builder.py
@@ -272,8 +272,9 @@ control=None, gc_contact=None):
 
     # Unsensitive many items when account is offline
     if gajim.account_is_disconnected(account):
-        for widget in (start_chat_menuitem,     rename_menuitem,
-        edit_groups_menuitem, send_file_menuitem, convert_to_gc_menuitem):
+        for widget in (start_chat_menuitem, rename_menuitem,
+        edit_groups_menuitem, send_file_menuitem, convert_to_gc_menuitem,
+        information_menuitem):
             widget.set_sensitive(False)
 
     if not show_start_chat:
-- 
GitLab