diff --git a/src/calibre/gui2/actions/__init__.py b/src/calibre/gui2/actions/__init__.py index dcaf846a18..6d3f16d89d 100644 --- a/src/calibre/gui2/actions/__init__.py +++ b/src/calibre/gui2/actions/__init__.py @@ -163,8 +163,10 @@ class InterfaceAction(QObject): else: action = QAction(text, self.gui) if attr == 'qaction': - mt = (action.text() if self.action_menu_clone_qaction is True else - unicode_type(self.action_menu_clone_qaction)) + if hasattr(self.action_menu_clone_qaction, 'rstrip'): + mt = unicode_type(self.action_menu_clone_qaction) + else: + mt = action.text() self.menuless_qaction = ma = QAction(action.icon(), mt, self.gui) ma.triggered.connect(action.trigger) for a in ((action, ma) if attr == 'qaction' else (action,)): @@ -198,6 +200,7 @@ class InterfaceAction(QObject): shortcut_action.setShortcuts([QKeySequence(key, QKeySequence.PortableText) for key in keys]) else: + self.shortcut_action_for_context_menu = shortcut_action if isosx: # In Qt 5 keyboard shortcuts dont work unless the # action is explicitly added to the main window diff --git a/src/calibre/gui2/bars.py b/src/calibre/gui2/bars.py index 7df3a5f338..046004557b 100644 --- a/src/calibre/gui2/bars.py +++ b/src/calibre/gui2/bars.py @@ -410,7 +410,11 @@ if isosx: if what is None: m.addSeparator() elif what in iactions: - m.addAction(CloneAction(iactions[what].qaction, m)) + ia = iactions[what] + ac = ia.qaction + if not ac.menu() and hasattr(ia, 'shortcut_action_for_context_menu'): + ac = ia.shortcut_action_for_context_menu + m.addAction(CloneAction(ac, m)) class MenuBar(QObject): @@ -499,7 +503,11 @@ else: if what is None: m.addSeparator() elif what in iactions: - m.addAction(iactions[what].qaction) + ia = iactions[what] + ac = ia.qaction + if not ac.menu() and hasattr(ia, 'shortcut_action_for_context_menu'): + ac = ia.shortcut_action_for_context_menu + m.addAction(ac) from calibre.gui2.dbus_export.widgets import factory