lib/fusuma/plugin/parsers/libinput_gesture_parser.rb in fusuma-2.1.0 vs lib/fusuma/plugin/parsers/libinput_gesture_parser.rb in fusuma-2.2.0
- old
+ new
@@ -12,11 +12,11 @@
# @param record [String]
# @return [Records::GestureRecord, nil]
def parse_record(record)
case line = record.to_s
- when /GESTURE_SWIPE|GESTURE_PINCH/
+ when /GESTURE_SWIPE|GESTURE_PINCH|GESTURE_HOLD/
gesture, status, finger, delta = parse_libinput(line)
else
return
end
@@ -30,16 +30,21 @@
def parse_libinput(line)
_device, event_name, _time, other = line.strip.split(nil, 4)
finger, other = other.split(nil, 2)
+ gesture, status = *detect_gesture(event_name)
+
+ status = 'cancelled' if gesture == 'hold' && status == 'end' && other == 'cancelled'
delta = parse_delta(other)
- [*detect_gesture(event_name), finger, delta]
+ [gesture, status, finger, delta]
end
def detect_gesture(event_name)
- event_name =~ /GESTURE_(SWIPE|PINCH)_(BEGIN|UPDATE|END)/
- [Regexp.last_match(1).downcase, Regexp.last_match(2).downcase]
+ event_name =~ /GESTURE_(SWIPE|PINCH|HOLD)_(BEGIN|UPDATE|END)/
+ gesture = Regexp.last_match(1).downcase
+ status = Regexp.last_match(2).downcase
+ [gesture, status]
end
def parse_delta(line)
return if line.nil?