From b76b0a6c53576f36908dd62bce32b4cee1bd7401 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 10 May 2020 09:50:37 +0530 Subject: [PATCH] Add a clear search history context menu item to all search boxes --- src/calibre/gui2/search_box.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index 526249d6ed..015476ec65 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -35,6 +35,7 @@ class AsYouType(unicode_type): class SearchLineEdit(QLineEdit): # {{{ key_pressed = pyqtSignal(object) + clear_history = pyqtSignal() select_on_mouse_press = None def keyPressEvent(self, event): @@ -49,14 +50,18 @@ class SearchLineEdit(QLineEdit): # {{{ self.parent().normalize_state() menu = self.createStandardContextMenu() menu.setAttribute(Qt.WA_DeleteOnClose) - for action in menu.actions(): - if action.text().startswith(_('&Paste') + '\t'): - break ac = menu.addAction(_('Paste and &search')) ac.setEnabled(bool(QApplication.clipboard().text())) ac.setIcon(QIcon(I('search.png'))) ac.triggered.connect(self.paste_and_search) - menu.insertAction(action, ac) + for action in menu.actions(): + if action.text().startswith(_('&Paste') + '\t'): + menu.insertAction(action, ac) + break + else: + menu.addAction(ac) + menu.addSeparator() + menu.addAction(_('&Clear search history')).triggered.connect(self.clear_history) menu.exec_(ev.globalPos()) def paste_and_search(self): @@ -110,6 +115,7 @@ class SearchBox2(QComboBox): # {{{ QComboBox.__init__(self, parent) self.line_edit = SearchLineEdit(self) self.setLineEdit(self.line_edit) + self.line_edit.clear_history.connect(self.clear_history) if add_clear_action: self.lineEdit().setClearButtonEnabled(True) ac = self.findChild(QAction, QT_HIDDEN_CLEAR_ACTION) @@ -152,6 +158,10 @@ class SearchBox2(QComboBox): # {{{ self.colorize = colorize self.clear() + def clear_search_history(self): + config[self.opt_name] = [] + self.clear() + def hide_completer_popup(self): try: self.lineEdit().completer().popup().setVisible(False)