Add a clear search history context menu item to all search boxes

This commit is contained in:
Kovid Goyal 2020-05-10 09:50:37 +05:30
parent 555af8ab0e
commit b76b0a6c53
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -35,6 +35,7 @@ class AsYouType(unicode_type):
class SearchLineEdit(QLineEdit): # {{{ class SearchLineEdit(QLineEdit): # {{{
key_pressed = pyqtSignal(object) key_pressed = pyqtSignal(object)
clear_history = pyqtSignal()
select_on_mouse_press = None select_on_mouse_press = None
def keyPressEvent(self, event): def keyPressEvent(self, event):
@ -49,14 +50,18 @@ class SearchLineEdit(QLineEdit): # {{{
self.parent().normalize_state() self.parent().normalize_state()
menu = self.createStandardContextMenu() menu = self.createStandardContextMenu()
menu.setAttribute(Qt.WA_DeleteOnClose) menu.setAttribute(Qt.WA_DeleteOnClose)
for action in menu.actions():
if action.text().startswith(_('&Paste') + '\t'):
break
ac = menu.addAction(_('Paste and &search')) ac = menu.addAction(_('Paste and &search'))
ac.setEnabled(bool(QApplication.clipboard().text())) ac.setEnabled(bool(QApplication.clipboard().text()))
ac.setIcon(QIcon(I('search.png'))) ac.setIcon(QIcon(I('search.png')))
ac.triggered.connect(self.paste_and_search) 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()) menu.exec_(ev.globalPos())
def paste_and_search(self): def paste_and_search(self):
@ -110,6 +115,7 @@ class SearchBox2(QComboBox): # {{{
QComboBox.__init__(self, parent) QComboBox.__init__(self, parent)
self.line_edit = SearchLineEdit(self) self.line_edit = SearchLineEdit(self)
self.setLineEdit(self.line_edit) self.setLineEdit(self.line_edit)
self.line_edit.clear_history.connect(self.clear_history)
if add_clear_action: if add_clear_action:
self.lineEdit().setClearButtonEnabled(True) self.lineEdit().setClearButtonEnabled(True)
ac = self.findChild(QAction, QT_HIDDEN_CLEAR_ACTION) ac = self.findChild(QAction, QT_HIDDEN_CLEAR_ACTION)
@ -152,6 +158,10 @@ class SearchBox2(QComboBox): # {{{
self.colorize = colorize self.colorize = colorize
self.clear() self.clear()
def clear_search_history(self):
config[self.opt_name] = []
self.clear()
def hide_completer_popup(self): def hide_completer_popup(self):
try: try:
self.lineEdit().completer().popup().setVisible(False) self.lineEdit().completer().popup().setVisible(False)