Merge pull request #2363 from Kingtous/master

opt: ui & cursor
This commit is contained in:
RustDesk 2022-11-29 23:26:00 +08:00 committed by GitHub
commit 895f81ac3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 65 additions and 18 deletions

View File

@ -6,7 +6,7 @@ import 'dart:typed_data';
import 'package:back_button_interceptor/back_button_interceptor.dart'; import 'package:back_button_interceptor/back_button_interceptor.dart';
import 'package:desktop_multi_window/desktop_multi_window.dart'; import 'package:desktop_multi_window/desktop_multi_window.dart';
import 'package:flutter/foundation.dart'; import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -42,6 +42,8 @@ var isWeb = false;
var isWebDesktop = false; var isWebDesktop = false;
var version = ""; var version = "";
int androidVersion = 0; int androidVersion = 0;
/// only avaliable for Windows target
int windowsBuildNumber = 0;
DesktopType? desktopType; DesktopType? desktopType;
/// * debug or test only, DO NOT enable in release build /// * debug or test only, DO NOT enable in release build
@ -1410,3 +1412,25 @@ Timer periodic_immediate(Duration duration, Future<void> Function() callback) {
await callback(); await callback();
}); });
} }
/// return a human readable windows version
WindowsTarget getWindowsTarget(int buildNumber) {
if (!Platform.isWindows) {
return WindowsTarget.naw;
}
if (buildNumber >= 22000) {
return WindowsTarget.w11;
} else if (buildNumber >= 10240) {
return WindowsTarget.w10;
} else if (buildNumber >= 9600) {
return WindowsTarget.w8_1;
} else if (buildNumber >= 9200) {
return WindowsTarget.w8;
} else if (buildNumber >= 7601) {
return WindowsTarget.w7;
} else if (buildNumber >= 6002) {
return WindowsTarget.vista;
} else {
// minimum support
return WindowsTarget.xp;
}
}

View File

@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'dart:io'; import 'dart:io';
import 'package:flutter_hbb/common.dart';
const double kDesktopRemoteTabBarHeight = 28.0; const double kDesktopRemoteTabBarHeight = 28.0;
/// [kAppTypeMain] used by 'Desktop Main Page' , 'Mobile (Client and Server)' , 'Desktop CM Page', "Install Page" /// [kAppTypeMain] used by 'Desktop Main Page' , 'Mobile (Client and Server)' , 'Desktop CM Page', "Install Page"
@ -324,3 +326,20 @@ const Map<int, String> physicalKeyMap = <int, String>{
0x000c019e: 'LOCK_SCREEN', 0x000c019e: 'LOCK_SCREEN',
0x000c0208: 'VK_PRINT', 0x000c0208: 'VK_PRINT',
}; };
/// The windows targets in the publish time order.
enum WindowsTarget {
naw, // not a windows target
xp,
vista,
w7,
w8,
w8_1,
w10,
w11
}
/// A convenient method to transform a build number to the corresponding windows version.
extension WindowsTargetExt on int {
WindowsTarget get windowsVersion => getWindowsTarget(this);
}

View File

@ -496,16 +496,6 @@ class _DesktopHomePageState extends State<DesktopHomePage>
// initTray(); // initTray();
trayManager.addListener(this); trayManager.addListener(this);
rustDeskWinManager.registerActiveWindowListener(onActiveWindowChanged); rustDeskWinManager.registerActiveWindowListener(onActiveWindowChanged);
// main window may be hidden because of the initial uni link or arguments.
// note that we must wrap this active window registration in future because
// we must ensure the execution is after `windowManager.hide/show()`.
Future.delayed(Duration.zero, () {
windowManager.isVisible().then((visibility) {
if (visibility) {
rustDeskWinManager.registerActiveWindow(kWindowMainId);
}
});
});
rustDeskWinManager.setMethodHandler((call, fromWindowId) async { rustDeskWinManager.setMethodHandler((call, fromWindowId) async {
debugPrint( debugPrint(

View File

@ -118,17 +118,20 @@ void runMainApp(bool startService) async {
gFFI.serverModel.startService(); gFFI.serverModel.startService();
} }
runApp(App()); runApp(App());
// restore the location of the main window before window hide or show
await restoreWindowPosition(WindowType.Main);
// check the startup argument, if we successfully handle the argument, we keep the main window hidden. // check the startup argument, if we successfully handle the argument, we keep the main window hidden.
if (checkArguments()) { if (checkArguments()) {
windowManager.hide(); windowManager.hide();
} else { } else {
windowManager.show(); windowManager.show();
windowManager.focus(); windowManager.focus();
// move registration of active main window here to prevent async visible check.
rustDeskWinManager.registerActiveWindow(kWindowMainId);
} }
// set window option // set window option
WindowOptions windowOptions = getHiddenTitleBarWindowOptions(); WindowOptions windowOptions = getHiddenTitleBarWindowOptions();
windowManager.waitUntilReadyToShow(windowOptions, () async { windowManager.waitUntilReadyToShow(windowOptions, () async {
restoreWindowPosition(WindowType.Main);
windowManager.setOpacity(1); windowManager.setOpacity(1);
}); });
} }
@ -173,6 +176,11 @@ void runMultiWindow(
widget, widget,
MyTheme.currentThemeMode(), MyTheme.currentThemeMode(),
); );
// we do not hide titlebar on win7 because of the frame overflow.
if (Platform.isWindows &&
const [WindowsTarget.w7].contains(windowsBuildNumber.windowsVersion)) {
WindowController.fromWindowId(windowId!).showTitleBar(true);
}
switch (appType) { switch (appType) {
case kAppTypeDesktopRemote: case kAppTypeDesktopRemote:
await restoreWindowPosition(WindowType.RemoteDesktop, await restoreWindowPosition(WindowType.RemoteDesktop,
@ -273,12 +281,18 @@ void runInstallPage() async {
} }
WindowOptions getHiddenTitleBarWindowOptions({Size? size}) { WindowOptions getHiddenTitleBarWindowOptions({Size? size}) {
var defaultTitleBarStyle = TitleBarStyle.hidden;
// we do not hide titlebar on win7 because of the frame overflow.
if (Platform.isWindows &&
const [WindowsTarget.w7].contains(windowsBuildNumber.windowsVersion)) {
defaultTitleBarStyle = TitleBarStyle.normal;
}
return WindowOptions( return WindowOptions(
size: size, size: size,
center: false, center: false,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
skipTaskbar: false, skipTaskbar: false,
titleBarStyle: TitleBarStyle.hidden, titleBarStyle: defaultTitleBarStyle,
); );
} }

View File

@ -145,6 +145,7 @@ class PlatformFFI {
WindowsDeviceInfo winInfo = await deviceInfo.windowsInfo; WindowsDeviceInfo winInfo = await deviceInfo.windowsInfo;
name = winInfo.computerName; name = winInfo.computerName;
id = winInfo.computerName; id = winInfo.computerName;
windowsBuildNumber = winInfo.buildNumber;
} catch (e) { } catch (e) {
debugPrint("$e"); debugPrint("$e");
name = "unknown"; name = "unknown";

View File

@ -202,9 +202,8 @@ class RustDeskMultiWindowManager {
// ignore // ignore
} else { } else {
_activeWindows.add(windowId); _activeWindows.add(windowId);
_notifyActiveWindow();
} }
_notifyActiveWindow();
} }
/// Remove active window which has [`windowId`] /// Remove active window which has [`windowId`]
@ -218,8 +217,8 @@ class RustDeskMultiWindowManager {
// ignore // ignore
} else { } else {
_activeWindows.remove(windowId); _activeWindows.remove(windowId);
_notifyActiveWindow();
} }
_notifyActiveWindow();
} }
void registerActiveWindowListener(VoidCallback callback) { void registerActiveWindowListener(VoidCallback callback) {

View File

@ -36,7 +36,7 @@ dependencies:
provider: ^6.0.3 provider: ^6.0.3
tuple: ^2.0.0 tuple: ^2.0.0
wakelock: ^0.6.2 wakelock: ^0.6.2
device_info_plus: ^4.1.2 device_info_plus: ^8.0.0
#firebase_analytics: ^9.1.5 #firebase_analytics: ^9.1.5
package_info_plus: ^1.4.2 package_info_plus: ^1.4.2
url_launcher: ^6.0.9 url_launcher: ^6.0.9
@ -72,7 +72,7 @@ dependencies:
flutter_custom_cursor: flutter_custom_cursor:
git: git:
url: https://github.com/Kingtous/rustdesk_flutter_custom_cursor url: https://github.com/Kingtous/rustdesk_flutter_custom_cursor
ref: bfb19c84a8244771488bc05cc5f9c9b5e0324cfd ref: 74b1b314142b6775c1243067a3503ac568ebc74b
window_size: window_size:
git: git:
url: https://github.com/google/flutter-desktop-embedding.git url: https://github.com/google/flutter-desktop-embedding.git