diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index e307a33430..7e03a0a88d 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -58,9 +58,9 @@ class SearchLineEdit(QLineEdit): # {{{ menu.addAction(ac) menu.addSeparator() ac = menu.addAction(_('Invert current search')) - ac.setEnabled(bool(self.text())) + ac.setEnabled(bool(self.text().strip())) ac.setIcon(QIcon.ic('search.png')) - ac.triggered.connect(self.reverse_search) + ac.triggered.connect(self.invert_search) menu.addAction(ac) menu.addSeparator() if self.as_url is not None: @@ -70,10 +70,16 @@ class SearchLineEdit(QLineEdit): # {{{ menu.addAction(_('&Clear search history')).triggered.connect(self.clear_history) menu.exec(ev.globalPos()) - def reverse_search(self): - self.setText(f'NOT ( {self.text()} )') - ev = QKeyEvent(QEvent.Type.KeyPress, Qt.Key.Key_Enter, Qt.KeyboardModifier.NoModifier) - self.keyPressEvent(ev) + def invert_search(self): + q = self.text().strip() + if q: + if q.startswith('NOT ( ') and q.endswith(' )'): + q = q[6:-2] + else: + q = f'NOT ( {q} )' + self.setText(q) + ev = QKeyEvent(QEvent.Type.KeyPress, Qt.Key.Key_Enter, Qt.KeyboardModifier.NoModifier) + self.keyPressEvent(ev) def paste_and_search(self): self.paste()