diff options
author | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-29 06:21:33 +0000 |
---|---|---|
committer | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-29 06:21:33 +0000 |
commit | 20679e4cc3ead85e1d889001046eaf45fd2d8a6d (patch) | |
tree | 2c66358a298323393f1a8c6042998b613fd7f1e7 /ui/base/x | |
parent | 8c484b740118dc9c8cad7871412cc579bba20da4 (diff) | |
download | chromium_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.cc | 25 | ||||
-rw-r--r-- | ui/base/x/x11_util.cc | 2 |
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) |