diff --git a/src/calibre/gui2/preferences/plugins.ui b/src/calibre/gui2/preferences/plugins.ui
index 18f0786a66..83a904eb08 100644
--- a/src/calibre/gui2/preferences/plugins.ui
+++ b/src/calibre/gui2/preferences/plugins.ui
@@ -76,6 +76,10 @@
&Add a new plugin
+
+
+ :/images/plugins.png:/images/plugins.png
+
diff --git a/src/calibre/gui2/shortcuts.py b/src/calibre/gui2/shortcuts.py
index bdd699a69d..5e56435e10 100644
--- a/src/calibre/gui2/shortcuts.py
+++ b/src/calibre/gui2/shortcuts.py
@@ -150,7 +150,7 @@ class Delegate(QStyledItemDelegate):
custom = []
if editor.custom.isChecked():
for x in ('1', '2'):
- sc = getattr(editor, 'shortcut'+x)
+ sc = getattr(editor, 'shortcut'+x, None)
if sc is not None:
custom.append(sc)
@@ -266,6 +266,11 @@ class ShortcutConfig(QWidget):
self.view.scrollTo(index)
+ @property
+ def is_editing(self):
+ return self.view.state() == self.view.EditingState
+
+
if __name__ == '__main__':
from calibre.gui2 import is_ok_to_use_qt
from calibre.gui2.viewer.keys import SHORTCUTS
diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py
index 55abae0392..4485e63373 100644
--- a/src/calibre/gui2/viewer/documentview.py
+++ b/src/calibre/gui2/viewer/documentview.py
@@ -120,6 +120,13 @@ class ConfigDialog(QDialog, Ui_Dialog):
def accept(self, *args):
+ if self.shortcut_config.is_editing:
+ from calibre.gui2 import info_dialog
+ info_dialog(self, _('Still editing'),
+ _('You are in the middle of editing a keyboard shortcut'
+ ' first complete that, by clicking outside the '
+ ' shortcut editing box.'), show=True)
+ return
c = config()
c.set('serif_family', unicode(self.serif_family.currentFont().family()))
c.set('sans_family', unicode(self.sans_family.currentFont().family()))