mirror of
https://github.com/electron/electron.git
synced 2026-01-08 15:13:52 -05:00
* chore: bump chromium in DEPS to 122.0.6223.0 * 5129828: Removes special cases for selenium-atoms dependencies. https://chromium-review.googlesource.com/c/chromium/src/+/5129828 * chore: fixup patch indices * 5139789: Deduplicate BrowserContext's ResourceContext https://chromium-review.googlesource.com/c/chromium/src/+/5139789 * 5148579: Simplify SelectFileDialog::Listener https://chromium-review.googlesource.com/c/chromium/src/+/5148579 * 5134038: Code Health: Use string_view in base::i18n::BreakIterator::SetText https://chromium-review.googlesource.com/c/chromium/src/+/5134038 * 5137427: Code Health: Use string_view in SpellCheck::SpellCheckWord https://chromium-review.googlesource.com/c/chromium/src/+/5137427 * [libcxx] adds ranges::fold_left_with_iter and ranges::fold_left Notable things in this commit: * refactors `__indirect_binary_left_foldable`, making it slightly different (but equivalent) to _`indirect-binary-left-foldable`_, which improves readability (a [patch to the Working Paper][patch] was made) * omits `__cpo` namespace, since it is not required for implementing niebloids (a cleanup should happen in 2024) * puts tests ensuring invocable robustness and dangling correctness inside the correctness testing to ensure that the algorithms' results are still correct [patch]: https://github.com/cplusplus/draft/pull/6734 * chore: bump chromium in DEPS to 122.0.6224.0 * 5154766: [Refresh 2023] [GTK] Fix gap above toolbar with fractional scaling https://chromium-review.googlesource.com/c/chromium/src/+/5154766 * chore: fixup patch indices * 5094458: Remove extra CGColorSpace parameters from skia and ui helpers https://chromium-review.googlesource.com/c/chromium/src/+/5094458 * chore: bump chromium in DEPS to 122.0.6226.0 * chore: update patches * chore: bump chromium in DEPS to 122.0.6227.0 * chore: update patches * chore: bump chromium in DEPS to 122.0.6228.0 * chore: update patches * chore: bump chromium in DEPS to 122.0.6230.0 * chore: bump chromium in DEPS to 122.0.6232.0 * chore: bump chromium in DEPS to 122.0.6234.0 * chore: bump chromium in DEPS to 122.0.6236.2 * chore: update patches * fix: remove --disable-color-correct-renderering Per https://electronhq.slack.com/archives/CB6CG54DB/p1698444047862459 it is not used any more and was never documented. * chore: add WEB_PRINTING to content permission converter Unused in non-cros so no need to document Ref: https://chromium-review.googlesource.com/c/chromium/src/+/5136178 * chore: Views is now vec<raw_ptr> instead of raw<T*> Ref: https://chromium-review.googlesource.com/c/chromium/src/+/5140028 * spec: add Iterator to global intrinsics --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com> Co-authored-by: Samuel Attard <marshallofsound@electronjs.org>
99 lines
4.3 KiB
Diff
99 lines
4.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Shelley Vohr <shelley.vohr@gmail.com>
|
|
Date: Mon, 16 Aug 2021 17:55:32 +0200
|
|
Subject: fix: media key usage with globalShortcuts
|
|
|
|
This patch enables media keys to work properly with Electron's globalShortcut
|
|
module. Chromium's default usage of RemoteCommandCenterDelegate on macOS falls
|
|
down into MPRemoteCommandCenter, which makes it such that an app will not
|
|
receive remote control events until it begins playing audio. This runs
|
|
counter to the design of globalShortcuts, and so we need to instead
|
|
use `ui::MediaKeysListener`.
|
|
|
|
diff --git a/chrome/browser/extensions/global_shortcut_listener.cc b/chrome/browser/extensions/global_shortcut_listener.cc
|
|
index fa5be7e4dbddd8333263c412b84a1d93b2d5046a..1b3c65359bff41a96ff27aef6e979ac7e6e8518d 100644
|
|
--- a/chrome/browser/extensions/global_shortcut_listener.cc
|
|
+++ b/chrome/browser/extensions/global_shortcut_listener.cc
|
|
@@ -7,6 +7,7 @@
|
|
#include "base/check.h"
|
|
#include "base/notreached.h"
|
|
#include "content/public/browser/browser_thread.h"
|
|
+#include "content/public/browser/media_keys_listener_manager.h"
|
|
#include "ui/base/accelerators/accelerator.h"
|
|
|
|
using content::BrowserThread;
|
|
@@ -66,6 +67,22 @@ void GlobalShortcutListener::UnregisterAccelerator(
|
|
StopListening();
|
|
}
|
|
|
|
+// static
|
|
+void GlobalShortcutListener::SetShouldUseInternalMediaKeyHandling(bool should_use) {
|
|
+ if (content::MediaKeysListenerManager::
|
|
+ IsMediaKeysListenerManagerEnabled()) {
|
|
+ content::MediaKeysListenerManager* media_keys_listener_manager =
|
|
+ content::MediaKeysListenerManager::GetInstance();
|
|
+ DCHECK(media_keys_listener_manager);
|
|
+
|
|
+ if (should_use) {
|
|
+ media_keys_listener_manager->EnableInternalMediaKeyHandling();
|
|
+ } else {
|
|
+ media_keys_listener_manager->DisableInternalMediaKeyHandling();
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
void GlobalShortcutListener::UnregisterAccelerators(Observer* observer) {
|
|
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
if (IsShortcutHandlingSuspended())
|
|
diff --git a/chrome/browser/extensions/global_shortcut_listener.h b/chrome/browser/extensions/global_shortcut_listener.h
|
|
index f96af14cb915c8ab92b314ac15b6dffcdd6ec607..2556abe433493251ebd48d4aeddaa6d4f553208f 100644
|
|
--- a/chrome/browser/extensions/global_shortcut_listener.h
|
|
+++ b/chrome/browser/extensions/global_shortcut_listener.h
|
|
@@ -33,6 +33,8 @@ class GlobalShortcutListener {
|
|
|
|
static GlobalShortcutListener* GetInstance();
|
|
|
|
+ static void SetShouldUseInternalMediaKeyHandling(bool should_use);
|
|
+
|
|
// Register an observer for when a certain |accelerator| is struck. Returns
|
|
// true if register successfully, or false if 1) the specificied |accelerator|
|
|
// has been registered by another caller or other native applications, or
|
|
diff --git a/content/browser/media/media_keys_listener_manager_impl.cc b/content/browser/media/media_keys_listener_manager_impl.cc
|
|
index 8bc58dd31b5822682fe13ad7ded1dc40892b296d..1811361f25fd8276c317e4fcd883e998af8aeab8 100644
|
|
--- a/content/browser/media/media_keys_listener_manager_impl.cc
|
|
+++ b/content/browser/media/media_keys_listener_manager_impl.cc
|
|
@@ -86,7 +86,11 @@ bool MediaKeysListenerManagerImpl::StartWatchingMediaKey(
|
|
CanActiveMediaSessionControllerReceiveEvents();
|
|
|
|
// Tell the underlying MediaKeysListener to listen for the key.
|
|
- if (should_start_watching && media_keys_listener_ &&
|
|
+ if (
|
|
+#if BUILDFLAG(IS_MAC)
|
|
+ !media_key_handling_enabled_ &&
|
|
+#endif // BUILDFLAG(IS_MAC)
|
|
+ should_start_watching && media_keys_listener_ &&
|
|
!media_keys_listener_->StartWatchingMediaKey(key_code)) {
|
|
return false;
|
|
}
|
|
@@ -320,6 +324,20 @@ void MediaKeysListenerManagerImpl::StartListeningForMediaKeysIfNecessary() {
|
|
this, ui::MediaKeysListener::Scope::kGlobal);
|
|
DCHECK(media_keys_listener_);
|
|
}
|
|
+
|
|
+#if BUILDFLAG(IS_MAC)
|
|
+ // Chromium's implementation of SystemMediaControls falls
|
|
+ // down into MPRemoteCommandCenter, which makes it such that an app will not
|
|
+ // will not receive remote control events until it begins playing audio.
|
|
+ // If there's not already a MediaKeysListener instance, create one so
|
|
+ // that globalShortcuts work correctly.
|
|
+ if (!media_keys_listener_) {
|
|
+ media_keys_listener_ = ui::MediaKeysListener::Create(
|
|
+ this, ui::MediaKeysListener::Scope::kGlobal);
|
|
+ DCHECK(media_keys_listener_);
|
|
+ }
|
|
+#endif
|
|
+
|
|
EnsureAuxiliaryServices();
|
|
}
|
|
|