Philipp Hörist pushed to branch master at gajim / gajim
Commits: 77613c22 by Philipp Hörist at 2019-12-07T12:14:58Z Accounts: Move changing config setting to gui_interface
- - - - - 71197932 by Philipp Hörist at 2019-12-07T12:14:58Z Simplify remove_account()
Use disable_account() before removing
- - - - - c986abcd by Philipp Hörist at 2019-12-07T12:14:58Z Extend get_connected_accounts()
Add option to exclude Local account from the result
- - - - - b022f883 by Philipp Hörist at 2019-12-07T12:14:58Z Update the state of app actions
This allows us to update certain actions, e.g. when no account is connected
- - - - - 9f5b83e0 by Philipp Hörist at 2019-12-07T12:14:58Z CreateGroupchat: Show only connected accounts
- - - - -
6 changed files:
- gajim/application.py - gajim/common/app.py - gajim/gtk/accounts.py - gajim/gtk/groupchat_creation.py - gajim/gui_interface.py - gajim/roster_window.py
Changes:
===================================== gajim/application.py ===================================== @@ -239,6 +239,7 @@ class GajimApplication(Gtk.Application): self._set_shortcuts() from gajim import gui_menu_builder gui_menu_builder.build_accounts_menu() + self.update_app_actions_state()
app.ged.register_event_handler('feature-discovered', ged.CORE, @@ -535,6 +536,13 @@ class GajimApplication(Gtk.Application): # We go online self.lookup_action(account + action_name).set_enabled(True)
+ def update_app_actions_state(self): + active_accounts = bool(app.get_connected_accounts(exclude_local=True)) + self.lookup_action('create-groupchat').set_enabled(active_accounts) + + enabled_accounts = app.contacts.get_accounts() + self.lookup_action('start-chat').set_enabled(enabled_accounts) + def _set_shortcuts(self): shortcuts = { 'app.quit': ['<Primary>Q'],
===================================== gajim/common/app.py ===================================== @@ -415,12 +415,14 @@ def get_number_of_connected_accounts(accounts_list=None): connected_accounts = connected_accounts + 1 return connected_accounts
-def get_connected_accounts(): +def get_connected_accounts(exclude_local=False): """ Returns a list of CONNECTED accounts """ account_list = [] for account in connections: + if account == 'Local' and exclude_local: + continue if account_is_connected(account): account_list.append(account) return account_list
===================================== gajim/gtk/accounts.py ===================================== @@ -521,7 +521,6 @@ class AccountRow(Gtk.ListBoxRow): app.connections[account].change_status('offline', 'offline') app.connections[account].disconnect(reconnect=False) app.interface.disable_account(account) - app.config.set_per('accounts', account, 'active', False) switch.set_state(state)
old_state = app.config.get_per('accounts', account, 'active') @@ -547,7 +546,6 @@ class AccountRow(Gtk.ListBoxRow): app.interface.enable_account(account) else: app.interface.disable_account(account) - app.config.set_per('accounts', account, 'active', state)
return Gdk.EVENT_PROPAGATE
===================================== gajim/gtk/groupchat_creation.py ===================================== @@ -62,7 +62,7 @@ class CreateGroupchatWindow(Gtk.ApplicationWindow): self.set_focus(self._ui.address_entry)
def _fill_account_combo(self, account): - accounts = app.get_enabled_accounts_with_labels() + accounts = app.get_enabled_accounts_with_labels(connected_only=True) account_liststore = self._ui.account_combo.get_model() for acc in accounts: account_liststore.append(acc)
===================================== gajim/gui_interface.py ===================================== @@ -1762,6 +1762,8 @@ class Interface: self.roster.setup_and_draw_roster() gui_menu_builder.build_accounts_menu() self.roster.send_status(account, 'online', '') + app.config.set_per('accounts', account, 'active', True) + app.app.update_app_actions_state()
def disable_account(self, account): self.roster.close_all(account, force=True) @@ -1796,42 +1798,21 @@ class Interface: 'accounts', account, 'roster_version', '') self.roster.setup_and_draw_roster() gui_menu_builder.build_accounts_menu() + app.config.set_per('accounts', account, 'active', False) + app.app.update_app_actions_state()
def remove_account(self, account): - # Close all opened windows - self.roster.close_all(account, force=True) if account in app.connections: app.connections[account].disconnect(reconnect=False) - app.connections[account].cleanup() - del app.connections[account] + + self.disable_account(account) + app.logger.remove_roster(app.get_jid_from_account(account)) # Delete password must be before del_per() because it calls set_per() # which would recreate the account with defaults values if not found passwords.delete_password(account) app.config.del_per('accounts', account) - del self.instances[account] - if account in app.nicks: - del self.minimized_controls[account] - del app.nicks[account] - del app.block_signed_in_notifications[account] - del app.groups[account] - app.contacts.remove_account(account) - del app.gc_connected[account] - del app.automatic_rooms[account] - del app.to_be_removed[account] - del app.newly_added[account] - del app.sleeper_state[account] - del app.last_message_time[account] - del app.status_before_autoaway[account] - del app.gajim_optional_features[account] - del app.caps_hash[account] - if len(app.connections) >= 2: # Do not merge accounts if only one exists - self.roster.regroup = app.config.get('mergeaccounts') - else: - self.roster.regroup = False - self.roster.setup_and_draw_roster() app.app.remove_account_actions(account) - gui_menu_builder.build_accounts_menu()
window = get_app_window('AccountsWindow') if window is not None:
===================================== gajim/roster_window.py ===================================== @@ -2597,6 +2597,7 @@ class RosterWindow: if app.get_number_of_connected_accounts() == 0: model[iter_][3] = False self.application.set_account_actions_state(obj.conn.name) + self.application.update_app_actions_state() else: # sensitivity for this menuitem model[iter_][3] = True @@ -2652,6 +2653,7 @@ class RosterWindow:
def _nec_signed_in(self, obj): self.application.set_account_actions_state(obj.conn.name, True) + self.application.update_app_actions_state() self.draw_account(obj.conn.name)
def _nec_decrypted_message_received(self, obj):
View it on GitLab: https://dev.gajim.org/gajim/gajim/compare/eef27894bff0235be3598b3bd9c14ca6d6...