1 // Copyright 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ozone/impl/ipc/browser_process_dispatcher_delegate.h"
8 #include "ozone/wayland/input/kbd_conversion.h"
9 #include "ozone/wayland/window_change_observer.h"
11 namespace ozonewayland {
13 BrowserProcessDispatcherDelegate::BrowserProcessDispatcherDelegate()
14 : WaylandDispatcherDelegate(),
18 BrowserProcessDispatcherDelegate::~BrowserProcessDispatcherDelegate() {
21 void BrowserProcessDispatcherDelegate::MotionNotify(float x, float y) {
22 gfx::Point position = gfx::Point(x, y);
23 scoped_ptr<ui::MouseEvent> mouseev(new ui::MouseEvent(ui::ET_MOUSE_MOVED,
28 PostTaskOnMainLoop(base::Bind(
29 &BrowserProcessDispatcherDelegate::DispatchEventHelper, base::Passed(
30 mouseev.PassAs<ui::Event>())));
33 void BrowserProcessDispatcherDelegate::ButtonNotify(unsigned handle,
40 type = ui::ET_MOUSE_PRESSED;
42 type = ui::ET_MOUSE_RELEASED;
44 gfx::Point position = gfx::Point(x, y);
45 scoped_ptr<ui::MouseEvent> mouseev(new ui::MouseEvent(type,
49 PostTaskOnMainLoop(base::Bind(
50 &BrowserProcessDispatcherDelegate::NotifyButtonPress, this, handle));
52 PostTaskOnMainLoop(base::Bind(
53 &BrowserProcessDispatcherDelegate::DispatchEventHelper, base::Passed(
54 mouseev.PassAs<ui::Event>())));
57 void BrowserProcessDispatcherDelegate::AxisNotify(float x,
61 gfx::Point position = gfx::Point(x, y);
62 ui::MouseEvent mouseev(ui::ET_MOUSEWHEEL, position, position, 0);
64 scoped_ptr<ui::MouseWheelEvent> wheelev(new ui::MouseWheelEvent(mouseev,
68 PostTaskOnMainLoop(base::Bind(
69 &BrowserProcessDispatcherDelegate::DispatchEventHelper, base::Passed(
70 wheelev.PassAs<ui::Event>())));
73 void BrowserProcessDispatcherDelegate::PointerEnter(unsigned handle,
76 gfx::Point position = gfx::Point(x, y);
77 scoped_ptr<ui::MouseEvent> mouseev(new ui::MouseEvent(ui::ET_MOUSE_ENTERED,
81 PostTaskOnMainLoop(base::Bind(
82 &BrowserProcessDispatcherDelegate::NotifyPointerEnter, this, handle));
84 PostTaskOnMainLoop(base::Bind(
85 &BrowserProcessDispatcherDelegate::DispatchEventHelper, base::Passed(
86 mouseev.PassAs<ui::Event>())));
89 void BrowserProcessDispatcherDelegate::PointerLeave(unsigned handle,
92 gfx::Point position = gfx::Point(x, y);
93 scoped_ptr<ui::MouseEvent> mouseev(new ui::MouseEvent(ui::ET_MOUSE_EXITED,
98 PostTaskOnMainLoop(base::Bind(
99 &BrowserProcessDispatcherDelegate::NotifyPointerLeave, this, handle));
101 PostTaskOnMainLoop(base::Bind(
102 &BrowserProcessDispatcherDelegate::DispatchEventHelper, base::Passed(
103 mouseev.PassAs<ui::Event>())));
106 void BrowserProcessDispatcherDelegate::KeyNotify(unsigned state,
108 unsigned modifiers) {
111 type = ui::ET_KEY_PRESSED;
113 type = ui::ET_KEY_RELEASED;
115 scoped_ptr<ui::KeyEvent> keyev(new ui::KeyEvent(type,
116 KeyboardCodeFromXKeysym(code),
120 PostTaskOnMainLoop(base::Bind(
121 &BrowserProcessDispatcherDelegate::DispatchEventHelper, base::Passed(
122 keyev.PassAs<ui::Event>())));
125 void BrowserProcessDispatcherDelegate::SetWindowChangeObserver(
126 WindowChangeObserver* observer) {
127 observer_ = observer;
130 void BrowserProcessDispatcherDelegate::NotifyPointerEnter(
131 BrowserProcessDispatcherDelegate* data, unsigned handle) {
133 data->observer_->OnWindowEnter(handle);
136 void BrowserProcessDispatcherDelegate::NotifyPointerLeave(
137 BrowserProcessDispatcherDelegate* data, unsigned handle) {
139 data->observer_->OnWindowLeave(handle);
143 void BrowserProcessDispatcherDelegate::NotifyButtonPress(
144 BrowserProcessDispatcherDelegate* data, unsigned handle) {
146 data->observer_->OnWindowFocused(handle);
149 void BrowserProcessDispatcherDelegate::DispatchEventHelper(
150 scoped_ptr<ui::Event> key) {
151 base::MessagePumpOzone::Current()->Dispatch(key.get());
154 } // namespace ozonewayland