Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: chrome/common/extensions/command.cc

Issue 10824307: Port Extension Commands to Mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/extensions/command.h" 5 #include "chrome/common/extensions/command.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/string_split.h" 9 #include "base/string_split.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 accelerator); 46 accelerator);
47 return ui::Accelerator(); 47 return ui::Accelerator();
48 } 48 }
49 49
50 // Now, parse it into an accelerator. 50 // Now, parse it into an accelerator.
51 int modifiers = ui::EF_NONE; 51 int modifiers = ui::EF_NONE;
52 ui::KeyboardCode key = ui::VKEY_UNKNOWN; 52 ui::KeyboardCode key = ui::VKEY_UNKNOWN;
53 for (size_t i = 0; i < tokens.size(); i++) { 53 for (size_t i = 0; i < tokens.size(); i++) {
54 if (tokens[i] == "Ctrl") { 54 if (tokens[i] == "Ctrl") {
55 modifiers |= ui::EF_CONTROL_DOWN; 55 modifiers |= ui::EF_CONTROL_DOWN;
56 } else if (tokens[i] == "Alt") { 56 } else if (tokens[i] == "Alt" ||
57 (tokens[i] == "Option" && platform_key == "mac")) {
57 modifiers |= ui::EF_ALT_DOWN; 58 modifiers |= ui::EF_ALT_DOWN;
58 } else if (tokens[i] == "Shift") { 59 } else if (tokens[i] == "Shift") {
59 modifiers |= ui::EF_SHIFT_DOWN; 60 modifiers |= ui::EF_SHIFT_DOWN;
60 } else if (tokens[i] == "Command" && platform_key == "mac") { 61 } else if (tokens[i] == "Command" && platform_key == "mac") {
61 // TODO(finnur): Implement for Mac. 62 modifiers |= ui::EF_COMMAND_DOWN;
62 // TODO(finnur): Reject Shift modifier if no Cmd/Opt (see below).
63 } else if (tokens[i] == "Option" && platform_key == "mac") {
64 // TODO(finnur): Implement for Mac.
65 } else if (tokens[i].size() == 1) { 63 } else if (tokens[i].size() == 1) {
66 if (key != ui::VKEY_UNKNOWN) { 64 if (key != ui::VKEY_UNKNOWN) {
67 // Multiple key assignments. 65 // Multiple key assignments.
68 key = ui::VKEY_UNKNOWN; 66 key = ui::VKEY_UNKNOWN;
69 break; 67 break;
70 } 68 }
71 if (tokens[i][0] >= 'A' && tokens[i][0] <= 'Z') { 69 if (tokens[i][0] >= 'A' && tokens[i][0] <= 'Z') {
72 key = static_cast<ui::KeyboardCode>(ui::VKEY_A + (tokens[i][0] - 'A')); 70 key = static_cast<ui::KeyboardCode>(ui::VKEY_A + (tokens[i][0] - 'A'));
73 } else if (tokens[i][0] >= '0' && tokens[i][0] <= '9') { 71 } else if (tokens[i][0] >= '0' && tokens[i][0] <= '9') {
74 key = static_cast<ui::KeyboardCode>(ui::VKEY_0 + (tokens[i][0] - '0')); 72 key = static_cast<ui::KeyboardCode>(ui::VKEY_0 + (tokens[i][0] - '0'));
75 } else { 73 } else {
76 key = ui::VKEY_UNKNOWN; 74 key = ui::VKEY_UNKNOWN;
77 break; 75 break;
78 } 76 }
79 } else { 77 } else {
80 *error = ExtensionErrorUtils::FormatErrorMessageUTF16( 78 *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
81 errors::kInvalidKeyBinding, 79 errors::kInvalidKeyBinding,
82 base::IntToString(index), 80 base::IntToString(index),
83 platform_key, 81 platform_key,
84 accelerator); 82 accelerator);
85 return ui::Accelerator(); 83 return ui::Accelerator();
86 } 84 }
87 } 85 }
86 bool command = (modifiers & ui::EF_COMMAND_DOWN) != 0;
88 bool ctrl = (modifiers & ui::EF_CONTROL_DOWN) != 0; 87 bool ctrl = (modifiers & ui::EF_CONTROL_DOWN) != 0;
89 bool alt = (modifiers & ui::EF_ALT_DOWN) != 0; 88 bool alt = (modifiers & ui::EF_ALT_DOWN) != 0;
90 bool shift = (modifiers & ui::EF_SHIFT_DOWN) != 0; 89 bool shift = (modifiers & ui::EF_SHIFT_DOWN) != 0;
90
91 // We support Ctrl+foo, Alt+foo, Ctrl+Shift+foo, Alt+Shift+foo, but not 91 // We support Ctrl+foo, Alt+foo, Ctrl+Shift+foo, Alt+Shift+foo, but not
92 // Ctrl+Alt+foo and not Shift+foo either. For a more detailed reason why we 92 // Ctrl+Alt+foo and not Shift+foo either. For a more detailed reason why we
93 // don't support Ctrl+Alt+foo see this article: 93 // don't support Ctrl+Alt+foo see this article:
94 // http://blogs.msdn.com/b/oldnewthing/archive/2004/03/29/101121.aspx. 94 // http://blogs.msdn.com/b/oldnewthing/archive/2004/03/29/101121.aspx.
95 // On Mac Command can also be used in combination with Shift or on its own,
96 // as a modifier.
95 if (key == ui::VKEY_UNKNOWN || (ctrl && alt) || 97 if (key == ui::VKEY_UNKNOWN || (ctrl && alt) ||
96 ((platform_key != "mac") && shift && !ctrl && !alt)) { 98 (shift && !ctrl && !alt && !command)) {
97 *error = ExtensionErrorUtils::FormatErrorMessageUTF16( 99 *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
98 errors::kInvalidKeyBinding, 100 errors::kInvalidKeyBinding,
99 base::IntToString(index), 101 base::IntToString(index),
100 platform_key, 102 platform_key,
101 accelerator); 103 accelerator);
102 return ui::Accelerator(); 104 return ui::Accelerator();
103 } 105 }
104 106
105 return ui::Accelerator(key, modifiers); 107 return ui::Accelerator(key, modifiers);
106 } 108 }
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 extension_data->SetString("description", command_description); 267 extension_data->SetString("description", command_description);
266 extension_data->SetBoolean("active", active); 268 extension_data->SetBoolean("active", active);
267 extension_data->SetString("keybinding", accelerator().GetShortcutText()); 269 extension_data->SetString("keybinding", accelerator().GetShortcutText());
268 extension_data->SetString("command_name", command_name()); 270 extension_data->SetString("command_name", command_name());
269 extension_data->SetString("extension_id", extension->id()); 271 extension_data->SetString("extension_id", extension->id());
270 272
271 return extension_data; 273 return extension_data;
272 } 274 }
273 275
274 } // namespace extensions 276 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698