diff options
Diffstat (limited to 'ash')
-rw-r--r-- | ash/launcher/launcher.cc | 7 | ||||
-rw-r--r-- | ash/launcher/launcher.h | 5 | ||||
-rw-r--r-- | ash/launcher/launcher_view.cc | 20 | ||||
-rw-r--r-- | ash/launcher/launcher_view.h | 3 | ||||
-rw-r--r-- | ash/wm/shelf_layout_manager.cc | 3 |
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( |