From dade589075da95c735058a7b0090b03d5859b8b0 Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 23 Aug 2023 23:29:15 +0800 Subject: [PATCH] fix, enable menu before image Signed-off-by: fufesou --- flutter/lib/desktop/pages/remote_page.dart | 84 ++++++++++++---------- src/client.rs | 3 + src/common.rs | 2 +- 3 files changed, 52 insertions(+), 37 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 0d51cabdd..8084b230d 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -228,49 +228,61 @@ class _RemotePageState extends State removeSharedStates(widget.id); } + Widget emptyOverlay() => GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: () { + bind.sessionInputOsPassword(sessionId: sessionId, value: ''); + }, + child: BlockableOverlay( + state: _blockableOverlayState, + underlying: Container( + color: Colors.transparent, + ), + ), + ); + Widget buildBody(BuildContext context) { return Scaffold( backgroundColor: Theme.of(context).colorScheme.background, /// the Overlay key will be set with _blockableOverlayState in BlockableOverlay /// see override build() in [BlockableOverlay] - body: BlockableOverlay( - state: _blockableOverlayState, - underlying: Container( - color: Colors.black, - child: RawKeyFocusScope( - focusNode: _rawKeyFocusNode, - onFocusChange: (bool imageFocused) { - debugPrint( - "onFocusChange(window active:${!_isWindowBlur}) $imageFocused"); - // See [onWindowBlur]. - if (Platform.isWindows) { - if (_isWindowBlur) { - imageFocused = false; - Future.delayed(Duration.zero, () { - _rawKeyFocusNode.unfocus(); - }); + body: Stack( + children: [ + Container( + color: Colors.black, + child: RawKeyFocusScope( + focusNode: _rawKeyFocusNode, + onFocusChange: (bool imageFocused) { + debugPrint( + "onFocusChange(window active:${!_isWindowBlur}) $imageFocused"); + // See [onWindowBlur]. + if (Platform.isWindows) { + if (_isWindowBlur) { + imageFocused = false; + Future.delayed(Duration.zero, () { + _rawKeyFocusNode.unfocus(); + }); + } + if (imageFocused) { + _ffi.inputModel.enterOrLeave(true); + } else { + _ffi.inputModel.enterOrLeave(false); + } } - if (imageFocused) { - _ffi.inputModel.enterOrLeave(true); - } else { - _ffi.inputModel.enterOrLeave(false); - } - } - }, - inputModel: _ffi.inputModel, - child: getBodyForDesktop(context))), - upperLayer: [ - OverlayEntry( - builder: (context) => RemoteToolbar( - id: widget.id, - ffi: _ffi, - state: widget.toolbarState, - onEnterOrLeaveImageSetter: (func) => - _onEnterOrLeaveImage4Toolbar = func, - onEnterOrLeaveImageCleaner: () => - _onEnterOrLeaveImage4Toolbar = null, - )) + }, + inputModel: _ffi.inputModel, + child: getBodyForDesktop(context))), + emptyOverlay(), + RemoteToolbar( + id: widget.id, + ffi: _ffi, + state: widget.toolbarState, + onEnterOrLeaveImageSetter: (func) => + _onEnterOrLeaveImage4Toolbar = func, + onEnterOrLeaveImageCleaner: () => + _onEnterOrLeaveImage4Toolbar = null, + ), ], ), ); diff --git a/src/client.rs b/src/client.rs index 9e3479da8..17a62ed54 100644 --- a/src/client.rs +++ b/src/client.rs @@ -2100,6 +2100,9 @@ fn _input_os_password(p: String, activate: bool, interface: impl Interface) { activate_os(&interface); std::thread::sleep(Duration::from_millis(1200)); } + if p.is_empty() { + return; + } let mut key_event = KeyEvent::new(); key_event.press = true; let mut msg_out = Message::new(); diff --git a/src/common.rs b/src/common.rs index 5ad92d914..36ca972b2 100644 --- a/src/common.rs +++ b/src/common.rs @@ -25,7 +25,7 @@ use hbb_common::{ protobuf::Enum, protobuf::Message as _, rendezvous_proto::*, - sleep, socket_client, + socket_client, tcp::FramedStream, tokio, ResultType, };