Revision: 29612
http://sourceforge.net/p/bibdesk/svn/29612
Author: hofman
Date: 2025-09-20 15:49:27 +0000 (Sat, 20 Sep 2025)
Log Message:
-----------
Load title in weview class.
Modified Paths:
--------------
trunk/bibdesk/BDSKWebView.h
trunk/bibdesk/BDSKWebView.m
Modified: trunk/bibdesk/BDSKWebView.h
===================================================================
--- trunk/bibdesk/BDSKWebView.h 2025-09-19 16:55:58 UTC (rev 29611)
+++ trunk/bibdesk/BDSKWebView.h 2025-09-20 15:49:27 UTC (rev 29612)
@@ -56,6 +56,7 @@
@interface BDSKWebView : WebView {
BDSKWebDelegate *webDelegate;
+ NSString *title;
NSURLSessionTask *faviconDownload;
NSImage *favicon;
BOOL faviconFromOrigin;
@@ -80,6 +81,10 @@
@protocol BDSKWebViewDelegate <NSObject>
@optional
+- (void)webView:(WebView *)sender didStartLoadForFrame:(WebFrame *)frame;
+- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame;
+- (void)webView:(WebView *)sender didFailLoadForFrame:(WebFrame *)frame;
+
- (void)webView:(WebView *)sender setTitle:(NSString *)title;
- (void)webView:(WebView *)sender setStatusText:(nullable NSString *)text;
@@ -92,10 +97,6 @@
- (void)webView:(WebView *)sender setFrame:(NSRect)frame;
- (void)webView:(WebView *)sender setStatusBarVisible:(BOOL)visible;
-- (void)webView:(WebView *)sender didStartLoadForFrame:(WebFrame *)frame;
-- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame;
-- (void)webView:(WebView *)sender didFailLoadForFrame:(WebFrame *)frame;
-
- (NSArray *)webView:(WebView *)sender
contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray
*)defaultMenuItems;
@end
Modified: trunk/bibdesk/BDSKWebView.m
===================================================================
--- trunk/bibdesk/BDSKWebView.m 2025-09-19 16:55:58 UTC (rev 29611)
+++ trunk/bibdesk/BDSKWebView.m 2025-09-20 15:49:27 UTC (rev 29612)
@@ -210,8 +210,46 @@
[[NSWorkspace sharedWorkspace] openURLWithDefaultApp:theURL];
}
+#pragma mark Title
+
+// mainFrameTitle is not functional, it always returns an empty string
+
+- (void)setTitle:(NSString *)aTitle {
+ if (aTitle != title) {
+ title = aTitle;
+ }
+ if ([[self frameLoadDelegate]
respondsToSelector:@selector(webView:didReceiveTitle:forFrame:)])
+ [[self frameLoadDelegate] webView:self didReceiveTitle:title
forFrame:nil];
+}
+
+- (void)loadTitle {
+ NSString *aTitle = [super mainFrameTitle];
+ if ([NSString isEmptyString:aTitle]) {
+ aTitle = [[[[self mainFrameDocument]
nodesForXPath:@"/html/head/title"] firstObject] textString];
+ if ([NSString isEmptyString:aTitle]) {
+ NSURL *url = [[[[self mainFrame] dataSource] request] URL];
+ if ([url isFileURL]) {
+ aTitle = [url lastPathComponent];
+ } else {
+ aTitle = [[url host] stringByRemovingPercentEncoding];
+ if ([NSString isEmptyString:title])
+ aTitle = [[url absoluteString]
stringByRemovingPercentEncoding];
+ else
+ aTitle = [aTitle stringByAppendingString:[[url path]
stringByRemovingPercentEncoding] ?: @""];
+ }
+ }
+ }
+ [self setTitle:aTitle];
+}
+
+- (NSString *)mainFrameTitle {
+ return title ?: [super mainFrameTitle];
+}
+
#pragma mark Favicon
+// mainFrameIcon is not functional, it always returns the default icon
+
- (void)setFavicon:(NSImage *)icon {
if (icon != favicon) {
favicon = icon;
@@ -363,6 +401,7 @@
- (void)didStartLoadForMainFrame {
[self stopMonitoringURL];
+ [self setTitle:[NSLocalizedString(@"Loading", @"Placeholder web group
label") stringByAppendingEllipsis]];
[self clearFavicon];
[self setFavicon:[[BDSKWebIconDatabase sharedDatabase]
iconForURLString:[self mainFrameURL]]];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:BDSKDownloadsDidChangeNotification object:[BDSKDownloadManager
sharedManager]];
@@ -369,11 +408,16 @@
}
- (void)didFinishLoadForMainFrame {
+ [self loadTitle];
[self retrieveFavicon];
if ([[self mainFrameURL] isCaseInsensitiveEqual:@"bibdesk:downloads"])
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleDownloadsDidChange:)
name:BDSKDownloadsDidChangeNotification object:[BDSKDownloadManager
sharedManager]];
}
+- (void)didFailLoadForMainFrameWithError:(NSError *)error {
+ [self setTitle:NSLocalizedString(@"Error", @"Placeholder web group
label")];
+}
+
@end
#pragma mark -
@@ -433,11 +477,12 @@
- (void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame
*)frame{
if (frame == [sender mainFrame]) {
- if ([sender respondsToSelector:@selector(didStartLoadForMainFrame)])
+ if ([sender respondsToSelector:@selector(didStartLoadForMainFrame)]) {
[(BDSKWebView *)sender didStartLoadForMainFrame];
- else
+ } else {
[self webView:sender setIcon:nil];
- [self webView:sender setTitle:[NSLocalizedString(@"Loading",
@"Placeholder web group label") stringByAppendingEllipsis]];
+ [self webView:sender setTitle:[NSLocalizedString(@"Loading",
@"Placeholder web group label") stringByAppendingEllipsis]];
+ }
}
[self webView:sender setLoading:[sender isLoading]];
@@ -453,38 +498,31 @@
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame{
if (frame == [sender mainFrame]) {
- NSString *title = [sender mainFrameTitle];
- if ([NSString isEmptyString:title]) {
- title = [[[[frame DOMDocument] nodesForXPath:@"/html/head/title"]
firstObject] textString];
- if ([NSString isEmptyString:title]) {
- NSURL *url = [[[frame dataSource] request] URL];
- if ([url isFileURL]) {
- title = [url lastPathComponent];
- } else {
- title = [[url host] stringByRemovingPercentEncoding];
- if ([NSString isEmptyString:title])
- title = [[url absoluteString]
stringByRemovingPercentEncoding];
- else
- title = [title stringByAppendingString:[[url path]
stringByRemovingPercentEncoding] ?: @""];
- }
- }
- }
- [self webView:sender setTitle:title];
- if ([sender respondsToSelector:@selector(didFinishLoadForMainFrame)])
+ if ([sender respondsToSelector:@selector(didFinishLoadForMainFrame)]) {
[(BDSKWebView *)sender didFinishLoadForMainFrame];
- else
+ } else {
[self webView:sender setIcon:[sender mainFrameIcon]];
+ [self webView:sender setTitle:[sender mainFrameTitle]];
+ }
}
[self webView:sender setLoading:[sender isLoading]];
+
if ([delegate
respondsToSelector:@selector(webView:didFinishLoadForFrame:)])
[delegate webView:sender didFinishLoadForFrame:frame];
}
- (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error
forFrame:(WebFrame *)frame {
+ if (frame == [sender mainFrame]) {
+ if ([sender
respondsToSelector:@selector(didFailLoadForMainFrameWithError:)]) {
+ [(BDSKWebView *)sender didFailLoadForMainFrameWithError:error];
+ } else {
+ [self webView:sender setTitle:NSLocalizedString(@"Error",
@"Placeholder web group label")];
+ }
+ }
+ [self webView:sender setLoading:[sender isLoading]];
+
if ([delegate respondsToSelector:@selector(webView:didFailLoadForFrame:)])
[delegate webView:sender didFailLoadForFrame:frame];
- [self webView:sender setLoading:[sender isLoading]];
- [self webView:sender setTitle:NSLocalizedString(@"Error", @"Placeholder
web group label")];
if ([[error domain] isEqualToString:NSURLErrorDomain] == NO || [error
code] != NSURLErrorCancelled) {
// !!! logs are here to help diagnose problems that users are reporting
@@ -509,7 +547,7 @@
}
- (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title
forFrame:(WebFrame *)frame {
- if (frame == [sender mainFrame])
+ if (frame == [sender mainFrame] || frame == nil)
[self webView:sender setTitle:title];
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit