+52
-10
lines changedFilter options
+52
-10
lines changed Original file line number Diff line number Diff line change
@@ -400,7 +400,10 @@ class Input {
400
400
}
401
401
402
402
private fun handleReleased(event: InputEvent) {
403
-
val releasedTriggers = activeTriggers.filter { it.isReleased(event) || (it is KeyTrigger && isIllegal(it.key)) }
403
+
val releasedTriggers = activeTriggers.filter {
404
+
// input modifiers are never released under the standard check, so we need the second branch
405
+
it.isReleased(event) || (it is KeyTrigger && isIllegal(it.key) && event is KeyEvent && event.code == it.key)
406
+
}
404
407
releasedTriggers.forEach {
405
408
handleTriggerReleased(it)
406
409
}
Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@ import org.hamcrest.CoreMatchers.`is`
11
11
import org.hamcrest.MatcherAssert.assertThat
12
12
import org.junit.jupiter.api.Assertions.assertFalse
13
13
import org.junit.jupiter.api.Assertions.assertTrue
14
+
import org.junit.jupiter.api.BeforeEach
14
15
import org.junit.jupiter.api.Test
15
16
16
17
/**
@@ -20,6 +21,13 @@ import org.junit.jupiter.api.Test
20
21
*/
21
22
class InputModifierTest {
22
23
24
+
private lateinit var input: Input
25
+
26
+
@BeforeEach
27
+
fun setUp() {
28
+
input = Input()
29
+
}
30
+
23
31
@Test
24
32
fun `Convert Shift from MouseEvent`() {
25
33
val e = mouseEvent(true, false, false)
@@ -116,13 +124,44 @@ class InputModifierTest {
116
124
assertTrue(InputModifier.NONE.toKeyCode() == KeyCode.ALPHANUMERIC)
117
125
}
118
126
119
-
// private fun mouseEvent(shift: Boolean, ctrl: Boolean, alt: Boolean): MouseEvent {
120
-
// return MouseEvent(MouseEvent.ANY, 0.0, 0.0, 0.0, 0.0, MouseButton.PRIMARY, 1,
121
-
// shift, ctrl, alt,
122
-
// false, false, false, false, false, false, false, null)
123
-
// }
124
-
//
125
-
// private fun keyEvent(shift: Boolean, ctrl: Boolean, alt: Boolean): KeyEvent {
126
-
// return KeyEvent(KeyEvent.ANY, "", "", KeyCode.A, shift, ctrl, alt, false)
127
-
// }
127
+
@Test
128
+
fun `Do not release illegal keys when main key is released`() {
129
+
var callsShift = 0
130
+
131
+
input.addTriggerListener(object : TriggerListener() {
132
+
override fun onKey(keyTrigger: KeyTrigger) {
133
+
if (keyTrigger.key == KeyCode.SHIFT) {
134
+
callsShift++
135
+
}
136
+
}
137
+
138
+
override fun onKeyEnd(keyTrigger: KeyTrigger) {
139
+
if (keyTrigger.key == KeyCode.SHIFT) {
140
+
callsShift = 999
141
+
}
142
+
}
143
+
})
144
+
145
+
input.update(0.0)
146
+
assertThat(callsShift, `is`(0))
147
+
148
+
// press shift
149
+
input.mockKeyPress(KeyCode.SHIFT)
150
+
input.update(0.0)
151
+
assertThat(callsShift, `is`(1))
152
+
153
+
// press arbitrary key
154
+
input.mockKeyPress(KeyCode.D)
155
+
input.update(0.0)
156
+
assertThat(callsShift, `is`(2))
157
+
158
+
// release that arbitrary key
159
+
input.mockKeyRelease(KeyCode.D)
160
+
input.update(0.0)
161
+
assertThat(callsShift, `is`(3))
162
+
163
+
// shift must still remain to be active
164
+
input.update(0.0)
165
+
assertThat(callsShift, `is`(4))
166
+
}
128
167
}
You can’t perform that action at this time.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4