From 73662ed7d916d3dc186eafa258cca783561d9057 Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 9 May 2024 22:51:53 +0800 Subject: [PATCH] fix: linux, custom client, incoming, window size (#7995) * fix: linux, custom client, incoming, window size Signed-off-by: fufesou * comments Signed-off-by: fufesou --------- Signed-off-by: fufesou --- flutter/lib/common.dart | 2 ++ flutter/lib/desktop/pages/connection_page.dart | 2 +- flutter/lib/main.dart | 7 ++++++- flutter/lib/models/state_model.dart | 7 ++++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index b6ed6b519..b776e2c32 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -3257,3 +3257,5 @@ Widget buildVirtualWindowFrame(BuildContext context, Widget child) { ), ); } + +get windowEdgeSize => isLinux && bind.isIncomingOnly() ? 0.0 : kWindowEdgeSize; diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart index fe8e6c642..d1ecc29f8 100644 --- a/flutter/lib/desktop/pages/connection_page.dart +++ b/flutter/lib/desktop/pages/connection_page.dart @@ -262,7 +262,7 @@ class _ConnectionPageState extends State void onWindowLeaveFullScreen() { // Restore edge border to default edge size. stateGlobal.resizeEdgeSize.value = - stateGlobal.isMaximized.isTrue ? kMaximizeEdgeSize : kWindowEdgeSize; + stateGlobal.isMaximized.isTrue ? kMaximizeEdgeSize : windowEdgeSize; } @override diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index b3dbea86c..69873fd9b 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -144,7 +144,12 @@ void runMainApp(bool startService) async { } windowManager.setOpacity(1); windowManager.setTitle(getWindowName()); - windowManager.setResizable(!bind.isIncomingOnly()); + // `windowManager.setResizable(false)` will reset the window size to the default size on Linux. + // https://stackoverflow.com/questions/8193613/gtk-window-resize-disable-without-going-back-to-default + if (!isLinux) { + windowManager.setResizable(!bind.isIncomingOnly()); + } + // For Linux, we set the edge size to 0 to disable resize. See `get windowEdgeSize` in common.dart. }); } diff --git a/flutter/lib/models/state_model.dart b/flutter/lib/models/state_model.dart index f32cbe2d9..b3d6e00c1 100644 --- a/flutter/lib/models/state_model.dart +++ b/flutter/lib/models/state_model.dart @@ -14,7 +14,7 @@ class StateGlobal { bool _isMinimized = false; final RxBool isMaximized = false.obs; final RxBool _showTabBar = true.obs; - final RxDouble _resizeEdgeSize = RxDouble(kWindowEdgeSize); + final RxDouble _resizeEdgeSize = RxDouble(windowEdgeSize); final RxDouble _windowBorderWidth = RxDouble(kWindowBorderWidth); final RxBool showRemoteToolBar = false.obs; final svcStatus = SvcStatus.notReady.obs; @@ -57,7 +57,7 @@ class StateGlobal { if (isMaximized.value != v) { isMaximized.value = v; _resizeEdgeSize.value = - isMaximized.isTrue ? kMaximizeEdgeSize : kWindowEdgeSize; + isMaximized.isTrue ? kMaximizeEdgeSize : windowEdgeSize; } if (!isMacOS) { _windowBorderWidth.value = v ? 0 : kWindowBorderWidth; @@ -75,7 +75,7 @@ class StateGlobal { ? kFullScreenEdgeSize : isMaximized.isTrue ? kMaximizeEdgeSize - : kWindowEdgeSize; + : windowEdgeSize; print( "fullscreen: $fullscreen, resizeEdgeSize: ${_resizeEdgeSize.value}"); _windowBorderWidth.value = fullscreen.isTrue ? 0 : kWindowBorderWidth; @@ -113,4 +113,5 @@ class StateGlobal { static final StateGlobal instance = StateGlobal._(); } +// This final variable is initialized when the first time it is accessed. final stateGlobal = StateGlobal.instance;