5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 07:10:40 +08:00

[v3, darwin] Fix leaking WebKit processes on Window close (#2574)

* [v3, darwin] Fix leaking WebKit processes on Window close

* [v3] Remove window from window map if closed
[v3] Implement `HideOnClose` and ensure it isn't removed when closed

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
This commit is contained in:
stffabi 2023-04-12 13:33:00 +02:00 committed by GitHub
parent f335cbd608
commit c8d203d4d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 262 additions and 223 deletions

View File

@ -53,6 +53,16 @@ func main() {
Show() Show()
windowCounter++ windowCounter++
}) })
myMenu.Add("New WebviewWindow (Hide on Close").
SetAccelerator("CmdOrCtrl+H").
OnClick(func(ctx *application.Context) {
app.NewWebviewWindowWithOptions(&application.WebviewWindowOptions{HideOnClose: true}).
SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)).
SetPosition(rand.Intn(1000), rand.Intn(800)).
SetURL("https://wails.io").
Show()
windowCounter++
})
myMenu.Add("New Frameless WebviewWindow"). myMenu.Add("New Frameless WebviewWindow").
SetAccelerator("CmdOrCtrl+F"). SetAccelerator("CmdOrCtrl+F").
OnClick(func(ctx *application.Context) { OnClick(func(ctx *application.Context) {

View File

@ -207,6 +207,12 @@ func (a *App) getWindowForID(id uint) *WebviewWindow {
return a.windows[id] return a.windows[id]
} }
func (a *App) deleteWindowByID(id uint) {
a.windowsLock.Lock()
defer a.windowsLock.Unlock()
delete(a.windows, id)
}
func (a *App) On(eventType events.ApplicationEventType, callback func()) { func (a *App) On(eventType events.ApplicationEventType, callback func()) {
eventID := uint(eventType) eventID := uint(eventType)
a.applicationEventListenersLock.Lock() a.applicationEventListenersLock.Lock()

View File

@ -29,6 +29,7 @@ type WebviewWindowOptions struct {
CSS string CSS string
X int X int
Y int Y int
HideOnClose bool
FullscreenButtonEnabled bool FullscreenButtonEnabled bool
Hidden bool Hidden bool
EnableFraudulentWebsiteWarnings bool EnableFraudulentWebsiteWarnings bool
@ -43,7 +44,6 @@ var WebviewWindowDefaults = &WebviewWindowOptions{
URL: "", URL: "",
} }
type RGBA struct { type RGBA struct {
Red, Green, Blue, Alpha uint8 Red, Green, Blue, Alpha uint8
} }

View File

@ -14,14 +14,14 @@
- (BOOL) resignFirstResponder; - (BOOL) resignFirstResponder;
- (WebviewWindow*) initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation; - (WebviewWindow*) initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation;
@property (assign) WKWebView* webView; // We already retain WKWebView since it's part of the Window.
@end @end
@interface WebviewWindowDelegate : NSObject <NSWindowDelegate, WKScriptMessageHandler, WKNavigationDelegate, WKURLSchemeHandler, NSDraggingDestination> @interface WebviewWindowDelegate : NSObject <NSWindowDelegate, WKScriptMessageHandler, WKNavigationDelegate, WKURLSchemeHandler, NSDraggingDestination>
@property bool hideOnClose; @property bool hideOnClose;
@property (retain) WKWebView* webView;
@property unsigned int windowId; @property unsigned int windowId;
@property (retain) NSWindow* window;
@property (retain) NSEvent* leftMouseEvent; @property (retain) NSEvent* leftMouseEvent;
@property unsigned int invisibleTitleBarHeight; @property unsigned int invisibleTitleBarHeight;
@property NSWindowStyleMask previousStyleMask; // Used to restore the window style mask when using frameless @property NSWindowStyleMask previousStyleMask; // Used to restore the window style mask when using frameless

View File

@ -33,15 +33,33 @@ extern bool hasListeners(unsigned int);
- (BOOL) resignFirstResponder { - (BOOL) resignFirstResponder {
return YES; return YES;
} }
- (void) setDelegate:(id<NSWindowDelegate>) delegate {
[delegate retain];
[super setDelegate: delegate];
}
- (void) dealloc {
// Remove the script handler, otherwise WebviewWindowDelegate won't get deallocated
// See: https://stackoverflow.com/questions/26383031/wkwebview-causes-my-view-controller-to-leak
[self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"external"];
if (self.delegate) {
[self.delegate release];
}
[super dealloc];
}
@end @end
@implementation WebviewWindowDelegate @implementation WebviewWindowDelegate
- (BOOL)windowShouldClose:(NSWindow *)sender { - (BOOL)windowShouldClose:(NSWindow *)sender {
if( self.hideOnClose ) { if( self.hideOnClose ) {
[NSApp hide:nil]; [sender orderOut:nil];
return false; return false;
} }
return true; return true;
} }
- (void) dealloc {
// Makes sure to remove the retained properties so the reference counter of the retains are decreased
self.leftMouseEvent = nil;
[super dealloc];
}
// Handle script messages from the external bridge // Handle script messages from the external bridge
- (void)userContentController:(nonnull WKUserContentController *)userContentController didReceiveScriptMessage:(nonnull WKScriptMessage *)message { - (void)userContentController:(nonnull WKUserContentController *)userContentController didReceiveScriptMessage:(nonnull WKScriptMessage *)message {
NSString *m = message.body; NSString *m = message.body;
@ -215,12 +233,6 @@ extern bool hasListeners(unsigned int);
} }
} }
- (void)windowDidClose:(NSNotification *)notification {
if( hasListeners(EventWindowDidClose) ) {
processWindowEvent(self.windowId, EventWindowDidClose);
}
}
- (void)windowDidDeminiaturize:(NSNotification *)notification { - (void)windowDidDeminiaturize:(NSNotification *)notification {
if( hasListeners(EventWindowDidDeminiaturize) ) { if( hasListeners(EventWindowDidDeminiaturize) ) {
processWindowEvent(self.windowId, EventWindowDidDeminiaturize); processWindowEvent(self.windowId, EventWindowDidDeminiaturize);

View File

@ -18,8 +18,7 @@ package application
extern void registerListener(unsigned int event); extern void registerListener(unsigned int event);
// Create a new Window // Create a new Window
void* windowNew(unsigned int id, int width, int height, bool fraudulentWebsiteWarningEnabled, bool frameless, bool enableDragAndDrop) { void* windowNew(unsigned int id, int width, int height, bool fraudulentWebsiteWarningEnabled, bool frameless, bool enableDragAndDrop, bool hideOnClose) {
NSWindowStyleMask styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable; NSWindowStyleMask styleMask = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable;
if (frameless) { if (frameless) {
styleMask = NSWindowStyleMaskBorderless | NSWindowStyleMaskResizable; styleMask = NSWindowStyleMaskBorderless | NSWindowStyleMaskResizable;
@ -31,13 +30,16 @@ void* windowNew(unsigned int id, int width, int height, bool fraudulentWebsiteWa
// Create delegate // Create delegate
WebviewWindowDelegate* delegate = [[WebviewWindowDelegate alloc] init]; WebviewWindowDelegate* delegate = [[WebviewWindowDelegate alloc] init];
[delegate autorelease];
// Set delegate // Set delegate
[window setDelegate:delegate]; [window setDelegate:delegate];
delegate.windowId = id; delegate.windowId = id;
delegate.window = window;
// Add NSView to window // Add NSView to window
NSView* view = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, width-1, height-1)]; NSView* view = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, width-1, height-1)];
[view autorelease];
[view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; [view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
if( frameless ) { if( frameless ) {
[view setWantsLayer:YES]; [view setWantsLayer:YES];
@ -48,6 +50,8 @@ void* windowNew(unsigned int id, int width, int height, bool fraudulentWebsiteWa
// Embed wkwebview in window // Embed wkwebview in window
NSRect frame = NSMakeRect(0, 0, width, height); NSRect frame = NSMakeRect(0, 0, width, height);
WKWebViewConfiguration* config = [[WKWebViewConfiguration alloc] init]; WKWebViewConfiguration* config = [[WKWebViewConfiguration alloc] init];
[config autorelease];
config.suppressesIncrementalRendering = true; config.suppressesIncrementalRendering = true;
config.applicationNameForUserAgent = @"wails.io"; config.applicationNameForUserAgent = @"wails.io";
[config setURLSchemeHandler:delegate forURLScheme:@"wails"]; [config setURLSchemeHandler:delegate forURLScheme:@"wails"];
@ -57,10 +61,14 @@ void* windowNew(unsigned int id, int width, int height, bool fraudulentWebsiteWa
// Setup user content controller // Setup user content controller
WKUserContentController* userContentController = [WKUserContentController new]; WKUserContentController* userContentController = [WKUserContentController new];
[userContentController autorelease];
[userContentController addScriptMessageHandler:delegate name:@"external"]; [userContentController addScriptMessageHandler:delegate name:@"external"];
config.userContentController = userContentController; config.userContentController = userContentController;
WKWebView* webView = [[WKWebView alloc] initWithFrame:frame configuration:config]; WKWebView* webView = [[WKWebView alloc] initWithFrame:frame configuration:config];
[webView autorelease];
[view addSubview:webView]; [view addSubview:webView];
// support webview events // support webview events
@ -69,16 +77,18 @@ void* windowNew(unsigned int id, int width, int height, bool fraudulentWebsiteWa
// Ensure webview resizes with the window // Ensure webview resizes with the window
[webView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; [webView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
delegate.webView = webView; delegate.hideOnClose = hideOnClose;
delegate.hideOnClose = false;
if( enableDragAndDrop ) { if( enableDragAndDrop ) {
WebviewDrag* dragView = [[WebviewDrag alloc] initWithFrame:NSMakeRect(0, 0, width-1, height-1)]; WebviewDrag* dragView = [[WebviewDrag alloc] initWithFrame:NSMakeRect(0, 0, width-1, height-1)];
[dragView autorelease];
[view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; [view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[view addSubview:dragView]; [view addSubview:dragView];
dragView.windowId = id; dragView.windowId = id;
} }
window.webView = webView;
return window; return window;
} }
@ -201,7 +211,8 @@ void navigationLoadURL(void* nsWindow, char* url) {
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
NSURL* nsURL = [NSURL URLWithString:[NSString stringWithUTF8String:url]]; NSURL* nsURL = [NSURL URLWithString:[NSString stringWithUTF8String:url]];
NSURLRequest* request = [NSURLRequest requestWithURL:nsURL]; NSURLRequest* request = [NSURLRequest requestWithURL:nsURL];
[[(WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate] webView] loadRequest:request]; WebviewWindow* window = (WebviewWindow*)nsWindow;
[window.webView loadRequest:request];
free(url); free(url);
}); });
} }
@ -251,10 +262,10 @@ void windowSetMaxSize(void* nsWindow, int width, int height) {
void windowEnableDevTools(void* nsWindow) { void windowEnableDevTools(void* nsWindow) {
// Enable devtools on main thread // Enable devtools on main thread
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
// Get window delegate // get main window
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate]; WebviewWindow* window = (WebviewWindow*)nsWindow;
// Enable devtools in webview // Enable devtools in webview
[delegate.webView.configuration.preferences setValue:@YES forKey:@"developerExtrasEnabled"]; [window.webView.configuration.preferences setValue:@YES forKey:@"developerExtrasEnabled"];
}); });
} }
@ -262,10 +273,10 @@ void windowEnableDevTools(void* nsWindow) {
void windowZoomReset(void* nsWindow) { void windowZoomReset(void* nsWindow) {
// Reset zoom on main thread // Reset zoom on main thread
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
// Get window delegate // get main window
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate]; WebviewWindow* window = (WebviewWindow*)nsWindow;
// Reset zoom // Reset zoom
[delegate.webView setMagnification:1.0]; [window.webView setMagnification:1.0];
}); });
} }
@ -273,28 +284,29 @@ void windowZoomReset(void* nsWindow) {
void windowZoomSet(void* nsWindow, double zoom) { void windowZoomSet(void* nsWindow, double zoom) {
// Reset zoom on main thread // Reset zoom on main thread
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
// Get window delegate // get main window
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate]; WebviewWindow* window = (WebviewWindow*)nsWindow;
// Reset zoom // Reset zoom
[delegate.webView setMagnification:zoom]; [window.webView setMagnification:zoom];
}); });
} }
// windowZoomGet // windowZoomGet
float windowZoomGet(void* nsWindow) { float windowZoomGet(void* nsWindow) {
// get main window
WebviewWindow* window = (WebviewWindow*)nsWindow;
// Get zoom // Get zoom
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate]; return [window.webView magnification];
return [delegate.webView magnification];
} }
// windowZoomIn // windowZoomIn
void windowZoomIn(void* nsWindow) { void windowZoomIn(void* nsWindow) {
// Zoom in on main thread // Zoom in on main thread
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
// Get window delegate // get main window
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate]; WebviewWindow* window = (WebviewWindow*)nsWindow;
// Zoom in // Zoom in
[delegate.webView setMagnification:delegate.webView.magnification + 0.05]; [window.webView setMagnification:window.webView.magnification + 0.05];
}); });
} }
@ -302,13 +314,13 @@ void windowZoomIn(void* nsWindow) {
void windowZoomOut(void* nsWindow) { void windowZoomOut(void* nsWindow) {
// Zoom out on main thread // Zoom out on main thread
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
// Get window delegate // get main window
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate]; WebviewWindow* window = (WebviewWindow*)nsWindow;
// Zoom out // Zoom out
if( delegate.webView.magnification > 1.05 ) { if( window.webView.magnification > 1.05 ) {
[delegate.webView setMagnification:delegate.webView.magnification - 0.05]; [window.webView setMagnification:window.webView.magnification - 0.05];
} else { } else {
[delegate.webView setMagnification:1.0]; [window.webView setMagnification:1.0];
} }
}); });
} }
@ -325,8 +337,9 @@ void windowSetPosition(void* nsWindow, int x, int y) {
void windowExecJS(void* nsWindow, const char* js) { void windowExecJS(void* nsWindow, const char* js) {
// Execute JS on main thread // Execute JS on main thread
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate]; // get main window
[delegate.webView evaluateJavaScript:[NSString stringWithUTF8String:js] completionHandler:nil]; WebviewWindow* window = (WebviewWindow*)nsWindow;
[window.webView evaluateJavaScript:[NSString stringWithUTF8String:js] completionHandler:nil];
free((void*)js); free((void*)js);
}); });
} }
@ -339,9 +352,6 @@ void windowSetTranslucent(void* nsWindow) {
// Get window // Get window
WebviewWindow* window = (WebviewWindow*)nsWindow; WebviewWindow* window = (WebviewWindow*)nsWindow;
// Get window delegate
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate];
id contentView = [window contentView]; id contentView = [window contentView];
NSVisualEffectView *effectView = [NSVisualEffectView alloc]; NSVisualEffectView *effectView = [NSVisualEffectView alloc];
NSRect bounds = [contentView bounds]; NSRect bounds = [contentView bounds];
@ -357,10 +367,10 @@ void windowSetTranslucent(void* nsWindow) {
void webviewSetTransparent(void* nsWindow) { void webviewSetTransparent(void* nsWindow) {
// Set webview transparent on main thread // Set webview transparent on main thread
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
// Get window delegate // get main window
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate]; WebviewWindow* window = (WebviewWindow*)nsWindow;
// Set webview background transparent // Set webview background transparent
[delegate.webView setValue:@NO forKey:@"drawsBackground"]; [window.webView setValue:@NO forKey:@"drawsBackground"];
}); });
} }
@ -368,10 +378,10 @@ void webviewSetTransparent(void* nsWindow) {
void webviewSetBackgroundColour(void* nsWindow, int r, int g, int b, int alpha) { void webviewSetBackgroundColour(void* nsWindow, int r, int g, int b, int alpha) {
// Set webview background color on main thread // Set webview background color on main thread
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
// Get window delegate // get main window
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(WebviewWindow*)nsWindow delegate]; WebviewWindow* window = (WebviewWindow*)nsWindow;
// Set webview background color // Set webview background color
[delegate.webView setValue:[NSColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:alpha/255.0] forKey:@"backgroundColor"]; [window.webView setValue:[NSColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:alpha/255.0] forKey:@"backgroundColor"];
}); });
} }
@ -665,7 +675,7 @@ static void windowRenderHTML(void *window, const char *html) {
// get window delegate // get window delegate
WebviewWindowDelegate* windowDelegate = (WebviewWindowDelegate*)[nsWindow delegate]; WebviewWindowDelegate* windowDelegate = (WebviewWindowDelegate*)[nsWindow delegate];
// render html // render html
[(WKWebView*)windowDelegate.webView loadHTMLString:[NSString stringWithUTF8String:html] baseURL:nil]; [nsWindow.webView loadHTMLString:[NSString stringWithUTF8String:html] baseURL:nil];
}); });
} }
@ -673,10 +683,8 @@ static void windowInjectCSS(void *window, const char *css) {
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
// get main window // get main window
WebviewWindow* nsWindow = (WebviewWindow*)window; WebviewWindow* nsWindow = (WebviewWindow*)window;
// get window delegate
WebviewWindowDelegate* windowDelegate = (WebviewWindowDelegate*)[nsWindow delegate];
// inject css // inject css
[(WKWebView*)windowDelegate.webView evaluateJavaScript:[NSString stringWithFormat:@"(function() { var style = document.createElement('style'); style.appendChild(document.createTextNode('%@')); document.head.appendChild(style); })();", [NSString stringWithUTF8String:css]] completionHandler:nil]; [nsWindow.webView evaluateJavaScript:[NSString stringWithFormat:@"(function() { var style = document.createElement('style'); style.appendChild(document.createTextNode('%@')); document.head.appendChild(style); })();", [NSString stringWithUTF8String:css]] completionHandler:nil];
free((void*)css); free((void*)css);
}); });
} }
@ -763,9 +771,7 @@ static void windowShowMenu(void *window, void *menu, int x, int y) {
// get menu // get menu
NSMenu* nsMenu = (NSMenu*)menu; NSMenu* nsMenu = (NSMenu*)menu;
// get webview // get webview
WebviewWindowDelegate* windowDelegate = (WebviewWindowDelegate*)[nsWindow delegate]; WKWebView* webView = nsWindow.webView;
// get webview
WKWebView* webView = (WKWebView*)windowDelegate.webView;
NSPoint point = NSMakePoint(x, y); NSPoint point = NSMakePoint(x, y);
[nsMenu popUpMenuPositioningItem:nil atLocation:point inView:webView]; [nsMenu popUpMenuPositioningItem:nil atLocation:point inView:webView];
}); });
@ -895,6 +901,9 @@ func (w *macosWebviewWindow) windowZoom() {
func (w *macosWebviewWindow) close() { func (w *macosWebviewWindow) close() {
C.windowClose(w.nsWindow) C.windowClose(w.nsWindow)
if !w.parent.options.HideOnClose {
globalApplication.deleteWindowByID(w.parent.id)
}
} }
func (w *macosWebviewWindow) zoomIn() { func (w *macosWebviewWindow) zoomIn() {
@ -1069,6 +1078,7 @@ func (w *macosWebviewWindow) run() {
C.bool(w.parent.options.EnableFraudulentWebsiteWarnings), C.bool(w.parent.options.EnableFraudulentWebsiteWarnings),
C.bool(w.parent.options.Frameless), C.bool(w.parent.options.Frameless),
C.bool(w.parent.options.EnableDragAndDrop), C.bool(w.parent.options.EnableDragAndDrop),
C.bool(w.parent.options.HideOnClose),
) )
w.setTitle(w.parent.options.Title) w.setTitle(w.parent.options.Title)
w.setAlwaysOnTop(w.parent.options.AlwaysOnTop) w.setAlwaysOnTop(w.parent.options.AlwaysOnTop)
@ -1135,6 +1145,11 @@ func (w *macosWebviewWindow) run() {
C.windowInjectCSS(w.nsWindow, C.CString(w.parent.options.CSS)) C.windowInjectCSS(w.nsWindow, C.CString(w.parent.options.CSS))
} }
}) })
w.parent.On(events.Mac.WindowWillClose, func(_ *WindowEventContext) {
globalApplication.deleteWindowByID(w.parent.id)
})
if w.parent.options.HTML != "" { if w.parent.options.HTML != "" {
w.setHTML(w.parent.options.HTML) w.setHTML(w.parent.options.HTML)
} }

View File

@ -20,10 +20,10 @@ package application
@end @end
void showDevTools(void *window) { void showDevTools(void *window) {
// Get the window delegate // get main window
WebviewWindowDelegate* delegate = (WebviewWindowDelegate*)[(NSWindow*)window delegate]; WebviewWindow* nsWindow = (WebviewWindow*)window;
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
[delegate.webView._inspector show]; [nsWindow.webView._inspector show];
}); });
} }

View File

@ -51,7 +51,6 @@ type macEvents struct {
WindowDidChangeTitle WindowEventType WindowDidChangeTitle WindowEventType
WindowDidChangeToolbar WindowEventType WindowDidChangeToolbar WindowEventType
WindowDidChangeVisibility WindowEventType WindowDidChangeVisibility WindowEventType
WindowDidClose WindowEventType
WindowDidDeminiaturize WindowEventType WindowDidDeminiaturize WindowEventType
WindowDidEndSheet WindowEventType WindowDidEndSheet WindowEventType
WindowDidEnterFullScreen WindowEventType WindowDidEnterFullScreen WindowEventType
@ -178,87 +177,86 @@ func newMacEvents() macEvents {
WindowDidChangeTitle: 1062, WindowDidChangeTitle: 1062,
WindowDidChangeToolbar: 1063, WindowDidChangeToolbar: 1063,
WindowDidChangeVisibility: 1064, WindowDidChangeVisibility: 1064,
WindowDidClose: 1065, WindowDidDeminiaturize: 1065,
WindowDidDeminiaturize: 1066, WindowDidEndSheet: 1066,
WindowDidEndSheet: 1067, WindowDidEnterFullScreen: 1067,
WindowDidEnterFullScreen: 1068, WindowDidEnterVersionBrowser: 1068,
WindowDidEnterVersionBrowser: 1069, WindowDidExitFullScreen: 1069,
WindowDidExitFullScreen: 1070, WindowDidExitVersionBrowser: 1070,
WindowDidExitVersionBrowser: 1071, WindowDidExpose: 1071,
WindowDidExpose: 1072, WindowDidFocus: 1072,
WindowDidFocus: 1073, WindowDidMiniaturize: 1073,
WindowDidMiniaturize: 1074, WindowDidMove: 1074,
WindowDidMove: 1075, WindowDidOrderOffScreen: 1075,
WindowDidOrderOffScreen: 1076, WindowDidOrderOnScreen: 1076,
WindowDidOrderOnScreen: 1077, WindowDidResignKey: 1077,
WindowDidResignKey: 1078, WindowDidResignMain: 1078,
WindowDidResignMain: 1079, WindowDidResize: 1079,
WindowDidResize: 1080, WindowDidUnfocus: 1080,
WindowDidUnfocus: 1081, WindowDidUpdate: 1081,
WindowDidUpdate: 1082, WindowDidUpdateAlpha: 1082,
WindowDidUpdateAlpha: 1083, WindowDidUpdateCollectionBehavior: 1083,
WindowDidUpdateCollectionBehavior: 1084, WindowDidUpdateCollectionProperties: 1084,
WindowDidUpdateCollectionProperties: 1085, WindowDidUpdateShadow: 1085,
WindowDidUpdateShadow: 1086, WindowDidUpdateTitle: 1086,
WindowDidUpdateTitle: 1087, WindowDidUpdateToolbar: 1087,
WindowDidUpdateToolbar: 1088, WindowDidUpdateVisibility: 1088,
WindowDidUpdateVisibility: 1089, WindowWillBecomeKey: 1089,
WindowWillBecomeKey: 1090, WindowWillBecomeMain: 1090,
WindowWillBecomeMain: 1091, WindowWillBeginSheet: 1091,
WindowWillBeginSheet: 1092, WindowWillChangeOrderingMode: 1092,
WindowWillChangeOrderingMode: 1093, WindowWillClose: 1093,
WindowWillClose: 1094, WindowWillDeminiaturize: 1094,
WindowWillDeminiaturize: 1095, WindowWillEnterFullScreen: 1095,
WindowWillEnterFullScreen: 1096, WindowWillEnterVersionBrowser: 1096,
WindowWillEnterVersionBrowser: 1097, WindowWillExitFullScreen: 1097,
WindowWillExitFullScreen: 1098, WindowWillExitVersionBrowser: 1098,
WindowWillExitVersionBrowser: 1099, WindowWillFocus: 1099,
WindowWillFocus: 1100, WindowWillMiniaturize: 1100,
WindowWillMiniaturize: 1101, WindowWillMove: 1101,
WindowWillMove: 1102, WindowWillOrderOffScreen: 1102,
WindowWillOrderOffScreen: 1103, WindowWillOrderOnScreen: 1103,
WindowWillOrderOnScreen: 1104, WindowWillResignMain: 1104,
WindowWillResignMain: 1105, WindowWillResize: 1105,
WindowWillResize: 1106, WindowWillUnfocus: 1106,
WindowWillUnfocus: 1107, WindowWillUpdate: 1107,
WindowWillUpdate: 1108, WindowWillUpdateAlpha: 1108,
WindowWillUpdateAlpha: 1109, WindowWillUpdateCollectionBehavior: 1109,
WindowWillUpdateCollectionBehavior: 1110, WindowWillUpdateCollectionProperties: 1110,
WindowWillUpdateCollectionProperties: 1111, WindowWillUpdateShadow: 1111,
WindowWillUpdateShadow: 1112, WindowWillUpdateTitle: 1112,
WindowWillUpdateTitle: 1113, WindowWillUpdateToolbar: 1113,
WindowWillUpdateToolbar: 1114, WindowWillUpdateVisibility: 1114,
WindowWillUpdateVisibility: 1115, WindowWillUseStandardFrame: 1115,
WindowWillUseStandardFrame: 1116, MenuWillOpen: 1116,
MenuWillOpen: 1117, MenuDidOpen: 1117,
MenuDidOpen: 1118, MenuDidClose: 1118,
MenuDidClose: 1119, MenuWillSendAction: 1119,
MenuWillSendAction: 1120, MenuDidSendAction: 1120,
MenuDidSendAction: 1121, MenuWillHighlightItem: 1121,
MenuWillHighlightItem: 1122, MenuDidHighlightItem: 1122,
MenuDidHighlightItem: 1123, MenuWillDisplayItem: 1123,
MenuWillDisplayItem: 1124, MenuDidDisplayItem: 1124,
MenuDidDisplayItem: 1125, MenuWillAddItem: 1125,
MenuWillAddItem: 1126, MenuDidAddItem: 1126,
MenuDidAddItem: 1127, MenuWillRemoveItem: 1127,
MenuWillRemoveItem: 1128, MenuDidRemoveItem: 1128,
MenuDidRemoveItem: 1129, MenuWillBeginTracking: 1129,
MenuWillBeginTracking: 1130, MenuDidBeginTracking: 1130,
MenuDidBeginTracking: 1131, MenuWillEndTracking: 1131,
MenuWillEndTracking: 1132, MenuDidEndTracking: 1132,
MenuDidEndTracking: 1133, MenuWillUpdate: 1133,
MenuWillUpdate: 1134, MenuDidUpdate: 1134,
MenuDidUpdate: 1135, MenuWillPopUp: 1135,
MenuWillPopUp: 1136, MenuDidPopUp: 1136,
MenuDidPopUp: 1137, MenuWillSendActionToItem: 1137,
MenuWillSendActionToItem: 1138, MenuDidSendActionToItem: 1138,
MenuDidSendActionToItem: 1139, WebViewDidStartProvisionalNavigation: 1139,
WebViewDidStartProvisionalNavigation: 1140, WebViewDidReceiveServerRedirectForProvisionalNavigation: 1140,
WebViewDidReceiveServerRedirectForProvisionalNavigation: 1141, WebViewDidFinishNavigation: 1141,
WebViewDidFinishNavigation: 1142, WebViewDidCommitNavigation: 1142,
WebViewDidCommitNavigation: 1143, WindowFileDraggingEntered: 1143,
WindowFileDraggingEntered: 1144, WindowFileDraggingPerformed: 1144,
WindowFileDraggingPerformed: 1145, WindowFileDraggingExited: 1145,
WindowFileDraggingExited: 1146,
} }
} }

View File

@ -47,90 +47,89 @@ extern void processWindowEvent(unsigned int, unsigned int);
#define EventWindowDidChangeTitle 1062 #define EventWindowDidChangeTitle 1062
#define EventWindowDidChangeToolbar 1063 #define EventWindowDidChangeToolbar 1063
#define EventWindowDidChangeVisibility 1064 #define EventWindowDidChangeVisibility 1064
#define EventWindowDidClose 1065 #define EventWindowDidDeminiaturize 1065
#define EventWindowDidDeminiaturize 1066 #define EventWindowDidEndSheet 1066
#define EventWindowDidEndSheet 1067 #define EventWindowDidEnterFullScreen 1067
#define EventWindowDidEnterFullScreen 1068 #define EventWindowDidEnterVersionBrowser 1068
#define EventWindowDidEnterVersionBrowser 1069 #define EventWindowDidExitFullScreen 1069
#define EventWindowDidExitFullScreen 1070 #define EventWindowDidExitVersionBrowser 1070
#define EventWindowDidExitVersionBrowser 1071 #define EventWindowDidExpose 1071
#define EventWindowDidExpose 1072 #define EventWindowDidFocus 1072
#define EventWindowDidFocus 1073 #define EventWindowDidMiniaturize 1073
#define EventWindowDidMiniaturize 1074 #define EventWindowDidMove 1074
#define EventWindowDidMove 1075 #define EventWindowDidOrderOffScreen 1075
#define EventWindowDidOrderOffScreen 1076 #define EventWindowDidOrderOnScreen 1076
#define EventWindowDidOrderOnScreen 1077 #define EventWindowDidResignKey 1077
#define EventWindowDidResignKey 1078 #define EventWindowDidResignMain 1078
#define EventWindowDidResignMain 1079 #define EventWindowDidResize 1079
#define EventWindowDidResize 1080 #define EventWindowDidUnfocus 1080
#define EventWindowDidUnfocus 1081 #define EventWindowDidUpdate 1081
#define EventWindowDidUpdate 1082 #define EventWindowDidUpdateAlpha 1082
#define EventWindowDidUpdateAlpha 1083 #define EventWindowDidUpdateCollectionBehavior 1083
#define EventWindowDidUpdateCollectionBehavior 1084 #define EventWindowDidUpdateCollectionProperties 1084
#define EventWindowDidUpdateCollectionProperties 1085 #define EventWindowDidUpdateShadow 1085
#define EventWindowDidUpdateShadow 1086 #define EventWindowDidUpdateTitle 1086
#define EventWindowDidUpdateTitle 1087 #define EventWindowDidUpdateToolbar 1087
#define EventWindowDidUpdateToolbar 1088 #define EventWindowDidUpdateVisibility 1088
#define EventWindowDidUpdateVisibility 1089 #define EventWindowWillBecomeKey 1089
#define EventWindowWillBecomeKey 1090 #define EventWindowWillBecomeMain 1090
#define EventWindowWillBecomeMain 1091 #define EventWindowWillBeginSheet 1091
#define EventWindowWillBeginSheet 1092 #define EventWindowWillChangeOrderingMode 1092
#define EventWindowWillChangeOrderingMode 1093 #define EventWindowWillClose 1093
#define EventWindowWillClose 1094 #define EventWindowWillDeminiaturize 1094
#define EventWindowWillDeminiaturize 1095 #define EventWindowWillEnterFullScreen 1095
#define EventWindowWillEnterFullScreen 1096 #define EventWindowWillEnterVersionBrowser 1096
#define EventWindowWillEnterVersionBrowser 1097 #define EventWindowWillExitFullScreen 1097
#define EventWindowWillExitFullScreen 1098 #define EventWindowWillExitVersionBrowser 1098
#define EventWindowWillExitVersionBrowser 1099 #define EventWindowWillFocus 1099
#define EventWindowWillFocus 1100 #define EventWindowWillMiniaturize 1100
#define EventWindowWillMiniaturize 1101 #define EventWindowWillMove 1101
#define EventWindowWillMove 1102 #define EventWindowWillOrderOffScreen 1102
#define EventWindowWillOrderOffScreen 1103 #define EventWindowWillOrderOnScreen 1103
#define EventWindowWillOrderOnScreen 1104 #define EventWindowWillResignMain 1104
#define EventWindowWillResignMain 1105 #define EventWindowWillResize 1105
#define EventWindowWillResize 1106 #define EventWindowWillUnfocus 1106
#define EventWindowWillUnfocus 1107 #define EventWindowWillUpdate 1107
#define EventWindowWillUpdate 1108 #define EventWindowWillUpdateAlpha 1108
#define EventWindowWillUpdateAlpha 1109 #define EventWindowWillUpdateCollectionBehavior 1109
#define EventWindowWillUpdateCollectionBehavior 1110 #define EventWindowWillUpdateCollectionProperties 1110
#define EventWindowWillUpdateCollectionProperties 1111 #define EventWindowWillUpdateShadow 1111
#define EventWindowWillUpdateShadow 1112 #define EventWindowWillUpdateTitle 1112
#define EventWindowWillUpdateTitle 1113 #define EventWindowWillUpdateToolbar 1113
#define EventWindowWillUpdateToolbar 1114 #define EventWindowWillUpdateVisibility 1114
#define EventWindowWillUpdateVisibility 1115 #define EventWindowWillUseStandardFrame 1115
#define EventWindowWillUseStandardFrame 1116 #define EventMenuWillOpen 1116
#define EventMenuWillOpen 1117 #define EventMenuDidOpen 1117
#define EventMenuDidOpen 1118 #define EventMenuDidClose 1118
#define EventMenuDidClose 1119 #define EventMenuWillSendAction 1119
#define EventMenuWillSendAction 1120 #define EventMenuDidSendAction 1120
#define EventMenuDidSendAction 1121 #define EventMenuWillHighlightItem 1121
#define EventMenuWillHighlightItem 1122 #define EventMenuDidHighlightItem 1122
#define EventMenuDidHighlightItem 1123 #define EventMenuWillDisplayItem 1123
#define EventMenuWillDisplayItem 1124 #define EventMenuDidDisplayItem 1124
#define EventMenuDidDisplayItem 1125 #define EventMenuWillAddItem 1125
#define EventMenuWillAddItem 1126 #define EventMenuDidAddItem 1126
#define EventMenuDidAddItem 1127 #define EventMenuWillRemoveItem 1127
#define EventMenuWillRemoveItem 1128 #define EventMenuDidRemoveItem 1128
#define EventMenuDidRemoveItem 1129 #define EventMenuWillBeginTracking 1129
#define EventMenuWillBeginTracking 1130 #define EventMenuDidBeginTracking 1130
#define EventMenuDidBeginTracking 1131 #define EventMenuWillEndTracking 1131
#define EventMenuWillEndTracking 1132 #define EventMenuDidEndTracking 1132
#define EventMenuDidEndTracking 1133 #define EventMenuWillUpdate 1133
#define EventMenuWillUpdate 1134 #define EventMenuDidUpdate 1134
#define EventMenuDidUpdate 1135 #define EventMenuWillPopUp 1135
#define EventMenuWillPopUp 1136 #define EventMenuDidPopUp 1136
#define EventMenuDidPopUp 1137 #define EventMenuWillSendActionToItem 1137
#define EventMenuWillSendActionToItem 1138 #define EventMenuDidSendActionToItem 1138
#define EventMenuDidSendActionToItem 1139 #define EventWebViewDidStartProvisionalNavigation 1139
#define EventWebViewDidStartProvisionalNavigation 1140 #define EventWebViewDidReceiveServerRedirectForProvisionalNavigation 1140
#define EventWebViewDidReceiveServerRedirectForProvisionalNavigation 1141 #define EventWebViewDidFinishNavigation 1141
#define EventWebViewDidFinishNavigation 1142 #define EventWebViewDidCommitNavigation 1142
#define EventWebViewDidCommitNavigation 1143 #define EventWindowFileDraggingEntered 1143
#define EventWindowFileDraggingEntered 1144 #define EventWindowFileDraggingPerformed 1144
#define EventWindowFileDraggingPerformed 1145 #define EventWindowFileDraggingExited 1145
#define EventWindowFileDraggingExited 1146
#define MAX_EVENTS 1147 #define MAX_EVENTS 1146
#endif #endif

View File

@ -39,7 +39,6 @@ mac:WindowDidChangeSpaceOrderingMode
mac:WindowDidChangeTitle mac:WindowDidChangeTitle
mac:WindowDidChangeToolbar mac:WindowDidChangeToolbar
mac:WindowDidChangeVisibility mac:WindowDidChangeVisibility
mac:WindowDidClose
mac:WindowDidDeminiaturize mac:WindowDidDeminiaturize
mac:WindowDidEndSheet mac:WindowDidEndSheet
mac:WindowDidEnterFullScreen mac:WindowDidEnterFullScreen