Skip to content
This repository has been archived by the owner on Aug 20, 2023. It is now read-only.

Commit

Permalink
Merge pull request #3 from iberianpig/feature/detects_timeout_event
Browse files Browse the repository at this point in the history
Support libinput v1.15.5
  • Loading branch information
iberianpig committed May 4, 2020
2 parents 8cadb53 + fb11c3f commit 295fc25
Show file tree
Hide file tree
Showing 32 changed files with 2,274 additions and 2,201 deletions.
23 changes: 12 additions & 11 deletions .rubocop_todo.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,11 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2020-04-20 01:40:44 +0900 using RuboCop version 0.82.0.
# on 2020-05-04 22:12:29 +0900 using RuboCop version 0.82.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.

# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: TreatCommentsAsGroupSeparators, Include.
# Include: **/*.gemspec
Gemspec/OrderedDependencies:
Exclude:
- 'fusuma-plugin-tap.gemspec'

# Offense count: 1
# Configuration parameters: Include.
# Include: **/*.gemspec
Expand All @@ -35,7 +27,7 @@ Metrics/BlockLength:
# Offense count: 1
# Configuration parameters: IgnoredMethods.
Metrics/CyclomaticComplexity:
Max: 22
Max: 23

# Offense count: 5
# Configuration parameters: CountComments, ExcludedMethods.
Expand All @@ -45,11 +37,20 @@ Metrics/MethodLength:
# Offense count: 1
# Configuration parameters: IgnoredMethods.
Metrics/PerceivedComplexity:
Max: 10
Max: 11

# Offense count: 1
Style/Documentation:
Exclude:
- 'spec/**/*'
- 'test/**/*'
- 'bin/evemu_recorder.rb'

# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
# SupportedStyles: predicate, comparison
Style/NumericPredicate:
Exclude:
- 'spec/**/*'
- 'lib/fusuma/plugin/detectors/tap_detector.rb'
6 changes: 4 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ cache: bundler

env:
matrix:
- SPEC_LIBINPUT_VERSION=1.10.4
- SPEC_LIBINPUT_VERSION=1.14.1
- LIBINPUT_VERSION=1.10.4
- LIBINPUT_VERSION=1.14.1
- LIBINPUT_VERSION=1.15.5

cache:
directories:
Expand All @@ -17,5 +18,6 @@ rvm:
- 2.4
- 2.5
- 2.6
- 2.7

before_install: gem install bundler --no-document -v 2.0.1
14 changes: 14 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
.PHONY: all test clean

all: help

build: ## build libinput with SPEC_LIBINPUT_VERSION
cd $(LIBINPUT_SOURCE_DIR) && \
git checkout $(LIBINPUT_VERSION) && \
meson --prefix=/usr builddir/ -Dlibwacom=false -Ddebug-gui=false -Dtests=false -Ddocumentation=false --reconfigure && \
ninja -C builddir/
$(LIBINPUT_LIST_DEVICES) --version

help: ## show help
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | uniq | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

2 changes: 1 addition & 1 deletion fusuma-plugin-tap.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Gem::Specification.new do |spec|

spec.required_ruby_version = '>= 2.3' # https://packages.ubuntu.com/search?keywords=ruby&searchon=names&exact=1&suite=all&section=main

spec.add_dependency 'fusuma', '~> 1.5'
spec.add_dependency 'fusuma', '~> 1.10'

spec.add_development_dependency 'bundler'
spec.add_development_dependency 'github_changelog_generator', '~> 1.14'
Expand Down
9 changes: 7 additions & 2 deletions lib/fusuma/plugin/buffers/tap_buffer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ def config_param_types
}
end

# clear old events
def clear_expired(*)
clear if @events.any? { |e| ended?(e) }
end

# @param event [Event]
# @return [NilClass, TapBuffer]
def buffer(event)
Expand All @@ -38,14 +43,14 @@ def empty?
def bufferable?(event)
case event.record.status
when 'end'
false
true
when 'begin'
if empty?
true
else
false
end
else
else # 'keep', 'touch', 'hold', 'release'
if empty?
false
else
Expand Down
4 changes: 2 additions & 2 deletions lib/fusuma/plugin/detectors/tap_detector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def tap?(buffer, holding_time)

def tap_released?(buffer)
touch_num = buffer.events.count { |e| (e.record.status =~ /begin|touch/) }
release_num = buffer.events.count { |e| e.record.status == 'release' }
release_num = buffer.events.count { |e| e.record.status =~ /release|end/ }
MultiLogger.debug(touch_num: touch_num, release_num: release_num)

case buffer.finger
Expand All @@ -80,7 +80,7 @@ def tap_released?(buffer)
when 3
touch_num == release_num + 1
when 4
touch_num == release_num + 1
touch_num > 0 && release_num > 0
else
false
end
Expand Down
11 changes: 7 additions & 4 deletions lib/fusuma/plugin/parsers/tap_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,14 @@ def parse_record(record)
gesture = 'tap'

case record.to_s
# BEGIN

# BEGIN
when /\stap(?:| state):\s.*TAP_STATE_IDLE → TAP_EVENT_TOUCH → TAP_STATE_TOUCH/
status = 'begin'
finger = 1

# TOUCH
when /\stap(?:| state):\s.*(#{STATE[:touches].join('|')}) → TAP_EVENT_TOUCH → (#{STATE[:touches].join('|')})/
# TOUCH
when /\stap(?:| state):\s.*(#{STATE[:touches].join('|')}) → TAP_EVENT_(?:TOUCH|MOTION) → (#{STATE[:touches].join('|')})/

status = 'touch'

Expand Down Expand Up @@ -93,7 +94,7 @@ def parse_record(record)
1
end
# KEEP
when /\sgesture(| state):\s/
when /\sgesture(| state):\s/, 'LIBINPUT TIMEOUT'
# NOTE: treat the "gesture(| state):" as KEEP
status = 'keep'
finger = 0
Expand Down Expand Up @@ -121,6 +122,8 @@ def parse_record(record)

matched = Regexp.last_match
finger = case matched[1]
when 'TAP_STATE_DEAD'
4
when 'TAP_STATE_TOUCH_3', 'TAP_STATE_TOUCH_3_HOLD'
3
when 'TAP_STATE_TOUCH_2', 'TAP_STATE_TOUCH_2_HOLD', 'TAP_STATE_TOUCH_2_RELEASE'
Expand Down
43 changes: 31 additions & 12 deletions spec/fusuma/plugin/buffers/tap_buffer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,37 @@ module Buffers
end

describe '#clear_expired' do
it 'should NOT clear any events' do
time = Time.now
event1 = @event_generator.call(time, 1, 'begin')
event2 = @event_generator.call(time + 0.1, 2, 'tap')
event3 = @event_generator.call(time + 0.2, 1, 'release')
@buffer.buffer(event1)
@buffer.buffer(event2)
@buffer.buffer(event3)
context 'with including end' do
it 'should NOT clear any events' do
time = Time.now
event1 = @event_generator.call(time, 1, 'begin')
event2 = @event_generator.call(time + 0.1, 2, 'tap')
event3 = @event_generator.call(time + 0.2, 1, 'release')
event4 = @event_generator.call(time + 0.2, 1, 'end')
@buffer.buffer(event1)
@buffer.buffer(event2)
@buffer.buffer(event3)
@buffer.buffer(event4)

@buffer.clear_expired(current_time: time + 100)

expect(@buffer.events).to eq []
end
end
context 'WITHOUT including end' do
it 'should NOT clear any events' do
time = Time.now
event1 = @event_generator.call(time, 1, 'begin')
event2 = @event_generator.call(time + 0.1, 2, 'tap')
event3 = @event_generator.call(time + 0.2, 1, 'release')
@buffer.buffer(event1)
@buffer.buffer(event2)
@buffer.buffer(event3)

@buffer.clear_expired(current_time: time + 100)
@buffer.clear_expired(current_time: time + 100)

expect(@buffer.events).to eq [event1, event2, event3]
expect(@buffer.events).to eq [event1, event2, event3]
end
end
end

Expand Down Expand Up @@ -85,9 +104,9 @@ module Buffers
expect(@buffer.bufferable?(event2)).to eq true
end

it 'should NOT buffer end event' do
it 'should buffer end event' do
event2 = @event_generator.call(Time.now, 1, 'end')
expect(@buffer.bufferable?(event2)).to eq false
expect(@buffer.bufferable?(event2)).to eq true
end
end
end
Expand Down
39 changes: 38 additions & 1 deletion spec/fusuma/plugin/detectors/tap_detector_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ module Detectors
end
end

context 'with 2 fingers tap events in buffer' do
context 'with 3 fingers tap events in buffer' do
before do
time = Time.now
[
Expand All @@ -75,6 +75,23 @@ module Detectors
expect(key_symbol).to eq [:tap, 3]
end
end
context 'with 4 fingers tap events in buffer' do
before do
time = Time.now
[
@event_generator.call(time, 1, 'begin'),
@event_generator.call(time, 2, 'touch'),
@event_generator.call(time, 3, 'touch'),
@event_generator.call(time, 4, 'touch'),
@event_generator.call(time + 0.1, 4, 'end')
].each { |event| @buffer.buffer(event) }
end

it 'should generate tap index' do
key_symbol = @detector.detect([@buffer]).record.index.keys.map(&:symbol)
expect(key_symbol).to eq [:tap, 4]
end
end

context 'with 1 finger hold events in buffer' do
before do
Expand Down Expand Up @@ -124,6 +141,26 @@ module Detectors
expect(key_symbol).to eq [:hold, 3]
end
end
context 'with 4 fingers hold events in buffer' do
before do
time = Time.now
[
@event_generator.call(time, 1, 'begin'),
@event_generator.call(time, 2, 'touch'),
@event_generator.call(time, 3, 'touch'),
@event_generator.call(time, 4, 'touch'),
@event_generator.call(time, 0, 'keep'),
@event_generator.call(time, 0, 'keep'),
@event_generator.call(time, 0, 'keep'),
@event_generator.call(time + 1, 2, 'release')
].each { |event| @buffer.buffer(event) }
end

it 'should generate hold index' do
key_symbol = @detector.detect([@buffer]).record.index.keys.map(&:symbol)
expect(key_symbol).to eq [:hold, 4]
end
end
end
end
end
Expand Down
28 changes: 15 additions & 13 deletions spec/fusuma/plugin/parsers/1.10.4/1finger-double-tap.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
event17 - tap state: TAP_STATE_IDLE → TAP_EVENT_TOUCH → TAP_STATE_TOUCH
event17 - button state: from BUTTON_STATE_AREA, event BUTTON_EVENT_UP to BUTTON_STATE_NONE
event17 - tap state: TAP_STATE_TOUCH → TAP_EVENT_RELEASE → TAP_STATE_TAPPED
event17 POINTER_BUTTON +3169.97s BTN_LEFT (272) pressed, seat count: 1
event17 - thumb state: THUMB_STATE_MAYBE → THUMB_STATE_NO
event17 - button state: from BUTTON_STATE_NONE, event BUTTON_EVENT_IN_AREA to BUTTON_STATE_AREA
event17 - tap state: TAP_STATE_TAPPED → TAP_EVENT_TOUCH → TAP_STATE_DRAGGING_OR_DOUBLETAP
event17 - button state: from BUTTON_STATE_AREA, event BUTTON_EVENT_UP to BUTTON_STATE_NONE
event17 - tap state: TAP_STATE_DRAGGING_OR_DOUBLETAP → TAP_EVENT_RELEASE → TAP_STATE_MULTITAP
event17 POINTER_BUTTON +3170.01s BTN_LEFT (272) released, seat count: 0
event17 - tap state: TAP_STATE_MULTITAP → TAP_EVENT_TIMEOUT → TAP_STATE_IDLE
event17 POINTER_BUTTON +3170.15s BTN_LEFT (272) pressed, seat count: 1
event17 POINTER_BUTTON +3170.18s BTN_LEFT (272) released, seat count: 0
event12 - thumb state: THUMB_STATE_MAYBE → THUMB_STATE_NO
event12 - button state: from BUTTON_STATE_NONE, event BUTTON_EVENT_IN_AREA to BUTTON_STATE_AREA
event12 - tap state: TAP_STATE_IDLE → TAP_EVENT_TOUCH → TAP_STATE_TOUCH
event12 - button state: from BUTTON_STATE_AREA, event BUTTON_EVENT_UP to BUTTON_STATE_NONE
event12 - tap state: TAP_STATE_TOUCH → TAP_EVENT_RELEASE → TAP_STATE_TAPPED
event12 POINTER_BUTTON +5.00s BTN_LEFT (272) pressed, seat count: 1
event12 - thumb state: THUMB_STATE_MAYBE → THUMB_STATE_NO
event12 - button state: from BUTTON_STATE_NONE, event BUTTON_EVENT_IN_AREA to BUTTON_STATE_AREA
event12 - tap state: TAP_STATE_TAPPED → TAP_EVENT_TOUCH → TAP_STATE_DRAGGING_OR_DOUBLETAP
event12 - button state: from BUTTON_STATE_AREA, event BUTTON_EVENT_UP to BUTTON_STATE_NONE
event12 - tap state: TAP_STATE_DRAGGING_OR_DOUBLETAP → TAP_EVENT_RELEASE → TAP_STATE_MULTITAP
event12 POINTER_BUTTON +5.06s BTN_LEFT (272) released, seat count: 0
event12 - tap state: TAP_STATE_MULTITAP → TAP_EVENT_TIMEOUT → TAP_STATE_IDLE
event12 POINTER_BUTTON +5.17s BTN_LEFT (272) pressed, seat count: 1
event12 POINTER_BUTTON +5.21s BTN_LEFT (272) released, seat count: 0
12 changes: 6 additions & 6 deletions spec/fusuma/plugin/parsers/1.10.4/1finger-hold.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
event17 - thumb state: THUMB_STATE_MAYBE → THUMB_STATE_NO
event17 - button state: from BUTTON_STATE_NONE, event BUTTON_EVENT_IN_AREA to BUTTON_STATE_AREA
event17 - tap state: TAP_STATE_IDLE → TAP_EVENT_TOUCH → TAP_STATE_TOUCH
event17 - tap state: TAP_STATE_TOUCH → TAP_EVENT_TIMEOUT → TAP_STATE_HOLD
event17 - button state: from BUTTON_STATE_AREA, event BUTTON_EVENT_UP to BUTTON_STATE_NONE
event17 - tap state: TAP_STATE_HOLD → TAP_EVENT_RELEASE → TAP_STATE_IDLE
event12 - thumb state: THUMB_STATE_MAYBE → THUMB_STATE_NO
event12 - button state: from BUTTON_STATE_NONE, event BUTTON_EVENT_IN_AREA to BUTTON_STATE_AREA
event12 - tap state: TAP_STATE_IDLE → TAP_EVENT_TOUCH → TAP_STATE_TOUCH
event12 - tap state: TAP_STATE_TOUCH → TAP_EVENT_TIMEOUT → TAP_STATE_HOLD
event12 - button state: from BUTTON_STATE_AREA, event BUTTON_EVENT_UP to BUTTON_STATE_NONE
event12 - tap state: TAP_STATE_HOLD → TAP_EVENT_RELEASE → TAP_STATE_IDLE
13 changes: 8 additions & 5 deletions spec/fusuma/plugin/parsers/1.10.4/1finger-tap.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
event17 - tap state: TAP_STATE_IDLE → TAP_EVENT_TOUCH → TAP_STATE_TOUCH
event17 - tap state: TAP_STATE_TOUCH → TAP_EVENT_RELEASE → TAP_STATE_TAPPED
event17 POINTER_BUTTON +2.49s BTN_LEFT (272) pressed, seat count: 1
event17 - tap state: TAP_STATE_TAPPED → TAP_EVENT_TIMEOUT → TAP_STATE_IDLE
event17 POINTER_BUTTON +2.55s BTN_LEFT (272) released, seat count: 0
event12 - thumb state: THUMB_STATE_MAYBE → THUMB_STATE_NO
event12 - button state: from BUTTON_STATE_NONE, event BUTTON_EVENT_IN_AREA to BUTTON_STATE_AREA
event12 - tap state: TAP_STATE_IDLE → TAP_EVENT_TOUCH → TAP_STATE_TOUCH
event12 - button state: from BUTTON_STATE_AREA, event BUTTON_EVENT_UP to BUTTON_STATE_NONE
event12 - tap state: TAP_STATE_TOUCH → TAP_EVENT_RELEASE → TAP_STATE_TAPPED
event12 POINTER_BUTTON +5.00s BTN_LEFT (272) pressed, seat count: 1
event12 - tap state: TAP_STATE_TAPPED → TAP_EVENT_TIMEOUT → TAP_STATE_IDLE
event12 POINTER_BUTTON +5.07s BTN_LEFT (272) released, seat count: 0
Loading

0 comments on commit 295fc25

Please sign in to comment.