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:
Kovid Goyal 2014-09-25 21:01:09 +05:30
parent 18477b56d9
commit bde7f1e79d
3 changed files with 32 additions and 10 deletions

View File

@ -772,6 +772,21 @@ class Boss(QObject):
if text and text.strip():
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):
# Run a search/replace
sp = self.gui.central.search_panel
@ -846,15 +861,6 @@ class Boss(QObject):
self.gui.saved_searches_dock.show()
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):
text, ok = QInputDialog.getText(self.gui, _('Choose name'), _(
'Choose a name for the checkpoint.\nYou can later restore the book'

View File

@ -734,6 +734,17 @@ class SavedSearches(QWidget):
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):
visible = index == 0
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))
def run_search(self, action):
return self._run_search(action)
def _run_search(self, action, overrides=None):
searches = []
def fill_in_search(search):
@ -796,6 +810,8 @@ class SavedSearches(QWidget):
searches.append(search)
if not searches:
return
if overrides:
[sc.update(overrides) for sc in searches]
self.run_saved_searches.emit(searches, action)
@property

View File

@ -399,7 +399,7 @@ class Main(MainWindow):
group = _('Search')
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):
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'),
'find', {'direction':'down'}, ('F3', 'Ctrl+G'), _('Find next match'))
self.action_find_previous = sreg('find-previous', _('Find &Previous'),