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

Unified Diff: ash/wm/activation_controller.cc

Issue 9719037: Aura: Add non-browser windows into the list of "Alt + Tab" cycle list. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix Created 8 years, 9 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 | « ash/wm/activation_controller.h ('k') | ash/wm/activation_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/wm/activation_controller.cc
diff --git a/ash/wm/activation_controller.cc b/ash/wm/activation_controller.cc
index 1d35998d9e7269b007f05244afdc7bdce1e970d0..f16ba52a41d935e55f9d966186d605042cc8883e 100644
--- a/ash/wm/activation_controller.cc
+++ b/ash/wm/activation_controller.cc
@@ -55,10 +55,22 @@ bool SupportsChildActivation(aura::Window* window) {
return false;
}
+bool HasModalTransientChild(aura::Window* window) {
+ aura::Window::Windows::const_iterator it;
+ for (it = window->transient_children().begin();
+ it != window->transient_children().end();
+ ++it) {
+ if ((*it)->GetProperty(aura::client::kModalKey) == ui::MODAL_TYPE_WINDOW)
+ return true;
+ }
+ return false;
+}
+
// Returns true if |window| can be activated or deactivated.
// A window manager typically defines some notion of "top level window" that
// supports activation/deactivation.
-bool CanActivateWindow(aura::Window* window, const aura::Event* event) {
+bool CanActivateWindowWithEvent(aura::Window* window,
+ const aura::Event* event) {
return window &&
window->IsVisible() &&
(!aura::client::GetActivationDelegate(window) ||
@@ -104,7 +116,7 @@ aura::Window* ActivationController::GetActivatableWindow(
aura::Window* parent = window->parent();
aura::Window* child = window;
while (parent) {
- if (CanActivateWindow(child, event))
+ if (CanActivateWindowWithEvent(child, event))
return child;
// If |child| isn't activatable, but has transient parent, trace
// that path instead.
@@ -116,6 +128,11 @@ aura::Window* ActivationController::GetActivatableWindow(
return NULL;
}
+bool ActivationController::CanActivateWindow(aura::Window* window) const {
+ return CanActivateWindowWithEvent(window, NULL) &&
+ !HasModalTransientChild(window);
+}
+
////////////////////////////////////////////////////////////////////////////////
// ActivationController, aura::client::ActivationClient implementation:
@@ -135,7 +152,7 @@ aura::Window* ActivationController::GetActiveWindow() {
bool ActivationController::OnWillFocusWindow(aura::Window* window,
const aura::Event* event) {
- return CanActivateWindow(GetActivatableWindow(window, event), event);
+ return CanActivateWindowWithEvent(GetActivatableWindow(window, event), event);
}
////////////////////////////////////////////////////////////////////////////////
@@ -202,7 +219,7 @@ void ActivationController::ActivateWindowWithEvent(aura::Window* window,
return;
// The stacking client may impose rules on what window configurations can be
// activated or deactivated.
- if (window && !CanActivateWindow(window, event))
+ if (window && !CanActivateWindowWithEvent(window, event))
return;
// If the screen is locked, just bring the window to top so that
// it will be activated when the lock window is destroyed.
@@ -272,7 +289,7 @@ aura::Window* ActivationController::GetTopmostWindowToActivateInContainer(
container->children().rbegin();
i != container->children().rend();
++i) {
- if (*i != ignore && CanActivateWindow(*i, NULL))
+ if (*i != ignore && CanActivateWindowWithEvent(*i, NULL))
return *i;
}
return NULL;
« no previous file with comments | « ash/wm/activation_controller.h ('k') | ash/wm/activation_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698