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

Unified Diff: ash/wm/maximize_mode/maximize_mode_controller.cc

Issue 230613004: Block keyboard and mouse input when maximize mode is activated by accelerometer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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
Index: ash/wm/maximize_mode/maximize_mode_controller.cc
diff --git a/ash/wm/maximize_mode/maximize_mode_controller.cc b/ash/wm/maximize_mode/maximize_mode_controller.cc
index 7fec42064d7b923798fb3c180d1ccd67484ed159..f61e167c0d1f9ff6c70fd3f10d573d8b7fe26068 100644
--- a/ash/wm/maximize_mode/maximize_mode_controller.cc
+++ b/ash/wm/maximize_mode/maximize_mode_controller.cc
@@ -7,6 +7,8 @@
#include "ash/accelerometer/accelerometer_controller.h"
#include "ash/display/display_manager.h"
#include "ash/shell.h"
+#include "ui/aura/client/cursor_client.h"
+#include "ui/events/event_handler.h"
#include "ui/gfx/vector3d_f.h"
namespace ash {
@@ -68,6 +70,46 @@ float ClockwiseAngleBetweenVectorsInDegrees(const gfx::Vector3dF& base,
return angle;
}
+// Filter to prevent delivery of mouse and touch events while maximize mode is
+// active.
+// TODO(flackr): This should only stop events from the internal keyboard and
+// touchpad.
+class BlockKeyboardAndTouchpadFilter : public ui::EventHandler {
+ public:
+ BlockKeyboardAndTouchpadFilter();
+ virtual ~BlockKeyboardAndTouchpadFilter();
+
+ // Overridden from ui::EventHandler:
+ virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE;
+ virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(BlockKeyboardAndTouchpadFilter);
+};
+
+BlockKeyboardAndTouchpadFilter::BlockKeyboardAndTouchpadFilter() {
+ // This needs to be the first handler to block events.
+ Shell::GetInstance()->PrependPreTargetHandler(this);
sadrul 2014/04/09 16:54:18 Can you install a WindowTargeter on the root-windo
flackr 2014/04/09 17:11:49 It looks like event targeters are per window / roo
sadrul 2014/04/09 17:33:30 There isn't a global event targeter. If a new root
flackr 2014/04/10 02:30:02 Just wanted to be sure I wasn't just missing somet
+ aura::client::CursorClient* cursor_client_ =
+ aura::client::GetCursorClient(Shell::GetTargetRootWindow());
+ if (cursor_client_)
+ cursor_client_->HideCursor();
+}
+
+BlockKeyboardAndTouchpadFilter::~BlockKeyboardAndTouchpadFilter() {
+ Shell::GetInstance()->RemovePreTargetHandler(this);
+}
+
+void BlockKeyboardAndTouchpadFilter::OnKeyEvent(ui::KeyEvent* event) {
+ if (event->HasNativeEvent())
+ event->StopPropagation();
+}
+
+void BlockKeyboardAndTouchpadFilter::OnMouseEvent(ui::MouseEvent* event) {
+ if (event->HasNativeEvent())
+ event->StopPropagation();
+}
+
} // namespace
MaximizeModeController::MaximizeModeController() {
@@ -113,9 +155,11 @@ void MaximizeModeController::HandleHingeRotation(const gfx::Vector3dF& base,
angle > kFullyOpenAngleErrorTolerance &&
angle < kExitMaximizeModeAngle) {
Shell::GetInstance()->EnableMaximizeModeWindowManager(false);
+ event_handler_.reset();
} else if (!maximize_mode_engaged &&
angle > kEnterMaximizeModeAngle) {
Shell::GetInstance()->EnableMaximizeModeWindowManager(true);
+ event_handler_.reset(new BlockKeyboardAndTouchpadFilter);
}
}
« no previous file with comments | « ash/wm/maximize_mode/maximize_mode_controller.h ('k') | ash/wm/maximize_mode/maximize_mode_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698