From 6c5f0aecb40d6b85281ca2d63d18bf7a6be2700d Mon Sep 17 00:00:00 2001 From: deep-soft Date: Fri, 1 Sep 2023 16:11:23 +0300 Subject: [PATCH 01/12] Update flutter-build.yml --- .github/workflows/flutter-build.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 69f7df67b..d0dd8470b 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -96,6 +96,18 @@ jobs: VCPKG_ROOT: C:\rustdesk_thirdpary_lib\vcpkg run: python3 .\build.py --portable --hwcodec --flutter --feature IddDriver + - name: find Runner.res + # Windows: find Runner.res (compiled from ./flutter/windows/runner/Runner.rc), copy to ./Runner.res + # Runner.rc does not contain actual version, but Runner.res does + continue-on-error: true + shell: bash + run: | + runner_res=$(find . -name Runner.res) + if [ runner_res != '' ]; then + echo "Runner.res: $runner_res" + cp $runner.res ./Runner.res + fi + - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 if: env.UPLOAD_ARTIFACT == 'true' @@ -198,6 +210,18 @@ jobs: curl -LJ -o ./Release/sciter.dll https://github.com/c-smile/sciter-sdk/raw/master/bin.win/x32/sciter.dll echo "output_folder=./Release" >> $GITHUB_OUTPUT + - name: find Runner.res + # Windows: find Runner.res (compiled from ./flutter/windows/runner/Runner.rc), copy to ./Runner.res + # Runner.rc does not contain actual version, but Runner.res does + continue-on-error: true + shell: bash + run: | + runner_res=$(find . -name Runner.res) + if [ runner_res != '' ]; then + echo "Runner.res: $runner_res" + cp $runner.res ./Runner.res + fi + - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 if: env.UPLOAD_ARTIFACT == 'true' From e83a97349f63ec19e85bd81996ae45c334a0d753 Mon Sep 17 00:00:00 2001 From: deep-soft Date: Fri, 1 Sep 2023 16:12:13 +0300 Subject: [PATCH 02/12] Update build.rs # if Runner.res not found compile icon.rc --- libs/portable/build.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libs/portable/build.rs b/libs/portable/build.rs index 2450e16cd..697af3d45 100644 --- a/libs/portable/build.rs +++ b/libs/portable/build.rs @@ -1,5 +1,10 @@ extern crate embed_resource; +use std::fs; fn main() { - embed_resource::compile("icon.rc", embed_resource::NONE); + let runner_res_path = "./Runner.res"; + match fs::metadata(runner_res_path) { + Ok(_) => println!("cargo:rustc-link-lib=dylib:+verbatim=./Runner.res"), + Err(_) => embed_resource::compile("icon.rc", embed_resource::NONE), + } } From 0c6eacb14130768ffd78d855fe7ebe3b3c4caace Mon Sep 17 00:00:00 2001 From: deep-soft Date: Fri, 1 Sep 2023 16:13:21 +0300 Subject: [PATCH 03/12] Update Runner.rc --- flutter/windows/runner/Runner.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/windows/runner/Runner.rc b/flutter/windows/runner/Runner.rc index 32d01bf44..03776ded4 100644 --- a/flutter/windows/runner/Runner.rc +++ b/flutter/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "rustdesk" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "rustdesk" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.carriez. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.carriez. All rights reserved." "\0" VALUE "OriginalFilename", "rustdesk.exe" "\0" VALUE "ProductName", "rustdesk" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 4fe33db4f397c7680c41cd81e73b13968a9959b4 Mon Sep 17 00:00:00 2001 From: deep-soft Date: Fri, 1 Sep 2023 19:29:10 +0300 Subject: [PATCH 04/12] Update flutter-build.yml --- .github/workflows/flutter-build.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index d0dd8470b..050cfe787 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -102,10 +102,12 @@ jobs: continue-on-error: true shell: bash run: | - runner_res=$(find . -name Runner.res) - if [ runner_res != '' ]; then + runner_res=$(find . -name "Runner.res") + if [ $runner_res == '' ]; then + echo "Runner.res: not found" + else echo "Runner.res: $runner_res" - cp $runner.res ./Runner.res + cp $runner_res ./Runner.res fi - name: Sign rustdesk files @@ -216,10 +218,12 @@ jobs: continue-on-error: true shell: bash run: | - runner_res=$(find . -name Runner.res) - if [ runner_res != '' ]; then + runner_res=$(find . -name "Runner.res") + if [ $runner_res == '' ]; then + echo "Runner.res: not found" + else echo "Runner.res: $runner_res" - cp $runner.res ./Runner.res + cp $runner_res ./Runner.res fi - name: Sign rustdesk files From c9caa5687ac22fde4ad98d0db5d837add6d30678 Mon Sep 17 00:00:00 2001 From: deep-soft Date: Sat, 2 Sep 2023 14:29:03 +0300 Subject: [PATCH 05/12] Update flutter-build.yml fix find Runner.res --- .github/workflows/flutter-build.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 050cfe787..310607c7b 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -103,11 +103,13 @@ jobs: shell: bash run: | runner_res=$(find . -name "Runner.res") - if [ $runner_res == '' ]; then + if [ "$runner_res" == "" ]; then echo "Runner.res: not found" else echo "Runner.res: $runner_res" cp $runner_res ./Runner.res + echo "list ./Runner.res" + ls -l ./Runner.res fi - name: Sign rustdesk files @@ -219,11 +221,13 @@ jobs: shell: bash run: | runner_res=$(find . -name "Runner.res") - if [ $runner_res == '' ]; then + if [ "$runner_res" == "" ]; then echo "Runner.res: not found" else echo "Runner.res: $runner_res" cp $runner_res ./Runner.res + echo "list ./Runner.res" + ls -l ./Runner.res fi - name: Sign rustdesk files From 3fab42b8d1cb3a8290328b0a47d59db55f4cef7c Mon Sep 17 00:00:00 2001 From: deep-soft Date: Sat, 2 Sep 2023 20:52:07 +0300 Subject: [PATCH 06/12] Update build.rs --- libs/portable/build.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/portable/build.rs b/libs/portable/build.rs index 697af3d45..4f33273f5 100644 --- a/libs/portable/build.rs +++ b/libs/portable/build.rs @@ -2,9 +2,9 @@ extern crate embed_resource; use std::fs; fn main() { - let runner_res_path = "./Runner.res"; + let runner_res_path = "Runner.res"; match fs::metadata(runner_res_path) { - Ok(_) => println!("cargo:rustc-link-lib=dylib:+verbatim=./Runner.res"), + Ok(_) => println!("cargo:rustc-link-lib=dylib:+verbatim=./libs/portable/Runner.res"), Err(_) => embed_resource::compile("icon.rc", embed_resource::NONE), } } From 8ce1bb1b0b3d1091c91fcc70372fc119fef1a089 Mon Sep 17 00:00:00 2001 From: deep-soft Date: Sat, 2 Sep 2023 20:52:29 +0300 Subject: [PATCH 07/12] Update flutter-build.yml --- .github/workflows/flutter-build.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 310607c7b..f9faa554e 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -102,14 +102,14 @@ jobs: continue-on-error: true shell: bash run: | - runner_res=$(find . -name "Runner.res") + runner_res=$(find . -name "Runner.res"); if [ "$runner_res" == "" ]; then - echo "Runner.res: not found" + echo "Runner.res: not found"; else - echo "Runner.res: $runner_res" - cp $runner_res ./Runner.res - echo "list ./Runner.res" - ls -l ./Runner.res + echo "Runner.res: $runner_res"; + cp $runner_res ./libs/portable/Runner.res; + echo "list ./libs/portable/Runner.res"; + ls -l ./libs/portable/Runner.res; fi - name: Sign rustdesk files @@ -220,14 +220,14 @@ jobs: continue-on-error: true shell: bash run: | - runner_res=$(find . -name "Runner.res") + runner_res=$(find . -name "Runner.res"); if [ "$runner_res" == "" ]; then - echo "Runner.res: not found" + echo "Runner.res: not found"; else - echo "Runner.res: $runner_res" - cp $runner_res ./Runner.res - echo "list ./Runner.res" - ls -l ./Runner.res + echo "Runner.res: $runner_res"; + cp $runner_res ./libs/portable/Runner.res; + echo "list ./libs/portable/Runner.res"; + ls -l ./libs/portable/Runner.res; fi - name: Sign rustdesk files From 58073484fe58a2ce7ec2cccfd8070646852a7b5b Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 3 Sep 2023 07:21:27 +0800 Subject: [PATCH 08/12] fix ios setting page show chat title Signed-off-by: 21pages --- flutter/lib/mobile/pages/home_page.dart | 19 ++++++++++++------- flutter/lib/models/chat_model.dart | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index 1fb75c1d1..3574f1cea 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -27,6 +27,9 @@ class _HomePageState extends State { int get selectedIndex => _selectedIndex; final List _pages = []; final _blockableOverlayState = BlockableOverlayState(); + bool get isChatPageCurrentTab => isAndroid + ? _selectedIndex == 1 + : false; // change this when ios have chat page void refreshPages() { setState(() { @@ -82,13 +85,15 @@ class _HomePageState extends State { unselectedItemColor: MyTheme.darkGray, onTap: (index) => setState(() { // close chat overlay when go chat page - if (index == 1 && _selectedIndex != index) { - gFFI.chatModel.hideChatIconOverlay(); - gFFI.chatModel.hideChatWindowOverlay(); - gFFI.chatModel - .mobileClearClientUnread(gFFI.chatModel.currentKey.connId); + if (_selectedIndex != index) { + _selectedIndex = index; + if (isChatPageCurrentTab) { + gFFI.chatModel.hideChatIconOverlay(); + gFFI.chatModel.hideChatWindowOverlay(); + gFFI.chatModel.mobileClearClientUnread( + gFFI.chatModel.currentKey.connId); + } } - _selectedIndex = index; }), ), body: _pages.elementAt(_selectedIndex), @@ -98,7 +103,7 @@ class _HomePageState extends State { Widget appTitle() { final currentUser = gFFI.chatModel.currentUser; final currentKey = gFFI.chatModel.currentKey; - if (_selectedIndex == 1 && + if (isChatPageCurrentTab && currentUser != null && currentKey.peerId.isNotEmpty) { final connected = diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index bffd9d426..5ab0a6929 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -396,7 +396,7 @@ class ChatModel with ChangeNotifier { parent.target?.serverModel.jumpTo(id); } } else { - if (HomePage.homeKey.currentState?.selectedIndex != 1 || + if (HomePage.homeKey.currentState?.isChatPageCurrentTab != true || _currentKey != messagekey) { client.unreadChatMessageCount.value += 1; mobileUpdateUnreadSum(); From 701220246da0ac2d343fb9da81afad5de8d06505 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 3 Sep 2023 14:55:23 +0800 Subject: [PATCH 09/12] fix ci --- flutter/lib/mobile/pages/home_page.dart | 1 - flutter/pubspec.lock | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index 76c23b315..c04e03244 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -25,7 +25,6 @@ class _HomePageState extends State { var _selectedIndex = 0; int get selectedIndex => _selectedIndex; final List _pages = []; - final _blockableOverlayState = BlockableOverlayState(); bool get isChatPageCurrentTab => isAndroid ? _selectedIndex == 1 : false; // change this when ios have chat page diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index 415f46eeb..960e28338 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -451,6 +451,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + flex_color_picker: + dependency: "direct main" + description: + name: flex_color_picker + sha256: f37476ab3e80dcaca94e428e159944d465dd16312fda9ff41e07e86f04bfa51c + url: "https://pub.dev" + source: hosted + version: "3.3.0" + flex_seed_scheme: + dependency: transitive + description: + name: flex_seed_scheme + sha256: "29c12aba221eb8a368a119685371381f8035011d18de5ba277ad11d7dfb8657f" + url: "https://pub.dev" + source: hosted + version: "1.4.0" flutter: dependency: "direct main" description: flutter @@ -1558,4 +1574,4 @@ packages: version: "0.2.0" sdks: dart: ">=3.0.0 <4.0.0" - flutter: ">=3.7.0-0" + flutter: ">=3.10.0" From dcfcc1f27180ec0e999a800208f21d4daf6209ac Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Sun, 3 Sep 2023 11:36:10 +0200 Subject: [PATCH 10/12] Update italian language --- src/lang/it.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 22088a061..9c8b4fd48 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -538,8 +538,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Impossibile aggiornare la rubrica"), ("push_ab_failed_tip", "Impossibile sincronizzare la rubrica con il server"), ("synced_peer_readded_tip", "I dispositivi presenti nelle sessioni recenti saranno sincronizzati di nuovo nella rubrica."), - ("Change Color", ""), - ("Primary Color", ""), - ("HSV Color", ""), + ("Change Color", "Modifica colore"), + ("Primary Color", "Colore primario"), + ("HSV Color", "Colore HSV"), ].iter().cloned().collect(); } From bf32477f89fadea016b8ecb913b3e92e4eaa7004 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 3 Sep 2023 22:18:48 +0800 Subject: [PATCH 11/12] Remove dup maximized state Signed-off-by: dignow --- .../lib/desktop/pages/connection_page.dart | 3 +- .../lib/desktop/widgets/tabbar_widget.dart | 32 ++++++------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart index de87317b3..6d53ecc78 100644 --- a/flutter/lib/desktop/pages/connection_page.dart +++ b/flutter/lib/desktop/pages/connection_page.dart @@ -106,7 +106,8 @@ class _ConnectionPageState extends State @override void onWindowLeaveFullScreen() { // Restore edge border to default edge size. - stateGlobal.resizeEdgeSize.value = kWindowEdgeSize; + stateGlobal.resizeEdgeSize.value = + stateGlobal.isMaximized.isTrue ? kMaximizeEdgeSize : kWindowEdgeSize; } @override diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 148135a81..b27e8fafe 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -440,7 +440,6 @@ class DesktopTab extends StatelessWidget { tabType: tabType, state: state, tail: tail, - isMaximized: stateGlobal.isMaximized, showMinimize: showMinimize, showMaximize: showMaximize, showClose: showClose, @@ -455,7 +454,6 @@ class WindowActionPanel extends StatefulWidget { final bool isMainWindow; final DesktopTabType tabType; final Rx state; - final RxBool isMaximized; final bool showMinimize; final bool showMaximize; @@ -468,7 +466,6 @@ class WindowActionPanel extends StatefulWidget { required this.isMainWindow, required this.tabType, required this.state, - required this.isMaximized, this.tail, this.showMinimize = true, this.showMaximize = true, @@ -495,18 +492,18 @@ class WindowActionPanelState extends State Future.delayed(Duration(milliseconds: 500), () { if (widget.isMainWindow) { windowManager.isMaximized().then((maximized) { - if (widget.isMaximized.value != maximized) { + if (stateGlobal.isMaximized.value != maximized) { WidgetsBinding.instance.addPostFrameCallback( - (_) => setState(() => widget.isMaximized.value = maximized)); + (_) => setState(() => stateGlobal.setMaximized(maximized))); } }); } else { final wc = WindowController.fromWindowId(kWindowId!); wc.isMaximized().then((maximized) { debugPrint("isMaximized $maximized"); - if (widget.isMaximized.value != maximized) { + if (stateGlobal.isMaximized.value != maximized) { WidgetsBinding.instance.addPostFrameCallback( - (_) => setState(() => widget.isMaximized.value = maximized)); + (_) => setState(() => stateGlobal.setMaximized(maximized))); } }); } @@ -535,10 +532,6 @@ class WindowActionPanelState extends State @override void onWindowMaximize() { - // catch maximize from system - if (!widget.isMaximized.value) { - widget.isMaximized.value = true; - } stateGlobal.setMinimized(false); _setMaximized(true); super.onWindowMaximize(); @@ -546,10 +539,6 @@ class WindowActionPanelState extends State @override void onWindowUnmaximize() { - // catch unmaximize from system - if (widget.isMaximized.value) { - widget.isMaximized.value = false; - } stateGlobal.setMinimized(false); _setMaximized(false); super.onWindowUnmaximize(); @@ -632,9 +621,10 @@ class WindowActionPanelState extends State Offstage( offstage: !widget.showMaximize || Platform.isMacOS, child: Obx(() => ActionIcon( - message: - widget.isMaximized.value ? 'Restore' : 'Maximize', - icon: widget.isMaximized.value + message: stateGlobal.isMaximized.isTrue + ? 'Restore' + : 'Maximize', + icon: stateGlobal.isMaximized.isTrue ? IconFont.restore : IconFont.max, onTap: _toggleMaximize, @@ -671,10 +661,8 @@ class WindowActionPanelState extends State void _toggleMaximize() { toggleMaximize(widget.isMainWindow).then((maximize) { - if (widget.isMaximized.value != maximize) { - // update state for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize - widget.isMaximized.value = maximize; - } + // update state for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize + stateGlobal.setMaximized(maximize); }); } } From 4fc65aac84796d28f83ed6ea8721b4bbf06fd5b4 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 3 Sep 2023 22:27:42 +0800 Subject: [PATCH 12/12] Remote window restore, add 300 milliseconds delay for maximizing after the frame is restored Signed-off-by: dignow --- flutter/lib/common.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 48323d5fa..208c7f7c8 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1699,7 +1699,10 @@ Future restoreWindowPosition(WindowType type, } if (lpos.isMaximized == true) { await restoreFrame(); - await wc.maximize(); + // An duration is needed to avoid the window being restored after maximized. + Future.delayed(Duration(milliseconds: 300), () async { + await wc.maximize(); + }); } else { await restoreFrame(); }