in sample/src/main/kotlin/org/jetbrains/desktop/sample/linux/SkikoSampleLinux.kt [615:645]
fun onTextInput(event: Event.TextInput, app: Application): EventHandlerResult {
composedText = ""
event.deleteSurroundingTextData?.let { deleteSurroundingTextData ->
val deleteStart = cursorOffset - utf8OffsetToUtf16Offset(text, deleteSurroundingTextData.beforeLengthInBytes)
val deleteEnd = cursorOffset + utf8OffsetToUtf16Offset(text, deleteSurroundingTextData.afterLengthInBytes)
this.text.delete(deleteStart, deleteEnd)
}
event.commitStringData?.let { commitStringData ->
commitStringData.text?.let { commitString ->
this.text.insert(cursorOffset, commitString)
cursorOffset += commitString.length
}
}
event.preeditStringData?.let { preeditStringData ->
deleteSelection()
cursorVisible = !(preeditStringData.cursorBeginBytePos == -1 && preeditStringData.cursorEndBytePos == -1)
preeditStringData.text?.let { preeditString ->
composedText = preeditString
composedTextStartOffset = utf8OffsetToUtf16Offset(preeditString, preeditStringData.cursorBeginBytePos)
composedTextEndOffset = utf8OffsetToUtf16Offset(preeditString, preeditStringData.cursorEndBytePos)
}
} ?: run {
composedTextStartOffset = null
composedTextEndOffset = null
cursorVisible = true
}
if (event.deleteSurroundingTextData != null || event.commitStringData != null) {
app.textInputUpdate(createTextInputContext(changeCausedByInputMethod = true))
}
return EventHandlerResult.Stop
}