Merge pull request #1919 from Kingtous/master
feat: add flutter tray and hide logic of main window
This commit is contained in:
commit
5b413bfde2
BIN
flutter/assets/logo.ico
Normal file
BIN
flutter/assets/logo.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 264 KiB |
BIN
flutter/assets/logo.png
Normal file
BIN
flutter/assets/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
@ -13,6 +13,7 @@ import 'package:flutter_hbb/desktop/widgets/scroll_wrapper.dart';
|
||||
import 'package:flutter_hbb/models/platform_model.dart';
|
||||
import 'package:flutter_hbb/models/server_model.dart';
|
||||
import 'package:flutter_hbb/utils/multi_window_manager.dart';
|
||||
import 'package:flutter_hbb/utils/tray_manager.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:tray_manager/tray_manager.dart';
|
||||
@ -395,14 +396,29 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void onTrayIconMouseDown() {
|
||||
windowManager.show();
|
||||
}
|
||||
|
||||
@override
|
||||
void onTrayIconRightMouseDown() {
|
||||
// linux does not support popup menu manually.
|
||||
// linux will handle popup action ifself.
|
||||
if (Platform.isMacOS || Platform.isWindows) {
|
||||
trayManager.popUpContextMenu();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onTrayMenuItemClick(MenuItem menuItem) {
|
||||
debugPrint('click ${menuItem.key}');
|
||||
switch (menuItem.key) {
|
||||
case "quit":
|
||||
exit(0);
|
||||
case "show":
|
||||
// windowManager.show();
|
||||
case kTrayItemQuitKey:
|
||||
windowManager.close();
|
||||
break;
|
||||
case kTrayItemShowKey:
|
||||
windowManager.show();
|
||||
windowManager.focus();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -416,6 +432,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
updateUrl = await bind.mainGetSoftwareUpdateUrl();
|
||||
if (updateUrl.isNotEmpty) setState(() {});
|
||||
});
|
||||
initTray();
|
||||
trayManager.addListener(this);
|
||||
windowManager.addListener(this);
|
||||
rustDeskWinManager.setMethodHandler((call, fromWindowId) async {
|
||||
@ -456,6 +473,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
destoryTray();
|
||||
trayManager.removeListener(this);
|
||||
windowManager.removeListener(this);
|
||||
_uniLinksSubscription?.cancel();
|
||||
|
@ -509,14 +509,15 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
||||
onTap: () async {
|
||||
final res = await widget.onClose?.call() ?? true;
|
||||
if (res) {
|
||||
if (widget.isMainWindow) {
|
||||
windowManager.close();
|
||||
} else {
|
||||
// only hide for multi window, not close
|
||||
Future.delayed(Duration.zero, () {
|
||||
WindowController.fromWindowId(windowId!).hide();
|
||||
});
|
||||
}
|
||||
// hide for all window
|
||||
// note: the main window can be restored by tray icon
|
||||
Future.delayed(Duration.zero, () async {
|
||||
if (widget.isMainWindow) {
|
||||
await windowManager.hide();
|
||||
} else {
|
||||
await WindowController.fromWindowId(windowId!).hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
isClose: true,
|
||||
|
@ -101,8 +101,6 @@ void runMainApp(bool startService) async {
|
||||
await bind.mainCheckConnectStatus();
|
||||
if (startService) {
|
||||
// await windowManager.ensureInitialized();
|
||||
// disable tray
|
||||
// initTray();
|
||||
gFFI.serverModel.startService();
|
||||
}
|
||||
runApp(App());
|
||||
|
@ -4,20 +4,29 @@ import 'package:tray_manager/tray_manager.dart';
|
||||
|
||||
import '../common.dart';
|
||||
|
||||
const kTrayItemShowKey = "show";
|
||||
const kTrayItemQuitKey = "quit";
|
||||
|
||||
Future<void> initTray({List<MenuItem>? extra_item}) async {
|
||||
List<MenuItem> items = [
|
||||
MenuItem(key: "show", label: translate("show rustdesk")),
|
||||
MenuItem(key: kTrayItemShowKey, label: translate("Show RustDesk")),
|
||||
MenuItem.separator(),
|
||||
MenuItem(key: "quit", label: translate("quit rustdesk")),
|
||||
MenuItem(key: kTrayItemQuitKey, label: translate("Quit")),
|
||||
];
|
||||
if (extra_item != null) {
|
||||
items.insertAll(0, extra_item);
|
||||
}
|
||||
await Future.wait([
|
||||
trayManager
|
||||
.setIcon(Platform.isWindows ? "assets/logo.ico" : "assets/logo.png"),
|
||||
trayManager.setContextMenu(Menu(items: items)),
|
||||
trayManager.setToolTip("rustdesk"),
|
||||
trayManager.setTitle("rustdesk")
|
||||
]);
|
||||
if (Platform.isMacOS || Platform.isWindows) {
|
||||
await trayManager.setToolTip("rustdesk");
|
||||
}
|
||||
if (Platform.isMacOS || Platform.isLinux) {
|
||||
await trayManager.setTitle("rustdesk");
|
||||
}
|
||||
await trayManager
|
||||
.setIcon(Platform.isWindows ? "assets/logo.ico" : "assets/logo.png");
|
||||
await trayManager.setContextMenu(Menu(items: items));
|
||||
}
|
||||
|
||||
Future<void> destoryTray() async {
|
||||
return trayManager.destroy();
|
||||
}
|
||||
|
@ -385,5 +385,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland 需要更高版本的 linux 发行版。 请尝试 X11 桌面或更改您的操作系统。"),
|
||||
("JumpLink", "查看"),
|
||||
("Please Select the screen to be shared(Operate on the peer side).", "请选择要分享的画面(对端操作)。"),
|
||||
("Show RustDesk", "显示rustdesk"),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user