summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-24 15:41:59 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-24 15:41:59 +0000
commitce76a4ce4de7267162f2adf4986ae81097c805ce (patch)
tree7fbfbea7295c69fd3f55f3b35f9e0924d173b5e3
parent5cc28a334da06e9c8a98952dbfde131072993ec7 (diff)
downloadchromium_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.cc13
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.h5
-rw-r--r--ui/aura/window_tracker.h7
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);