command-ismediakey.patch 19 KB

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