Skip to content

Commit 4e88158

Browse files
Merge pull request #62 from parkerhutchinson/feature/add-minimize
Add missing minimize window events
2 parents 515607a + 3bf75b8 commit 4e88158

File tree

10 files changed

+54
-2
lines changed

10 files changed

+54
-2
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 1.8.0
2+
- Add `miniaturizeWindow` method (thanks [@parkerhutchinson](https://github.com/parkerhutchinson)).
3+
14
## 1.7.1
25
- Fix nil being found when unwrapping an Optional value when `reset` is called before `start` in `MainFlutterWindowManipulator.swift`.
36

example/lib/main_area/ns_window_delegate_demo/event_delegate.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ class EventDelegate extends NSWindowDelegate {
6161
super.windowDidEndLiveResize();
6262
}
6363

64+
@override
65+
void windowShouldMiniaturize() {
66+
final event = NSWindowDelegateEvent(name: 'windowShouldMiniaturize');
67+
eventHandler.addEvent(event);
68+
69+
super.windowShouldMiniaturize();
70+
}
71+
6472
@override
6573
void windowWillMiniaturize() {
6674
final event = NSWindowDelegateEvent(name: 'windowWillMiniaturize');

example/lib/main_area/window_manipulator_demo/command_list_provider/command_list_provider.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ class CommandListProvider {
106106
name: 'showZoomButton()',
107107
function: () => WindowManipulator.showZoomButton(),
108108
),
109+
Command(
110+
name: 'miniaturizeWindow()',
111+
description: 'Removes the window from the screen list and displays the '
112+
'minimized window in the Dock.',
113+
function: () => WindowManipulator.miniaturizeWindow(),
114+
),
109115
Command(
110116
name: 'hideMiniaturizeButton()',
111117
function: () => WindowManipulator.hideMiniaturizeButton(),

lib/macos/ns_window_delegate.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ abstract class NSWindowDelegate {
5151

5252
// === Minimizing Windows ===
5353

54+
/// Tells the delegate that the window should minimize
55+
void windowShouldMiniaturize() {}
56+
5457
/// Tells the delegate that the window is about to be minimized.
5558
void windowWillMiniaturize() {}
5659

lib/ns_window_delegate_handler/ns_window_delegate_handler.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ class NSWindowDelegateHandler {
5050
}
5151
return null;
5252

53+
case "windowShouldMiniaturize":
54+
for (final delegate in delegates.values) {
55+
delegate.windowShouldMiniaturize();
56+
}
57+
return null;
58+
5359
case "windowWillMiniaturize":
5460
for (final delegate in delegates.values) {
5561
delegate.windowWillMiniaturize();

lib/window_manipulator.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,12 @@ class WindowManipulator {
205205
await _windowManipulatorMethodChannel.invokeMethod('showZoomButton');
206206
}
207207

208+
/// Minimizes the current window into the task bar.
209+
static Future<void> miniaturizeWindow() async {
210+
await _completer.future;
211+
await _windowManipulatorMethodChannel.invokeMethod('miniaturizeWindow');
212+
}
213+
208214
/// Hides the window's miniaturize button.
209215
static Future<void> hideMiniaturizeButton() async {
210216
await _completer.future;

macos/Classes/FlutterWindowDelegate.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class FlutterWindowDelegate: NSObject, NSWindowDelegate {
1212
private var methodChannel: FlutterMethodChannel?
1313
private var fullScreenPresentationOptions: NSApplication.PresentationOptions?
1414
public var windowShouldCloseReturnValue: Bool = true
15+
public var windowShouldMiniaturizeReturnValue: Bool = true
1516

1617
public static func create(window: NSWindow, methodChannel: FlutterMethodChannel) -> FlutterWindowDelegate {
1718
let newDelegate = FlutterWindowDelegate()
@@ -65,6 +66,12 @@ class FlutterWindowDelegate: NSObject, NSWindowDelegate {
6566

6667
// Minimizing Windows
6768

69+
func windowShouldMiniaturize(_ sender: NSWindow) -> Bool {
70+
methodChannel!.invokeMethod("windowShouldMiniaturize", arguments: nil)
71+
72+
return windowShouldMiniaturizeReturnValue
73+
}
74+
6875
func windowWillMiniaturize(_ notification: Notification) {
6976
methodChannel!.invokeMethod("windowWillMiniaturize", arguments: nil)
7077
}

macos/Classes/MacOSWindowUtilsPlugin.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,11 @@ public class MacOSWindowUtilsPlugin: NSObject, FlutterPlugin {
161161
result(true)
162162
break
163163

164+
case "miniaturizeWindow":
165+
MainFlutterWindowManipulator.miniaturizeWindow()
166+
result(true)
167+
break
168+
164169
case "hideMiniaturizeButton":
165170
MainFlutterWindowManipulator.hideMiniaturizeButton()
166171
result(true)

macos/Classes/MainFlutterWindowManipulator.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,15 @@ public class MainFlutterWindowManipulator {
182182

183183
self.mainFlutterWindow!.standardWindowButton(.zoomButton)!.isHidden = false
184184
}
185-
185+
186+
public static func miniaturizeWindow() {
187+
if (self.mainFlutterWindow == nil) {
188+
start(mainFlutterWindow: nil)
189+
}
190+
191+
mainFlutterWindow?.miniaturize(nil)
192+
}
193+
186194
public static func hideMiniaturizeButton() {
187195
if (self.mainFlutterWindow == nil) {
188196
start(mainFlutterWindow: nil)

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: macos_window_utils
22
description:
33
macos_window_utils is a Flutter package that provides a set of methods for
44
modifying the NSWindow of a Flutter application on macOS.
5-
version: 1.7.1
5+
version: 1.8.0
66
repository: https://github.com/Adrian-Samoticha/macos_window_utils.dart
77

88
environment:

0 commit comments

Comments
 (0)