macos-hotkeys-on-linux.patch 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. # Provides an experiance closer to macOS in Linux for shortcut keys
  2. diff --git a/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc b/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc
  3. index 4995b3c75c44..a4014f0482c5 100644
  4. --- a/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc
  5. +++ b/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc
  6. @@ -140,39 +140,39 @@ bool RenderViewContextMenuViews::GetAcceleratorForCommandId(
  7. return true;
  8. case IDC_CONTENT_CONTEXT_UNDO:
  9. - *accel = ui::Accelerator(ui::VKEY_Z, ui::EF_CONTROL_DOWN);
  10. + *accel = ui::Accelerator(ui::VKEY_Z, ui::EF_PLATFORM_ACCELERATOR);
  11. return true;
  12. case IDC_CONTENT_CONTEXT_REDO:
  13. // TODO(jcampan): should it be Ctrl-Y?
  14. *accel = ui::Accelerator(ui::VKEY_Z,
  15. - ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN);
  16. + ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR);
  17. return true;
  18. case IDC_CONTENT_CONTEXT_CUT:
  19. - *accel = ui::Accelerator(ui::VKEY_X, ui::EF_CONTROL_DOWN);
  20. + *accel = ui::Accelerator(ui::VKEY_X, ui::EF_PLATFORM_ACCELERATOR);
  21. return true;
  22. case IDC_CONTENT_CONTEXT_COPY:
  23. - *accel = ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN);
  24. + *accel = ui::Accelerator(ui::VKEY_C, ui::EF_PLATFORM_ACCELERATOR);
  25. return true;
  26. case IDC_CONTENT_CONTEXT_INSPECTELEMENT:
  27. *accel = ui::Accelerator(ui::VKEY_I,
  28. - ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN);
  29. + ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR);
  30. return true;
  31. case IDC_CONTENT_CONTEXT_PASTE:
  32. - *accel = ui::Accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN);
  33. + *accel = ui::Accelerator(ui::VKEY_V, ui::EF_PLATFORM_ACCELERATOR);
  34. return true;
  35. case IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE:
  36. *accel = ui::Accelerator(ui::VKEY_V,
  37. - ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN);
  38. + ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR);
  39. return true;
  40. case IDC_CONTENT_CONTEXT_SELECTALL:
  41. - *accel = ui::Accelerator(ui::VKEY_A, ui::EF_CONTROL_DOWN);
  42. + *accel = ui::Accelerator(ui::VKEY_A, ui::EF_PLATFORM_ACCELERATOR);
  43. return true;
  44. case IDC_CONTENT_CONTEXT_ROTATECCW:
  45. @@ -188,16 +188,16 @@ bool RenderViewContextMenuViews::GetAcceleratorForCommandId(
  46. return true;
  47. case IDC_PRINT:
  48. - *accel = ui::Accelerator(ui::VKEY_P, ui::EF_CONTROL_DOWN);
  49. + *accel = ui::Accelerator(ui::VKEY_P, ui::EF_PLATFORM_ACCELERATOR);
  50. return true;
  51. case IDC_RELOAD:
  52. - *accel = ui::Accelerator(ui::VKEY_R, ui::EF_CONTROL_DOWN);
  53. + *accel = ui::Accelerator(ui::VKEY_R, ui::EF_PLATFORM_ACCELERATOR);
  54. return true;
  55. case IDC_CONTENT_CONTEXT_SAVEAVAS:
  56. case IDC_SAVE_PAGE:
  57. - *accel = ui::Accelerator(ui::VKEY_S, ui::EF_CONTROL_DOWN);
  58. + *accel = ui::Accelerator(ui::VKEY_S, ui::EF_PLATFORM_ACCELERATOR);
  59. return true;
  60. case IDC_CONTENT_CONTEXT_EXIT_FULLSCREEN: {
  61. diff --git a/chrome/common/extensions/command.cc b/chrome/common/extensions/command.cc
  62. index 4732019d473a..aa07642f4070 100644
  63. --- a/chrome/common/extensions/command.cc
  64. +++ b/chrome/common/extensions/command.cc
  65. @@ -103,7 +103,7 @@ ui::Accelerator ParseImpl(const std::string& accelerator,
  66. // Mac the developer has to specify MacCtrl). Therefore we treat this
  67. // as Command.
  68. modifiers |= ui::EF_COMMAND_DOWN;
  69. -#if defined(OS_MAC)
  70. +#if defined(OS_MAC) || defined(OS_LINUX)
  71. } else if (platform_key == values::kKeybindingPlatformDefault) {
  72. // If we see "Command+foo" in the Default section it can mean two
  73. // things, depending on the platform:
  74. diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
  75. index d59a7ed97051..c40238bf113c 100644
  76. --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc
  77. +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
  78. @@ -1503,7 +1503,7 @@ void PepperPluginInstanceImpl::SelectAll() {
  79. // TODO(https://crbug.com/836074) |kPlatformModifier| should be
  80. // |ui::EF_PLATFORM_ACCELERATOR| (|ui::EF_COMMAND_DOWN| on Mac).
  81. - static const ui::EventFlags kPlatformModifier = ui::EF_CONTROL_DOWN;
  82. + static const ui::EventFlags kPlatformModifier = ui::EF_COMMAND_DOWN;
  83. // Synthesize a ctrl + a key event to send to the plugin and let it sort out
  84. // the event. See also https://crbug.com/739529.
  85. ui::KeyEvent char_event(L'A', ui::VKEY_A, ui::DomCode::NONE,
  86. diff --git a/third_party/blink/renderer/core/editing/editing_behavior.cc b/third_party/blink/renderer/core/editing/editing_behavior.cc
  87. index e3585bdb1eac..cdd1bb8c475e 100644
  88. --- a/third_party/blink/renderer/core/editing/editing_behavior.cc
  89. +++ b/third_party/blink/renderer/core/editing/editing_behavior.cc
  90. @@ -45,7 +45,7 @@ const unsigned kCtrlKey = WebInputEvent::kControlKey;
  91. const unsigned kAltKey = WebInputEvent::kAltKey;
  92. const unsigned kShiftKey = WebInputEvent::kShiftKey;
  93. const unsigned kMetaKey = WebInputEvent::kMetaKey;
  94. -#if defined(OS_MAC)
  95. +#if defined(OS_MAC) || defined(OS_LINUX)
  96. // Aliases for the generic key defintions to make kbd shortcuts definitions more
  97. // readable on OS X.
  98. const unsigned kOptionKey = kAltKey;
  99. @@ -88,7 +88,7 @@ struct DomKeyKeyDownEntry {
  100. const KeyboardCodeKeyDownEntry kKeyboardCodeKeyDownEntries[] = {
  101. {VKEY_LEFT, 0, "MoveLeft"},
  102. {VKEY_LEFT, kShiftKey, "MoveLeftAndModifySelection"},
  103. -#if defined(OS_MAC)
  104. +#if defined(OS_MAC) || defined(OS_LINUX)
  105. {VKEY_LEFT, kOptionKey, "MoveWordLeft"},
  106. {VKEY_LEFT, kOptionKey | kShiftKey, "MoveWordLeftAndModifySelection"},
  107. #else
  108. @@ -97,7 +97,7 @@ const KeyboardCodeKeyDownEntry kKeyboardCodeKeyDownEntries[] = {
  109. #endif
  110. {VKEY_RIGHT, 0, "MoveRight"},
  111. {VKEY_RIGHT, kShiftKey, "MoveRightAndModifySelection"},
  112. -#if defined(OS_MAC)
  113. +#if defined(OS_MAC) || defined(OS_LINUX)
  114. {VKEY_RIGHT, kOptionKey, "MoveWordRight"},
  115. {VKEY_RIGHT, kOptionKey | kShiftKey, "MoveWordRightAndModifySelection"},
  116. #else
  117. @@ -110,7 +110,7 @@ const KeyboardCodeKeyDownEntry kKeyboardCodeKeyDownEntries[] = {
  118. {VKEY_DOWN, 0, "MoveDown"},
  119. {VKEY_DOWN, kShiftKey, "MoveDownAndModifySelection"},
  120. {VKEY_NEXT, kShiftKey, "MovePageDownAndModifySelection"},
  121. -#if !defined(OS_MAC)
  122. +#if !defined(OS_MAC) && !defined(OS_LINUX)
  123. {VKEY_UP, kCtrlKey, "MoveParagraphBackward"},
  124. {VKEY_UP, kCtrlKey | kShiftKey, "MoveParagraphBackwardAndModifySelection"},
  125. {VKEY_DOWN, kCtrlKey, "MoveParagraphForward"},
  126. @@ -120,18 +120,18 @@ const KeyboardCodeKeyDownEntry kKeyboardCodeKeyDownEntries[] = {
  127. #endif
  128. {VKEY_HOME, 0, "MoveToBeginningOfLine"},
  129. {VKEY_HOME, kShiftKey, "MoveToBeginningOfLineAndModifySelection"},
  130. -#if defined(OS_MAC)
  131. +#if defined(OS_MAC) || defined(OS_LINUX)
  132. {VKEY_PRIOR, kOptionKey, "MovePageUp"},
  133. {VKEY_NEXT, kOptionKey, "MovePageDown"},
  134. #endif
  135. -#if !defined(OS_MAC)
  136. +#if !defined(OS_MAC) && !defined(OS_LINUX)
  137. {VKEY_HOME, kCtrlKey, "MoveToBeginningOfDocument"},
  138. {VKEY_HOME, kCtrlKey | kShiftKey,
  139. "MoveToBeginningOfDocumentAndModifySelection"},
  140. #endif
  141. {VKEY_END, 0, "MoveToEndOfLine"},
  142. {VKEY_END, kShiftKey, "MoveToEndOfLineAndModifySelection"},
  143. -#if !defined(OS_MAC)
  144. +#if !defined(OS_MAC) && !defined(OS_LINUX)
  145. {VKEY_END, kCtrlKey, "MoveToEndOfDocument"},
  146. {VKEY_END, kCtrlKey | kShiftKey, "MoveToEndOfDocumentAndModifySelection"},
  147. #endif
  148. @@ -145,7 +145,7 @@ const KeyboardCodeKeyDownEntry kKeyboardCodeKeyDownEntries[] = {
  149. {VKEY_BACK, kCtrlKey, "DeleteWordBackward"},
  150. {VKEY_DELETE, kCtrlKey, "DeleteWordForward"},
  151. #endif
  152. -#if defined(OS_MAC)
  153. +#if defined(OS_MAC) || defined(OS_LINUX)
  154. {'B', kCommandKey, "ToggleBold"},
  155. {'I', kCommandKey, "ToggleItalic"},
  156. #else
  157. @@ -168,14 +168,14 @@ const KeyboardCodeKeyDownEntry kKeyboardCodeKeyDownEntries[] = {
  158. #if !defined(OS_MAC)
  159. // On OS X, we pipe these back to the browser, so that it can do menu item
  160. // blinking.
  161. - {'C', kCtrlKey, "Copy"},
  162. - {'V', kCtrlKey, "Paste"},
  163. - {'V', kCtrlKey | kShiftKey, "PasteAndMatchStyle"},
  164. - {'X', kCtrlKey, "Cut"},
  165. - {'A', kCtrlKey, "SelectAll"},
  166. - {'Z', kCtrlKey, "Undo"},
  167. - {'Z', kCtrlKey | kShiftKey, "Redo"},
  168. - {'Y', kCtrlKey, "Redo"},
  169. + {'C', kCommandKey, "Copy"},
  170. + {'V', kCommandKey, "Paste"},
  171. + {'V', kCommandKey | kShiftKey, "PasteAndMatchStyle"},
  172. + {'X', kCommandKey, "Cut"},
  173. + {'A', kCommandKey, "SelectAll"},
  174. + {'Z', kCommandKey, "Undo"},
  175. + {'Z', kCommandKey | kShiftKey, "Redo"},
  176. + {'Y', kCommandKey, "Redo"},
  177. #endif
  178. #if defined(OS_WIN)
  179. {VKEY_BACK, kAltKey, "Undo"},
  180. @@ -274,19 +274,19 @@ bool EditingBehavior::ShouldInsertCharacter(const KeyboardEvent& event) const {
  181. // unexpected behaviour
  182. if (ch < ' ')
  183. return false;
  184. -#if defined(OS_LINUX) || defined(OS_CHROMEOS)
  185. +//#if defined(OS_LINUX) || defined(OS_CHROMEOS)
  186. // According to XKB map no keyboard combinations with ctrl key are mapped to
  187. // printable characters, however we need the filter as the DomKey/text could
  188. // contain printable characters.
  189. - if (event.ctrlKey())
  190. - return false;
  191. -#elif !defined(OS_WIN)
  192. + //if (event.ctrlKey())
  193. + //return false;
  194. +#if !defined(OS_WIN)
  195. // Don't insert ASCII character if ctrl w/o alt or meta is on.
  196. // On Mac, we should ignore events when meta is on (Command-<x>).
  197. if (ch < 0x80) {
  198. if (event.ctrlKey() && !event.altKey())
  199. return false;
  200. -#if defined(OS_MAC)
  201. +#if defined(OS_MAC) || defined(OS_LINUX)
  202. if (event.metaKey())
  203. return false;
  204. #endif
  205. diff --git a/ui/base/accelerators/accelerator.cc b/ui/base/accelerators/accelerator.cc
  206. index 627e077480fe..e35db380b877 100644
  207. --- a/ui/base/accelerators/accelerator.cc
  208. +++ b/ui/base/accelerators/accelerator.cc
  209. @@ -414,7 +414,7 @@ base::string16 Accelerator::ApplyLongFormModifiers(
  210. shortcut = ApplyModifierToAcceleratorString(shortcut, IDS_APP_ALT_KEY);
  211. if (IsCmdDown()) {
  212. -#if defined(OS_APPLE)
  213. +#if defined(OS_APPLE) || defined(OS_LINUX)
  214. shortcut = ApplyModifierToAcceleratorString(shortcut, IDS_APP_COMMAND_KEY);
  215. #elif defined(OS_CHROMEOS)
  216. shortcut = ApplyModifierToAcceleratorString(shortcut, IDS_APP_SEARCH_KEY);
  217. diff --git a/ui/base/window_open_disposition.cc b/ui/base/window_open_disposition.cc
  218. index d90ce70031fc..32dfebc127ac 100644
  219. --- a/ui/base/window_open_disposition.cc
  220. +++ b/ui/base/window_open_disposition.cc
  221. @@ -17,7 +17,7 @@ WindowOpenDisposition DispositionFromClick(
  222. bool shift_key,
  223. WindowOpenDisposition disposition_for_current_tab) {
  224. // MacOS uses meta key (Command key) to spawn new tabs.
  225. -#if defined(OS_APPLE)
  226. +#if defined(OS_APPLE) || defined(OS_LINUX)
  227. if (middle_button || meta_key)
  228. #else
  229. if (middle_button || ctrl_key)
  230. diff --git a/ui/events/base_event_utils.cc b/ui/events/base_event_utils.cc
  231. index f5c709d2e650..61230220818d 100644
  232. --- a/ui/events/base_event_utils.cc
  233. +++ b/ui/events/base_event_utils.cc
  234. @@ -22,6 +22,8 @@ const int kSystemKeyModifierMask = EF_ALT_DOWN | EF_COMMAND_DOWN;
  235. #elif defined(OS_APPLE)
  236. // Alt modifier is used to input extended characters on Mac.
  237. const int kSystemKeyModifierMask = EF_COMMAND_DOWN;
  238. +#elif defined(OS_LINUX)
  239. +const int kSystemKeyModifierMask = EF_COMMAND_DOWN;
  240. #else
  241. const int kSystemKeyModifierMask = EF_ALT_DOWN;
  242. #endif // !defined(OS_CHROMEOS) && !defined(OS_APPLE)
  243. diff --git a/ui/events/event_constants.h b/ui/events/event_constants.h
  244. index 0b60cb443edc..f8da4fa50dd0 100644
  245. --- a/ui/events/event_constants.h
  246. +++ b/ui/events/event_constants.h
  247. @@ -47,7 +47,9 @@ enum EventFlags {
  248. #if defined(OS_APPLE)
  249. EF_PLATFORM_ACCELERATOR = EF_COMMAND_DOWN,
  250. #else
  251. - EF_PLATFORM_ACCELERATOR = EF_CONTROL_DOWN,
  252. + // TODO(hparadiz): Build Configurable EF_PLATFORM_ACCELERATOR from chrome://flags
  253. + EF_PLATFORM_ACCELERATOR = EF_COMMAND_DOWN,
  254. + //EF_PLATFORM_ACCELERATOR = EF_CONTROL_DOWN,
  255. #endif
  256. };
  257. diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
  258. index 31ad40b5fe99..c22e138a91b7 100644
  259. --- a/ui/views/controls/textfield/textfield.cc
  260. +++ b/ui/views/controls/textfield/textfield.cc
  261. @@ -127,46 +127,47 @@ ui::TextEditCommand GetCommandForKeyEvent(const ui::KeyEvent& event) {
  262. const bool shift = event.IsShiftDown();
  263. const bool control = event.IsControlDown() || event.IsCommandDown();
  264. const bool alt = event.IsAltDown() || event.IsAltGrDown();
  265. + const bool command = event.IsCommandDown();
  266. switch (event.key_code()) {
  267. case ui::VKEY_Z:
  268. if (control && !shift && !alt)
  269. return ui::TextEditCommand::UNDO;
  270. - return (control && shift && !alt) ? ui::TextEditCommand::REDO
  271. + return (command && shift && !alt) ? ui::TextEditCommand::REDO
  272. : ui::TextEditCommand::INVALID_COMMAND;
  273. case ui::VKEY_Y:
  274. - return (control && !alt) ? ui::TextEditCommand::REDO
  275. + return (command && !alt) ? ui::TextEditCommand::REDO
  276. : ui::TextEditCommand::INVALID_COMMAND;
  277. case ui::VKEY_A:
  278. - return (control && !alt) ? ui::TextEditCommand::SELECT_ALL
  279. + return (command && !alt) ? ui::TextEditCommand::SELECT_ALL
  280. : ui::TextEditCommand::INVALID_COMMAND;
  281. case ui::VKEY_X:
  282. - return (control && !alt) ? ui::TextEditCommand::CUT
  283. + return (command && !alt) ? ui::TextEditCommand::CUT
  284. : ui::TextEditCommand::INVALID_COMMAND;
  285. case ui::VKEY_C:
  286. - return (control && !alt) ? ui::TextEditCommand::COPY
  287. + return (command && !alt) ? ui::TextEditCommand::COPY
  288. : ui::TextEditCommand::INVALID_COMMAND;
  289. case ui::VKEY_V:
  290. - return (control && !alt) ? ui::TextEditCommand::PASTE
  291. + return (command && !alt) ? ui::TextEditCommand::PASTE
  292. : ui::TextEditCommand::INVALID_COMMAND;
  293. case ui::VKEY_RIGHT:
  294. // Ignore alt+right, which may be a browser navigation shortcut.
  295. if (alt)
  296. return ui::TextEditCommand::INVALID_COMMAND;
  297. if (!shift) {
  298. - return control ? ui::TextEditCommand::MOVE_WORD_RIGHT
  299. + return command ? ui::TextEditCommand::MOVE_WORD_RIGHT
  300. : ui::TextEditCommand::MOVE_RIGHT;
  301. }
  302. - return control ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION
  303. + return command ? ui::TextEditCommand::MOVE_WORD_RIGHT_AND_MODIFY_SELECTION
  304. : ui::TextEditCommand::MOVE_RIGHT_AND_MODIFY_SELECTION;
  305. case ui::VKEY_LEFT:
  306. // Ignore alt+left, which may be a browser navigation shortcut.
  307. if (alt)
  308. return ui::TextEditCommand::INVALID_COMMAND;
  309. if (!shift) {
  310. - return control ? ui::TextEditCommand::MOVE_WORD_LEFT
  311. + return command ? ui::TextEditCommand::MOVE_WORD_LEFT
  312. : ui::TextEditCommand::MOVE_LEFT;
  313. }
  314. - return control ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION
  315. + return command ? ui::TextEditCommand::MOVE_WORD_LEFT_AND_MODIFY_SELECTION
  316. : ui::TextEditCommand::MOVE_LEFT_AND_MODIFY_SELECTION;
  317. case ui::VKEY_HOME:
  318. return shift ? ui::TextEditCommand::
  319. @@ -204,12 +205,12 @@ ui::TextEditCommand GetCommandForKeyEvent(const ui::KeyEvent& event) {
  320. if (shift && control)
  321. return ui::TextEditCommand::DELETE_TO_END_OF_LINE;
  322. #endif
  323. - if (control)
  324. + if (command)
  325. return ui::TextEditCommand::DELETE_WORD_FORWARD;
  326. return shift ? ui::TextEditCommand::CUT
  327. : ui::TextEditCommand::DELETE_FORWARD;
  328. case ui::VKEY_INSERT:
  329. - if (control && !shift)
  330. + if (command && !shift)
  331. return ui::TextEditCommand::COPY;
  332. return (shift && !control) ? ui::TextEditCommand::PASTE
  333. : ui::TextEditCommand::INVALID_COMMAND;
  334. @@ -351,9 +352,9 @@ Textfield::Textfield()
  335. // These allow BrowserView to pass edit commands from the Chrome menu to us
  336. // when we're focused by simply asking the FocusManager to
  337. // ProcessAccelerator() with the relevant accelerators.
  338. - AddAccelerator(ui::Accelerator(ui::VKEY_X, ui::EF_CONTROL_DOWN));
  339. - AddAccelerator(ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN));
  340. - AddAccelerator(ui::Accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN));
  341. + AddAccelerator(ui::Accelerator(ui::VKEY_X, ui::EF_PLATFORM_ACCELERATOR));
  342. + AddAccelerator(ui::Accelerator(ui::VKEY_C, ui::EF_PLATFORM_ACCELERATOR));
  343. + AddAccelerator(ui::Accelerator(ui::VKEY_V, ui::EF_PLATFORM_ACCELERATOR));
  344. #endif
  345. // Sometimes there are additional ignored views, such as the View representing