gbaldeck
07/19/2021, 2:43 PMonPreviewKeyEvent
is being run but it is not. The row has been selected and focused on so I'm not sure what exactly is going wrong. Here is a link to the exact line of code. Why are the keyboard presses not being detected?
https://github.com/recursivelftr/Grim-Locations/blob/d675a9a5859e320e833e8aa0fcb85[…]lin/io/grimlocations/ui/view/component/LocationListComponent.ktIgor Demin
07/20/2021, 8:44 PMimport androidx.compose.desktop.Window
import androidx.compose.foundation.background
import androidx.compose.foundation.focusable
import androidx.compose.foundation.gestures.awaitFirstDown
import androidx.compose.foundation.gestures.forEachGesture
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.size
import androidx.compose.material.TextField
import androidx.compose.runtime.remember
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.key.Key
import androidx.compose.ui.input.key.KeyEventType
import androidx.compose.ui.input.key.isCtrlPressed
import androidx.compose.ui.input.key.key
import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.input.key.type
import androidx.compose.ui.input.pointer.consumeDownChange
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.unit.dp
@OptIn(ExperimentalComposeUiApi::class)
fun main() = Window {
Column {
TextField("", {})
Row(
modifier = Modifier
.requestFocusOnClick()
.size(300.dp)
.background(Color.LightGray)
.onPreviewKeyEvent {
if(it.isCtrlPressed && it.key == Key.A && it.type == KeyEventType.KeyDown){
println("Ctrl+A")
}
true
}
) {
Column {
Box(Modifier.size(50.dp).background(Color.Red).requestFocusOnClick())
Box(Modifier.size(50.dp).background(Color.Green).requestFocusOnClick())
Box(Modifier.size(50.dp).background(Color.Blue).requestFocusOnClick())
}
}
}
}
private fun Modifier.requestFocusOnClick(): Modifier = composed {
val focusRequester = remember(::FocusRequester)
focusRequester(focusRequester).focusable().pointerInput(Unit) {
forEachGesture {
awaitPointerEventScope {
val down = awaitFirstDown()
focusRequester.requestFocus()
down.consumeDownChange()
}
}
}
}
gbaldeck
07/21/2021, 12:07 AMWindow
composable and implemented an enum to indicate which item had focusgbaldeck
07/21/2021, 12:09 AM