Chromium Code Reviews| Index: ash/shelf/shelf_view.cc |
| diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc |
| index 7e3119ed71ba7ce9c57122915049e4fc51b405e1..997261d7459651b692f27ac75844806919d6b740 100644 |
| --- a/ash/shelf/shelf_view.cc |
| +++ b/ash/shelf/shelf_view.cc |
| @@ -10,6 +10,7 @@ |
| #include "ash/aura/wm_window_aura.h" |
| #include "ash/common/ash_constants.h" |
| #include "ash/common/ash_switches.h" |
| +#include "ash/common/scoped_root_window_for_new_windows.h" |
| #include "ash/common/shelf/app_list_button.h" |
| #include "ash/common/shelf/overflow_bubble.h" |
| #include "ash/common/shelf/overflow_bubble_view.h" |
| @@ -22,9 +23,9 @@ |
| #include "ash/common/shelf/wm_shelf.h" |
| #include "ash/common/shell_delegate.h" |
| #include "ash/common/wm/root_window_finder.h" |
| +#include "ash/common/wm_lookup.h" |
| #include "ash/common/wm_shell.h" |
| #include "ash/drag_drop/drag_image_view.h" |
| -#include "ash/scoped_target_root_window.h" |
| #include "ash/shelf/shelf.h" |
| #include "ash/shelf/shelf_icon_observer.h" |
| #include "ash/shelf/shelf_widget.h" |
| @@ -32,9 +33,7 @@ |
| #include "base/metrics/histogram.h" |
| #include "grit/ash_strings.h" |
| #include "ui/accessibility/ax_view_state.h" |
| -#include "ui/aura/client/screen_position_client.h" |
| #include "ui/aura/window.h" |
| -#include "ui/aura/window_event_dispatcher.h" |
| #include "ui/base/l10n/l10n_util.h" |
| #include "ui/base/models/simple_menu_model.h" |
| #include "ui/base/resource/resource_bundle.h" |
| @@ -1701,8 +1700,11 @@ void ShelfView::ButtonPressed(views::Button* sender, |
| last_pressed_index_ = view_model_->GetIndexOfView(sender); |
| DCHECK_LT(-1, last_pressed_index_); |
| - scoped_target_root_window_.reset(new ScopedTargetRootWindow( |
| - sender->GetWidget()->GetNativeView()->GetRootWindow())); |
| + // Place new windows on the same display as the button. |
| + WmWindow* root_window = |
|
msw
2016/08/02 01:04:50
optional nit: use a GetRootWindow pattern consiste
James Cook
2016/08/02 16:16:04
Done.
|
| + WmLookup::Get()->GetWindowForWidget(sender->GetWidget())->GetRootWindow(); |
| + scoped_root_window_for_new_windows_.reset( |
| + new ScopedRootWindowForNewWindows(root_window)); |
| // Slow down activation animations if shift key is pressed. |
| std::unique_ptr<ui::ScopedAnimationDurationScaleMode> slowing_animations; |
| if (event.IsShiftDown()) { |
| @@ -1749,9 +1751,10 @@ void ShelfView::ButtonPressed(views::Button* sender, |
| ink_drop))) { |
| ink_drop->AnimateToState(views::InkDropState::ACTION_TRIGGERED); |
| } |
| - // Allow the menu to clear |scoped_target_root_window_| during OnMenuClosed. |
| + // Allow the menu to clear |scoped_root_window_for_new_windows_| during |
| + // OnMenuClosed. |
| if (!IsShowingMenu()) |
| - scoped_target_root_window_.reset(); |
| + scoped_root_window_for_new_windows_.reset(); |
| } |
| bool ShelfView::ShowListMenuForView(const ShelfItem& item, |
| @@ -1813,9 +1816,10 @@ void ShelfView::ShowMenu(std::unique_ptr<ui::MenuModel> menu_model, |
| launcher_menu_runner_.reset( |
| new views::MenuRunner(menu_model_adapter_->CreateMenu(), run_types)); |
| - aura::Window* window = source->GetWidget()->GetNativeWindow(); |
| - scoped_target_root_window_.reset( |
| - new ScopedTargetRootWindow(window->GetRootWindow())); |
| + // Place new windows on the same display as the button that spawned the menu. |
| + WmWindow* window = WmLookup::Get()->GetWindowForWidget(source->GetWidget()); |
| + scoped_root_window_for_new_windows_.reset( |
| + new ScopedRootWindowForNewWindows(window->GetRootWindow())); |
| views::MenuAnchorPosition menu_alignment = views::MENU_ANCHOR_TOPLEFT; |
| gfx::Rect anchor = gfx::Rect(click_point, gfx::Size()); |
| @@ -1824,8 +1828,8 @@ void ShelfView::ShowMenu(std::unique_ptr<ui::MenuModel> menu_model, |
| // Application lists use a bubble. |
| // It is possible to invoke the menu while it is sliding into view. To cover |
| // that case, the screen coordinates are offsetted by the animation delta. |
| - anchor = source->GetBoundsInScreen() + |
| - (window->GetTargetBounds().origin() - window->bounds().origin()); |
| + anchor = source->GetBoundsInScreen() + (window->GetTargetBounds().origin() - |
| + window->GetBounds().origin()); |
| // Adjust the anchor location for shelf items with asymmetrical borders. |
| if (source->border()) |
| @@ -1859,7 +1863,7 @@ void ShelfView::OnMenuClosed(views::InkDrop* ink_drop) { |
| launcher_menu_runner_.reset(); |
| menu_model_adapter_.reset(); |
| menu_model_.reset(); |
| - scoped_target_root_window_.reset(); |
| + scoped_root_window_for_new_windows_.reset(); |
| // Auto-hide or alignment might have changed, but only for this shelf. |
| wm_shelf_->UpdateVisibilityState(); |