diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-24 15:41:59 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-24 15:41:59 +0000 |
commit | ce76a4ce4de7267162f2adf4986ae81097c805ce (patch) | |
tree | 7fbfbea7295c69fd3f55f3b35f9e0924d173b5e3 | |
parent | 5cc28a334da06e9c8a98952dbfde131072993ec7 (diff) | |
download | chromium_src-ce76a4ce4de7267162f2adf4986ae81097c805ce.zip chromium_src-ce76a4ce4de7267162f2adf4986ae81097c805ce.tar.gz chromium_src-ce76a4ce4de7267162f2adf4986ae81097c805ce.tar.bz2 |
Makes closing a fullscreen window refocus the window it came from.
BUG=151557
TEST=see bug
R=ben@chromium.org
Review URL: https://codereview.chromium.org/10963045
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158283 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/browser/renderer_host/render_widget_host_view_aura.cc | 13 | ||||
-rw-r--r-- | content/browser/renderer_host/render_widget_host_view_aura.h | 5 | ||||
-rw-r--r-- | ui/aura/window_tracker.h | 7 |
3 files changed, 22 insertions, 3 deletions
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc index fbd5aa0..70b5050 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -37,6 +37,7 @@ #include "ui/aura/root_window.h" #include "ui/aura/window.h" #include "ui/aura/window_observer.h" +#include "ui/aura/window_tracker.h" #include "ui/base/clipboard/scoped_clipboard_writer.h" #include "ui/base/events/event.h" #include "ui/base/gestures/gesture_recognizer.h" @@ -192,7 +193,7 @@ class RenderWidgetHostViewAura::WindowObserver : public aura::WindowObserver { explicit WindowObserver(RenderWidgetHostViewAura* view) : view_(view) {} virtual ~WindowObserver() {} - // Overridden from aura::WindowObserver: + // Overridden from aura::WindowObserver: virtual void OnWindowRemovingFromRootWindow(aura::Window* window) OVERRIDE { view_->RemovingFromRootWindow(); } @@ -323,6 +324,10 @@ void RenderWidgetHostViewAura::InitAsFullscreen( if (reference_host_view) { aura::Window* reference_window = static_cast<RenderWidgetHostViewAura*>(reference_host_view)->window_; + if (reference_window) { + host_tracker_.reset(new aura::WindowTracker); + host_tracker_->Add(reference_window); + } gfx::Display display = gfx::Screen::GetDisplayNearestWindow(reference_window); aura::client::StackingClient* stacking_client = @@ -1428,6 +1433,12 @@ ui::EventResult RenderWidgetHostViewAura::OnKeyEvent(ui::KeyEvent* event) { // We need to handle the Escape key for Pepper Flash. if (is_fullscreen_ && event->key_code() == ui::VKEY_ESCAPE) { + // Focus the window we were created from. + if (host_tracker_.get() && !host_tracker_->windows().empty()) { + aura::Window* host = *(host_tracker_->windows().begin()); + if (host->GetFocusManager()) + host->Focus(); + } if (!in_shutdown_) { in_shutdown_ = true; host_->Shutdown(); diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h index a36c811..47533cd 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.h +++ b/content/browser/renderer_host/render_widget_host_view_aura.h @@ -24,6 +24,7 @@ namespace aura { class CompositorLock; +class WindowTracker; } namespace gfx { @@ -388,6 +389,10 @@ class RenderWidgetHostViewAura // This lock is for waiting for a front surface to become available to draw. scoped_refptr<aura::CompositorLock> released_front_lock_; + // Used to track the state of the window we're created from. Only used when + // created fullscreen. + scoped_ptr<aura::WindowTracker> host_tracker_; + DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAura); }; diff --git a/ui/aura/window_tracker.h b/ui/aura/window_tracker.h index c11ac4b..960549a 100644 --- a/ui/aura/window_tracker.h +++ b/ui/aura/window_tracker.h @@ -18,9 +18,14 @@ namespace aura { // explicitly by Remove(), or implicitly when the window is destroyed. class AURA_EXPORT WindowTracker : public WindowObserver { public: + typedef std::set<Window*> Windows; + WindowTracker(); virtual ~WindowTracker(); + // Returns the set of windows being observed. + const std::set<Window*>& windows() const { return windows_; } + // Adds |window| to the set of Windows being tracked. void Add(Window* window); @@ -35,8 +40,6 @@ class AURA_EXPORT WindowTracker : public WindowObserver { virtual void OnWindowDestroying(Window* window) OVERRIDE; private: - typedef std::set<Window*> Windows; - Windows windows_; DISALLOW_COPY_AND_ASSIGN(WindowTracker); |