Index: mash/wm/window_manager_application.cc |
diff --git a/mash/wm/window_manager_application.cc b/mash/wm/window_manager_application.cc |
index 1e934c6699654233331f22d35dc5ddc2f27ed10b..f300800784b104641dc4e29917b869b99c0d904a 100644 |
--- a/mash/wm/window_manager_application.cc |
+++ b/mash/wm/window_manager_application.cc |
@@ -4,11 +4,13 @@ |
#include "mash/wm/window_manager_application.h" |
+#include "base/bind.h" |
#include "components/mus/common/util.h" |
#include "components/mus/public/cpp/event_matcher.h" |
#include "components/mus/public/cpp/window.h" |
#include "components/mus/public/cpp/window_tree_connection.h" |
#include "components/mus/public/cpp/window_tree_host_factory.h" |
+#include "mash/wm/accelerator_registrar_impl.h" |
#include "mash/wm/background_layout.h" |
#include "mash/wm/shelf_layout.h" |
#include "mash/wm/window_layout.h" |
@@ -51,6 +53,11 @@ void WindowManagerApplication::AddAccelerators() { |
mus::mojom::EVENT_FLAGS_CONTROL_DOWN)); |
} |
+void WindowManagerApplication::OnAcceleratorRegistrarDestroyed( |
+ AcceleratorRegistrarImpl* registrar) { |
+ accelerator_registrars_.erase(registrar); |
+} |
+ |
void WindowManagerApplication::Initialize(mojo::ApplicationImpl* app) { |
app_ = app; |
tracing_.Initialize(app); |
@@ -68,7 +75,8 @@ void WindowManagerApplication::Initialize(mojo::ApplicationImpl* app) { |
bool WindowManagerApplication::ConfigureIncomingConnection( |
mojo::ApplicationConnection* connection) { |
- connection->AddService(this); |
+ connection->AddService<mus::mojom::AcceleratorRegistrar>(this); |
+ connection->AddService<mus::mojom::WindowManager>(this); |
return true; |
} |
@@ -79,7 +87,12 @@ void WindowManagerApplication::OnAccelerator(uint32_t id, |
window_tree_host_->ActivateNextWindow(); |
break; |
default: |
- NOTREACHED() << "Unknown accelerator command: " << id; |
+ for (auto* registrar : accelerator_registrars_) { |
+ if (registrar->OwnsAccelerator(id)) { |
+ registrar->ProcessAccelerator(id, event.Pass()); |
+ break; |
+ } |
+ } |
} |
} |
@@ -116,6 +129,16 @@ void WindowManagerApplication::OnConnectionLost( |
void WindowManagerApplication::Create( |
mojo::ApplicationConnection* connection, |
+ mojo::InterfaceRequest<mus::mojom::AcceleratorRegistrar> request) { |
+ static int accelerator_registrar_count = 0; |
+ accelerator_registrars_.insert(new AcceleratorRegistrarImpl( |
+ window_tree_host_.get(), ++accelerator_registrar_count, request.Pass(), |
+ base::Bind(&WindowManagerApplication::OnAcceleratorRegistrarDestroyed, |
+ base::Unretained(this)))); |
+} |
+ |
+void WindowManagerApplication::Create( |
+ mojo::ApplicationConnection* connection, |
mojo::InterfaceRequest<mus::mojom::WindowManager> request) { |
if (root_) { |
window_manager_binding_.AddBinding(window_manager_.get(), request.Pass()); |