summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-27 00:11:27 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-27 00:11:27 +0000
commite9992b14056ca25c961a9c236f85ff5c69f6a839 (patch)
tree0f75a1b712357a447c3cccccc46e03f3980e884f /ash
parent5f475af49882dcb652fdd36c5b303022e0287b0f (diff)
downloadchromium_src-e9992b14056ca25c961a9c236f85ff5c69f6a839.zip
chromium_src-e9992b14056ca25c961a9c236f85ff5c69f6a839.tar.gz
chromium_src-e9992b14056ca25c961a9c236f85ff5c69f6a839.tar.bz2
Makes the shelf remain visible while a context menu is showing in the
launcher. BUG=120301 TEST=see bug R=ben@chromium.org Review URL: https://chromiumcodereview.appspot.com/9860011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@129059 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r--ash/launcher/launcher.cc7
-rw-r--r--ash/launcher/launcher.h5
-rw-r--r--ash/launcher/launcher_view.cc20
-rw-r--r--ash/launcher/launcher_view.h3
-rw-r--r--ash/wm/shelf_layout_manager.cc3
5 files changed, 34 insertions, 4 deletions
diff --git a/ash/launcher/launcher.cc b/ash/launcher/launcher.cc
index 51b2c58..782365c 100644
--- a/ash/launcher/launcher.cc
+++ b/ash/launcher/launcher.cc
@@ -179,9 +179,12 @@ gfx::Rect Launcher::GetScreenBoundsOfItemIconForWindow(aura::Window* window) {
bounds.height());
}
+bool Launcher::IsShowingMenu() const {
+ return launcher_view_->IsShowingMenu();
+}
+
internal::LauncherView* Launcher::GetLauncherViewForTest() {
- return static_cast<internal::LauncherView*>(
- widget_->GetContentsView()->child_at(0));
+ return launcher_view_;
}
void Launcher::UpdateBackground(int alpha) {
diff --git a/ash/launcher/launcher.h b/ash/launcher/launcher.h
index 12a1790..8578b95 100644
--- a/ash/launcher/launcher.h
+++ b/ash/launcher/launcher.h
@@ -54,7 +54,12 @@ class ASH_EXPORT Launcher : public internal::BackgroundAnimatorDelegate {
// Returns the screen bounds of the item for the specified window. If there is
// no item for the specified window an empty rect is returned.
gfx::Rect GetScreenBoundsOfItemIconForWindow(aura::Window* window);
+
+ // Returns true if the Launcher is showing a context menu.
+ bool IsShowingMenu() const;
+
// Only to be called for testing. Retrieves the LauncherView.
+ // TODO(sky): remove this!
internal::LauncherView* GetLauncherViewForTest();
LauncherDelegate* delegate() { return delegate_.get(); }
diff --git a/ash/launcher/launcher_view.cc b/ash/launcher/launcher_view.cc
index 5fe7fe8..7b78b4e 100644
--- a/ash/launcher/launcher_view.cc
+++ b/ash/launcher/launcher_view.cc
@@ -276,6 +276,16 @@ gfx::Rect LauncherView::GetIdealBoundsOfItemIcon(LauncherID id) {
icon_bounds.width(), icon_bounds.height());
}
+bool LauncherView::IsShowingMenu() const {
+#if !defined(OS_MACOSX)
+ return (overflow_menu_runner_.get() &&
+ overflow_menu_runner_->IsRunning()) ||
+ (launcher_menu_runner_.get() &&
+ launcher_menu_runner_->IsRunning());
+#endif
+ return false;
+}
+
void LauncherView::LayoutToIdealBounds() {
IdealBounds ideal_bounds;
CalculateIdealBounds(&ideal_bounds);
@@ -529,8 +539,12 @@ void LauncherView::ShowOverflowMenu() {
ConvertPointToScreen(overflow_button_, &origin);
if (overflow_menu_runner_->RunMenuAt(GetWidget(), NULL,
gfx::Rect(origin, size()), views::MenuItemView::TOPLEFT, 0) ==
- views::MenuRunner::MENU_DELETED ||
- menu_delegate.activated_command_id() == -1)
+ views::MenuRunner::MENU_DELETED)
+ return;
+
+ Shell::GetInstance()->UpdateShelfVisibility();
+
+ if (menu_delegate.activated_command_id() == -1)
return;
LauncherID activated_id = items[menu_delegate.activated_command_id()].id;
@@ -786,6 +800,8 @@ void LauncherView::ShowContextMenuForView(views::View* source,
source->GetWidget(), NULL, gfx::Rect(point, gfx::Size()),
views::MenuItemView::TOPLEFT, 0) == views::MenuRunner::MENU_DELETED)
return;
+
+ Shell::GetInstance()->UpdateShelfVisibility();
#endif
}
diff --git a/ash/launcher/launcher_view.h b/ash/launcher/launcher_view.h
index 50f7cd6..7f7c49b 100644
--- a/ash/launcher/launcher_view.h
+++ b/ash/launcher/launcher_view.h
@@ -64,6 +64,9 @@ class ASH_EXPORT LauncherView : public views::View,
// isn't know.
gfx::Rect GetIdealBoundsOfItemIcon(LauncherID id);
+ // Returns true if we're showing a menu.
+ bool IsShowingMenu() const;
+
private:
class FadeOutAnimationDelegate;
class StartFadeAnimationDelegate;
diff --git a/ash/wm/shelf_layout_manager.cc b/ash/wm/shelf_layout_manager.cc
index 6fd6e1b..76c8b99 100644
--- a/ash/wm/shelf_layout_manager.cc
+++ b/ash/wm/shelf_layout_manager.cc
@@ -375,6 +375,9 @@ ShelfLayoutManager::AutoHideState ShelfLayoutManager::CalculateAutoHideState(
if (shell->tray() && shell->tray()->should_show_launcher())
return AUTO_HIDE_SHOWN;
+ if (launcher_ && launcher_->IsShowingMenu())
+ return AUTO_HIDE_SHOWN;
+
aura::RootWindow* root = launcher_widget()->GetNativeView()->GetRootWindow();
bool mouse_over_launcher =
launcher_widget()->GetWindowScreenBounds().Contains(