diff --git a/qt/aqt/clayout.py b/qt/aqt/clayout.py index 00e86ab0f..fbc414a38 100644 --- a/qt/aqt/clayout.py +++ b/qt/aqt/clayout.py @@ -491,12 +491,14 @@ class CardLayout(QDialog): self.have_autoplayed = True if c.autoplay(): + AnkiWebView.setPlaybackRequiresGesture(False) if self.pform.preview_front.isChecked(): audio = c.question_av_tags() else: audio = c.answer_av_tags() av_player.play_tags(audio) else: + AnkiWebView.setPlaybackRequiresGesture(True) av_player.clear_queue_and_maybe_interrupt() self.updateCardNames() diff --git a/qt/aqt/previewer.py b/qt/aqt/previewer.py index c1da2a289..d11853778 100644 --- a/qt/aqt/previewer.py +++ b/qt/aqt/previewer.py @@ -184,6 +184,7 @@ class Previewer(QDialog): bodyclass = theme_manager.body_classes_for_card_ord(c.ord) if c.autoplay(): + AnkiWebView.setPlaybackRequiresGesture(False) if self._show_both_sides: # if we're showing both sides at once, remove any audio # from the answer that's appeared on the question already @@ -198,6 +199,7 @@ class Previewer(QDialog): audio = c.answer_av_tags() av_player.play_tags(audio) else: + AnkiWebView.setPlaybackRequiresGesture(True) av_player.clear_queue_and_maybe_interrupt() txt = self.mw.prepare_card_text_for_display(txt) diff --git a/qt/aqt/reviewer.py b/qt/aqt/reviewer.py index 15045dc59..dd2202212 100644 --- a/qt/aqt/reviewer.py +++ b/qt/aqt/reviewer.py @@ -23,6 +23,7 @@ from aqt.sound import av_player, getAudio, play_clicked_audio from aqt.theme import theme_manager from aqt.toolbar import BottomBar from aqt.utils import askUserDialog, downArrow, qtMenuShortcutWorkaround, tooltip +from aqt.webview import AnkiWebView class ReviewerBottomBar: @@ -183,10 +184,12 @@ class Reviewer: q = c.q() # play audio? if c.autoplay(): + AnkiWebView.setPlaybackRequiresGesture(False) sounds = c.question_av_tags() gui_hooks.reviewer_will_play_question_sounds(c, sounds) av_player.play_tags(sounds) else: + AnkiWebView.setPlaybackRequiresGesture(True) av_player.clear_queue_and_maybe_interrupt() sounds = [] gui_hooks.reviewer_will_play_question_sounds(c, sounds) diff --git a/qt/aqt/webview.py b/qt/aqt/webview.py index ea4b37844..75f3fc59c 100644 --- a/qt/aqt/webview.py +++ b/qt/aqt/webview.py @@ -340,6 +340,12 @@ class AnkiWebView(QWebEngineView): newFactor = desiredScale / qtIntScale return max(1, newFactor) + @staticmethod + def setPlaybackRequiresGesture(value: bool) -> None: + QWebEngineSettings.globalSettings().setAttribute( + QWebEngineSettings.PlaybackRequiresUserGesture, value + ) + def _getQtIntScale(self, screen) -> int: # try to detect if Qt has scaled the screen # - qt will round the scale factor to a whole number, so a dpi of 125% = 1x,