From 8c7d5e99a4b61ded0e7c9d213141653e3dda1da1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 3 Feb 2016 16:08:43 +0530 Subject: [PATCH] Add an action to the context menu for the search bar to paste and instantly execute the search. Fixes #1541286 [[Enhancement] Search Bar - PASTE & GO](https://bugs.launchpad.net/calibre/+bug/1541286) --- src/calibre/gui2/search_box.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index cf36c21bc2..c4f838af0d 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -10,9 +10,10 @@ import re, time from functools import partial -from PyQt5.Qt import QComboBox, Qt, QLineEdit, pyqtSlot, QDialog, \ - pyqtSignal, QCompleter, QAction, QKeySequence, QTimer, \ - QIcon, QMenu +from PyQt5.Qt import ( + QComboBox, Qt, QLineEdit, pyqtSlot, QDialog, + pyqtSignal, QCompleter, QAction, QKeySequence, QTimer, + QIcon, QMenu, QApplication, QKeyEvent) from calibre.gui2 import config, error_dialog, question_dialog, gprefs from calibre.gui2.dialogs.confirm_delete import confirm @@ -40,7 +41,22 @@ class SearchLineEdit(QLineEdit): # {{{ def contextMenuEvent(self, ev): self.parent().normalize_state() - return QLineEdit.contextMenuEvent(self, ev) + 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) + menu.exec_(ev.globalPos()) + + def paste_and_search(self): + self.paste() + ev = QKeyEvent(QKeyEvent.KeyPress, Qt.Key_Enter, Qt.NoModifier) + self.keyPressEvent(ev) @pyqtSlot() def paste(self, *args):