From 374edd1ff77d97d5b78c32e4fcf375c130483c42 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 4 Sep 2020 22:23:34 +0530 Subject: [PATCH] Clicking search in book in selection bar should actually trigger the search not just fill the search box --- src/calibre/gui2/viewer/search.py | 3 +++ src/calibre/gui2/viewer/ui.py | 4 +++- src/calibre/gui2/viewer/web_view.py | 4 ++-- src/pyj/read_book/selection_bar.pyj | 2 +- src/pyj/read_book/view.pyj | 6 ++++-- src/pyj/viewer-main.pyj | 4 ++-- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/calibre/gui2/viewer/search.py b/src/calibre/gui2/viewer/search.py index 99c479c74b..ded59d1b3d 100644 --- a/src/calibre/gui2/viewer/search.py +++ b/src/calibre/gui2/viewer/search.py @@ -680,6 +680,9 @@ class SearchPanel(QWidget): # {{{ def find_next_requested(self, previous): self.results.find_next(previous) + def trigger(self): + self.search_input.find_next() + def do_show_search_result(self, sr): self.show_search_result.emit(sr.for_js) diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index 6d7d686848..de907ab856 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -292,11 +292,13 @@ class EbookViewer(MainWindow): def toggle_toc(self): self.toc_dock.setVisible(not self.toc_dock.isVisible()) - def show_search(self, text): + def show_search(self, text, trigger=False): self.search_dock.setVisible(True) self.search_dock.activateWindow() self.search_dock.raise_() self.search_widget.focus_input(text) + if trigger: + self.search_widget.trigger() def search_results_count_changed(self, num=-1): if num < 0: diff --git a/src/calibre/gui2/viewer/web_view.py b/src/calibre/gui2/viewer/web_view.py index 04abffc1cd..dfa4791394 100644 --- a/src/calibre/gui2/viewer/web_view.py +++ b/src/calibre/gui2/viewer/web_view.py @@ -241,7 +241,7 @@ class ViewerBridge(Bridge): new_bookmark = from_js(object) toggle_inspector = from_js() toggle_lookup = from_js(object) - show_search = from_js(object) + show_search = from_js(object, object) search_result_not_found = from_js(object) find_next = from_js(object) quit = from_js() @@ -431,7 +431,7 @@ class WebView(RestartingWebEngineView): cfi_changed = pyqtSignal(object) reload_book = pyqtSignal() toggle_toc = pyqtSignal() - show_search = pyqtSignal(object) + show_search = pyqtSignal(object, object) search_result_not_found = pyqtSignal(object) find_next = pyqtSignal(object) toggle_bookmarks = pyqtSignal() diff --git a/src/pyj/read_book/selection_bar.pyj b/src/pyj/read_book/selection_bar.pyj index e9ce649ec1..862fee6d32 100644 --- a/src/pyj/read_book/selection_bar.pyj +++ b/src/pyj/read_book/selection_bar.pyj @@ -885,7 +885,7 @@ class SelectionBar: self.view.overlay.show_word_actions(self.view.currently_showing.selection.text) def book_search(self): - self.view.show_search() + self.view.show_search(True) self.clear_selection() def new_bookmark(self): diff --git a/src/pyj/read_book/view.pyj b/src/pyj/read_book/view.pyj index d0bb7bec08..7d28c8ceef 100644 --- a/src/pyj/read_book/view.pyj +++ b/src/pyj/read_book/view.pyj @@ -672,15 +672,17 @@ class View: self.get_current_cfi('prepare-close', close_prepared) - def show_search(self): + def show_search(self, trigger): self.hide_overlays() text = self.currently_showing.selection.text if runtime.is_standalone_viewer: - ui_operations.show_search(text or '') + ui_operations.show_search(text or '', trigger) else: if text: self.search_overlay.set_text(text) self.search_overlay.show(text) + if trigger and text: + self.search_overlay.find_next() def show_content_popup(self): self.hide_overlays() diff --git a/src/pyj/viewer-main.pyj b/src/pyj/viewer-main.pyj index b8d9606cb1..6fe5b36d25 100644 --- a/src/pyj/viewer-main.pyj +++ b/src/pyj/viewer-main.pyj @@ -330,8 +330,8 @@ if window is window.top: to_python.toggle_inspector() ui_operations.content_file_changed = def(name): to_python.content_file_changed(name) - ui_operations.show_search = def(text): - to_python.show_search(text) + ui_operations.show_search = def(text, trigger): + to_python.show_search(text, v'!!trigger') ui_operations.find_next = def(previous): to_python.find_next(previous) ui_operations.reset_interface = def():