OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/message_pump_aurax11.h" | 5 #include "base/message_pump_aurax11.h" |
6 | 6 |
7 #include <glib.h> | 7 #include <glib.h> |
8 #include <X11/X.h> | 8 #include <X11/X.h> |
9 #include <X11/extensions/XInput2.h> | 9 #include <X11/extensions/XInput2.h> |
10 #include <X11/XKBlib.h> | 10 #include <X11/XKBlib.h> |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 unsigned long xid) { | 162 unsigned long xid) { |
163 dispatchers_.insert(std::make_pair(xid, dispatcher)); | 163 dispatchers_.insert(std::make_pair(xid, dispatcher)); |
164 } | 164 } |
165 | 165 |
166 void MessagePumpAuraX11::RemoveDispatcherForWindow(unsigned long xid) { | 166 void MessagePumpAuraX11::RemoveDispatcherForWindow(unsigned long xid) { |
167 dispatchers_.erase(xid); | 167 dispatchers_.erase(xid); |
168 } | 168 } |
169 | 169 |
170 void MessagePumpAuraX11::AddDispatcherForRootWindow( | 170 void MessagePumpAuraX11::AddDispatcherForRootWindow( |
171 MessagePumpDispatcher* dispatcher) { | 171 MessagePumpDispatcher* dispatcher) { |
172 DCHECK(std::find(root_window_dispatchers_.begin(), | 172 root_window_dispatchers_.AddObserver(dispatcher); |
173 root_window_dispatchers_.end(), | |
174 dispatcher) == | |
175 root_window_dispatchers_.end()); | |
176 root_window_dispatchers_.push_back(dispatcher); | |
177 } | 173 } |
178 | 174 |
179 void MessagePumpAuraX11::RemoveDispatcherForRootWindow( | 175 void MessagePumpAuraX11::RemoveDispatcherForRootWindow( |
180 MessagePumpDispatcher* dispatcher) { | 176 MessagePumpDispatcher* dispatcher) { |
181 root_window_dispatchers_.erase( | 177 root_window_dispatchers_.RemoveObserver(dispatcher); |
182 std::remove(root_window_dispatchers_.begin(), | |
183 root_window_dispatchers_.end(), | |
184 dispatcher)); | |
185 } | 178 } |
186 | 179 |
187 bool MessagePumpAuraX11::DispatchXEvents() { | 180 bool MessagePumpAuraX11::DispatchXEvents() { |
188 Display* display = GetDefaultXDisplay(); | 181 Display* display = GetDefaultXDisplay(); |
189 DCHECK(display); | 182 DCHECK(display); |
190 MessagePumpDispatcher* dispatcher = | 183 MessagePumpDispatcher* dispatcher = |
191 GetDispatcher() ? GetDispatcher() : this; | 184 GetDispatcher() ? GetDispatcher() : this; |
192 | 185 |
193 // In the general case, we want to handle all pending events before running | 186 // In the general case, we want to handle all pending events before running |
194 // the tasks. This is what happens in the message_pump_glib case. | 187 // the tasks. This is what happens in the message_pump_glib case. |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 // dispatchers. | 289 // dispatchers. |
297 if (xev->type == MappingNotify) { | 290 if (xev->type == MappingNotify) { |
298 for (DispatchersMap::const_iterator it = dispatchers_.begin(); | 291 for (DispatchersMap::const_iterator it = dispatchers_.begin(); |
299 it != dispatchers_.end(); ++it) { | 292 it != dispatchers_.end(); ++it) { |
300 it->second->Dispatch(xev); | 293 it->second->Dispatch(xev); |
301 } | 294 } |
302 return true; | 295 return true; |
303 } | 296 } |
304 | 297 |
305 if (FindEventTarget(xev) == x_root_window_) { | 298 if (FindEventTarget(xev) == x_root_window_) { |
306 for (Dispatchers::const_iterator it = root_window_dispatchers_.begin(); | 299 FOR_EACH_OBSERVER(MessagePumpDispatcher, root_window_dispatchers_, |
307 it != root_window_dispatchers_.end(); | 300 Dispatch(xev)); |
308 ++it) { | |
309 (*it)->Dispatch(xev); | |
310 } | |
311 return true; | 301 return true; |
312 } | 302 } |
313 MessagePumpDispatcher* dispatcher = GetDispatcherForXEvent(xev); | 303 MessagePumpDispatcher* dispatcher = GetDispatcherForXEvent(xev); |
314 return dispatcher ? dispatcher->Dispatch(xev) : true; | 304 return dispatcher ? dispatcher->Dispatch(xev) : true; |
315 } | 305 } |
316 | 306 |
317 } // namespace base | 307 } // namespace base |
OLD | NEW |