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

Unified Diff: chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc

Issue 15734011: Correct immersive mode gestures under rotation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added in OnWindowRemovedFromRootWindow Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/frame/immersive_mode_controller_ash.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
index a35b5e16f29889d718951dfc1dfde35f36c7e940..2cd80295883f6fc66d6cbf1f1d15ca274a7b14c2 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_ash.cc
@@ -18,6 +18,7 @@
#include "ui/aura/client/aura_constants.h"
#include "ui/aura/client/capture_client.h"
#include "ui/aura/env.h"
+#include "ui/aura/root_window.h"
#include "ui/aura/window.h"
#include "ui/aura/window_observer.h"
#include "ui/compositor/layer_animation_observer.h"
@@ -301,11 +302,12 @@ class ImmersiveModeControllerAsh::WindowObserver : public aura::WindowObserver {
public:
explicit WindowObserver(ImmersiveModeControllerAsh* controller)
: controller_(controller) {
- controller_->native_window_->AddObserver(this);
+ window_ = controller_->native_window_;
+ window_->AddObserver(this);
}
virtual ~WindowObserver() {
- controller_->native_window_->RemoveObserver(this);
+ window_->RemoveObserver(this);
}
// aura::WindowObserver overrides:
@@ -326,8 +328,19 @@ class ImmersiveModeControllerAsh::WindowObserver : public aura::WindowObserver {
}
}
+ virtual void OnWindowAddedToRootWindow(aura::Window* window) {
+ DCHECK(window == window_);
pkotwicz 2013/05/24 03:27:30 Nit: DCHECK_EQ
rharrison 2013/05/27 19:00:54 Done.
+ controller_->SetPreTargetHandler();
+ }
+
+ virtual void OnWindowRemovedFromRootWindow(aura::Window* window) {
+ DCHECK(window == window_);
pkotwicz 2013/05/24 03:27:30 DCHECK_EQ
rharrison 2013/05/27 19:00:54 Done.
+ controller_->SetPreTargetHandler();
+ }
+
private:
ImmersiveModeControllerAsh* controller_; // Not owned.
+ aura::Window* window_; // Not owned.
DISALLOW_COPY_AND_ASSIGN(WindowObserver);
};
@@ -377,6 +390,18 @@ void ImmersiveModeControllerAsh::MaybeRevealWithoutAnimation() {
MaybeStartReveal(ANIMATE_NO);
}
+void ImmersiveModeControllerAsh::SetPreTargetHandler() {
pkotwicz 2013/05/24 03:27:30 I don't think that you will need this function onc
rharrison 2013/05/27 19:00:54 I think it will still be needed to avoid code dupl
+ if (!native_window_)
+ return;
+ aura::RootWindow* root_window = native_window_->GetRootWindow();
+ if (!root_window)
+ return;
+ if (observers_enabled_)
+ root_window->AddPreTargetHandler(this);
+ else
+ root_window->RemovePreTargetHandler(this);
+}
+
void ImmersiveModeControllerAsh::Init(
Delegate* delegate,
views::Widget* widget,
@@ -661,10 +686,7 @@ void ImmersiveModeControllerAsh::EnableWindowObservers(bool enable) {
focus_manager->RemoveFocusChangeListener(this);
}
- if (enable)
- native_window_->AddPreTargetHandler(this);
- else
- native_window_->RemovePreTargetHandler(this);
+ SetPreTargetHandler();
// The window observer adds and removes itself from the native window.
window_observer_.reset(enable ? new WindowObserver(this) : NULL);
@@ -1031,5 +1053,8 @@ bool ImmersiveModeControllerAsh::IsNearTopContainer(gfx::Point location) const {
gfx::Rect near_bounds = top_container_->GetTargetBoundsInScreen();
if (reveal_state_ == CLOSED)
near_bounds.Inset(gfx::Insets(0, 0, -kNearTopContainerDistance, 0));
- return near_bounds.Contains(location);
+ return near_bounds.Contains(location) ||
pkotwicz 2013/05/24 03:27:30 Can you please add a comment as to why the conditi
rharrison 2013/05/27 19:00:54 Done.
+ ((location.y() < near_bounds.y()) &&
+ (location.x() >= near_bounds.x()) &&
+ (location.x() <= near_bounds.x() + near_bounds.width()));
pkotwicz 2013/05/24 03:27:30 Nit: You can use near_bounds.right()
rharrison 2013/05/27 19:00:54 Done.
}
« no previous file with comments | « chrome/browser/ui/views/frame/immersive_mode_controller_ash.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698