Skip to content

Commit b6b1dfd

Browse files
committed
fix: Send Fullscreen Event on Windows
1 parent 625d44d commit b6b1dfd

File tree

2 files changed

+152
-86
lines changed

2 files changed

+152
-86
lines changed
Lines changed: 151 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'dart:async';
12
import 'dart:io';
23
import 'dart:ui';
34

@@ -19,110 +20,175 @@ Future<void> main() async {
1920
},
2021
);
2122

22-
testWidgets('getBounds', (tester) async {
23-
expect(
24-
await windowManager.getBounds(),
25-
isA<Rect>().having((r) => r.size, 'size', const Size(640, 480)),
23+
group('Getters', () {
24+
testWidgets('getBounds', (tester) async {
25+
expect(
26+
await windowManager.getBounds(),
27+
isA<Rect>().having((r) => r.size, 'size', const Size(640, 480)),
28+
);
29+
});
30+
31+
testWidgets(
32+
'isAlwaysOnBottom',
33+
(tester) async {
34+
expect(await windowManager.isAlwaysOnBottom(), isFalse);
35+
},
36+
skip: Platform.isMacOS || Platform.isWindows,
2637
);
27-
});
28-
29-
testWidgets(
30-
'isAlwaysOnBottom',
31-
(tester) async {
32-
expect(await windowManager.isAlwaysOnBottom(), isFalse);
33-
},
34-
skip: Platform.isMacOS || Platform.isWindows,
35-
);
3638

37-
testWidgets('isAlwaysOnTop', (tester) async {
38-
expect(await windowManager.isAlwaysOnTop(), isFalse);
39-
});
39+
testWidgets('isAlwaysOnTop', (tester) async {
40+
expect(await windowManager.isAlwaysOnTop(), isFalse);
41+
});
4042

41-
testWidgets('isClosable', (tester) async {
42-
expect(await windowManager.isClosable(), isTrue);
43-
});
43+
testWidgets('isClosable', (tester) async {
44+
expect(await windowManager.isClosable(), isTrue);
45+
});
4446

45-
testWidgets('isFocused', (tester) async {
46-
expect(await windowManager.isFocused(), isTrue);
47-
});
47+
testWidgets('isFocused', (tester) async {
48+
expect(await windowManager.isFocused(), isTrue);
49+
});
4850

49-
testWidgets('isFullScreen', (tester) async {
50-
expect(await windowManager.isFullScreen(), isFalse);
51-
});
51+
testWidgets('isFullScreen', (tester) async {
52+
expect(await windowManager.isFullScreen(), isFalse);
53+
});
5254

53-
testWidgets(
54-
'hasShadow',
55-
(tester) async {
56-
expect(await windowManager.hasShadow(), isTrue);
57-
},
58-
skip: Platform.isLinux,
59-
);
55+
testWidgets(
56+
'hasShadow',
57+
(tester) async {
58+
expect(await windowManager.hasShadow(), isTrue);
59+
},
60+
skip: Platform.isLinux,
61+
);
6062

61-
testWidgets('isMaximizable', (tester) async {
62-
expect(await windowManager.isMaximizable(), isTrue);
63-
});
63+
testWidgets('isMaximizable', (tester) async {
64+
expect(await windowManager.isMaximizable(), isTrue);
65+
});
6466

65-
testWidgets('isMaximized', (tester) async {
66-
expect(await windowManager.isMaximized(), isFalse);
67-
});
67+
testWidgets('isMaximized', (tester) async {
68+
expect(await windowManager.isMaximized(), isFalse);
69+
});
6870

69-
testWidgets(
70-
'isMinimizable',
71-
(tester) async {
72-
expect(await windowManager.isMinimizable(), isTrue);
73-
},
74-
skip: Platform.isMacOS,
75-
);
71+
testWidgets(
72+
'isMinimizable',
73+
(tester) async {
74+
expect(await windowManager.isMinimizable(), isTrue);
75+
},
76+
skip: Platform.isMacOS,
77+
);
7678

77-
testWidgets('isMinimized', (tester) async {
78-
expect(await windowManager.isMinimized(), isFalse);
79-
});
79+
testWidgets('isMinimized', (tester) async {
80+
expect(await windowManager.isMinimized(), isFalse);
81+
});
8082

81-
testWidgets(
82-
'isMovable',
83-
(tester) async {
84-
expect(await windowManager.isMovable(), isTrue);
85-
},
86-
skip: Platform.isLinux || Platform.isWindows,
87-
);
83+
testWidgets(
84+
'isMovable',
85+
(tester) async {
86+
expect(await windowManager.isMovable(), isTrue);
87+
},
88+
skip: Platform.isLinux || Platform.isWindows,
89+
);
8890

89-
testWidgets('getOpacity', (tester) async {
90-
expect(await windowManager.getOpacity(), 1.0);
91-
});
91+
testWidgets('getOpacity', (tester) async {
92+
expect(await windowManager.getOpacity(), 1.0);
93+
});
9294

93-
testWidgets('getPosition', (tester) async {
94-
expect(await windowManager.getPosition(), isA<Offset>());
95-
});
95+
testWidgets('getPosition', (tester) async {
96+
expect(await windowManager.getPosition(), isA<Offset>());
97+
});
9698

97-
testWidgets('isPreventClose', (tester) async {
98-
expect(await windowManager.isPreventClose(), isFalse);
99-
});
99+
testWidgets('isPreventClose', (tester) async {
100+
expect(await windowManager.isPreventClose(), isFalse);
101+
});
100102

101-
testWidgets('isResizable', (tester) async {
102-
expect(await windowManager.isResizable(), isTrue);
103-
});
103+
testWidgets('isResizable', (tester) async {
104+
expect(await windowManager.isResizable(), isTrue);
105+
});
104106

105-
testWidgets('getSize', (tester) async {
106-
expect(await windowManager.getSize(), const Size(640, 480));
107-
});
107+
testWidgets('getSize', (tester) async {
108+
expect(await windowManager.getSize(), const Size(640, 480));
109+
});
108110

109-
testWidgets(
110-
'isSkipTaskbar',
111-
(tester) async {
112-
expect(await windowManager.isSkipTaskbar(), isFalse);
113-
},
114-
skip: Platform.isWindows,
115-
);
111+
testWidgets(
112+
'isSkipTaskbar',
113+
(tester) async {
114+
expect(await windowManager.isSkipTaskbar(), isFalse);
115+
},
116+
skip: Platform.isWindows,
117+
);
116118

117-
testWidgets('getTitle', (tester) async {
118-
expect(await windowManager.getTitle(), 'window_manager_test');
119+
testWidgets('getTitle', (tester) async {
120+
expect(await windowManager.getTitle(), 'window_manager_test');
121+
});
122+
123+
testWidgets('getTitleBarHeight', (tester) async {
124+
expect(await windowManager.getTitleBarHeight(), isNonNegative);
125+
});
126+
127+
testWidgets('isVisible', (tester) async {
128+
expect(await windowManager.isVisible(), isTrue);
129+
});
130+
});
131+
132+
group('Setters and Listeners', () {
133+
late StreamController<String> streamController;
134+
late WindowListener windowListener;
135+
136+
setUp(() async {
137+
streamController = StreamController<String>();
138+
windowListener = WindowListenerImpl(streamController: streamController);
139+
windowManager.addListener(windowListener);
140+
});
141+
142+
tearDown(() async {
143+
windowManager.removeListener(windowListener);
144+
await streamController.close();
145+
});
146+
147+
testWidgets('minimize & restore', (tester) async {
148+
await windowManager.minimize();
149+
await windowManager.restore();
150+
expect(
151+
streamController.stream,
152+
emitsInOrder([
153+
emitsThrough('minimize'),
154+
emitsThrough('restore'),
155+
]),
156+
);
157+
});
158+
159+
testWidgets('maximize & unmaximize', (tester) async {
160+
await windowManager.maximize();
161+
await windowManager.unmaximize();
162+
expect(
163+
streamController.stream,
164+
emitsInOrder([
165+
emitsThrough('maximize'),
166+
emitsThrough('unmaximize'),
167+
]),
168+
);
169+
});
170+
171+
testWidgets('setFullscreen true & false', (tester) async {
172+
await windowManager.setFullScreen(true);
173+
await windowManager.setFullScreen(false);
174+
expect(
175+
streamController.stream,
176+
emitsInOrder([
177+
emitsThrough('enter-full-screen'),
178+
emitsThrough('leave-full-screen'),
179+
]),
180+
);
181+
});
119182
});
183+
}
120184

121-
testWidgets('getTitleBarHeight', (tester) async {
122-
expect(await windowManager.getTitleBarHeight(), isNonNegative);
123-
});
185+
class WindowListenerImpl with WindowListener {
186+
WindowListenerImpl({required this.streamController});
124187

125-
testWidgets('isVisible', (tester) async {
126-
expect(await windowManager.isVisible(), isTrue);
127-
});
188+
final StreamController<String> streamController;
189+
190+
@override
191+
void onWindowEvent(String eventName) {
192+
streamController.add(eventName);
193+
}
128194
}

packages/window_manager/windows/window_manager_plugin.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ std::optional<LRESULT> WindowManagerPlugin::HandleWindowProc(HWND hWnd,
289289
rect->bottom = bottom;
290290
}
291291
} else if (message == WM_SIZE) {
292-
if (window_manager->IsFullScreen() && wParam == SIZE_MAXIMIZED &&
292+
if (window_manager->IsFullScreen() &&
293293
window_manager->last_state != STATE_FULLSCREEN_ENTERED) {
294294
_EmitEvent("enter-full-screen");
295295
window_manager->last_state = STATE_FULLSCREEN_ENTERED;

0 commit comments

Comments
 (0)