diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-12-03 18:03:40 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-12-03 18:03:40 +0100 |
commit | 9280314d399ba73085387e6d1ca17d6fb1b9e0dd (patch) | |
tree | ca0dac226d717f2be699c3ee5b907ad7697e8101 | |
parent | b8b394f71d418a7fa7324690c6582543eebf24ed (diff) | |
parent | 73908d46f6abc6ee9459462681a8ae4523ea0959 (diff) | |
download | qutebrowser-9280314d399ba73085387e6d1ca17d6fb1b9e0dd.tar.gz qutebrowser-9280314d399ba73085387e6d1ca17d6fb1b9e0dd.zip |
Merge remote-tracking branch 'origin/pr/6750'
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 926ccf133..e02b23d16 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -26,7 +26,8 @@ import re import html as html_utils from typing import cast, Union, Optional -from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QPoint, QPointF, QUrl, QObject +from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QPoint, QPointF, QTimer, QUrl, + QObject) from PyQt5.QtNetwork import QAuthenticator from PyQt5.QtWidgets import QWidget from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineScript, QWebEngineHistory @@ -802,13 +803,38 @@ class WebEngineAudio(browsertab.AbstractAudio): super().__init__(tab, parent) self._overridden = False + # Implements the intended two-second delay specified at + # https://doc.qt.io/qt-5/qwebenginepage.html#recentlyAudibleChanged + delay_ms = 2000 + self._audio_muted_timer = QTimer(self) + self._audio_muted_timer.setSingleShot(True) + self._audio_muted_timer.setInterval(delay_ms) + def _connect_signals(self): page = self._widget.page() page.audioMutedChanged.connect(self.muted_changed) - page.recentlyAudibleChanged.connect(self.recently_audible_changed) + page.recentlyAudibleChanged.connect(self._delayed_recently_audible_changed) self._tab.url_changed.connect(self._on_url_changed) config.instance.changed.connect(self._on_config_changed) + # WORKAROUND for recentlyAudibleChanged being emitted without delay from the moment + # that audio is dropped. + def _delayed_recently_audible_changed(self, recently_audible): + timer = self._audio_muted_timer + # Stop any active timer and immediately display [A] if tab is audible, + # otherwise start a timer to update audio field + if recently_audible: + if timer.isActive(): + timer.stop() + self.recently_audible_changed.emit(recently_audible) + else: + # Ignore all subsequent calls while the tab is muted with an active timer + if timer.isActive(): + return + timer.timeout.connect( + functools.partial(self.recently_audible_changed.emit, recently_audible)) + timer.start() + def set_muted(self, muted: bool, override: bool = False) -> None: was_muted = self.is_muted() self._overridden = override |