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

Reply via email to