command-ismediakey.patch 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Jeremy Apthorp <[email protected]>
  3. Date: Wed, 10 Oct 2018 15:07:34 -0700
  4. Subject: command-ismediakey.patch
  5. Override MediaKeysListener::IsMediaKeycode and associated functions to also listen for
  6. Volume Up, Volume Down, and Mute.
  7. Also apply electron/electron@0f67b1866a9f00b852370e721affa4efda623f3a
  8. and electron/electron@d2368d2d3b3de9eec4cc32b6aaf035cc89921bf1 as
  9. patches.
  10. diff --git a/content/browser/media/media_keys_listener_manager_impl.cc b/content/browser/media/media_keys_listener_manager_impl.cc
  11. index e87c180342b967756efeb701c73207fcee8754f1..42e37564e585987d367921568f0f1d2b7507f953 100644
  12. --- a/content/browser/media/media_keys_listener_manager_impl.cc
  13. +++ b/content/browser/media/media_keys_listener_manager_impl.cc
  14. @@ -412,6 +412,11 @@ void MediaKeysListenerManagerImpl::UpdateSystemMediaControlsEnabledControls() {
  15. case ui::VKEY_MEDIA_STOP:
  16. browser_system_media_controls_->SetIsStopEnabled(should_enable);
  17. break;
  18. + case ui::VKEY_VOLUME_DOWN:
  19. + case ui::VKEY_VOLUME_UP:
  20. + case ui::VKEY_VOLUME_MUTE:
  21. + // Do nothing.
  22. + break;
  23. default:
  24. NOTREACHED();
  25. }
  26. @@ -454,6 +459,11 @@ void MediaKeysListenerManagerImpl::UpdateSystemMediaControlsEnabledControls() {
  27. case ui::VKEY_MEDIA_STOP:
  28. smc->SetIsStopEnabled(should_enable);
  29. break;
  30. + case ui::VKEY_VOLUME_DOWN:
  31. + case ui::VKEY_VOLUME_UP:
  32. + case ui::VKEY_VOLUME_MUTE:
  33. + // Do nothing.
  34. + break;
  35. default:
  36. NOTREACHED();
  37. }
  38. diff --git a/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_ozone.cc b/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_ozone.cc
  39. index c98ecc36007185052481b6479b2ba4608e326021..dd0e4553b78997beea0f11242eeb9f759359066f 100644
  40. --- a/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_ozone.cc
  41. +++ b/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_ozone.cc
  42. @@ -111,7 +111,8 @@ bool GlobalAcceleratorListenerOzone::StartListeningForAccelerator(
  43. const bool registered =
  44. platform_global_shortcut_listener_->RegisterAccelerator(
  45. accelerator.key_code(), accelerator.IsAltDown(),
  46. - accelerator.IsCtrlDown(), accelerator.IsShiftDown());
  47. + accelerator.IsCtrlDown(), accelerator.IsShiftDown(),
  48. + accelerator.IsCmdDown());
  49. if (registered) {
  50. registered_hot_keys_.insert(accelerator);
  51. }
  52. @@ -126,14 +127,15 @@ void GlobalAcceleratorListenerOzone::StopListeningForAccelerator(
  53. platform_global_shortcut_listener_->UnregisterAccelerator(
  54. accelerator.key_code(), accelerator.IsAltDown(), accelerator.IsCtrlDown(),
  55. - accelerator.IsShiftDown());
  56. + accelerator.IsShiftDown(), accelerator.IsCmdDown());
  57. registered_hot_keys_.erase(accelerator);
  58. }
  59. void GlobalAcceleratorListenerOzone::OnKeyPressed(ui::KeyboardCode key_code,
  60. bool is_alt_down,
  61. bool is_ctrl_down,
  62. - bool is_shift_down) {
  63. + bool is_shift_down,
  64. + bool is_cmd_down) {
  65. int modifiers = 0;
  66. if (is_alt_down) {
  67. modifiers |= ui::EF_ALT_DOWN;
  68. @@ -144,6 +146,9 @@ void GlobalAcceleratorListenerOzone::OnKeyPressed(ui::KeyboardCode key_code,
  69. if (is_shift_down) {
  70. modifiers |= ui::EF_SHIFT_DOWN;
  71. }
  72. + if (is_cmd_down) {
  73. + modifiers |= ui::EF_COMMAND_DOWN;
  74. + }
  75. NotifyKeyPressed(ui::Accelerator(key_code, modifiers));
  76. }
  77. diff --git a/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_ozone.h b/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_ozone.h
  78. index 9e63dd9d33abc89a7bbef75992925356470ebb26..9071afc9bb01db832164909a202effafff15a1db 100644
  79. --- a/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_ozone.h
  80. +++ b/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_ozone.h
  81. @@ -54,7 +54,8 @@ class GlobalAcceleratorListenerOzone
  82. void OnKeyPressed(ui::KeyboardCode key_code,
  83. bool is_alt_down,
  84. bool is_ctrl_down,
  85. - bool is_shift_down) override;
  86. + bool is_shift_down,
  87. + bool is_cmd_down) override;
  88. void OnPlatformListenerDestroyed() override;
  89. bool is_listening_ = false;
  90. diff --git a/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_win.cc b/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_win.cc
  91. index 034ccea0cda4265abbfc889178f4cba4f3bd7eb8..384f0968aca07cde1fe6434a318e5334f6ecbe9e 100644
  92. --- a/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_win.cc
  93. +++ b/ui/base/accelerators/global_accelerator_listener/global_accelerator_listener_win.cc
  94. @@ -67,6 +67,8 @@ void GlobalAcceleratorListenerWin::OnWndProc(HWND hwnd,
  95. modifiers |= (LOWORD(lparam) & MOD_SHIFT) ? ui::EF_SHIFT_DOWN : 0;
  96. modifiers |= (LOWORD(lparam) & MOD_ALT) ? ui::EF_ALT_DOWN : 0;
  97. modifiers |= (LOWORD(lparam) & MOD_CONTROL) ? ui::EF_CONTROL_DOWN : 0;
  98. + modifiers |= (LOWORD(lparam) & MOD_WIN) ? ui::EF_COMMAND_DOWN : 0;
  99. +
  100. ui::Accelerator accelerator(ui::KeyboardCodeForWindowsKeyCode(key_code),
  101. modifiers);
  102. @@ -97,6 +99,7 @@ bool GlobalAcceleratorListenerWin::StartListeningForAccelerator(
  103. modifiers |= accelerator.IsShiftDown() ? MOD_SHIFT : 0;
  104. modifiers |= accelerator.IsCtrlDown() ? MOD_CONTROL : 0;
  105. modifiers |= accelerator.IsAltDown() ? MOD_ALT : 0;
  106. + modifiers |= accelerator.IsCmdDown() ? MOD_WIN : 0;
  107. // Create an observer that registers a hot key for `accelerator`.
  108. std::unique_ptr<gfx::SingletonHwndHotKeyObserver> observer =
  109. diff --git a/ui/base/accelerators/media_keys_listener.cc b/ui/base/accelerators/media_keys_listener.cc
  110. index db596585cbb44b3710636e3fc013f288966f604f..6d5557ee1a2c35ee15e695e024834184a525e2a7 100644
  111. --- a/ui/base/accelerators/media_keys_listener.cc
  112. +++ b/ui/base/accelerators/media_keys_listener.cc
  113. @@ -13,7 +13,8 @@ MediaKeysListener::~MediaKeysListener() = default;
  114. // static
  115. bool MediaKeysListener::IsMediaKeycode(KeyboardCode key_code) {
  116. return key_code == VKEY_MEDIA_PLAY_PAUSE || key_code == VKEY_MEDIA_STOP ||
  117. - key_code == VKEY_MEDIA_PREV_TRACK || key_code == VKEY_MEDIA_NEXT_TRACK;
  118. + key_code == VKEY_MEDIA_PREV_TRACK || key_code == VKEY_MEDIA_NEXT_TRACK ||
  119. + key_code == VKEY_VOLUME_UP || key_code == VKEY_VOLUME_DOWN || key_code == VKEY_VOLUME_MUTE;
  120. }
  121. } // namespace ui
  122. diff --git a/ui/base/accelerators/media_keys_listener_mac.mm b/ui/base/accelerators/media_keys_listener_mac.mm
  123. index a955d19eedfe56ae3a115ce4c77fea016fd66d49..ad2557495a02cae03dd2b87df8659a6f05f1beac 100644
  124. --- a/ui/base/accelerators/media_keys_listener_mac.mm
  125. +++ b/ui/base/accelerators/media_keys_listener_mac.mm
  126. @@ -32,6 +32,12 @@ KeyboardCode MediaKeyCodeToKeyboardCode(int key_code) {
  127. case NX_KEYTYPE_NEXT:
  128. case NX_KEYTYPE_FAST:
  129. return VKEY_MEDIA_NEXT_TRACK;
  130. + case NX_KEYTYPE_SOUND_UP:
  131. + return VKEY_VOLUME_UP;
  132. + case NX_KEYTYPE_SOUND_DOWN:
  133. + return VKEY_VOLUME_DOWN;
  134. + case NX_KEYTYPE_MUTE:
  135. + return VKEY_VOLUME_MUTE;
  136. }
  137. return VKEY_UNKNOWN;
  138. }
  139. @@ -190,7 +196,10 @@ static CGEventRef EventTapCallback(CGEventTapProxy proxy,
  140. int key_code = (data1 & 0xFFFF0000) >> 16;
  141. if (key_code != NX_KEYTYPE_PLAY && key_code != NX_KEYTYPE_NEXT &&
  142. key_code != NX_KEYTYPE_PREVIOUS && key_code != NX_KEYTYPE_FAST &&
  143. - key_code != NX_KEYTYPE_REWIND) {
  144. + key_code != NX_KEYTYPE_REWIND &&
  145. + key_code != NX_KEYTYPE_SOUND_UP &&
  146. + key_code != NX_KEYTYPE_SOUND_DOWN &&
  147. + key_code != NX_KEYTYPE_MUTE) {
  148. return event;
  149. }
  150. diff --git a/ui/base/x/x11_global_shortcut_listener.cc b/ui/base/x/x11_global_shortcut_listener.cc
  151. index 9e73ed854072bf3d66dbab4cfb5b0a6a9068aafa..82ca3354afc2a0c4c09c6332512902859c77f4c9 100644
  152. --- a/ui/base/x/x11_global_shortcut_listener.cc
  153. +++ b/ui/base/x/x11_global_shortcut_listener.cc
  154. @@ -34,11 +34,13 @@ const auto kModifiersMasks = std::to_array<x11::ModMask>({
  155. x11::ModMask GetNativeModifiers(bool is_alt_down,
  156. bool is_ctrl_down,
  157. - bool is_shift_down) {
  158. + bool is_shift_down,
  159. + bool is_cmd_down) {
  160. constexpr auto kNoMods = x11::ModMask{};
  161. return (is_shift_down ? x11::ModMask::Shift : kNoMods) |
  162. (is_ctrl_down ? x11::ModMask::Control : kNoMods) |
  163. - (is_alt_down ? x11::ModMask::c_1 : kNoMods);
  164. + (is_alt_down ? x11::ModMask::c_1 : kNoMods) |
  165. + (is_cmd_down ? x11::ModMask::c_4 : kNoMods);
  166. }
  167. } // namespace
  168. @@ -84,8 +86,9 @@ uint32_t XGlobalShortcutListener::DispatchEvent(const PlatformEvent& event) {
  169. bool XGlobalShortcutListener::RegisterAccelerator(KeyboardCode key_code,
  170. bool is_alt_down,
  171. bool is_ctrl_down,
  172. - bool is_shift_down) {
  173. - auto modifiers = GetNativeModifiers(is_alt_down, is_ctrl_down, is_shift_down);
  174. + bool is_shift_down,
  175. + bool is_cmd_down) {
  176. + auto modifiers = GetNativeModifiers(is_alt_down, is_ctrl_down, is_shift_down, is_cmd_down);
  177. auto keysym = XKeysymForWindowsKeyCode(key_code, false);
  178. auto keycode = connection_->KeysymToKeycode(keysym);
  179. @@ -110,7 +113,7 @@ bool XGlobalShortcutListener::RegisterAccelerator(KeyboardCode key_code,
  180. }
  181. registered_combinations_.insert(
  182. - Accelerator(key_code, is_alt_down, is_ctrl_down, is_shift_down));
  183. + Accelerator(key_code, is_alt_down, is_ctrl_down, is_shift_down, is_cmd_down));
  184. return true;
  185. }
  186. @@ -118,8 +121,9 @@ bool XGlobalShortcutListener::RegisterAccelerator(KeyboardCode key_code,
  187. void XGlobalShortcutListener::UnregisterAccelerator(KeyboardCode key_code,
  188. bool is_alt_down,
  189. bool is_ctrl_down,
  190. - bool is_shift_down) {
  191. - auto modifiers = GetNativeModifiers(is_alt_down, is_ctrl_down, is_shift_down);
  192. + bool is_shift_down,
  193. + bool is_cmd_down) {
  194. + auto modifiers = GetNativeModifiers(is_alt_down, is_ctrl_down, is_shift_down, is_cmd_down);
  195. auto keysym = XKeysymForWindowsKeyCode(key_code, false);
  196. auto keycode = connection_->KeysymToKeycode(keysym);
  197. @@ -127,7 +131,7 @@ void XGlobalShortcutListener::UnregisterAccelerator(KeyboardCode key_code,
  198. connection_->UngrabKey({keycode, x_root_window_, modifiers | mask});
  199. registered_combinations_.erase(
  200. - Accelerator(key_code, is_alt_down, is_ctrl_down, is_shift_down));
  201. + Accelerator(key_code, is_alt_down, is_ctrl_down, is_shift_down, is_cmd_down));
  202. }
  203. void XGlobalShortcutListener::OnKeyPressEvent(const KeyEvent& event) {
  204. @@ -137,14 +141,15 @@ void XGlobalShortcutListener::OnKeyPressEvent(const KeyEvent& event) {
  205. const bool is_alt_down = event.flags() & EF_ALT_DOWN;
  206. const bool is_ctrl_down = event.flags() & EF_CONTROL_DOWN;
  207. const bool is_shift_down = event.flags() & EF_SHIFT_DOWN;
  208. + const bool is_cmd_down = event.flags() & EF_COMMAND_DOWN;
  209. if (!base::Contains(
  210. registered_combinations_,
  211. - Accelerator(key_code, is_alt_down, is_ctrl_down, is_shift_down))) {
  212. + Accelerator(key_code, is_alt_down, is_ctrl_down, is_shift_down, is_cmd_down))) {
  213. return;
  214. }
  215. - OnKeyPressed(key_code, is_alt_down, is_ctrl_down, is_shift_down);
  216. + OnKeyPressed(key_code, is_alt_down, is_ctrl_down, is_shift_down, is_cmd_down);
  217. }
  218. } // namespace ui
  219. diff --git a/ui/base/x/x11_global_shortcut_listener.h b/ui/base/x/x11_global_shortcut_listener.h
  220. index 53b1f0697ad337c4e1cbeaddc5bb893419326fb3..723e32160ad711c99061c265378a6f8a34d51b3b 100644
  221. --- a/ui/base/x/x11_global_shortcut_listener.h
  222. +++ b/ui/base/x/x11_global_shortcut_listener.h
  223. @@ -42,18 +42,21 @@ class COMPONENT_EXPORT(UI_BASE_X) XGlobalShortcutListener
  224. virtual void OnKeyPressed(KeyboardCode key_code,
  225. bool is_alt_down,
  226. bool is_ctrl_down,
  227. - bool is_shift_down) = 0;
  228. + bool is_shift_down,
  229. + bool is_cmd_down) = 0;
  230. void StartListening();
  231. void StopListening();
  232. bool RegisterAccelerator(KeyboardCode key_code,
  233. bool is_alt_down,
  234. bool is_ctrl_down,
  235. - bool is_shift_down);
  236. + bool is_shift_down,
  237. + bool is_cmd_down);
  238. void UnregisterAccelerator(KeyboardCode key_code,
  239. bool is_alt_down,
  240. bool is_ctrl_down,
  241. - bool is_shift_down);
  242. + bool is_shift_down,
  243. + bool is_cmd_down);
  244. private:
  245. // Due to how system key grabbing works on X11, we have to be a bit greedy and
  246. @@ -62,7 +65,7 @@ class COMPONENT_EXPORT(UI_BASE_X) XGlobalShortcutListener
  247. // and filter the incoming events against that registry before notifying the
  248. // observer. This tuple describes the meaningful parts of the event; booleans
  249. // 1, 2, and 3 hold states of Alt, Control, and Shift keys, respectively.
  250. - using Accelerator = std::tuple<KeyboardCode, bool, bool, bool>;
  251. + using Accelerator = std::tuple<KeyboardCode, bool, bool, bool, bool>;
  252. // Invoked when a global shortcut is pressed.
  253. void OnKeyPressEvent(const KeyEvent& event);
  254. diff --git a/ui/ozone/platform/x11/x11_global_shortcut_listener_ozone.cc b/ui/ozone/platform/x11/x11_global_shortcut_listener_ozone.cc
  255. index d23310746bca13981d0099ce74c62459471db0e5..6ad79156e62dc60bdf20ef1acf53ec2425cb2bfe 100644
  256. --- a/ui/ozone/platform/x11/x11_global_shortcut_listener_ozone.cc
  257. +++ b/ui/ozone/platform/x11/x11_global_shortcut_listener_ozone.cc
  258. @@ -26,27 +26,30 @@ void X11GlobalShortcutListenerOzone::StopListening() {
  259. bool X11GlobalShortcutListenerOzone::RegisterAccelerator(KeyboardCode key_code,
  260. bool is_alt_down,
  261. bool is_ctrl_down,
  262. - bool is_shift_down) {
  263. + bool is_shift_down,
  264. + bool is_cmd_down) {
  265. return XGlobalShortcutListener::RegisterAccelerator(
  266. - key_code, is_alt_down, is_ctrl_down, is_shift_down);
  267. + key_code, is_alt_down, is_ctrl_down, is_shift_down, is_cmd_down);
  268. }
  269. void X11GlobalShortcutListenerOzone::UnregisterAccelerator(
  270. KeyboardCode key_code,
  271. bool is_alt_down,
  272. bool is_ctrl_down,
  273. - bool is_shift_down) {
  274. + bool is_shift_down,
  275. + bool is_cmd_down) {
  276. return XGlobalShortcutListener::UnregisterAccelerator(
  277. - key_code, is_alt_down, is_ctrl_down, is_shift_down);
  278. + key_code, is_alt_down, is_ctrl_down, is_shift_down, is_cmd_down);
  279. }
  280. void X11GlobalShortcutListenerOzone::OnKeyPressed(KeyboardCode key_code,
  281. bool is_alt_down,
  282. bool is_ctrl_down,
  283. - bool is_shift_down) {
  284. + bool is_shift_down,
  285. + bool is_cmd_down) {
  286. if (delegate()) {
  287. delegate()->OnKeyPressed(key_code, is_alt_down, is_ctrl_down,
  288. - is_shift_down);
  289. + is_shift_down, is_cmd_down);
  290. }
  291. }
  292. diff --git a/ui/ozone/platform/x11/x11_global_shortcut_listener_ozone.h b/ui/ozone/platform/x11/x11_global_shortcut_listener_ozone.h
  293. index 4f7392e2019828caf374d7008068222aa366815f..bc1fcbb68c15d999caa991d678a6bb7473496d39 100644
  294. --- a/ui/ozone/platform/x11/x11_global_shortcut_listener_ozone.h
  295. +++ b/ui/ozone/platform/x11/x11_global_shortcut_listener_ozone.h
  296. @@ -28,17 +28,20 @@ class X11GlobalShortcutListenerOzone : public PlatformGlobalShortcutListener,
  297. bool RegisterAccelerator(KeyboardCode key_code,
  298. bool is_alt_down,
  299. bool is_ctrl_down,
  300. - bool is_shift_down) override;
  301. + bool is_shift_down,
  302. + bool is_cmd_down) override;
  303. void UnregisterAccelerator(KeyboardCode key_code,
  304. bool is_alt_down,
  305. bool is_ctrl_down,
  306. - bool is_shift_down) override;
  307. + bool is_shift_down,
  308. + bool is_cmd_down) override;
  309. // ui::XGlobalShortcutListener:
  310. void OnKeyPressed(KeyboardCode key_code,
  311. bool is_alt_down,
  312. bool is_ctrl_down,
  313. - bool is_shift_down) override;
  314. + bool is_shift_down,
  315. + bool is_cmd_down) override;
  316. };
  317. } // namespace ui
  318. diff --git a/ui/ozone/public/platform_global_shortcut_listener.h b/ui/ozone/public/platform_global_shortcut_listener.h
  319. index dd8bf45d0b7072178d97678565c023c0a6f9a6db..c6af8dbe1dee2d9c1552383b17c81ae12b5cc05c 100644
  320. --- a/ui/ozone/public/platform_global_shortcut_listener.h
  321. +++ b/ui/ozone/public/platform_global_shortcut_listener.h
  322. @@ -20,7 +20,8 @@ class COMPONENT_EXPORT(OZONE_BASE) PlatformGlobalShortcutListenerDelegate {
  323. virtual void OnKeyPressed(KeyboardCode key_code,
  324. bool is_alt_down,
  325. bool is_ctrl_down,
  326. - bool is_shift_down) = 0;
  327. + bool is_shift_down,
  328. + bool is_cmd_down) = 0;
  329. // Called back when the platform implementation is destroyed.
  330. virtual void OnPlatformListenerDestroyed() = 0;
  331. @@ -52,11 +53,13 @@ class COMPONENT_EXPORT(OZONE_BASE) PlatformGlobalShortcutListener {
  332. virtual bool RegisterAccelerator(KeyboardCode key_code,
  333. bool is_alt_down,
  334. bool is_ctrl_down,
  335. - bool is_shift_down) = 0;
  336. + bool is_shift_down,
  337. + bool is_cmd_down) = 0;
  338. virtual void UnregisterAccelerator(KeyboardCode key_code,
  339. bool is_alt_down,
  340. bool is_ctrl_down,
  341. - bool is_shift_down) = 0;
  342. + bool is_shift_down,
  343. + bool is_cmd_down) = 0;
  344. protected:
  345. PlatformGlobalShortcutListenerDelegate* delegate() { return delegate_; }