Merge branch 'rustdesk:master' into master

This commit is contained in:
Sahil Yeole 2023-09-04 01:47:39 +05:30 committed by GitHub
commit 4e359848d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 88 additions and 38 deletions

View File

@ -96,6 +96,22 @@ jobs:
VCPKG_ROOT: C:\rustdesk_thirdpary_lib\vcpkg VCPKG_ROOT: C:\rustdesk_thirdpary_lib\vcpkg
run: python3 .\build.py --portable --hwcodec --flutter --feature IddDriver 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: not found";
else
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 - name: Sign rustdesk files
uses: GermanBluefox/code-sign-action@v7 uses: GermanBluefox/code-sign-action@v7
if: env.UPLOAD_ARTIFACT == 'true' if: env.UPLOAD_ARTIFACT == 'true'
@ -198,6 +214,22 @@ jobs:
curl -LJ -o ./Release/sciter.dll https://github.com/c-smile/sciter-sdk/raw/master/bin.win/x32/sciter.dll 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 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: not found";
else
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 - name: Sign rustdesk files
uses: GermanBluefox/code-sign-action@v7 uses: GermanBluefox/code-sign-action@v7
if: env.UPLOAD_ARTIFACT == 'true' if: env.UPLOAD_ARTIFACT == 'true'

View File

@ -1699,7 +1699,10 @@ Future<bool> restoreWindowPosition(WindowType type,
} }
if (lpos.isMaximized == true) { if (lpos.isMaximized == true) {
await restoreFrame(); 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 { } else {
await restoreFrame(); await restoreFrame();
} }

View File

@ -106,7 +106,8 @@ class _ConnectionPageState extends State<ConnectionPage>
@override @override
void onWindowLeaveFullScreen() { void onWindowLeaveFullScreen() {
// Restore edge border to default edge size. // Restore edge border to default edge size.
stateGlobal.resizeEdgeSize.value = kWindowEdgeSize; stateGlobal.resizeEdgeSize.value =
stateGlobal.isMaximized.isTrue ? kMaximizeEdgeSize : kWindowEdgeSize;
} }
@override @override

View File

@ -440,7 +440,6 @@ class DesktopTab extends StatelessWidget {
tabType: tabType, tabType: tabType,
state: state, state: state,
tail: tail, tail: tail,
isMaximized: stateGlobal.isMaximized,
showMinimize: showMinimize, showMinimize: showMinimize,
showMaximize: showMaximize, showMaximize: showMaximize,
showClose: showClose, showClose: showClose,
@ -455,7 +454,6 @@ class WindowActionPanel extends StatefulWidget {
final bool isMainWindow; final bool isMainWindow;
final DesktopTabType tabType; final DesktopTabType tabType;
final Rx<DesktopTabState> state; final Rx<DesktopTabState> state;
final RxBool isMaximized;
final bool showMinimize; final bool showMinimize;
final bool showMaximize; final bool showMaximize;
@ -468,7 +466,6 @@ class WindowActionPanel extends StatefulWidget {
required this.isMainWindow, required this.isMainWindow,
required this.tabType, required this.tabType,
required this.state, required this.state,
required this.isMaximized,
this.tail, this.tail,
this.showMinimize = true, this.showMinimize = true,
this.showMaximize = true, this.showMaximize = true,
@ -495,18 +492,18 @@ class WindowActionPanelState extends State<WindowActionPanel>
Future.delayed(Duration(milliseconds: 500), () { Future.delayed(Duration(milliseconds: 500), () {
if (widget.isMainWindow) { if (widget.isMainWindow) {
windowManager.isMaximized().then((maximized) { windowManager.isMaximized().then((maximized) {
if (widget.isMaximized.value != maximized) { if (stateGlobal.isMaximized.value != maximized) {
WidgetsBinding.instance.addPostFrameCallback( WidgetsBinding.instance.addPostFrameCallback(
(_) => setState(() => widget.isMaximized.value = maximized)); (_) => setState(() => stateGlobal.setMaximized(maximized)));
} }
}); });
} else { } else {
final wc = WindowController.fromWindowId(kWindowId!); final wc = WindowController.fromWindowId(kWindowId!);
wc.isMaximized().then((maximized) { wc.isMaximized().then((maximized) {
debugPrint("isMaximized $maximized"); debugPrint("isMaximized $maximized");
if (widget.isMaximized.value != maximized) { if (stateGlobal.isMaximized.value != maximized) {
WidgetsBinding.instance.addPostFrameCallback( WidgetsBinding.instance.addPostFrameCallback(
(_) => setState(() => widget.isMaximized.value = maximized)); (_) => setState(() => stateGlobal.setMaximized(maximized)));
} }
}); });
} }
@ -535,10 +532,6 @@ class WindowActionPanelState extends State<WindowActionPanel>
@override @override
void onWindowMaximize() { void onWindowMaximize() {
// catch maximize from system
if (!widget.isMaximized.value) {
widget.isMaximized.value = true;
}
stateGlobal.setMinimized(false); stateGlobal.setMinimized(false);
_setMaximized(true); _setMaximized(true);
super.onWindowMaximize(); super.onWindowMaximize();
@ -546,10 +539,6 @@ class WindowActionPanelState extends State<WindowActionPanel>
@override @override
void onWindowUnmaximize() { void onWindowUnmaximize() {
// catch unmaximize from system
if (widget.isMaximized.value) {
widget.isMaximized.value = false;
}
stateGlobal.setMinimized(false); stateGlobal.setMinimized(false);
_setMaximized(false); _setMaximized(false);
super.onWindowUnmaximize(); super.onWindowUnmaximize();
@ -632,9 +621,10 @@ class WindowActionPanelState extends State<WindowActionPanel>
Offstage( Offstage(
offstage: !widget.showMaximize || Platform.isMacOS, offstage: !widget.showMaximize || Platform.isMacOS,
child: Obx(() => ActionIcon( child: Obx(() => ActionIcon(
message: message: stateGlobal.isMaximized.isTrue
widget.isMaximized.value ? 'Restore' : 'Maximize', ? 'Restore'
icon: widget.isMaximized.value : 'Maximize',
icon: stateGlobal.isMaximized.isTrue
? IconFont.restore ? IconFont.restore
: IconFont.max, : IconFont.max,
onTap: _toggleMaximize, onTap: _toggleMaximize,
@ -671,10 +661,8 @@ class WindowActionPanelState extends State<WindowActionPanel>
void _toggleMaximize() { void _toggleMaximize() {
toggleMaximize(widget.isMainWindow).then((maximize) { toggleMaximize(widget.isMainWindow).then((maximize) {
if (widget.isMaximized.value != maximize) { // update state for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize
// update state for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize stateGlobal.setMaximized(maximize);
widget.isMaximized.value = maximize;
}
}); });
} }
} }

View File

@ -25,6 +25,9 @@ class _HomePageState extends State<HomePage> {
var _selectedIndex = 0; var _selectedIndex = 0;
int get selectedIndex => _selectedIndex; int get selectedIndex => _selectedIndex;
final List<PageShape> _pages = []; final List<PageShape> _pages = [];
bool get isChatPageCurrentTab => isAndroid
? _selectedIndex == 1
: false; // change this when ios have chat page
void refreshPages() { void refreshPages() {
setState(() { setState(() {
@ -79,13 +82,15 @@ class _HomePageState extends State<HomePage> {
unselectedItemColor: MyTheme.darkGray, unselectedItemColor: MyTheme.darkGray,
onTap: (index) => setState(() { onTap: (index) => setState(() {
// close chat overlay when go chat page // close chat overlay when go chat page
if (index == 1 && _selectedIndex != index) { if (_selectedIndex != index) {
gFFI.chatModel.hideChatIconOverlay(); _selectedIndex = index;
gFFI.chatModel.hideChatWindowOverlay(); if (isChatPageCurrentTab) {
gFFI.chatModel gFFI.chatModel.hideChatIconOverlay();
.mobileClearClientUnread(gFFI.chatModel.currentKey.connId); gFFI.chatModel.hideChatWindowOverlay();
gFFI.chatModel.mobileClearClientUnread(
gFFI.chatModel.currentKey.connId);
}
} }
_selectedIndex = index;
}), }),
), ),
body: _pages.elementAt(_selectedIndex), body: _pages.elementAt(_selectedIndex),
@ -95,7 +100,7 @@ class _HomePageState extends State<HomePage> {
Widget appTitle() { Widget appTitle() {
final currentUser = gFFI.chatModel.currentUser; final currentUser = gFFI.chatModel.currentUser;
final currentKey = gFFI.chatModel.currentKey; final currentKey = gFFI.chatModel.currentKey;
if (_selectedIndex == 1 && if (isChatPageCurrentTab &&
currentUser != null && currentUser != null &&
currentKey.peerId.isNotEmpty) { currentKey.peerId.isNotEmpty) {
final connected = final connected =

View File

@ -403,7 +403,7 @@ class ChatModel with ChangeNotifier {
parent.target?.serverModel.jumpTo(id); parent.target?.serverModel.jumpTo(id);
} }
} else { } else {
if (HomePage.homeKey.currentState?.selectedIndex != 1 || if (HomePage.homeKey.currentState?.isChatPageCurrentTab != true ||
_currentKey != messagekey) { _currentKey != messagekey) {
client.unreadChatMessageCount.value += 1; client.unreadChatMessageCount.value += 1;
mobileUpdateUnreadSum(); mobileUpdateUnreadSum();

View File

@ -451,6 +451,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.1" 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: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -1558,4 +1574,4 @@ packages:
version: "0.2.0" version: "0.2.0"
sdks: sdks:
dart: ">=3.0.0 <4.0.0" dart: ">=3.0.0 <4.0.0"
flutter: ">=3.7.0-0" flutter: ">=3.10.0"

View File

@ -93,7 +93,7 @@ BEGIN
VALUE "FileDescription", "rustdesk" "\0" VALUE "FileDescription", "rustdesk" "\0"
VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "FileVersion", VERSION_AS_STRING "\0"
VALUE "InternalName", "rustdesk" "\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 "OriginalFilename", "rustdesk.exe" "\0"
VALUE "ProductName", "rustdesk" "\0" VALUE "ProductName", "rustdesk" "\0"
VALUE "ProductVersion", VERSION_AS_STRING "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0"

View File

@ -1,5 +1,10 @@
extern crate embed_resource; extern crate embed_resource;
use std::fs;
fn main() { 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=./libs/portable/Runner.res"),
Err(_) => embed_resource::compile("icon.rc", embed_resource::NONE),
}
} }

View File

@ -538,8 +538,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("pull_ab_failed_tip", "Impossibile aggiornare la rubrica"), ("pull_ab_failed_tip", "Impossibile aggiornare la rubrica"),
("push_ab_failed_tip", "Impossibile sincronizzare la rubrica con il server"), ("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."), ("synced_peer_readded_tip", "I dispositivi presenti nelle sessioni recenti saranno sincronizzati di nuovo nella rubrica."),
("Change Color", ""), ("Change Color", "Modifica colore"),
("Primary Color", ""), ("Primary Color", "Colore primario"),
("HSV Color", ""), ("HSV Color", "Colore HSV"),
].iter().cloned().collect(); ].iter().cloned().collect();
} }