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

Side by Side Diff: chrome/browser/ui/views/frame/browser_view.cc

Issue 10134036: Let Chrome app handle Ash accelerators first if the app is launched as a window (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 8 years, 7 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/browser/ui/views/frame/browser_view.h" 5 #include "chrome/browser/ui/views/frame/browser_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 #include "ui/views/events/event.h" 95 #include "ui/views/events/event.h"
96 #include "ui/views/focus/external_focus_tracker.h" 96 #include "ui/views/focus/external_focus_tracker.h"
97 #include "ui/views/focus/view_storage.h" 97 #include "ui/views/focus/view_storage.h"
98 #include "ui/views/layout/grid_layout.h" 98 #include "ui/views/layout/grid_layout.h"
99 #include "ui/views/widget/native_widget.h" 99 #include "ui/views/widget/native_widget.h"
100 #include "ui/views/widget/root_view.h" 100 #include "ui/views/widget/root_view.h"
101 #include "ui/views/widget/widget.h" 101 #include "ui/views/widget/widget.h"
102 #include "ui/views/window/dialog_delegate.h" 102 #include "ui/views/window/dialog_delegate.h"
103 103
104 #if defined(USE_ASH) 104 #if defined(USE_ASH)
105 #include "ash/accelerators/accelerator_controller.h"
105 #include "ash/launcher/launcher.h" 106 #include "ash/launcher/launcher.h"
106 #include "ash/launcher/launcher_model.h" 107 #include "ash/launcher/launcher_model.h"
107 #include "ash/shell.h" 108 #include "ash/shell.h"
108 #include "chrome/browser/ui/views/ash/chrome_shell_delegate.h" 109 #include "chrome/browser/ui/views/ash/chrome_shell_delegate.h"
109 #include "chrome/browser/ui/views/ash/launcher/launcher_updater.h" 110 #include "chrome/browser/ui/views/ash/launcher/launcher_updater.h"
110 #include "chrome/browser/ui/views/ash/window_positioner.h" 111 #include "chrome/browser/ui/views/ash/window_positioner.h"
111 #elif defined(OS_WIN) 112 #elif defined(OS_WIN)
112 #include "base/win/metro.h" 113 #include "base/win/metro.h"
113 #include "chrome/browser/aeropeek_manager.h" 114 #include "chrome/browser/aeropeek_manager.h"
114 #include "chrome/browser/jumplist_win.h" 115 #include "chrome/browser/jumplist_win.h"
115 #include "ui/views/widget/native_widget_win.h" 116 #include "ui/views/widget/native_widget_win.h"
116 #endif 117 #endif
117 118
118 #if defined(USE_AURA) 119 #if defined(USE_AURA)
119 #include "chrome/browser/ui/views/accelerator_table.h" 120 #include "chrome/browser/ui/views/accelerator_table.h"
121 #include "ui/aura/event.h"
120 #include "ui/gfx/screen.h" 122 #include "ui/gfx/screen.h"
121 #endif 123 #endif
122 124
123 #if defined(OS_CHROMEOS) 125 #if defined(OS_CHROMEOS)
124 #include "chrome/browser/ui/views/keyboard_overlay_dialog_view.h" 126 #include "chrome/browser/ui/views/keyboard_overlay_dialog_view.h"
125 #endif 127 #endif
126 128
127 #if defined(ENABLE_ONE_CLICK_SIGNIN) 129 #if defined(ENABLE_ONE_CLICK_SIGNIN)
128 #include "chrome/browser/ui/views/sync/one_click_signin_bubble_view.h" 130 #include "chrome/browser/ui/views/sync/one_click_signin_bubble_view.h"
129 #endif 131 #endif
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 ::GetProcAddress(metro, "SetFrameWindow")); 183 ::GetProcAddress(metro, "SetFrameWindow"));
182 set_frame_window(frame->GetNativeWindow()); 184 set_frame_window(frame->GetNativeWindow());
183 return true; 185 return true;
184 } 186 }
185 #else 187 #else
186 bool AdjustFrameForImmersiveMode(BrowserFrame* frame) { 188 bool AdjustFrameForImmersiveMode(BrowserFrame* frame) {
187 return false; 189 return false;
188 } 190 }
189 #endif 191 #endif
190 192
193 #if defined(USE_ASH)
194 // Do not call this function directly.
195 bool ProcessAshAcceleratorInternal(const NativeWebKeyboardEvent& event,
Ben Goodger (Google) 2012/05/01 16:00:37 Can we move this back to src/ash? I don't like ha
Yusuke Sato 2012/05/02 16:40:11 Thanks for the suggestion. Migrated to Ash-only so
196 bool check_only) {
197 ui::Accelerator accelerator(
198 static_cast<ui::KeyboardCode>(event.windowsKeyCode),
199 (event.modifiers & NativeWebKeyboardEvent::ShiftKey) ==
200 NativeWebKeyboardEvent::ShiftKey,
201 (event.modifiers & NativeWebKeyboardEvent::ControlKey) ==
202 NativeWebKeyboardEvent::ControlKey,
203 (event.modifiers & NativeWebKeyboardEvent::AltKey) ==
204 NativeWebKeyboardEvent::AltKey);
205
206 if (event.type == WebKit::WebInputEvent::KeyUp)
207 accelerator.set_type(ui::ET_KEY_RELEASED);
208 else if (event.type != WebKit::WebInputEvent::RawKeyDown)
209 return false;
210
211 const aura::KeyEvent* aura_event =
212 static_cast<const aura::KeyEvent*>(event.os_event);
213 ash::AcceleratorController* accelerator_controller =
214 ash::Shell::GetInstance()->accelerator_controller();
215
216 // |aura_event| could be NULL when the keyboard |event| is a fabricated one.
217 // See RenderWidgetHostViewAura::OnKeyEvent() for details.
218 if (!aura_event || !accelerator_controller)
219 return false;
220
221 if (check_only && accelerator_controller->IsAccelerator(accelerator))
222 return true;
223 if (!check_only && accelerator_controller->Process(accelerator))
224 return true;
225
226 return false;
227 }
228
229 bool ProcessAshAccelerator(const NativeWebKeyboardEvent& event) {
230 return ProcessAshAcceleratorInternal(event, false);
231 }
232
233 bool IsAshAccelerator(const NativeWebKeyboardEvent& event) {
234 return ProcessAshAcceleratorInternal(event, true);
235 }
236
237 #endif
238
191 } // namespace 239 } // namespace
192 240
193 // Returned from BrowserView::GetClassName. 241 // Returned from BrowserView::GetClassName.
194 const char BrowserView::kViewClassName[] = "browser/ui/views/BrowserView"; 242 const char BrowserView::kViewClassName[] = "browser/ui/views/BrowserView";
195 243
196 /////////////////////////////////////////////////////////////////////////////// 244 ///////////////////////////////////////////////////////////////////////////////
197 // BookmarkExtensionBackground, private: 245 // BookmarkExtensionBackground, private:
198 // This object serves as the views::Background object which is used to layout 246 // This object serves as the views::Background object which is used to layout
199 // and paint the bookmark bar. 247 // and paint the bookmark bar.
200 class BookmarkExtensionBackground : public views::Background { 248 class BookmarkExtensionBackground : public views::Background {
(...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 const content::SSLStatus& ssl, 1231 const content::SSLStatus& ssl,
1184 bool show_history) { 1232 bool show_history) {
1185 } 1233 }
1186 1234
1187 void BrowserView::ShowAppMenu() { 1235 void BrowserView::ShowAppMenu() {
1188 toolbar_->app_menu()->Activate(); 1236 toolbar_->app_menu()->Activate();
1189 } 1237 }
1190 1238
1191 bool BrowserView::PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, 1239 bool BrowserView::PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
1192 bool* is_keyboard_shortcut) { 1240 bool* is_keyboard_shortcut) {
1241 #if defined(USE_ASH)
1242 if (!browser_->is_app() && ProcessAshAccelerator(event))
1243 return true;
1244 if (browser_->is_app() && IsAshAccelerator(event)) {
1245 *is_keyboard_shortcut = true;
1246 return false;
1247 }
1248 #endif
1249
1193 if (event.type != WebKit::WebInputEvent::RawKeyDown) 1250 if (event.type != WebKit::WebInputEvent::RawKeyDown)
1194 return false; 1251 return false;
1195 1252
1196 #if defined(OS_WIN) && !defined(USE_AURA) 1253 #if defined(OS_WIN) && !defined(USE_AURA)
1197 // As Alt+F4 is the close-app keyboard shortcut, it needs processing 1254 // As Alt+F4 is the close-app keyboard shortcut, it needs processing
1198 // immediately. 1255 // immediately.
1199 if (event.windowsKeyCode == ui::VKEY_F4 && 1256 if (event.windowsKeyCode == ui::VKEY_F4 &&
1200 event.modifiers == NativeWebKeyboardEvent::AltKey) { 1257 event.modifiers == NativeWebKeyboardEvent::AltKey) {
1201 DefWindowProc(event.os_event.hwnd, event.os_event.message, 1258 DefWindowProc(event.os_event.hwnd, event.os_event.message,
1202 event.os_event.wParam, event.os_event.lParam); 1259 event.os_event.wParam, event.os_event.lParam);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 return browser_->ExecuteCommandIfEnabled(id); 1302 return browser_->ExecuteCommandIfEnabled(id);
1246 } 1303 }
1247 1304
1248 DCHECK(is_keyboard_shortcut != NULL); 1305 DCHECK(is_keyboard_shortcut != NULL);
1249 *is_keyboard_shortcut = true; 1306 *is_keyboard_shortcut = true;
1250 1307
1251 return false; 1308 return false;
1252 } 1309 }
1253 1310
1254 void BrowserView::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) { 1311 void BrowserView::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {
1312 #if defined(USE_ASH)
1313 if (browser_->is_app() && ProcessAshAccelerator(event))
1314 return;
1315 #endif
1255 unhandled_keyboard_event_handler_.HandleKeyboardEvent(event, 1316 unhandled_keyboard_event_handler_.HandleKeyboardEvent(event,
1256 GetFocusManager()); 1317 GetFocusManager());
1257 } 1318 }
1258 1319
1259 // TODO(devint): http://b/issue?id=1117225 Cut, Copy, and Paste are always 1320 // TODO(devint): http://b/issue?id=1117225 Cut, Copy, and Paste are always
1260 // enabled in the page menu regardless of whether the command will do 1321 // enabled in the page menu regardless of whether the command will do
1261 // anything. When someone selects the menu item, we just act as if they hit 1322 // anything. When someone selects the menu item, we just act as if they hit
1262 // the keyboard shortcut for the command by sending the associated key press 1323 // the keyboard shortcut for the command by sending the associated key press
1263 // to windows. The real fix to this bug is to disable the commands when they 1324 // to windows. The real fix to this bug is to disable the commands when they
1264 // won't do anything. We'll need something like an overall clipboard command 1325 // won't do anything. We'll need something like an overall clipboard command
(...skipping 1207 matching lines...) Expand 10 before | Expand all | Expand 10 after
2472 return; 2533 return;
2473 2534
2474 PasswordGenerationBubbleView* bubble = 2535 PasswordGenerationBubbleView* bubble =
2475 new PasswordGenerationBubbleView(bounds, 2536 new PasswordGenerationBubbleView(bounds,
2476 this, 2537 this,
2477 web_contents->GetRenderViewHost()); 2538 web_contents->GetRenderViewHost());
2478 views::BubbleDelegateView::CreateBubble(bubble); 2539 views::BubbleDelegateView::CreateBubble(bubble);
2479 bubble->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); 2540 bubble->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
2480 bubble->Show(); 2541 bubble->Show();
2481 } 2542 }
OLDNEW
« ash/shell_delegate.h ('K') | « chrome/browser/ui/views/ash/chrome_shell_delegate.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698