From d1772d410235592b482e3b08b1863f6624d9fe6b Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 19 Feb 2023 15:52:21 +0100 Subject: Adding upstream version 2.0.3. Signed-off-by: Daniel Baumann --- deluge/ui/gtk3/menubar_osx.py | 87 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 deluge/ui/gtk3/menubar_osx.py (limited to 'deluge/ui/gtk3/menubar_osx.py') diff --git a/deluge/ui/gtk3/menubar_osx.py b/deluge/ui/gtk3/menubar_osx.py new file mode 100644 index 0000000..1df6fab --- /dev/null +++ b/deluge/ui/gtk3/menubar_osx.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2007-2009 Andrew Resch +# +# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with +# the additional special exception to link portions of this program with the OpenSSL library. +# See LICENSE for more details. +# + +from __future__ import unicode_literals + +from gi.repository.Gdk import ModifierType +from gi.repository.Gtk import SeparatorMenuItem, accel_groups_from_object +from gi.repository.Gtk.AccelFlags import VISIBLE + +from deluge.configmanager import ConfigManager + + +def accel_swap(item, group, skey, smod, dkey, dmod): + # Accel map hack broken, see ticket #3078 + # item.remove_accelerator(group, ord(skey), smod) + item.add_accelerator('activate', group, ord(dkey), dmod, VISIBLE) + + +def accel_meta(item, group, key): + accel_swap(item, group, key, ModifierType.CONTROL_MASK, key, ModifierType.META_MASK) + + +def menubar_osx(gtkui, osxapp): + main_builder = gtkui.mainwindow.get_builder() + menubar = main_builder.get_object('menubar') + group = accel_groups_from_object(gtkui.mainwindow.window)[0] + + config = ConfigManager('gtk3ui.conf') + + # NOTE: accel maps doesn't work with glade file format + # because of libglade not setting MenuItem accel groups + # That's why we remove / set accelerators by hand... (dirty) + # Clean solution: migrate glades files to gtkbuilder format + file_menu = main_builder.get_object('menu_file').get_submenu() + file_items = file_menu.get_children() + accel_meta(file_items[0], group, 'o') + accel_meta(file_items[1], group, 'n') + quit_all_item = file_items[3] + accel_swap( + quit_all_item, + group, + 'q', + ModifierType.SHIFT_MASK | ModifierType.CONTROL_MASK, + 'q', + ModifierType.SHIFT_MASK | ModifierType.META_MASK, + ) + for item in range(2, len(file_items)): # remove quits + file_menu.remove(file_items[item]) + + menu_widget = main_builder.get_object('menu_edit') + edit_menu = menu_widget.get_submenu() + edit_items = edit_menu.get_children() + pref_item = edit_items[0] + accel_swap( + pref_item, group, 'p', ModifierType.CONTROL_MASK, ',', ModifierType.META_MASK + ) + edit_menu.remove(pref_item) + + conn_item = edit_items[1] + accel_meta(conn_item, group, 'm') + edit_menu.remove(conn_item) + + menubar.remove(menu_widget) + + help_menu = main_builder.get_object('menu_help').get_submenu() + help_items = help_menu.get_children() + about_item = help_items[4] + help_menu.remove(about_item) + help_menu.remove(help_items[3]) # separator + + menubar.hide() + osxapp.set_menu_bar(menubar) + # populate app menu + osxapp.insert_app_menu_item(about_item, 0) + osxapp.insert_app_menu_item(SeparatorMenuItem(), 1) + osxapp.insert_app_menu_item(pref_item, 2) + if not config['standalone']: + osxapp.insert_app_menu_item(conn_item, 3) + if quit_all_item.get_visible(): + osxapp.insert_app_menu_item(SeparatorMenuItem(), 4) + osxapp.insert_app_menu_item(quit_all_item, 5) -- cgit v1.2.3