| Index: ui/aura/window_tree_host.h
|
| diff --git a/ui/aura/window_tree_host.h b/ui/aura/window_tree_host.h
|
| index 27b104c0f1926ce03fd4256162035f72e9e246e1..0460c0654b2dfe99d5c3c2c0489b8ce368f05fc4 100644
|
| --- a/ui/aura/window_tree_host.h
|
| +++ b/ui/aura/window_tree_host.h
|
| @@ -11,6 +11,7 @@
|
| #include "base/message_loop/message_loop.h"
|
| #include "ui/aura/aura_export.h"
|
| #include "ui/base/cursor/cursor.h"
|
| +#include "ui/base/ime/input_method_delegate.h"
|
| #include "ui/events/event_source.h"
|
| #include "ui/gfx/native_widget_types.h"
|
|
|
| @@ -25,6 +26,7 @@ class Transform;
|
| namespace ui {
|
| class Compositor;
|
| class EventProcessor;
|
| +class InputMethod;
|
| class ViewProp;
|
| }
|
|
|
| @@ -39,9 +41,10 @@ class WindowTreeHostObserver;
|
| // WindowTreeHost bridges between a native window and the embedded RootWindow.
|
| // It provides the accelerated widget and maps events from the native os to
|
| // aura.
|
| -class AURA_EXPORT WindowTreeHost {
|
| +class AURA_EXPORT WindowTreeHost : public ui::internal::InputMethodDelegate,
|
| + public ui::EventSource {
|
| public:
|
| - virtual ~WindowTreeHost();
|
| + ~WindowTreeHost() override;
|
|
|
| // Creates a new WindowTreeHost. The caller owns the returned value.
|
| static WindowTreeHost* Create(const gfx::Rect& bounds);
|
| @@ -116,6 +119,33 @@ class AURA_EXPORT WindowTreeHost {
|
|
|
| gfx::NativeCursor last_cursor() const { return last_cursor_; }
|
|
|
| + // Gets the InputMethod instance, if NULL, creates & owns it.
|
| + ui::InputMethod* GetInputMethod();
|
| +
|
| + // Sets a shared unowned InputMethod. This is used when there is a singleton
|
| + // InputMethod shared between multiple WindowTreeHost instances.
|
| + //
|
| + // This is used for Ash only. There are 2 reasons:
|
| + // 1) ChromeOS virtual keyboard needs to receive ShowImeIfNeeded notification
|
| + // from InputMethod. Multiple InputMethod instances makes it hard to
|
| + // register/unregister the observer for that notification.
|
| + // 2) For Ozone, there is no native focus state for the root window and
|
| + // WindowTreeHost. See DrmWindowHost::CanDispatchEvent, the key events always
|
| + // goes to the primary WindowTreeHost. And after InputMethod processed the key
|
| + // event and continue dispatching it, WindowTargeter::FindTargetForEvent may
|
| + // re-dispatch it to a different WindowTreeHost. So the singleton InputMethod
|
| + // can make sure the correct InputMethod instance processes the key event no
|
| + // matter which WindowTreeHost is the target for event. Please refer to the
|
| + // test: ExtendedDesktopTest.KeyEventsOnLockScreen.
|
| + //
|
| + // TODO(shuchen): remove this method after above reasons become invalid.
|
| + // A possible solution is to make sure DrmWindowHost can find the correct
|
| + // WindowTreeHost to dispatch events.
|
| + void SetSharedInputMethod(ui::InputMethod* input_method);
|
| +
|
| + // Overridden from ui::internal::InputMethodDelegate:
|
| + bool DispatchKeyEventPostIME(const ui::KeyEvent& event) override;
|
| +
|
| // Returns the EventSource responsible for dispatching events to the window
|
| // tree.
|
| virtual ui::EventSource* GetEventSource() = 0;
|
| @@ -172,6 +202,10 @@ class AURA_EXPORT WindowTreeHost {
|
| // Hides the WindowTreeHost.
|
| virtual void HideImpl() = 0;
|
|
|
| + // Overridden from ui::EventSource:
|
| + ui::EventProcessor* GetEventProcessor() override;
|
| + ui::EventDispatchDetails DeliverEventToProcessor(ui::Event* event) override;
|
| +
|
| private:
|
| friend class test::WindowTreeHostTestApi;
|
|
|
| @@ -198,6 +232,14 @@ class AURA_EXPORT WindowTreeHost {
|
|
|
| scoped_ptr<ui::ViewProp> prop_;
|
|
|
| + // The InputMethod instance used to process key events.
|
| + // If owned it, it is created in GetInputMethod() method;
|
| + // If not owned it, it is passed in through SetSharedInputMethod() method.
|
| + ui::InputMethod* input_method_;
|
| +
|
| + // Whether the InputMethod instance is owned by this WindowTreeHost.
|
| + bool owned_input_method_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(WindowTreeHost);
|
| };
|
|
|
|
|