mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-12-12 11:06:57 +00:00
Merge pull request #1740 from Heap-Hop/master
update file transfer and chat page
This commit is contained in:
@@ -191,6 +191,8 @@ class DesktopTab extends StatelessWidget {
|
||||
|
||||
final DesktopTabController controller;
|
||||
Rx<DesktopTabState> get state => controller.state;
|
||||
final isMaximized = false.obs;
|
||||
|
||||
late final DesktopTabType tabType;
|
||||
late final bool isMainWindow;
|
||||
|
||||
@@ -299,8 +301,10 @@ class DesktopTab extends StatelessWidget {
|
||||
width: 78,
|
||||
)),
|
||||
GestureDetector(
|
||||
onDoubleTap: () =>
|
||||
showMaximize ? toggleMaximize(isMainWindow) : null,
|
||||
onDoubleTap: showMaximize
|
||||
? () => toggleMaximize(isMainWindow)
|
||||
.then((value) => isMaximized.value = value)
|
||||
: null,
|
||||
onPanStart: (_) => startDragging(isMainWindow),
|
||||
child: Row(children: [
|
||||
Offstage(
|
||||
@@ -333,6 +337,7 @@ class DesktopTab extends StatelessWidget {
|
||||
tabType: tabType,
|
||||
state: state,
|
||||
tail: tail,
|
||||
isMaximized: isMaximized,
|
||||
showMinimize: showMinimize,
|
||||
showMaximize: showMaximize,
|
||||
showClose: showClose,
|
||||
@@ -347,6 +352,7 @@ class WindowActionPanel extends StatefulWidget {
|
||||
final bool isMainWindow;
|
||||
final DesktopTabType tabType;
|
||||
final Rx<DesktopTabState> state;
|
||||
final RxBool isMaximized;
|
||||
|
||||
final bool showMinimize;
|
||||
final bool showMaximize;
|
||||
@@ -359,6 +365,7 @@ class WindowActionPanel extends StatefulWidget {
|
||||
required this.isMainWindow,
|
||||
required this.tabType,
|
||||
required this.state,
|
||||
required this.isMaximized,
|
||||
this.tail,
|
||||
this.showMinimize = true,
|
||||
this.showMaximize = true,
|
||||
@@ -374,30 +381,31 @@ class WindowActionPanel extends StatefulWidget {
|
||||
|
||||
class WindowActionPanelState extends State<WindowActionPanel>
|
||||
with MultiWindowListener, WindowListener {
|
||||
bool isMaximized = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
DesktopMultiWindow.addListener(this);
|
||||
windowManager.addListener(this);
|
||||
|
||||
if (widget.isMainWindow) {
|
||||
windowManager.isMaximized().then((maximized) {
|
||||
if (isMaximized != maximized) {
|
||||
WidgetsBinding.instance.addPostFrameCallback(
|
||||
(_) => setState(() => isMaximized = maximized));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
final wc = WindowController.fromWindowId(windowId!);
|
||||
wc.isMaximized().then((maximized) {
|
||||
if (isMaximized != maximized) {
|
||||
WidgetsBinding.instance.addPostFrameCallback(
|
||||
(_) => setState(() => isMaximized = maximized));
|
||||
}
|
||||
});
|
||||
}
|
||||
Future.delayed(Duration(milliseconds: 500), () {
|
||||
if (widget.isMainWindow) {
|
||||
windowManager.isMaximized().then((maximized) {
|
||||
if (widget.isMaximized.value != maximized) {
|
||||
WidgetsBinding.instance.addPostFrameCallback(
|
||||
(_) => setState(() => widget.isMaximized.value = maximized));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
final wc = WindowController.fromWindowId(windowId!);
|
||||
wc.isMaximized().then((maximized) {
|
||||
debugPrint("isMaximized $maximized");
|
||||
if (widget.isMaximized.value != maximized) {
|
||||
WidgetsBinding.instance.addPostFrameCallback(
|
||||
(_) => setState(() => widget.isMaximized.value = maximized));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -410,8 +418,8 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
||||
@override
|
||||
void onWindowMaximize() {
|
||||
// catch maximize from system
|
||||
if (!isMaximized) {
|
||||
setState(() => isMaximized = true);
|
||||
if (!widget.isMaximized.value) {
|
||||
widget.isMaximized.value = true;
|
||||
}
|
||||
super.onWindowMaximize();
|
||||
}
|
||||
@@ -419,8 +427,8 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
||||
@override
|
||||
void onWindowUnmaximize() {
|
||||
// catch unmaximize from system
|
||||
if (isMaximized) {
|
||||
setState(() => isMaximized = false);
|
||||
if (widget.isMaximized.value) {
|
||||
widget.isMaximized.value = false;
|
||||
}
|
||||
super.onWindowUnmaximize();
|
||||
}
|
||||
@@ -452,12 +460,14 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
||||
)),
|
||||
Offstage(
|
||||
offstage: !widget.showMaximize,
|
||||
child: ActionIcon(
|
||||
message: isMaximized ? "Restore" : "Maximize",
|
||||
icon: isMaximized ? IconFont.restore : IconFont.max,
|
||||
onTap: _toggleMaximize,
|
||||
isClose: false,
|
||||
)),
|
||||
child: Obx(() => ActionIcon(
|
||||
message: widget.isMaximized.value ? "Restore" : "Maximize",
|
||||
icon: widget.isMaximized.value
|
||||
? IconFont.restore
|
||||
: IconFont.max,
|
||||
onTap: _toggleMaximize,
|
||||
isClose: false,
|
||||
))),
|
||||
Offstage(
|
||||
offstage: !widget.showClose,
|
||||
child: ActionIcon(
|
||||
@@ -484,9 +494,9 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
||||
|
||||
void _toggleMaximize() {
|
||||
toggleMaximize(widget.isMainWindow).then((maximize) {
|
||||
if (isMaximized != maximize) {
|
||||
// setState for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize
|
||||
setState(() => isMaximized = !isMaximized);
|
||||
if (widget.isMaximized.value != maximize) {
|
||||
// update state for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize
|
||||
widget.isMaximized.value = maximize;
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -801,13 +811,15 @@ class ActionIcon extends StatelessWidget {
|
||||
final IconData icon;
|
||||
final Function() onTap;
|
||||
final bool isClose;
|
||||
const ActionIcon({
|
||||
Key? key,
|
||||
required this.message,
|
||||
required this.icon,
|
||||
required this.onTap,
|
||||
required this.isClose,
|
||||
}) : super(key: key);
|
||||
final double? size;
|
||||
const ActionIcon(
|
||||
{Key? key,
|
||||
required this.message,
|
||||
required this.icon,
|
||||
required this.onTap,
|
||||
required this.isClose,
|
||||
this.size})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -822,8 +834,8 @@ class ActionIcon extends StatelessWidget {
|
||||
onHover: (value) => hover.value = value,
|
||||
onTap: onTap,
|
||||
child: SizedBox(
|
||||
height: _kTabBarHeight - 1,
|
||||
width: _kTabBarHeight - 1,
|
||||
height: size ?? (_kTabBarHeight - 1),
|
||||
width: size ?? (_kTabBarHeight - 1),
|
||||
child: Icon(
|
||||
icon,
|
||||
color: hover.value && isClose
|
||||
|
||||
Reference in New Issue
Block a user