Mercurial > dwindows
comparison mac/dw.m @ 2023:3f265cd5b069
Mac: Added cleanup to the DWWebView subclasses and userdata for dw_window_set_data() on it.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sat, 09 Nov 2019 07:43:04 +0000 |
parents | 59dfb86fb3b1 |
children | c4fc33d70a8e |
comparison
equal
deleted
inserted
replaced
2022:28809bf17957 | 2023:3f265cd5b069 |
---|---|
1340 /* Apparently the WKWebKit API is only enabled on intel 64bit... | 1340 /* Apparently the WKWebKit API is only enabled on intel 64bit... |
1341 * Causing build failures on 32bit builds, so this should allow | 1341 * Causing build failures on 32bit builds, so this should allow |
1342 * WKWebKit on intel 64 and the old WebKit on intel 32 bit and earlier. | 1342 * WKWebKit on intel 64 and the old WebKit on intel 32 bit and earlier. |
1343 */ | 1343 */ |
1344 #if WK_API_ENABLED | 1344 #if WK_API_ENABLED |
1345 @interface DWWebView : WKWebView <WKNavigationDelegate> { } | 1345 @interface DWWebView : WKWebView <WKNavigationDelegate> |
1346 { | |
1347 void *userdata; | |
1348 } | |
1349 -(void *)userdata; | |
1350 -(void)setUserdata:(void *)input; | |
1346 -(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation; | 1351 -(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation; |
1347 -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation; | 1352 -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation; |
1348 -(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation; | 1353 -(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation; |
1349 -(void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation; | 1354 -(void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation; |
1350 @end | 1355 @end |
1351 | 1356 |
1352 @implementation DWWebView : WKWebView { } | 1357 @implementation DWWebView : WKWebView |
1358 -(void *)userdata { return userdata; } | |
1359 -(void)setUserdata:(void *)input { userdata = input; } | |
1353 -(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation | 1360 -(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation |
1354 { | 1361 { |
1355 void *params[2] = { DW_INT_TO_POINTER(DW_HTML_CHANGE_STARTED), [[self URL] absoluteString] }; | 1362 void *params[2] = { DW_INT_TO_POINTER(DW_HTML_CHANGE_STARTED), [[self URL] absoluteString] }; |
1356 _event_handler(self, (NSEvent *)params, 19); | 1363 _event_handler(self, (NSEvent *)params, 19); |
1357 } | 1364 } |
1368 -(void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation | 1375 -(void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation |
1369 { | 1376 { |
1370 void *params[2] = { DW_INT_TO_POINTER(DW_HTML_CHANGE_REDIRECT), [[self URL] absoluteString] }; | 1377 void *params[2] = { DW_INT_TO_POINTER(DW_HTML_CHANGE_REDIRECT), [[self URL] absoluteString] }; |
1371 _event_handler(self, (NSEvent *)params, 19); | 1378 _event_handler(self, (NSEvent *)params, 19); |
1372 } | 1379 } |
1380 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); dw_signal_disconnect_by_window(self); [super dealloc]; } | |
1373 @end | 1381 @end |
1374 #else | 1382 #else |
1375 @interface DWWebView : WebView | 1383 @interface DWWebView : WebView |
1376 { } | 1384 { |
1385 void *userdata; | |
1386 } | |
1387 -(void *)userdata; | |
1388 -(void)setUserdata:(void *)input; | |
1377 -(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; | 1389 -(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; |
1378 -(void)webView:(WebView *)sender didCommitLoadForFrame:(WebFrame *)frame; | 1390 -(void)webView:(WebView *)sender didCommitLoadForFrame:(WebFrame *)frame; |
1379 -(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame; | 1391 -(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame; |
1380 @end | 1392 @end |
1381 | 1393 |
1382 @implementation DWWebView : WebView { } | 1394 @implementation DWWebView : WebView |
1395 -(void *)userdata { return userdata; } | |
1396 -(void)setUserdata:(void *)input { userdata = input; } | |
1383 -(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame | 1397 -(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame |
1384 { | 1398 { |
1385 void *params[2] = { DW_INT_TO_POINTER(DW_HTML_CHANGE_COMPLETE), [self mainFrameURL] }; | 1399 void *params[2] = { DW_INT_TO_POINTER(DW_HTML_CHANGE_COMPLETE), [self mainFrameURL] }; |
1386 _event_handler(self, (NSEvent *)params, 19); | 1400 _event_handler(self, (NSEvent *)params, 19); |
1387 } | 1401 } |
1393 -(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame | 1407 -(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame |
1394 { | 1408 { |
1395 void *params[2] = { DW_INT_TO_POINTER(DW_HTML_CHANGE_LOADING), [self mainFrameURL] }; | 1409 void *params[2] = { DW_INT_TO_POINTER(DW_HTML_CHANGE_LOADING), [self mainFrameURL] }; |
1396 _event_handler(self, (NSEvent *)params, 19); | 1410 _event_handler(self, (NSEvent *)params, 19); |
1397 } | 1411 } |
1412 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); dw_signal_disconnect_by_window(self); [super dealloc]; } | |
1398 @end | 1413 @end |
1399 #endif | 1414 #endif |
1400 | 1415 |
1401 | 1416 |
1402 @implementation DWAppDel | 1417 @implementation DWAppDel |