Philipp Hörist pushed to branch master at gajim / gajim
Commits: 2e3f8a27 by lovetox at 2022-01-02T12:50:50+01:00 Application: Init icon theme in startup()
- Move some imports to the top
- - - - - ec474809 by lovetox at 2022-01-02T14:16:00+01:00 Actions: Move actions into application module
- - - - -
5 changed files:
- − gajim/app_actions.py - gajim/common/const.py - gajim/gtk/application.py - gajim/gtk/menus.py - gajim/gtk/util.py
Changes:
===================================== gajim/app_actions.py deleted ===================================== @@ -1,334 +0,0 @@ -# Copyright (C) 2017 Philipp Hörist <philipp AT hoerist.com> -# -# This file is part of Gajim. -# -# Gajim is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published -# by the Free Software Foundation; version 3 only. -# -# Gajim 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 Gajim. If not, see http://www.gnu.org/licenses/. - -from __future__ import annotations - -from typing import Optional - -from gi.repository import Gtk -from gi.repository import Gdk -from gi.repository import GLib -from gi.repository import Gio - -from nbxmpp import JID - -from gajim.common import app -from gajim.common import helpers -from gajim.common.app import interface -from gajim.common.exceptions import GajimGeneralException - -from gajim.gui.dialogs import ShortcutsWindow -from gajim.gui.about import AboutDialog -from gajim.gui.discovery import ServiceDiscoveryWindow -from gajim.gui.util import open_window -from gajim.gui.util import get_app_window - -# General Actions - - -def on_add_contact_jid(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - jid = param.get_string() or None - if jid is not None: - jid = JID.from_string(jid) - open_window('AddContact', account=None, jid=jid) - - -# Application Menu Actions - - -def on_preferences(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - open_window('Preferences') - - -def on_plugins(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - open_window('PluginsWindow') - - -def on_accounts(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - window = open_window('AccountsWindow') - account = param.get_string() - if account: - window.select_account(account) - - -def on_history_manager(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - open_window('HistoryManager') - - -def on_bookmarks(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - open_window('Bookmarks', account=account) - - -def on_quit(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - app.window.quit() - - -def on_new_chat(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - window = open_window('StartChatDialog') - search_text = param.get_string() - if search_text: - window.set_search_text(search_text) - - -# Accounts Actions - - -def on_profile(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - open_window('ProfileWindow', account=account) - - -def on_send_server_message(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - server = app.settings.get_account_setting(account, 'hostname') - server += '/announce/online' - open_window('SingleMessageWindow', account=account, recipients=server) - - -def on_service_disco(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - server_jid = app.settings.get_account_setting(account, 'hostname') - if server_jid in interface.instances[account]['disco']: - interface.instances[account]['disco'][server_jid].\ - window.present() - else: - try: - # Object will add itself to the window dict - ServiceDiscoveryWindow(account, address_entry=True) - except GajimGeneralException: - pass - - -def on_create_gc(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - open_window('CreateGroupchatWindow', account=account or None) - - -def on_add_contact(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account, jid = param.get_strv() - if jid is not None: - jid = JID.from_string(jid) - open_window('AddContact', account=account or None, jid=jid or None) - - -def on_single_message(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - open_window('SingleMessageWindow', account=account) - - -def on_add_account(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - open_window('AccountWizard') - - -def on_import_contacts(_action: Gio.SimpleAction, - param: Optional[GLib.Variant]) -> None: - open_window('SynchronizeAccounts', account=param.get_string()) - - -# Advanced Actions - -def on_pep_config(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - open_window('PEPConfig', account=account) - - -def on_mam_preferences(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - open_window('MamPreferences', account=account) - - -def on_blocking_list(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - open_window('BlockingList', account=account) - - -def on_history_sync(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - open_window('HistorySyncAssistant', - account=account) - - -def on_server_info(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - open_window('ServerInfo', account=account) - - -def on_xml_console(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - open_window('XMLConsoleWindow') - - -def on_manage_proxies(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - open_window('ManageProxies') - - -# Admin Actions - - -def on_set_motd(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - server = app.settings.get_account_setting(account, 'hostname') - server += '/announce/motd' - open_window('SingleMessageWindow', account=account, recipients=server) - - -def on_update_motd(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - server = app.settings.get_account_setting(account, 'hostname') - server += '/announce/motd/update' - open_window('SingleMessageWindow', account=account, recipients=server) - - -def on_delete_motd(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account = param.get_string() - app.connections[account].get_module('Announce').delete_motd() - -# Help Actions - - -def on_contents(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - helpers.open_uri('https://dev.gajim.org/gajim/gajim/wikis') - - -def on_faq(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - helpers.open_uri('https://dev.gajim.org/gajim/gajim/wikis/help/gajimfaq') - - -def on_keyboard_shortcuts(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - ShortcutsWindow() - - -def on_features(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - open_window('Features') - - -def on_about(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - AboutDialog() - -# View Actions - - -def on_file_transfers(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - if interface.instances['file_transfers']. \ - window.get_property('visible'): - interface.instances['file_transfers'].window.present() - else: - interface.instances['file_transfers'].window.show_all() - - -def on_open_event(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - dict_ = param.unpack() - app.interface.handle_event( - dict_['account'], dict_['jid'], dict_['notif_detail']) - - -def on_mark_as_read(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - dict_ = param.unpack() - account, jid = dict_['account'], dict_['jid'] - app.window.mark_as_read(account, JID.from_string(jid)) - -# Other Actions - - -def toggle_ipython(_action: Gio.SimpleAction, - _param: Optional[GLib.Variant]) -> None: - """ - Show/hide the ipython window - """ - win = app.ipython_window - if win and win.window.is_visible(): - win.present() - else: - app.interface.create_ipython_window() - - -def open_mail(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - uri = param.get_string() - if not uri.startswith('mailto:'): - uri = 'mailto:%s' % uri - helpers.open_uri(uri) - - -def open_link(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account, uri = param.get_strv() - helpers.open_uri(uri, account=account) - - -def copy_text(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - text = param.get_string() - clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) - clip.set_text(text, -1) - - -def start_chat(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account, jid = param.get_strv() - app.interface.start_chat_from_jid(account, jid) - -def forget_groupchat(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account, jid = param.unpack() - room_jid = JID.from_string(jid) - window = get_app_window('StartChatDialog') - window.remove_row(account, str(room_jid)) - - client = app.get_client(account) - client.get_module('MUC').leave(room_jid) - client.get_module('Bookmarks').remove(room_jid) - - app.storage.archive.remove_chat_history( - account, str(room_jid), groupchat=True) - -def on_groupchat_join(_action: Gio.SimpleAction, - param: GLib.Variant) -> None: - account, jid = param.get_strv() - open_window('GroupchatJoin', account=account, jid=jid)
===================================== gajim/common/const.py ===================================== @@ -895,6 +895,8 @@ def is_active(self): 'error' ]
+GAJIM_FAQ_URI = 'https://dev.gajim.org/gajim/gajim/wikis/help/gajimfaq' +GAJIM_WIKI_URI = 'https://dev.gajim.org/gajim/gajim/wikis'
URI_SCHEMES = { 'aaa://',
===================================== gajim/gtk/application.py ===================================== @@ -53,6 +53,7 @@ from gi.repository import Gio from gi.repository import GLib from gi.repository import Gtk +from gi.repository import Gdk
import gajim from gajim.common import app @@ -60,6 +61,8 @@ from gajim.common import configpaths from gajim.common import logging_helpers from gajim.common.client import Client +from gajim.common.const import GAJIM_FAQ_URI +from gajim.common.const import GAJIM_WIKI_URI from gajim.common.i18n import _ from gajim.common.nec import NetworkEvent from gajim.common.task_manager import TaskManager @@ -67,7 +70,19 @@ from gajim.common.storage.archive import MessageArchiveStorage from gajim.common.settings import Settings from gajim.common.settings import LegacyConfig +from gajim.common.helpers import open_uri from gajim.common.helpers import load_json +from gajim.common.cert_store import CertificateStore +from gajim.common.exceptions import GajimGeneralException + +from gajim.gui import menus +from gajim.gui.builder import get_builder +from gajim.gui.util import load_user_iconsets +from gajim.gui.dialogs import ShortcutsWindow +from gajim.gui.about import AboutDialog +from gajim.gui.discovery import ServiceDiscoveryWindow +from gajim.gui.util import open_window +from gajim.gui.util import get_app_window
ActionListT = list[tuple[str, @@ -209,16 +224,15 @@ def _startup(self, _application: GajimApplication) -> None: app.storage.archive = MessageArchiveStorage() app.storage.archive.init()
- from gajim.gui.util import load_user_iconsets + icon_theme = Gtk.IconTheme.get_default() + icon_theme.append_search_path(str(configpaths.get('ICONS'))) load_user_iconsets()
- from gajim.common.cert_store import CertificateStore app.cert_store = CertificateStore() app.task_manager = TaskManager()
# Set Application Menu app.app = self - from gajim.gui.builder import get_builder builder = get_builder('application_menu.ui') self.set_menubar(cast(Gio.Menu, builder.get_object('menubar')))
@@ -227,7 +241,6 @@ def _startup(self, _application: GajimApplication) -> None: self.interface.run(self) self.add_actions() self._load_shortcuts() - from gajim.gui import menus menus.build_accounts_menu() self.update_app_actions_state()
@@ -387,35 +400,30 @@ def warn_with_traceback(message: Union[Warning, str], warnings.filterwarnings(action="always")
def add_actions(self) -> None: - ''' Build Application Actions ''' - from gajim import app_actions - - # General Stateful Actions actions: ActionListT = [ - ('quit', None, app_actions.on_quit), - ('add-account', None, app_actions.on_add_account), - ('add-contact', None, app_actions.on_add_contact), - ('manage-proxies', None, app_actions.on_manage_proxies), - ('history-manager', None, app_actions.on_history_manager), - ('preferences', None, app_actions.on_preferences), - ('plugins', None, app_actions.on_plugins), - ('xml-console', None, app_actions.on_xml_console), - ('file-transfer', None, app_actions.on_file_transfers), - ('shortcuts', None, app_actions.on_keyboard_shortcuts), - ('features', None, app_actions.on_features), - ('content', None, app_actions.on_contents), - ('about', None, app_actions.on_about), - ('faq', None, app_actions.on_faq), - ('ipython', None, app_actions.toggle_ipython), - ('start-chat', 's', app_actions.on_new_chat), - ('accounts', 's', app_actions.on_accounts), - ('add-contact', 's', app_actions.on_add_contact_jid), - ('copy-text', 's', app_actions.copy_text), - ('open-link', 'as', app_actions.open_link), - ('open-mail', 's', app_actions.open_mail), - ('create-groupchat', 's', app_actions.on_create_gc), - ('forget-groupchat', 'as', app_actions.forget_groupchat), - ('groupchat-join', 'as', app_actions.on_groupchat_join), + ('quit', None, self._on_quit_action), + ('add-account', None, self._on_add_account_action), + ('manage-proxies', None, self._on_manage_proxies_action), + ('history-manager', None, self._on_history_manager_action), + ('preferences', None, self._on_preferences_action), + ('plugins', None, self._on_plugins_action), + ('xml-console', None, self._on_xml_console_action), + ('file-transfer', None, self._on_file_transfer_action), + ('shortcuts', None, self._on_shortcuts_action), + ('features', None, self._on_features_action), + ('content', None, self._on_content_action), + ('about', None, self._on_about_action), + ('faq', None, self._on_faq_action), + ('ipython', None, self._on_ipython_action), + ('start-chat', 's', self._on_new_chat_action), + ('accounts', 's', self._on_accounts_action), + ('add-contact', 's', self._on_add_contact_action), + ('copy-text', 's', self._on_copy_text_action), + ('open-link', 'as', self._on_open_link_action), + ('open-mail', 's', self._on_open_mail_action), + ('create-groupchat', 's', self._on_create_groupchat_action), + ('forget-groupchat', 'as', self._on_forget_groupchat_action), + ('groupchat-join', 'as', self._on_groupchat_join_action), ]
for action in actions: @@ -436,33 +444,33 @@ def add_actions(self) -> None: else: self.add_account_actions(accounts_list[0])
- @staticmethod - def _get_account_actions(account: str) -> list[tuple[str, Any, str, str]]: - from gajim import app_actions as a - + def _get_account_actions(self, + account: str) -> list[tuple[str, Any, str, str]]: if account == 'Local': return []
+ # pylint: disable=line-too-long return [ - ('-bookmarks', a.on_bookmarks, 'online', 's'), - ('-start-single-chat', a.on_single_message, 'online', 's'), - ('-start-chat', a.start_chat, 'online', 'as'), - ('-add-contact', a.on_add_contact, 'online', 'as'), - ('-services', a.on_service_disco, 'online', 's'), - ('-profile', a.on_profile, 'online', 's'), - ('-server-info', a.on_server_info, 'online', 's'), - ('-archive', a.on_mam_preferences, 'feature', 's'), - ('-pep-config', a.on_pep_config, 'online', 's'), - ('-sync-history', a.on_history_sync, 'online', 's'), - ('-blocking', a.on_blocking_list, 'feature', 's'), - ('-send-server-message', a.on_send_server_message, 'online', 's'), - ('-set-motd', a.on_set_motd, 'online', 's'), - ('-update-motd', a.on_update_motd, 'online', 's'), - ('-delete-motd', a.on_delete_motd, 'online', 's'), - ('-open-event', a.on_open_event, 'always', 'a{sv}'), - ('-mark-as-read', a.on_mark_as_read, 'always', 'a{sv}'), - ('-import-contacts', a.on_import_contacts, 'online', 's'), + ('-bookmarks', self._on_bookmarks_action, 'online', 's'), + ('-start-single-chat', self._on_start_single_message_action, 'online', 's'), + ('-open-chat', self._on_open_chat_action, 'online', 'as'), + ('-add-contact', self._on_add_contact_account_action, 'online', 'as'), + ('-services', self._on_services_action, 'online', 's'), + ('-profile', self._on_profile_action, 'online', 's'), + ('-server-info', self._on_server_info_action, 'online', 's'), + ('-archive', self._on_archive_action, 'feature', 's'), + ('-pep-config', self._on_pep_config_action, 'online', 's'), + ('-sync-history', self._on_sync_history_action, 'online', 's'), + ('-blocking', self._on_blocking_action, 'feature', 's'), + ('-send-server-message', self._on_send_server_message_action, 'online', 's'), + ('-set-motd', self._on_set_motd_action, 'online', 's'), + ('-update-motd', self._on_update_motd_action, 'online', 's'), + ('-delete-motd', self._on_delete_motd_action, 'online', 's'), + ('-open-event', self._on_open_event_action, 'always', 'a{sv}'), + ('-mark-as-read', self._on_mark_as_read_action, 'always', 'a{sv}'), + ('-import-contacts', self._on_import_contacts_action, 'online', 's'), ] + # pylint: enable=line-too-long
def add_account_actions(self, account: str) -> None: for action in self._get_account_actions(account): @@ -555,3 +563,286 @@ def _on_disconnect(event: NetworkEvent) -> None:
for client in accounts_to_disconnect.values(): client.change_status('offline', kwargs.get('message', '')) + + # Action Callbacks + + @staticmethod + def _on_add_contact_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + jid = param.get_string() or None + if jid is not None: + jid = JID.from_string(jid) + open_window('AddContact', account=None, jid=jid) + + @staticmethod + def _on_preferences_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + open_window('Preferences') + + @staticmethod + def _on_plugins_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + open_window('PluginsWindow') + + @staticmethod + def _on_accounts_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + window = open_window('AccountsWindow') + account = param.get_string() + if account: + window.select_account(account) + + @staticmethod + def _on_history_manager_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + open_window('HistoryManager') + + @staticmethod + def _on_bookmarks_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + open_window('Bookmarks', account=account) + + @staticmethod + def _on_quit_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + app.window.quit() + + @staticmethod + def _on_new_chat_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + window = open_window('StartChatDialog') + search_text = param.get_string() + if search_text: + window.set_search_text(search_text) + + @staticmethod + def _on_profile_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + open_window('ProfileWindow', account=account) + + @staticmethod + def _on_send_server_message_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + server = app.settings.get_account_setting(account, 'hostname') + server += '/announce/online' + open_window('SingleMessageWindow', account=account, recipients=server) + + @staticmethod + def _on_services_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + server_jid = app.settings.get_account_setting(account, 'hostname') + disco = app.interface.instances[account]['disco'] + if server_jid in disco: + disco[server_jid].window.present() + else: + try: + # Object will add itself to the window dict + ServiceDiscoveryWindow(account, address_entry=True) + except GajimGeneralException: + pass + + @staticmethod + def _on_create_groupchat_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + open_window('CreateGroupchatWindow', account=account or None) + + @staticmethod + def _on_add_contact_account_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account, jid = param.get_strv() + if jid is not None: + jid = JID.from_string(jid) + open_window('AddContact', account=account or None, jid=jid or None) + + @staticmethod + def _on_start_single_message_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + open_window('SingleMessageWindow', account=account) + + @staticmethod + def _on_add_account_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + open_window('AccountWizard') + + @staticmethod + def _on_import_contacts_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + open_window('SynchronizeAccounts', account=param.get_string()) + + @staticmethod + def _on_pep_config_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + open_window('PEPConfig', account=account) + + @staticmethod + def _on_archive_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + open_window('MamPreferences', account=account) + + @staticmethod + def _on_blocking_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + open_window('BlockingList', account=account) + + @staticmethod + def _on_sync_history_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + open_window('HistorySyncAssistant', + account=account) + + @staticmethod + def _on_server_info_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + open_window('ServerInfo', account=account) + + @staticmethod + def _on_xml_console_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + open_window('XMLConsoleWindow') + + @staticmethod + def _on_manage_proxies_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + open_window('ManageProxies') + + @staticmethod + def _on_set_motd_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + server = app.settings.get_account_setting(account, 'hostname') + server += '/announce/motd' + open_window('SingleMessageWindow', account=account, recipients=server) + + @staticmethod + def _on_update_motd_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + server = app.settings.get_account_setting(account, 'hostname') + server += '/announce/motd/update' + open_window('SingleMessageWindow', account=account, recipients=server) + + @staticmethod + def _on_delete_motd_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account = param.get_string() + app.connections[account].get_module('Announce').delete_motd() + + @staticmethod + def _on_content_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + open_uri(GAJIM_WIKI_URI) + + @staticmethod + def _on_faq_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + open_uri(GAJIM_FAQ_URI) + + @staticmethod + def _on_shortcuts_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + ShortcutsWindow() + + @staticmethod + def _on_features_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + open_window('Features') + + @staticmethod + def _on_about_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + AboutDialog() + + @staticmethod + def _on_file_transfer_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + + ft = app.interface.instances['file_transfers'] + if ft.window.get_property('visible'): + ft.window.present() + else: + ft.window.show_all() + + @staticmethod + def _on_open_event_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + dict_ = param.unpack() + app.interface.handle_event( + dict_['account'], dict_['jid'], dict_['notif_detail']) + + @staticmethod + def _on_mark_as_read_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + dict_ = param.unpack() + account, jid = dict_['account'], dict_['jid'] + app.window.mark_as_read(account, JID.from_string(jid)) + + @staticmethod + def _on_ipython_action(_action: Gio.SimpleAction, + _param: Optional[GLib.Variant]) -> None: + """ + Show/hide the ipython window + """ + win = app.ipython_window + if win and win.window.is_visible(): + win.present() + else: + app.interface.create_ipython_window() + + @staticmethod + def _on_open_mail_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + uri = param.get_string() + if not uri.startswith('mailto:'): + uri = 'mailto:%s' % uri + open_uri(uri) + + @staticmethod + def _on_open_link_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account, uri = param.get_strv() + open_uri(uri, account=account) + + @staticmethod + def _on_copy_text_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + text = param.get_string() + clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) + clip.set_text(text, -1) + + @staticmethod + def _on_open_chat_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account, jid = param.get_strv() + app.interface.start_chat_from_jid(account, jid) + + @staticmethod + def _on_forget_groupchat_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account, jid = param.unpack() + room_jid = JID.from_string(jid) + window = get_app_window('StartChatDialog') + window.remove_row(account, str(room_jid)) + + client = app.get_client(account) + client.get_module('MUC').leave(room_jid) + client.get_module('Bookmarks').remove(room_jid) + + app.storage.archive.remove_chat_history( + account, str(room_jid), groupchat=True) + + @staticmethod + def _on_groupchat_join_action(_action: Gio.SimpleAction, + param: GLib.Variant) -> None: + account, jid = param.get_strv() + open_window('GroupchatJoin', account=account, jid=jid)
===================================== gajim/gtk/menus.py ===================================== @@ -364,7 +364,7 @@ def get_conv_uri_context_menu(account: str, uri: URI) -> Optional[Gtk.Menu]: else: context_menu = [ ('copy-text', _('Copy XMPP Address')), - ('-start-chat', _('Start Chat')), + ('-open-chat', _('Start Chat')), ('-add-contact', _('Add to Contact List…')), ]
@@ -390,7 +390,7 @@ def get_conv_uri_context_menu(account: str, uri: URI) -> Optional[Gtk.Menu]: context_menu = [ ('copy-text', _('Copy XMPP Address/Email')), ('open-mail', _('Open Email Composer')), - ('-start-chat', _('Start Chat')), + ('-open-chat', _('Start Chat')), ('groupchat-join', _('Join Groupchat')), ('-add-contact', _('Add to Contact List…')), ]
===================================== gajim/gtk/util.py ===================================== @@ -58,10 +58,6 @@ from .const import GajimIconSet from .const import WINDOW_MODULES
-_icon_theme = Gtk.IconTheme.get_default() -if _icon_theme is not None: - _icon_theme.append_search_path(str(configpaths.get('ICONS'))) -
log = logging.getLogger('gajim.gui.util')
@@ -155,7 +151,7 @@ def set_urgency_hint(window: Any, setting: bool) -> None:
def icon_exists(name: str) -> bool: - return _icon_theme.has_icon(name) + return Gtk.IconTheme.get_default().has_icon(name)
def load_icon_info(icon_name: str, @@ -170,14 +166,16 @@ def load_icon_info(icon_name: str, log.warning('Could not determine scale factor') scale = 1
+ icon_theme = Gtk.IconTheme.get_default() + try: - iconinfo = _icon_theme.lookup_icon_for_scale( + iconinfo = icon_theme.lookup_icon_for_scale( icon_name, size, scale, flags) if iconinfo is None: log.info('No icon found for %s', icon_name) return None return iconinfo - except GLib.GError as error: + except GLib.Error as error: log.error('Unable to load icon %s: %s', icon_name, str(error)) return None
@@ -240,11 +238,13 @@ def load_user_iconsets() -> None: if not iconsets_path.exists(): return
+ icon_theme = Gtk.IconTheme.get_default() + for path in iconsets_path.iterdir(): if not path.is_dir(): continue log.info('Found iconset: %s', path.stem) - _icon_theme.append_search_path(str(path)) + icon_theme.append_search_path(str(path))
def get_available_iconsets() -> List[str]: @@ -405,8 +405,9 @@ def get_image_button(icon_name: str, tooltip: str,
def get_image_from_icon_name(icon_name: str, scale: int) -> Any: + icon_theme = Gtk.IconTheme.get_default() icon = get_icon_name(icon_name) - surface = _icon_theme.load_surface(icon, 16, scale, None, 0) + surface = icon_theme.load_surface(icon, 16, scale, None, 0) return Gtk.Image.new_from_surface(surface)
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/0a1b8b027057c4cf0dec2813e62c7a8f...