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 @@ def __new__(cls, text):
class SearchLineEdit(QLineEdit): # {{{
key_pressed = pyqtSignal(object)
clear_history = pyqtSignal()
select_on_mouse_press = None
def keyPressEvent(self, event):
@ -49,14 +50,18 @@ def contextMenuEvent(self, ev):
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 @@ def __init__(self, parent=None, add_clear_action=True):
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 @@ def initialize(self, opt_name, colorize=False, help_text=_('Search'), as_you_typ
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)