More general fix for the OS X keyboard shortcuts not working problem. Fixes #1360849 [m command to merge books no longer functions](https://bugs.launchpad.net/calibre/+bug/1360849)

Add all actions created using the create_action/create_menu_action API
directly to the main window this allows their shortcuts to work on OS X.
This commit is contained in:
Kovid Goyal 2014-08-26 07:29:44 +05:30
parent 85a69325ea
commit 41d110e444
2 changed files with 10 additions and 7 deletions

View File

@ -12,6 +12,7 @@ from PyQt5.Qt import (QToolButton, QAction, QIcon, QObject, QMenu,
QKeySequence) QKeySequence)
from calibre import prints from calibre import prints
from calibre.constants import isosx
from calibre.gui2 import Dispatcher from calibre.gui2 import Dispatcher
from calibre.gui2.keyboard import NameConflict from calibre.gui2.keyboard import NameConflict
@ -191,7 +192,11 @@ class InterfaceAction(QObject):
pass pass
shortcut_action.setShortcuts([QKeySequence(key, shortcut_action.setShortcuts([QKeySequence(key,
QKeySequence.PortableText) for key in keys]) QKeySequence.PortableText) for key in keys])
else:
if isosx:
# In Qt 5 keyboard shortcuts dont work unless the
# action is explicitly added to the main window
self.gui.addAction(shortcut_action)
if attr is not None: if attr is not None:
setattr(self, attr, action) setattr(self, attr, action)
@ -253,6 +258,10 @@ class InterfaceAction(QObject):
self.gui.keyboard.register_shortcut(unique_name, self.gui.keyboard.register_shortcut(unique_name,
shortcut_name, default_keys=keys, shortcut_name, default_keys=keys,
action=ac, description=description, group=self.action_spec[0]) action=ac, description=description, group=self.action_spec[0])
if isosx:
# In Qt 5 keyboard shortcuts dont work unless the
# action is explicitly added to the main window
self.gui.addAction(ac)
if triggered is not None: if triggered is not None:
ac.triggered.connect(triggered) ac.triggered.connect(triggered)
return ac return ac

View File

@ -9,7 +9,6 @@ from functools import partial
from PyQt5.Qt import QToolButton from PyQt5.Qt import QToolButton
from calibre.constants import isosx
from calibre.gui2.actions import InterfaceAction from calibre.gui2.actions import InterfaceAction
class SimilarBooksAction(InterfaceAction): class SimilarBooksAction(InterfaceAction):
@ -31,11 +30,6 @@ class SimilarBooksAction(InterfaceAction):
ac = self.create_action(spec=(text, icon, None, shortcut), ac = self.create_action(spec=(text, icon, None, shortcut),
attr=target) attr=target)
m.addAction(ac) m.addAction(ac)
if isosx:
# For some reason with Qt 5 the keyboard shortcuts for these
# actions dont work unless the actions are added to the main
# window
self.gui.addAction(ac)
ac.triggered.connect(partial(self.show_similar_books, target)) ac.triggered.connect(partial(self.show_similar_books, target))
self.qaction.setMenu(m) self.qaction.setMenu(m)