| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/events/platform/x11/x11_event_source.h" | 5 #include "ui/events/platform/x11/x11_event_source.h" |
| 6 | 6 |
| 7 #include <X11/Xatom.h> | 7 #include <X11/Xatom.h> |
| 8 #include <X11/XKBlib.h> | 8 #include <X11/XKBlib.h> |
| 9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
| 10 | 10 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 // not yet. | 134 // not yet. |
| 135 continue_stream_ = true; | 135 continue_stream_ = true; |
| 136 while (XPending(display_) && continue_stream_) { | 136 while (XPending(display_) && continue_stream_) { |
| 137 XEvent xevent; | 137 XEvent xevent; |
| 138 XNextEvent(display_, &xevent); | 138 XNextEvent(display_, &xevent); |
| 139 ExtractCookieDataDispatchEvent(&xevent); | 139 ExtractCookieDataDispatchEvent(&xevent); |
| 140 } | 140 } |
| 141 } | 141 } |
| 142 | 142 |
| 143 void X11EventSource::BlockUntilWindowMapped(XID window) { | 143 void X11EventSource::BlockUntilWindowMapped(XID window) { |
| 144 XEvent event; | 144 BlockOnWindowStructureEvent(window, MapNotify); |
| 145 do { | 145 } |
| 146 // Block until there's a message of |event_mask| type on |w|. Then remove | 146 |
| 147 // it from the queue and stuff it in |event|. | 147 void X11EventSource::BlockUntilWindowUnmapped(XID window) { |
| 148 XWindowEvent(display_, window, StructureNotifyMask, &event); | 148 BlockOnWindowStructureEvent(window, UnmapNotify); |
| 149 ExtractCookieDataDispatchEvent(&event); | |
| 150 } while (event.type != MapNotify); | |
| 151 } | 149 } |
| 152 | 150 |
| 153 Time X11EventSource::UpdateLastSeenServerTime() { | 151 Time X11EventSource::UpdateLastSeenServerTime() { |
| 154 base::TimeTicks start = base::TimeTicks::Now(); | 152 base::TimeTicks start = base::TimeTicks::Now(); |
| 155 | 153 |
| 156 DCHECK(display_); | 154 DCHECK(display_); |
| 157 | 155 |
| 158 if (!dummy_initialized_) { | 156 if (!dummy_initialized_) { |
| 159 // Create a new Window and Atom that will be used for the property change. | 157 // Create a new Window and Atom that will be used for the property change. |
| 160 dummy_window_ = XCreateSimpleWindow(display_, DefaultRootWindow(display_), | 158 dummy_window_ = XCreateSimpleWindow(display_, DefaultRootWindow(display_), |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 } | 216 } |
| 219 | 217 |
| 220 if (xevent->type == EnterNotify && | 218 if (xevent->type == EnterNotify && |
| 221 xevent->xcrossing.detail != NotifyInferior && | 219 xevent->xcrossing.detail != NotifyInferior && |
| 222 xevent->xcrossing.mode != NotifyUngrab) { | 220 xevent->xcrossing.mode != NotifyUngrab) { |
| 223 // Clear stored scroll data | 221 // Clear stored scroll data |
| 224 ui::DeviceDataManagerX11::GetInstance()->InvalidateScrollClasses(); | 222 ui::DeviceDataManagerX11::GetInstance()->InvalidateScrollClasses(); |
| 225 } | 223 } |
| 226 } | 224 } |
| 227 | 225 |
| 226 void X11EventSource::BlockOnWindowStructureEvent(XID window, int type) { |
| 227 XEvent event; |
| 228 do { |
| 229 // Block until there's a StructureNotify event of |type| on |window|. Then |
| 230 // remove it from the queue and stuff it in |event|. |
| 231 XWindowEvent(display_, window, StructureNotifyMask, &event); |
| 232 ExtractCookieDataDispatchEvent(&event); |
| 233 } while (event.type != type); |
| 234 } |
| 235 |
| 228 void X11EventSource::StopCurrentEventStream() { | 236 void X11EventSource::StopCurrentEventStream() { |
| 229 continue_stream_ = false; | 237 continue_stream_ = false; |
| 230 } | 238 } |
| 231 | 239 |
| 232 void X11EventSource::OnDispatcherListChanged() { | 240 void X11EventSource::OnDispatcherListChanged() { |
| 233 if (!hotplug_event_handler_) { | 241 if (!hotplug_event_handler_) { |
| 234 hotplug_event_handler_.reset(new X11HotplugEventHandler()); | 242 hotplug_event_handler_.reset(new X11HotplugEventHandler()); |
| 235 // Force the initial device query to have an update list of active devices. | 243 // Force the initial device query to have an update list of active devices. |
| 236 hotplug_event_handler_->OnHotplugEvent(); | 244 hotplug_event_handler_->OnHotplugEvent(); |
| 237 } | 245 } |
| 238 } | 246 } |
| 239 | 247 |
| 240 } // namespace ui | 248 } // namespace ui |
| OLD | NEW |