Skip to content

Commit c996c9c

Browse files
authored
fix: maximized window optimization (AppFlowy-IO#5622)
1 parent f59b8a2 commit c996c9c

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

frontend/appflowy_flutter/lib/core/config/kv_keys.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ class KVKeys {
1818
/// {'dx': 10.0, 'dy': 10.0}
1919
static const String windowPosition = 'windowPosition';
2020

21+
/// The key for saving the window status
22+
///
23+
/// The value is a json string with the following format:
24+
/// { 'windowMaximized': true }
25+
///
26+
static const String windowMaximized = 'windowMaximized';
27+
2128
static const String kDocumentAppearanceFontSize =
2229
'kDocumentAppearanceFontSize';
2330
static const String kDocumentAppearanceFontFamily =

frontend/appflowy_flutter/lib/startup/tasks/app_window_size_manager.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,19 @@ class WindowSizeManager {
8383
'${scaleFactor.clamp(minScaleFactor, maxScaleFactor)}',
8484
);
8585
}
86+
87+
/// Set the window maximized status
88+
Future<void> setWindowMaximized(bool isMaximized) async {
89+
await getIt<KeyValueStorage>()
90+
.set(KVKeys.windowMaximized, isMaximized.toString());
91+
}
92+
93+
/// Get the window maximized status
94+
Future<bool> getWindowMaximized() async {
95+
return await getIt<KeyValueStorage>().getWithFormat<bool>(
96+
KVKeys.windowMaximized,
97+
(v) => bool.tryParse(v) ?? false,
98+
) ??
99+
false;
100+
}
86101
}

frontend/appflowy_flutter/lib/startup/tasks/windows.dart

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,9 @@ import 'package:scaled_app/scaled_app.dart';
1313
import 'package:window_manager/window_manager.dart';
1414

1515
class InitAppWindowTask extends LaunchTask with WindowListener {
16-
InitAppWindowTask({
17-
this.title = 'AppFlowy',
18-
});
16+
InitAppWindowTask({this.title = 'AppFlowy'});
1917

2018
final String title;
21-
2219
final windowSizeManager = WindowSizeManager();
2320

2421
@override
@@ -48,7 +45,7 @@ class InitAppWindowTask extends LaunchTask with WindowListener {
4845
final position = await windowSizeManager.getPosition();
4946

5047
if (PlatformExtension.isWindows) {
51-
doWhenWindowReady(() {
48+
doWhenWindowReady(() async {
5249
appWindow.minSize = windowOptions.minimumSize;
5350
appWindow.maxSize = windowOptions.maximumSize;
5451
appWindow.size = windowSize;
@@ -58,6 +55,13 @@ class InitAppWindowTask extends LaunchTask with WindowListener {
5855
}
5956

6057
appWindow.show();
58+
59+
/// on Windows we maximize the window if it was previously closed
60+
/// from a maximized state.
61+
final isMaximized = await windowSizeManager.getWindowMaximized();
62+
if (isMaximized) {
63+
appWindow.maximize();
64+
}
6165
});
6266
} else {
6367
await windowManager.waitUntilReadyToShow(windowOptions, () async {
@@ -78,16 +82,20 @@ class InitAppWindowTask extends LaunchTask with WindowListener {
7882
}
7983

8084
@override
81-
Future<void> onWindowResize() async {
82-
super.onWindowResize();
85+
Future<void> onWindowMaximize() async {
86+
super.onWindowMaximize();
87+
await windowSizeManager.setWindowMaximized(true);
88+
}
8389

84-
final currentWindowSize = await windowManager.getSize();
85-
return windowSizeManager.setSize(currentWindowSize);
90+
@override
91+
Future<void> onWindowUnmaximize() async {
92+
super.onWindowUnmaximize();
93+
await windowSizeManager.setWindowMaximized(false);
8694
}
8795

8896
@override
89-
void onWindowMaximize() async {
90-
super.onWindowMaximize();
97+
Future<void> onWindowResize() async {
98+
super.onWindowResize();
9199

92100
final currentWindowSize = await windowManager.getSize();
93101
return windowSizeManager.setSize(currentWindowSize);

0 commit comments

Comments
 (0)