diff --git a/src/calibre/gui2/viewer/ui.py b/src/calibre/gui2/viewer/ui.py index d104355376..120c729061 100644 --- a/src/calibre/gui2/viewer/ui.py +++ b/src/calibre/gui2/viewer/ui.py @@ -17,7 +17,7 @@ from qt.core import ( from threading import Thread from calibre import prints -from calibre.constants import ismacos +from calibre.constants import ismacos, iswindows from calibre.customize.ui import available_input_formats from calibre.db.annotations import merge_annotations from calibre.gui2 import choose_files, error_dialog, sanitize_env_vars @@ -289,6 +289,7 @@ class EbookViewer(MainWindow): def toggle_full_screen(self): self.set_full_screen(not self.isFullScreen()) + # }}} # Docks (ToC, Bookmarks, Lookup, etc.) {{{ @@ -743,11 +744,16 @@ class EbookViewer(MainWindow): t.start() def eventFilter(self, obj, ev): - if ev.type() == QEvent.Type.MouseMove: + et = ev.type() + if et == QEvent.Type.MouseMove: if self.cursor_hidden: self.cursor_hidden = False QApplication.instance().restoreOverrideCursor() self.hide_cursor_timer.start() + elif et == QEvent.Type.FocusIn: + if iswindows and obj and obj.objectName() == 'EbookViewerClassWindow' and self.isFullScreen(): + # See https://bugs.launchpad.net/calibre/+bug/1918591 + self.web_view.repair_after_fullscreen_switch() return False def hide_cursor(self): diff --git a/src/calibre/gui2/viewer/web_view.py b/src/calibre/gui2/viewer/web_view.py index bf09f9e3a1..49d1ba8cb0 100644 --- a/src/calibre/gui2/viewer/web_view.py +++ b/src/calibre/gui2/viewer/web_view.py @@ -291,6 +291,7 @@ class ViewerBridge(Bridge): generic_action = to_js() show_search_result = to_js() prepare_for_close = to_js() + repair_after_fullscreen_switch = to_js() viewer_font_size_changed = to_js() tts_event = to_js() @@ -742,3 +743,6 @@ class WebView(RestartingWebEngineView): def show_book_folder(self): path = os.path.dirname(os.path.abspath(set_book_path.pathtoebook)) safe_open_url(QUrl.fromLocalFile(path)) + + def repair_after_fullscreen_switch(self): + self.execute_when_ready('repair_after_fullscreen_switch') diff --git a/src/pyj/read_book/view.pyj b/src/pyj/read_book/view.pyj index 21109153cd..b0bd0bc799 100644 --- a/src/pyj/read_book/view.pyj +++ b/src/pyj/read_book/view.pyj @@ -1255,11 +1255,13 @@ class View: } return pos - def show_status_message(self, msg): + def show_status_message(self, msg, timeout): self.current_status_message = msg or '' self.update_header_footer() if self.current_status_message: - window.setTimeout(def(): self.show_status_message();, 10000) + if not timeout?: + timeout = 10000 + window.setTimeout(def(): self.show_status_message();, timeout) def create_template_renderer(self): if not self.book: diff --git a/src/pyj/viewer-main.pyj b/src/pyj/viewer-main.pyj index d91e757ce6..df3e131de1 100644 --- a/src/pyj/viewer-main.pyj +++ b/src/pyj/viewer-main.pyj @@ -283,6 +283,12 @@ def prepare_for_close(): ui_operations.close_prep_finished(None) +@from_python +def repair_after_fullscreen_switch(): + if view: + view.show_status_message('...', 200) + + @from_python def viewer_font_size_changed(): if view: