mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-06-07 09:52:49 +08:00
release keys for flutter input source
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
5c6017b0a9
commit
1589209567
@ -34,7 +34,8 @@ class RawKeyFocusScope extends StatelessWidget {
|
|||||||
canRequestFocus: true,
|
canRequestFocus: true,
|
||||||
focusNode: focusNode,
|
focusNode: focusNode,
|
||||||
onFocusChange: onFocusChange,
|
onFocusChange: onFocusChange,
|
||||||
onKey: inputModel.handleRawKeyEvent,
|
onKey: (FocusNode data, RawKeyEvent e) =>
|
||||||
|
inputModel.handleRawKeyEvent(e),
|
||||||
child: child));
|
child: child));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,111 @@ class PointerEventToRust {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ToReleaseKeys {
|
||||||
|
RawKeyEvent? lastLShiftKeyEvent;
|
||||||
|
RawKeyEvent? lastRShiftKeyEvent;
|
||||||
|
RawKeyEvent? lastLCtrlKeyEvent;
|
||||||
|
RawKeyEvent? lastRCtrlKeyEvent;
|
||||||
|
RawKeyEvent? lastLAltKeyEvent;
|
||||||
|
RawKeyEvent? lastRAltKeyEvent;
|
||||||
|
RawKeyEvent? lastLCommandKeyEvent;
|
||||||
|
RawKeyEvent? lastRCommandKeyEvent;
|
||||||
|
RawKeyEvent? lastSuperKeyEvent;
|
||||||
|
|
||||||
|
reset() {
|
||||||
|
lastLShiftKeyEvent = null;
|
||||||
|
lastRShiftKeyEvent = null;
|
||||||
|
lastLCtrlKeyEvent = null;
|
||||||
|
lastRCtrlKeyEvent = null;
|
||||||
|
lastLAltKeyEvent = null;
|
||||||
|
lastRAltKeyEvent = null;
|
||||||
|
lastLCommandKeyEvent = null;
|
||||||
|
lastRCommandKeyEvent = null;
|
||||||
|
lastSuperKeyEvent = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateKeyDown(LogicalKeyboardKey logicKey, RawKeyDownEvent e) {
|
||||||
|
if (e.isAltPressed) {
|
||||||
|
if (logicKey == LogicalKeyboardKey.altLeft) {
|
||||||
|
lastLAltKeyEvent = e;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.altRight) {
|
||||||
|
lastRAltKeyEvent = e;
|
||||||
|
}
|
||||||
|
} else if (e.isControlPressed) {
|
||||||
|
if (logicKey == LogicalKeyboardKey.controlLeft) {
|
||||||
|
lastLCtrlKeyEvent = e;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.controlRight) {
|
||||||
|
lastRCtrlKeyEvent = e;
|
||||||
|
}
|
||||||
|
} else if (e.isShiftPressed) {
|
||||||
|
if (logicKey == LogicalKeyboardKey.shiftLeft) {
|
||||||
|
lastLShiftKeyEvent = e;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.shiftRight) {
|
||||||
|
lastRShiftKeyEvent = e;
|
||||||
|
}
|
||||||
|
} else if (e.isMetaPressed) {
|
||||||
|
if (logicKey == LogicalKeyboardKey.metaLeft) {
|
||||||
|
lastLCommandKeyEvent = e;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.metaRight) {
|
||||||
|
lastRCommandKeyEvent = e;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.superKey) {
|
||||||
|
lastSuperKeyEvent = e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateKeyUp(LogicalKeyboardKey logicKey, RawKeyUpEvent e) {
|
||||||
|
if (e.isAltPressed) {
|
||||||
|
if (logicKey == LogicalKeyboardKey.altLeft) {
|
||||||
|
lastLAltKeyEvent = null;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.altRight) {
|
||||||
|
lastRAltKeyEvent = null;
|
||||||
|
}
|
||||||
|
} else if (e.isControlPressed) {
|
||||||
|
if (logicKey == LogicalKeyboardKey.controlLeft) {
|
||||||
|
lastLCtrlKeyEvent = null;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.controlRight) {
|
||||||
|
lastRCtrlKeyEvent = null;
|
||||||
|
}
|
||||||
|
} else if (e.isShiftPressed) {
|
||||||
|
if (logicKey == LogicalKeyboardKey.shiftLeft) {
|
||||||
|
lastLShiftKeyEvent = null;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.shiftRight) {
|
||||||
|
lastRShiftKeyEvent = null;
|
||||||
|
}
|
||||||
|
} else if (e.isMetaPressed) {
|
||||||
|
if (logicKey == LogicalKeyboardKey.metaLeft) {
|
||||||
|
lastLCommandKeyEvent = null;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.metaRight) {
|
||||||
|
lastRCommandKeyEvent = null;
|
||||||
|
} else if (logicKey == LogicalKeyboardKey.superKey) {
|
||||||
|
lastSuperKeyEvent = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
release(KeyEventResult Function(RawKeyEvent e) handleRawKeyEvent) {
|
||||||
|
for (final key in [
|
||||||
|
lastLShiftKeyEvent,
|
||||||
|
lastRShiftKeyEvent,
|
||||||
|
lastLCtrlKeyEvent,
|
||||||
|
lastRCtrlKeyEvent,
|
||||||
|
lastLAltKeyEvent,
|
||||||
|
lastRAltKeyEvent,
|
||||||
|
lastLCommandKeyEvent,
|
||||||
|
lastRCommandKeyEvent,
|
||||||
|
lastSuperKeyEvent,
|
||||||
|
]) {
|
||||||
|
if (key != null) {
|
||||||
|
handleRawKeyEvent(RawKeyUpEvent(
|
||||||
|
data: key.data,
|
||||||
|
character: key.character,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class InputModel {
|
class InputModel {
|
||||||
final WeakReference<FFI> parent;
|
final WeakReference<FFI> parent;
|
||||||
String keyboardMode = "legacy";
|
String keyboardMode = "legacy";
|
||||||
@ -62,6 +167,8 @@ class InputModel {
|
|||||||
var alt = false;
|
var alt = false;
|
||||||
var command = false;
|
var command = false;
|
||||||
|
|
||||||
|
final ToReleaseKeys toReleaseKeys = ToReleaseKeys();
|
||||||
|
|
||||||
// trackpad
|
// trackpad
|
||||||
var _trackpadLastDelta = Offset.zero;
|
var _trackpadLastDelta = Offset.zero;
|
||||||
var _stopFling = true;
|
var _stopFling = true;
|
||||||
@ -89,7 +196,7 @@ class InputModel {
|
|||||||
sessionId = parent.target!.sessionId;
|
sessionId = parent.target!.sessionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyEventResult handleRawKeyEvent(FocusNode data, RawKeyEvent e) {
|
KeyEventResult handleRawKeyEvent(RawKeyEvent e) {
|
||||||
if (isDesktop && !isInputSourceFlutter) {
|
if (isDesktop && !isInputSourceFlutter) {
|
||||||
return KeyEventResult.handled;
|
return KeyEventResult.handled;
|
||||||
}
|
}
|
||||||
@ -114,6 +221,7 @@ class InputModel {
|
|||||||
command = true;
|
command = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
toReleaseKeys.updateKeyDown(key, e);
|
||||||
}
|
}
|
||||||
if (e is RawKeyUpEvent) {
|
if (e is RawKeyUpEvent) {
|
||||||
if (key == LogicalKeyboardKey.altLeft ||
|
if (key == LogicalKeyboardKey.altLeft ||
|
||||||
@ -130,6 +238,8 @@ class InputModel {
|
|||||||
key == LogicalKeyboardKey.superKey) {
|
key == LogicalKeyboardKey.superKey) {
|
||||||
command = false;
|
command = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toReleaseKeys.updateKeyUp(key, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// * Currently mobile does not enable map mode
|
// * Currently mobile does not enable map mode
|
||||||
@ -319,6 +429,8 @@ class InputModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void enterOrLeave(bool enter) {
|
void enterOrLeave(bool enter) {
|
||||||
|
toReleaseKeys.release(handleRawKeyEvent);
|
||||||
|
|
||||||
// Fix status
|
// Fix status
|
||||||
if (!enter) {
|
if (!enter) {
|
||||||
resetModifiers();
|
resetModifiers();
|
||||||
|
Loading…
Reference in New Issue
Block a user