Merge pull request #5349 from dignow/fix/save_frame_maximized

fix windowOnTop, maxmized state
This commit is contained in:
RustDesk 2023-08-11 17:28:32 +08:00 committed by GitHub
commit 3c3d1a84ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 36 additions and 23 deletions

View File

@ -16,6 +16,7 @@ import 'package:flutter_hbb/desktop/widgets/refresh_wrapper.dart';
import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart';
import 'package:flutter_hbb/main.dart'; import 'package:flutter_hbb/main.dart';
import 'package:flutter_hbb/models/peer_model.dart'; import 'package:flutter_hbb/models/peer_model.dart';
import 'package:flutter_hbb/models/state_model.dart';
import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart';
import 'package:flutter_hbb/utils/platform_channel.dart'; import 'package:flutter_hbb/utils/platform_channel.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
@ -558,13 +559,15 @@ void windowOnTop(int? id) async {
if (!isDesktop) { if (!isDesktop) {
return; return;
} }
print("Bring window '$id' on top");
if (id == null) { if (id == null) {
print("Bring window on top");
// main window // main window
windowManager.restore(); if (stateGlobal.minimized) {
windowManager.show(); await windowManager.restore();
windowManager.focus(); }
rustDeskWinManager.registerActiveWindow(kWindowMainId); await windowManager.show();
await windowManager.focus();
await rustDeskWinManager.registerActiveWindow(kWindowMainId);
} else { } else {
WindowController.fromWindowId(id) WindowController.fromWindowId(id)
..focus() ..focus()

View File

@ -77,7 +77,7 @@ const double kDesktopFileTransferHeaderHeight = 25.0;
EdgeInsets get kDragToResizeAreaPadding => EdgeInsets get kDragToResizeAreaPadding =>
!kUseCompatibleUiMode && Platform.isLinux !kUseCompatibleUiMode && Platform.isLinux
? stateGlobal.fullscreen || stateGlobal.maximize ? stateGlobal.fullscreen || stateGlobal.maximized
? EdgeInsets.zero ? EdgeInsets.zero
: EdgeInsets.all(5.0) : EdgeInsets.all(5.0)
: EdgeInsets.zero; : EdgeInsets.zero;

View File

@ -1610,12 +1610,10 @@ class _IconMenuButtonState extends State<_IconMenuButton> {
).marginSymmetric( ).marginSymmetric(
horizontal: widget.hMargin ?? _ToolbarTheme.buttonHMargin, horizontal: widget.hMargin ?? _ToolbarTheme.buttonHMargin,
vertical: widget.vMargin ?? _ToolbarTheme.buttonVMargin); vertical: widget.vMargin ?? _ToolbarTheme.buttonVMargin);
if (widget.tooltip != null) { button = Tooltip(
button = Tooltip( message: widget.tooltip,
message: widget.tooltip!, child: button,
child: button, );
);
}
if (widget.topLevel) { if (widget.topLevel) {
return MenuBar(children: [button]); return MenuBar(children: [button]);
} else { } else {

View File

@ -521,19 +521,27 @@ class WindowActionPanelState extends State<WindowActionPanel>
super.dispose(); super.dispose();
} }
void _setMaximize(bool maximize) { void _setMaximized(bool maximize) {
stateGlobal.setMaximize(maximize); stateGlobal.setMaximized(maximize);
_saveFrameDebounce.call(_saveFrame); _saveFrameDebounce.call(_saveFrame);
setState(() {}); setState(() {});
} }
@override
void onWindowMinimize() {
stateGlobal.setMinimized(true);
stateGlobal.setMaximized(false);
super.onWindowMinimize();
}
@override @override
void onWindowMaximize() { void onWindowMaximize() {
// catch maximize from system // catch maximize from system
if (!widget.isMaximized.value) { if (!widget.isMaximized.value) {
widget.isMaximized.value = true; widget.isMaximized.value = true;
} }
_setMaximize(true); stateGlobal.setMinimized(false);
_setMaximized(true);
super.onWindowMaximize(); super.onWindowMaximize();
} }
@ -543,7 +551,8 @@ class WindowActionPanelState extends State<WindowActionPanel>
if (widget.isMaximized.value) { if (widget.isMaximized.value) {
widget.isMaximized.value = false; widget.isMaximized.value = false;
} }
_setMaximize(false); stateGlobal.setMinimized(false);
_setMaximized(false);
super.onWindowUnmaximize(); super.onWindowUnmaximize();
} }

View File

@ -11,7 +11,8 @@ enum SvcStatus { notReady, connecting, ready }
class StateGlobal { class StateGlobal {
int _windowId = -1; int _windowId = -1;
bool _fullscreen = false; bool _fullscreen = false;
bool _maximize = false; bool _maximized = false;
bool _minimized = false;
bool grabKeyboard = false; bool grabKeyboard = false;
final RxBool _showTabBar = true.obs; final RxBool _showTabBar = true.obs;
final RxDouble _resizeEdgeSize = RxDouble(kWindowEdgeSize); final RxDouble _resizeEdgeSize = RxDouble(kWindowEdgeSize);
@ -25,7 +26,8 @@ class StateGlobal {
int get windowId => _windowId; int get windowId => _windowId;
bool get fullscreen => _fullscreen; bool get fullscreen => _fullscreen;
bool get maximize => _maximize; bool get maximized => _maximized;
bool get minimized => _minimized;
double get tabBarHeight => fullscreen ? 0 : kDesktopRemoteTabBarHeight; double get tabBarHeight => fullscreen ? 0 : kDesktopRemoteTabBarHeight;
RxBool get showTabBar => _showTabBar; RxBool get showTabBar => _showTabBar;
RxDouble get resizeEdgeSize => _resizeEdgeSize; RxDouble get resizeEdgeSize => _resizeEdgeSize;
@ -48,12 +50,13 @@ class StateGlobal {
} }
setWindowId(int id) => _windowId = id; setWindowId(int id) => _windowId = id;
setMaximize(bool v) { setMaximized(bool v) {
if (_maximize != v && !_fullscreen) { if (_maximized != v && !_fullscreen) {
_maximize = v; _maximized = v;
_resizeEdgeSize.value = _maximize ? kMaximizeEdgeSize : kWindowEdgeSize; _resizeEdgeSize.value = _maximized ? kMaximizeEdgeSize : kWindowEdgeSize;
} }
} }
setMinimized(bool v) => _minimized = v;
setFullscreen(bool v) { setFullscreen(bool v) {
if (_fullscreen != v) { if (_fullscreen != v) {
@ -61,7 +64,7 @@ class StateGlobal {
_showTabBar.value = !_fullscreen; _showTabBar.value = !_fullscreen;
_resizeEdgeSize.value = fullscreen _resizeEdgeSize.value = fullscreen
? kFullScreenEdgeSize ? kFullScreenEdgeSize
: _maximize : _maximized
? kMaximizeEdgeSize ? kMaximizeEdgeSize
: kWindowEdgeSize; : kWindowEdgeSize;
print( print(