summaryrefslogtreecommitdiffstats
path: root/ui/base/x
diff options
context:
space:
mode:
authordavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-29 06:21:33 +0000
committerdavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-29 06:21:33 +0000
commit20679e4cc3ead85e1d889001046eaf45fd2d8a6d (patch)
tree2c66358a298323393f1a8c6042998b613fd7f1e7 /ui/base/x
parent8c484b740118dc9c8cad7871412cc579bba20da4 (diff)
downloadchromium_src-20679e4cc3ead85e1d889001046eaf45fd2d8a6d.zip
chromium_src-20679e4cc3ead85e1d889001046eaf45fd2d8a6d.tar.gz
chromium_src-20679e4cc3ead85e1d889001046eaf45fd2d8a6d.tar.bz2
Support 3f swipe for tab scrubbing
Tests will be added if we like approach and take out from behind flag. BUG=124830 TEST=None Review URL: https://codereview.chromium.org/11411247 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@170138 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base/x')
-rw-r--r--ui/base/x/events_x.cc25
-rw-r--r--ui/base/x/x11_util.cc2
2 files changed, 22 insertions, 5 deletions
diff --git a/ui/base/x/events_x.cc b/ui/base/x/events_x.cc
index e82a06a4..9aa84d7 100644
--- a/ui/base/x/events_x.cc
+++ b/ui/base/x/events_x.cc
@@ -40,6 +40,8 @@
#define AXIS_LABEL_PROP_ABS_FLING_Y "Abs Fling Y Velocity"
#define AXIS_LABEL_PROP_ABS_FLING_STATE "Abs Fling State"
+#define AXIS_LABEL_PROP_ABS_FINGER_COUNT "Abs Finger Count"
+
// New versions of the valuators, with double values instead of fixed point.
#define AXIS_LABEL_PROP_ABS_DBL_START_TIME "Abs Dbl Start Timestamp"
#define AXIS_LABEL_PROP_ABS_DBL_END_TIME "Abs Dbl End Timestamp"
@@ -66,6 +68,7 @@ const char* kCMTCachedAtoms[] = {
AXIS_LABEL_PROP_ABS_DBL_FLING_VX,
AXIS_LABEL_PROP_ABS_DBL_FLING_VY,
AXIS_LABEL_PROP_ABS_FLING_STATE,
+ AXIS_LABEL_PROP_ABS_FINGER_COUNT,
NULL
};
@@ -121,6 +124,7 @@ class CMTEventData {
Atom fling_vy = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_FLING_Y);
Atom fling_vy_dbl = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_FLING_VY);
Atom fling_state = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_FLING_STATE);
+ Atom finger_count = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_FINGER_COUNT);
for (int i = 0; i < count; ++i) {
XIDeviceInfo* info = info_list + i;
@@ -149,6 +153,9 @@ class CMTEventData {
} else if (v->label == y_axis) {
valuators.scroll_y = number;
is_cmt = true;
+ } else if (v->label == finger_count) {
+ valuators.finger_count = number;
+ is_cmt = true;
} else if (v->label == start_time) {
valuators.start_time = number;
is_cmt = true;
@@ -222,13 +229,18 @@ class CMTEventData {
// Returns true if this is a scroll event (a motion event with the necessary
// valuators. Also returns the offsets. |x_offset| and |y_offset| can be
// NULL.
- bool GetScrollOffsets(const XEvent& xev, float* x_offset, float* y_offset) {
+ bool GetScrollOffsets(const XEvent& xev,
+ float* x_offset,
+ float* y_offset,
+ int* finger_count) {
XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev.xcookie.data);
if (x_offset)
*x_offset = 0;
if (y_offset)
*y_offset = 0;
+ if (finger_count)
+ *finger_count = 2;
const int sourceid = xiev->sourceid;
if (!cmt_devices_[sourceid])
@@ -250,6 +262,8 @@ class CMTEventData {
*x_offset = *valuators * natural_scroll_factor;
else if (y_offset && v.scroll_y == i)
*y_offset = *valuators * natural_scroll_factor;
+ else if (finger_count && v.finger_count == i)
+ *finger_count = static_cast<int>(*valuators);
valuators++;
}
}
@@ -358,6 +372,7 @@ class CMTEventData {
int max;
int scroll_x;
int scroll_y;
+ int finger_count;
int start_time;
int end_time;
int fling_vx;
@@ -373,6 +388,7 @@ class CMTEventData {
: max(-1),
scroll_x(-1),
scroll_y(-1),
+ finger_count(-1),
start_time(-1),
end_time(-1),
fling_vx(-1),
@@ -749,7 +765,7 @@ EventType EventTypeFromNative(const base::NativeEvent& native_event) {
bool is_cancel;
if (GetFlingData(native_event, &vx, &vy, &is_cancel)) {
return is_cancel ? ET_SCROLL_FLING_CANCEL : ET_SCROLL_FLING_START;
- } else if (GetScrollOffsets(native_event, NULL, NULL)) {
+ } else if (GetScrollOffsets(native_event, NULL, NULL, NULL)) {
return ET_SCROLL;
} else if (GetButtonMaskForX2Event(xievent)) {
return ET_MOUSE_DRAGGED;
@@ -1066,9 +1082,10 @@ float GetTouchForce(const base::NativeEvent& native_event) {
bool GetScrollOffsets(const base::NativeEvent& native_event,
float* x_offset,
- float* y_offset) {
+ float* y_offset,
+ int* finger_count) {
return CMTEventData::GetInstance()->GetScrollOffsets(
- *native_event, x_offset, y_offset);
+ *native_event, x_offset, y_offset, finger_count);
}
bool GetFlingData(const base::NativeEvent& native_event,
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc
index 0e238a1..539c879 100644
--- a/ui/base/x/x11_util.cc
+++ b/ui/base/x/x11_util.cc
@@ -529,7 +529,7 @@ int CoalescePendingMotionEvents(const XEvent* xev,
if (next_event.type == GenericEvent &&
next_event.xgeneric.evtype == event_type &&
- !ui::GetScrollOffsets(&next_event, NULL, NULL)) {
+ !ui::GetScrollOffsets(&next_event, NULL, NULL, NULL)) {
XIDeviceEvent* next_xievent =
static_cast<XIDeviceEvent*>(next_event.xcookie.data);
#if defined(USE_XI2_MT)