@@ -250,12 +250,14 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
250
250
return
251
251
}
252
252
253
- it.modifiers.shift. apply {
254
- if (this ) sendDownKeyEvent(eventTime, KeyEvent .KEYCODE_SHIFT_LEFT )
253
+ it.modifiers.apply {
254
+ if (this .shift ) sendDownKeyEvent(eventTime, KeyEvent .KEYCODE_SHIFT_LEFT )
255
255
256
256
sendDownKeyEvent(eventTime, keyCode, it.modifiers.metaState)
257
257
258
- if (this ) sendUpKeyEvent(eventTime, KeyEvent .KEYCODE_SHIFT_LEFT )
258
+ if (this .shift) sendUpKeyEvent(eventTime, KeyEvent .KEYCODE_SHIFT_LEFT )
259
+
260
+ if (ctrl && keyCode == KeyEvent .KEYCODE_C ) cancelTextSelection()
259
261
}
260
262
}
261
263
} else {
@@ -863,7 +865,14 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
863
865
etr.token = 0
864
866
val et = ic.getExtractedText(etr, 0 )
865
867
if (et != null ) {
866
- if (et.selectionStart != et.selectionEnd) return ic.performContextMenuAction(android.R .id.copy)
868
+ if (et.selectionStart != et.selectionEnd) {
869
+ ic.performContextMenuAction(android.R .id.copy).also { result ->
870
+ if (result) {
871
+ cancelTextSelection()
872
+ }
873
+ return result
874
+ }
875
+ }
867
876
}
868
877
}
869
878
Timber .w(" hookKeyboard copy fail" )
@@ -918,6 +927,17 @@ open class TrimeInputMethodService : LifecycleInputMethodService() {
918
927
return false
919
928
}
920
929
930
+ fun cancelTextSelection () {
931
+ val ic = currentInputConnection ? : return
932
+ val etr = ExtractedTextRequest ().apply { token = 0 }
933
+ val et = currentInputConnection.getExtractedText(etr, 0 )
934
+ et?.let {
935
+ if (it.selectionStart != it.selectionEnd) {
936
+ ic.setSelection(it.selectionEnd, it.selectionEnd)
937
+ }
938
+ }
939
+ }
940
+
921
941
private val composingTextMode by prefs.general.composingTextMode
922
942
923
943
private fun updateComposingText (ctx : RimeProto .Context ) {
0 commit comments