Index: ash/wm/ash_focus_rules.cc |
diff --git a/ash/wm/ash_focus_rules.cc b/ash/wm/ash_focus_rules.cc |
index ac4d9a8d5632563c6275db5b47a2fa061bc2e870..10c81fd6373a1465230cec353884a2cc56096dd9 100644 |
--- a/ash/wm/ash_focus_rules.cc |
+++ b/ash/wm/ash_focus_rules.cc |
@@ -14,11 +14,15 @@ |
#include "ash/wm/window_state_aura.h" |
#include "ash/wm_window.h" |
#include "ui/aura/window.h" |
+#include "ui/events/event.h" |
namespace ash { |
namespace wm { |
namespace { |
+// A property key to store whether activation on pointer is enabled or not. |
+DEFINE_UI_CLASS_PROPERTY_KEY(bool, kActivateOnPointerKey, true); |
+ |
bool BelongsToContainerWithEqualOrGreaterId(const aura::Window* window, |
int container_id) { |
for (; window; window = window->parent()) { |
@@ -30,16 +34,19 @@ bool BelongsToContainerWithEqualOrGreaterId(const aura::Window* window, |
} // namespace |
+// static |
+void AshFocusRules::SetActivateOnPointer(aura::Window* window, |
+ bool activate_on_pointer) { |
+ DCHECK(window); |
+ window->SetProperty(kActivateOnPointerKey, activate_on_pointer); |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// AshFocusRules, public: |
-AshFocusRules::AshFocusRules() {} |
+AshFocusRules::AshFocusRules() = default; |
-AshFocusRules::~AshFocusRules() {} |
- |
-bool AshFocusRules::IsWindowConsideredActivatable(aura::Window* window) const { |
- return ash::IsWindowConsideredActivatable(WmWindow::Get(window)); |
-} |
+AshFocusRules::~AshFocusRules() = default; |
//////////////////////////////////////////////////////////////////////////////// |
// AshFocusRules, ::wm::FocusRules: |
@@ -73,6 +80,19 @@ bool AshFocusRules::CanActivateWindow(aura::Window* window) const { |
return true; |
} |
+bool AshFocusRules::CanFocusWindow(aura::Window* window, |
+ ui::Event* event) const { |
+ if (!window) |
+ return true; |
+ |
+ if (event && (event->IsMouseEvent() || event->IsGestureEvent()) && |
+ !window->GetProperty(kActivateOnPointerKey)) { |
+ return false; |
+ } |
+ |
+ return BaseFocusRules::CanFocusWindow(window, event); |
+} |
+ |
aura::Window* AshFocusRules::GetNextActivatableWindow( |
aura::Window* ignore) const { |
DCHECK(ignore); |
@@ -141,7 +161,7 @@ aura::Window* AshFocusRules::GetTopmostWindowToActivateInContainer( |
!window_state->IsMinimized()) |
return *i; |
} |
- return NULL; |
+ return nullptr; |
} |
} // namespace wm |