mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Edit Book: The keyboard shortcuts for searching now trigger saved searches if the saved searches window is open and has input focus
This commit is contained in:
parent
18477b56d9
commit
bde7f1e79d
@ -772,6 +772,21 @@ class Boss(QObject):
|
|||||||
if text and text.strip():
|
if text and text.strip():
|
||||||
self.gui.central.pre_fill_search(text)
|
self.gui.central.pre_fill_search(text)
|
||||||
|
|
||||||
|
def search_action_triggered(self, action, overrides=None):
|
||||||
|
if self.gui.saved_searches.isVisible() and self.gui.saved_searches.has_focus():
|
||||||
|
return self.gui.saved_searches.trigger_action(action, overrides=overrides)
|
||||||
|
self.search(action, overrides)
|
||||||
|
|
||||||
|
def run_saved_searches(self, searches, action):
|
||||||
|
ed = self.gui.central.current_editor
|
||||||
|
name = editor_name(ed)
|
||||||
|
searchable_names = self.gui.file_list.searchable_names
|
||||||
|
if not searches or not validate_search_request(name, searchable_names, getattr(ed, 'has_marked_text', False), searches[0], self.gui):
|
||||||
|
return
|
||||||
|
run_search(searches, action, ed, name, searchable_names,
|
||||||
|
self.gui, self.show_editor, self.edit_file, self.show_current_diff, self.add_savepoint, self.rewind_savepoint, self.set_modified)
|
||||||
|
self.gui.saved_searches.setFocus(Qt.OtherFocusReason)
|
||||||
|
|
||||||
def search(self, action, overrides=None):
|
def search(self, action, overrides=None):
|
||||||
# Run a search/replace
|
# Run a search/replace
|
||||||
sp = self.gui.central.search_panel
|
sp = self.gui.central.search_panel
|
||||||
@ -846,15 +861,6 @@ class Boss(QObject):
|
|||||||
self.gui.saved_searches_dock.show()
|
self.gui.saved_searches_dock.show()
|
||||||
saved_searches = show_saved_searches
|
saved_searches = show_saved_searches
|
||||||
|
|
||||||
def run_saved_searches(self, searches, action):
|
|
||||||
ed = self.gui.central.current_editor
|
|
||||||
name = editor_name(ed)
|
|
||||||
searchable_names = self.gui.file_list.searchable_names
|
|
||||||
if not searches or not validate_search_request(name, searchable_names, getattr(ed, 'has_marked_text', False), searches[0], self.gui):
|
|
||||||
return
|
|
||||||
run_search(searches, action, ed, name, searchable_names,
|
|
||||||
self.gui, self.show_editor, self.edit_file, self.show_current_diff, self.add_savepoint, self.rewind_savepoint, self.set_modified)
|
|
||||||
|
|
||||||
def create_checkpoint(self):
|
def create_checkpoint(self):
|
||||||
text, ok = QInputDialog.getText(self.gui, _('Choose name'), _(
|
text, ok = QInputDialog.getText(self.gui, _('Choose name'), _(
|
||||||
'Choose a name for the checkpoint.\nYou can later restore the book'
|
'Choose a name for the checkpoint.\nYou can later restore the book'
|
||||||
|
@ -734,6 +734,17 @@ class SavedSearches(QWidget):
|
|||||||
|
|
||||||
self.searches.setFocus(Qt.OtherFocusReason)
|
self.searches.setFocus(Qt.OtherFocusReason)
|
||||||
|
|
||||||
|
def has_focus(self):
|
||||||
|
if self.hasFocus():
|
||||||
|
return True
|
||||||
|
for child in self.findChildren(QWidget):
|
||||||
|
if child.hasFocus():
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def trigger_action(self, action, overrides=None):
|
||||||
|
self._run_search(action, overrides)
|
||||||
|
|
||||||
def stack_current_changed(self, index):
|
def stack_current_changed(self, index):
|
||||||
visible = index == 0
|
visible = index == 0
|
||||||
for x in ('eb', 'ab', 'rb', 'upb', 'dnb', 'd2', 'filter_text', 'cft', 'd3', 'ib', 'eb2'):
|
for x in ('eb', 'ab', 'rb', 'upb', 'dnb', 'd2', 'filter_text', 'cft', 'd3', 'ib', 'eb2'):
|
||||||
@ -768,6 +779,9 @@ class SavedSearches(QWidget):
|
|||||||
self.searches.scrollTo(self.model.index(0))
|
self.searches.scrollTo(self.model.index(0))
|
||||||
|
|
||||||
def run_search(self, action):
|
def run_search(self, action):
|
||||||
|
return self._run_search(action)
|
||||||
|
|
||||||
|
def _run_search(self, action, overrides=None):
|
||||||
searches = []
|
searches = []
|
||||||
|
|
||||||
def fill_in_search(search):
|
def fill_in_search(search):
|
||||||
@ -796,6 +810,8 @@ class SavedSearches(QWidget):
|
|||||||
searches.append(search)
|
searches.append(search)
|
||||||
if not searches:
|
if not searches:
|
||||||
return
|
return
|
||||||
|
if overrides:
|
||||||
|
[sc.update(overrides) for sc in searches]
|
||||||
self.run_saved_searches.emit(searches, action)
|
self.run_saved_searches.emit(searches, action)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -399,7 +399,7 @@ class Main(MainWindow):
|
|||||||
group = _('Search')
|
group = _('Search')
|
||||||
self.action_find = treg('search.png', _('&Find/Replace'), self.boss.show_find, 'find-replace', ('Ctrl+F',), _('Show the Find/Replace panel'))
|
self.action_find = treg('search.png', _('&Find/Replace'), self.boss.show_find, 'find-replace', ('Ctrl+F',), _('Show the Find/Replace panel'))
|
||||||
def sreg(name, text, action, overrides={}, keys=(), description=None, icon=None):
|
def sreg(name, text, action, overrides={}, keys=(), description=None, icon=None):
|
||||||
return reg(icon, text, partial(self.boss.search, action, overrides), name, keys, description or text.replace('&', ''))
|
return reg(icon, text, partial(self.boss.search_action_triggered, action, overrides), name, keys, description or text.replace('&', ''))
|
||||||
self.action_find_next = sreg('find-next', _('Find &Next'),
|
self.action_find_next = sreg('find-next', _('Find &Next'),
|
||||||
'find', {'direction':'down'}, ('F3', 'Ctrl+G'), _('Find next match'))
|
'find', {'direction':'down'}, ('F3', 'Ctrl+G'), _('Find next match'))
|
||||||
self.action_find_previous = sreg('find-previous', _('Find &Previous'),
|
self.action_find_previous = sreg('find-previous', _('Find &Previous'),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user