OLD | NEW |
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 "content/browser/renderer_host/render_widget_host_view_aura.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "ui/aura/client/aura_constants.h" | 30 #include "ui/aura/client/aura_constants.h" |
31 #include "ui/aura/client/cursor_client.h" | 31 #include "ui/aura/client/cursor_client.h" |
32 #include "ui/aura/client/screen_position_client.h" | 32 #include "ui/aura/client/screen_position_client.h" |
33 #include "ui/aura/client/stacking_client.h" | 33 #include "ui/aura/client/stacking_client.h" |
34 #include "ui/aura/client/tooltip_client.h" | 34 #include "ui/aura/client/tooltip_client.h" |
35 #include "ui/aura/client/window_types.h" | 35 #include "ui/aura/client/window_types.h" |
36 #include "ui/aura/env.h" | 36 #include "ui/aura/env.h" |
37 #include "ui/aura/root_window.h" | 37 #include "ui/aura/root_window.h" |
38 #include "ui/aura/window.h" | 38 #include "ui/aura/window.h" |
39 #include "ui/aura/window_observer.h" | 39 #include "ui/aura/window_observer.h" |
| 40 #include "ui/aura/window_tracker.h" |
40 #include "ui/base/clipboard/scoped_clipboard_writer.h" | 41 #include "ui/base/clipboard/scoped_clipboard_writer.h" |
41 #include "ui/base/events/event.h" | 42 #include "ui/base/events/event.h" |
42 #include "ui/base/gestures/gesture_recognizer.h" | 43 #include "ui/base/gestures/gesture_recognizer.h" |
43 #include "ui/base/hit_test.h" | 44 #include "ui/base/hit_test.h" |
44 #include "ui/base/ime/input_method.h" | 45 #include "ui/base/ime/input_method.h" |
45 #include "ui/base/ui_base_types.h" | 46 #include "ui/base/ui_base_types.h" |
46 #include "ui/compositor/compositor.h" | 47 #include "ui/compositor/compositor.h" |
47 #include "ui/compositor/layer.h" | 48 #include "ui/compositor/layer.h" |
48 #include "ui/gfx/canvas.h" | 49 #include "ui/gfx/canvas.h" |
49 #include "ui/gfx/display.h" | 50 #include "ui/gfx/display.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 | 147 |
147 // We have to implement the WindowObserver interface on a separate object | 148 // We have to implement the WindowObserver interface on a separate object |
148 // because clang doesn't like implementing multiple interfaces that have | 149 // because clang doesn't like implementing multiple interfaces that have |
149 // methods with the same name. This object is owned by the | 150 // methods with the same name. This object is owned by the |
150 // RenderWidgetHostViewAura. | 151 // RenderWidgetHostViewAura. |
151 class RenderWidgetHostViewAura::WindowObserver : public aura::WindowObserver { | 152 class RenderWidgetHostViewAura::WindowObserver : public aura::WindowObserver { |
152 public: | 153 public: |
153 explicit WindowObserver(RenderWidgetHostViewAura* view) : view_(view) {} | 154 explicit WindowObserver(RenderWidgetHostViewAura* view) : view_(view) {} |
154 virtual ~WindowObserver() {} | 155 virtual ~WindowObserver() {} |
155 | 156 |
156 // Overridden from aura::WindowObserver: | 157 // Overridden from aura::WindowObserver: |
157 virtual void OnWindowRemovingFromRootWindow(aura::Window* window) OVERRIDE { | 158 virtual void OnWindowRemovingFromRootWindow(aura::Window* window) OVERRIDE { |
158 view_->RemovingFromRootWindow(); | 159 view_->RemovingFromRootWindow(); |
159 } | 160 } |
160 | 161 |
161 private: | 162 private: |
162 RenderWidgetHostViewAura* view_; | 163 RenderWidgetHostViewAura* view_; |
163 | 164 |
164 DISALLOW_COPY_AND_ASSIGN(WindowObserver); | 165 DISALLOW_COPY_AND_ASSIGN(WindowObserver); |
165 }; | 166 }; |
166 | 167 |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 RenderWidgetHostView* reference_host_view) { | 277 RenderWidgetHostView* reference_host_view) { |
277 is_fullscreen_ = true; | 278 is_fullscreen_ = true; |
278 window_->SetType(aura::client::WINDOW_TYPE_NORMAL); | 279 window_->SetType(aura::client::WINDOW_TYPE_NORMAL); |
279 window_->Init(ui::LAYER_TEXTURED); | 280 window_->Init(ui::LAYER_TEXTURED); |
280 window_->SetName("RenderWidgetHostViewAura"); | 281 window_->SetName("RenderWidgetHostViewAura"); |
281 window_->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); | 282 window_->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); |
282 aura::Window* parent = NULL; | 283 aura::Window* parent = NULL; |
283 if (reference_host_view) { | 284 if (reference_host_view) { |
284 aura::Window* reference_window = | 285 aura::Window* reference_window = |
285 static_cast<RenderWidgetHostViewAura*>(reference_host_view)->window_; | 286 static_cast<RenderWidgetHostViewAura*>(reference_host_view)->window_; |
| 287 if (reference_window) { |
| 288 host_tracker_.reset(new aura::WindowTracker); |
| 289 host_tracker_->Add(reference_window); |
| 290 } |
286 gfx::Display display = | 291 gfx::Display display = |
287 gfx::Screen::GetDisplayNearestWindow(reference_window); | 292 gfx::Screen::GetDisplayNearestWindow(reference_window); |
288 aura::client::StackingClient* stacking_client = | 293 aura::client::StackingClient* stacking_client = |
289 aura::client::GetStackingClient(); | 294 aura::client::GetStackingClient(); |
290 if (stacking_client) | 295 if (stacking_client) |
291 parent = stacking_client->GetDefaultParent(window_, display.bounds()); | 296 parent = stacking_client->GetDefaultParent(window_, display.bounds()); |
292 } | 297 } |
293 window_->SetParent(parent); | 298 window_->SetParent(parent); |
294 Show(); | 299 Show(); |
295 Focus(); | 300 Focus(); |
(...skipping 1052 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1348 // RenderWidgetHostViewAura, ui::EventHandler implementation: | 1353 // RenderWidgetHostViewAura, ui::EventHandler implementation: |
1349 | 1354 |
1350 ui::EventResult RenderWidgetHostViewAura::OnKeyEvent(ui::KeyEvent* event) { | 1355 ui::EventResult RenderWidgetHostViewAura::OnKeyEvent(ui::KeyEvent* event) { |
1351 TRACE_EVENT0("browser", "RenderWidgetHostViewAura::OnKeyEvent"); | 1356 TRACE_EVENT0("browser", "RenderWidgetHostViewAura::OnKeyEvent"); |
1352 if (popup_child_host_view_ && popup_child_host_view_->NeedsInputGrab() && | 1357 if (popup_child_host_view_ && popup_child_host_view_->NeedsInputGrab() && |
1353 popup_child_host_view_->OnKeyEvent(event)) | 1358 popup_child_host_view_->OnKeyEvent(event)) |
1354 return ui::ER_HANDLED; | 1359 return ui::ER_HANDLED; |
1355 | 1360 |
1356 // We need to handle the Escape key for Pepper Flash. | 1361 // We need to handle the Escape key for Pepper Flash. |
1357 if (is_fullscreen_ && event->key_code() == ui::VKEY_ESCAPE) { | 1362 if (is_fullscreen_ && event->key_code() == ui::VKEY_ESCAPE) { |
| 1363 // Focus the window we were created from. |
| 1364 if (host_tracker_.get() && !host_tracker_->windows().empty()) { |
| 1365 aura::Window* host = *(host_tracker_->windows().begin()); |
| 1366 if (host->GetFocusManager()) |
| 1367 host->Focus(); |
| 1368 } |
1358 if (!in_shutdown_) { | 1369 if (!in_shutdown_) { |
1359 in_shutdown_ = true; | 1370 in_shutdown_ = true; |
1360 host_->Shutdown(); | 1371 host_->Shutdown(); |
1361 } | 1372 } |
1362 } else { | 1373 } else { |
1363 // We don't have to communicate with an input method here. | 1374 // We don't have to communicate with an input method here. |
1364 if (!event->HasNativeEvent()) { | 1375 if (!event->HasNativeEvent()) { |
1365 // Send a fabricated event, which is usually a VKEY_PROCESSKEY IME event. | 1376 // Send a fabricated event, which is usually a VKEY_PROCESSKEY IME event. |
1366 NativeWebKeyboardEvent webkit_event(event->type(), | 1377 NativeWebKeyboardEvent webkit_event(event->type(), |
1367 false /* is_char */, | 1378 false /* is_char */, |
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1791 RenderWidgetHost* widget) { | 1802 RenderWidgetHost* widget) { |
1792 return new RenderWidgetHostViewAura(widget); | 1803 return new RenderWidgetHostViewAura(widget); |
1793 } | 1804 } |
1794 | 1805 |
1795 // static | 1806 // static |
1796 void RenderWidgetHostViewPort::GetDefaultScreenInfo(WebScreenInfo* results) { | 1807 void RenderWidgetHostViewPort::GetDefaultScreenInfo(WebScreenInfo* results) { |
1797 GetScreenInfoForWindow(results, NULL); | 1808 GetScreenInfoForWindow(results, NULL); |
1798 } | 1809 } |
1799 | 1810 |
1800 } // namespace content | 1811 } // namespace content |
OLD | NEW |