Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: ui/aura/window_tree_host_x11.cc

Issue 706763003: x11: Always require XI2.2 for X11. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tot-merge Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "ui/aura/window_tree_host_x11.h" 5 #include "ui/aura/window_tree_host_x11.h"
6 6
7 #include <strings.h> 7 #include <strings.h>
8 #include <X11/cursorfont.h> 8 #include <X11/cursorfont.h>
9 #include <X11/extensions/XInput2.h> 9 #include <X11/extensions/XInput2.h>
10 #include <X11/extensions/Xrandr.h> 10 #include <X11/extensions/Xrandr.h>
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 // 1. Being a message-pump observer, 108 // 1. Being a message-pump observer,
109 // routes all the touch events to the X root window, 109 // routes all the touch events to the X root window,
110 // where they can be calibrated later. 110 // where they can be calibrated later.
111 // 2. Has the Calibrate method that does the actual bezel calibration, 111 // 2. Has the Calibrate method that does the actual bezel calibration,
112 // when invoked from X root window's event dispatcher. 112 // when invoked from X root window's event dispatcher.
113 class TouchEventCalibrate : public ui::PlatformEventObserver { 113 class TouchEventCalibrate : public ui::PlatformEventObserver {
114 public: 114 public:
115 TouchEventCalibrate() : left_(0), right_(0), top_(0), bottom_(0) { 115 TouchEventCalibrate() : left_(0), right_(0), top_(0), bottom_(0) {
116 if (ui::PlatformEventSource::GetInstance()) 116 if (ui::PlatformEventSource::GetInstance())
117 ui::PlatformEventSource::GetInstance()->AddPlatformEventObserver(this); 117 ui::PlatformEventSource::GetInstance()->AddPlatformEventObserver(this);
118 #if defined(USE_XI2_MT)
119 std::vector<std::string> parts; 118 std::vector<std::string> parts;
120 if (Tokenize(CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 119 if (Tokenize(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
121 switches::kTouchCalibration), 120 switches::kTouchCalibration),
122 ",", 121 ",",
123 &parts) >= 4) { 122 &parts) >= 4) {
124 if (!base::StringToInt(parts[0], &left_)) 123 if (!base::StringToInt(parts[0], &left_))
125 DLOG(ERROR) << "Incorrect left border calibration value passed."; 124 DLOG(ERROR) << "Incorrect left border calibration value passed.";
126 if (!base::StringToInt(parts[1], &right_)) 125 if (!base::StringToInt(parts[1], &right_))
127 DLOG(ERROR) << "Incorrect right border calibration value passed."; 126 DLOG(ERROR) << "Incorrect right border calibration value passed.";
128 if (!base::StringToInt(parts[2], &top_)) 127 if (!base::StringToInt(parts[2], &top_))
129 DLOG(ERROR) << "Incorrect top border calibration value passed."; 128 DLOG(ERROR) << "Incorrect top border calibration value passed.";
130 if (!base::StringToInt(parts[3], &bottom_)) 129 if (!base::StringToInt(parts[3], &bottom_))
131 DLOG(ERROR) << "Incorrect bottom border calibration value passed."; 130 DLOG(ERROR) << "Incorrect bottom border calibration value passed.";
132 } 131 }
133 #endif // defined(USE_XI2_MT)
134 } 132 }
135 133
136 ~TouchEventCalibrate() override { 134 ~TouchEventCalibrate() override {
137 if (ui::PlatformEventSource::GetInstance()) 135 if (ui::PlatformEventSource::GetInstance())
138 ui::PlatformEventSource::GetInstance()->RemovePlatformEventObserver(this); 136 ui::PlatformEventSource::GetInstance()->RemovePlatformEventObserver(this);
139 } 137 }
140 138
141 // Modify the location of the |event|, 139 // Modify the location of the |event|,
142 // expanding it from |bounds| to (|bounds| + bezels). 140 // expanding it from |bounds| to (|bounds| + bezels).
143 // Required when touchscreen is bigger than screen (i.e. has bezels), 141 // Required when touchscreen is bigger than screen (i.e. has bezels),
144 // because we receive events in touchscreen coordinates, 142 // because we receive events in touchscreen coordinates,
145 // which need to be expanded when converting to screen coordinates, 143 // which need to be expanded when converting to screen coordinates,
146 // so that location on bezels will be outside of screen area. 144 // so that location on bezels will be outside of screen area.
147 void Calibrate(ui::TouchEvent* event, const gfx::Rect& bounds) { 145 void Calibrate(ui::TouchEvent* event, const gfx::Rect& bounds) {
148 #if defined(USE_XI2_MT)
149 int x = event->x(); 146 int x = event->x();
150 int y = event->y(); 147 int y = event->y();
151 148
152 if (!left_ && !right_ && !top_ && !bottom_) 149 if (!left_ && !right_ && !top_ && !bottom_)
153 return; 150 return;
154 151
155 const int resolution_x = bounds.width(); 152 const int resolution_x = bounds.width();
156 const int resolution_y = bounds.height(); 153 const int resolution_y = bounds.height();
157 // The "grace area" (10% in this case) is to make it easier for the user to 154 // The "grace area" (10% in this case) is to make it easier for the user to
158 // navigate to the corner. 155 // navigate to the corner.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 y = (y * resolution_y) / (resolution_y - (bottom_ + top_)); 187 y = (y * resolution_y) / (resolution_y - (bottom_ + top_));
191 } 188 }
192 189
193 // Set the modified coordinate back to the event. 190 // Set the modified coordinate back to the event.
194 if (event->root_location() == event->location()) { 191 if (event->root_location() == event->location()) {
195 // Usually those will be equal, 192 // Usually those will be equal,
196 // if not, I am not sure what the correct value should be. 193 // if not, I am not sure what the correct value should be.
197 event->set_root_location(gfx::Point(x, y)); 194 event->set_root_location(gfx::Point(x, y));
198 } 195 }
199 event->set_location(gfx::Point(x, y)); 196 event->set_location(gfx::Point(x, y));
200 #endif // defined(USE_XI2_MT)
201 } 197 }
202 198
203 private: 199 private:
204 // ui::PlatformEventObserver: 200 // ui::PlatformEventObserver:
205 void WillProcessEvent(const ui::PlatformEvent& event) override { 201 void WillProcessEvent(const ui::PlatformEvent& event) override {
206 #if defined(USE_XI2_MT)
207 if (event->type == GenericEvent && 202 if (event->type == GenericEvent &&
208 (event->xgeneric.evtype == XI_TouchBegin || 203 (event->xgeneric.evtype == XI_TouchBegin ||
209 event->xgeneric.evtype == XI_TouchUpdate || 204 event->xgeneric.evtype == XI_TouchUpdate ||
210 event->xgeneric.evtype == XI_TouchEnd)) { 205 event->xgeneric.evtype == XI_TouchEnd)) {
211 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event->xcookie.data); 206 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event->xcookie.data);
212 xievent->event = xievent->root; 207 xievent->event = xievent->root;
213 xievent->event_x = xievent->root_x; 208 xievent->event_x = xievent->root_x;
214 xievent->event_y = xievent->root_y; 209 xievent->event_y = xievent->root_y;
215 } 210 }
216 #endif // defined(USE_XI2_MT)
217 } 211 }
218 212
219 void DidProcessEvent(const ui::PlatformEvent& event) override {} 213 void DidProcessEvent(const ui::PlatformEvent& event) override {}
220 214
221 // The difference in screen's native resolution pixels between 215 // The difference in screen's native resolution pixels between
222 // the border of the touchscreen and the border of the screen, 216 // the border of the touchscreen and the border of the screen,
223 // aka bezel sizes. 217 // aka bezel sizes.
224 int left_; 218 int left_;
225 int right_; 219 int right_;
226 int top_; 220 int top_;
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 } 687 }
694 688
695 namespace test { 689 namespace test {
696 690
697 void SetUseOverrideRedirectWindowByDefault(bool override_redirect) { 691 void SetUseOverrideRedirectWindowByDefault(bool override_redirect) {
698 default_override_redirect = override_redirect; 692 default_override_redirect = override_redirect;
699 } 693 }
700 694
701 } // namespace test 695 } // namespace test
702 } // namespace aura 696 } // namespace aura
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/chrome_restart_request.cc ('k') | ui/events/devices/x11/device_data_manager_x11.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698