Chromium Code Reviews| Index: mash/simple_wm/simple_wm.cc |
| diff --git a/mash/simple_wm/simple_wm.cc b/mash/simple_wm/simple_wm.cc |
| index 92c0f6b5dc684ff0eaa233cb4e33c62e75cd9581..66f0a3b5bf4a92c36a024ba77c90d7e1215f73d3 100644 |
| --- a/mash/simple_wm/simple_wm.cc |
| +++ b/mash/simple_wm/simple_wm.cc |
| @@ -19,7 +19,7 @@ |
| #include "ui/views/widget/native_widget_aura.h" |
| #include "ui/views/widget/widget.h" |
| #include "ui/views/widget/widget_delegate.h" |
| -#include "ui/wm/core/default_activation_client.h" |
| +#include "ui/wm/core/focus_controller.h" |
| namespace simple_wm { |
| @@ -341,6 +341,9 @@ class SimpleWM::DisplayLayoutManager : public aura::LayoutManager { |
| DISALLOW_COPY_AND_ASSIGN(DisplayLayoutManager); |
| }; |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// SimpleWM, public: |
| + |
| SimpleWM::SimpleWM() {} |
| SimpleWM::~SimpleWM() { |
| @@ -355,6 +358,9 @@ SimpleWM::~SimpleWM() { |
| display::Screen::SetScreenInstance(nullptr); |
| } |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// SimpleWM, service_manager::Service implementation: |
| + |
| void SimpleWM::OnStart() { |
| CHECK(!started_); |
| started_ = true; |
| @@ -380,6 +386,9 @@ bool SimpleWM::OnConnect( |
| return true; |
| } |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// SimpleWM, aura::WindowTreeClientDelegate implementation: |
| + |
| void SimpleWM::OnEmbed( |
| std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) { |
| // WindowTreeClients configured as the window manager should never get |
| @@ -411,6 +420,9 @@ aura::PropertyConverter* SimpleWM::GetPropertyConverter() { |
| return &property_converter_; |
| } |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// SimpleWM, aura::WindowManagerDelegate implementation: |
| + |
| void SimpleWM::SetWindowManagerClient( |
| aura::WindowManagerClient* client) { |
| window_manager_client_ = client; |
| @@ -515,8 +527,10 @@ void SimpleWM::OnWmNewDisplay( |
| frame_decoration_values->max_title_bar_button_width = 0; |
| window_manager_client_->SetFrameDecorationValues( |
| std::move(frame_decoration_values)); |
| - new wm::DefaultActivationClient(display_root_); |
| - aura::client::SetFocusClient(display_root_, &focus_client_); |
| + focus_controller_ = base::MakeUnique<wm::FocusController>(this); |
| + aura::client::SetFocusClient(display_root_, focus_controller_.get()); |
| + aura::client::SetActivationClient(display_root_, focus_controller_.get()); |
| + display_root_->AddPreTargetHandler(focus_controller_.get()); |
| } |
| void SimpleWM::OnWmDisplayRemoved( |
| @@ -543,6 +557,29 @@ void SimpleWM::OnWmSetClientArea( |
| const gfx::Insets& insets, |
| const std::vector<gfx::Rect>& additional_client_areas) {} |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// SimpleWM, wm::BaseFocusRules implementation: |
| + |
| +bool SimpleWM::SupportsChildActivation(aura::Window* window) const { |
| + return window == window_root_; |
|
sky
2017/01/03 23:52:34
Shouldn't you only return true if window is in cli
Ben Goodger (Google)
2017/01/03 23:54:40
The window passed to this function is the parent o
sky
2017/01/04 00:09:58
Ah, got it.
|
| +} |
| + |
| +bool SimpleWM::IsWindowConsideredVisibleForActivation( |
| + aura::Window* window) const { |
| + if (window->IsVisible()) |
| + return true; |
| + |
| + ui::WindowShowState show_state = |
| + window->GetProperty(aura::client::kShowStateKey); |
| + if (show_state == ui::SHOW_STATE_MINIMIZED) |
| + return true; |
| + |
| + return window->TargetVisibility(); |
| +} |
| + |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// SimpleWM, private: |
| + |
| SimpleWM::FrameView* SimpleWM::GetFrameViewForClientWindow( |
| aura::Window* client_window) { |
| auto it = client_window_to_frame_view_.find(client_window); |