mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-03 04:42:00 +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:
parent
f335cbd608
commit
c8d203d4d6
@ -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) {
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user