Revision: 29632
          http://sourceforge.net/p/bibdesk/svn/29632
Author:   hofman
Date:     2025-09-26 17:03:52 +0000 (Fri, 26 Sep 2025)
Log Message:
-----------
Pass webview for download so we can use its windpw for save panel sheet

Modified Paths:
--------------
    trunk/bibdesk/BDSKDownloadManager.h
    trunk/bibdesk/BDSKDownloadManager.m
    trunk/bibdesk/BDSKTextImportController.m

Modified: trunk/bibdesk/BDSKDownloadManager.h
===================================================================
--- trunk/bibdesk/BDSKDownloadManager.h 2025-09-26 16:40:07 UTC (rev 29631)
+++ trunk/bibdesk/BDSKDownloadManager.h 2025-09-26 17:03:52 UTC (rev 29632)
@@ -65,7 +65,7 @@
 - (void)cancel:(NSInteger)uniqueID;
 - (void)remove:(NSInteger)uniqueID;
 
-- (void)addDownload:(id)download request:(NSURLRequest *)request;
+- (void)addDownload:(id)download request:(NSURLRequest *)request 
forView:(nullable NSView *)view;
 
 @end
 
@@ -86,13 +86,15 @@
     BDSKDownloadStatus status;
     id download;
     NSDate *date;
+    __weak NSView *view;
 }
 
-- (instancetype)initWithDownload:(id)aDownload URL:(NSURL *)aURL;
+- (instancetype)initWithDownload:(id)aDownload URL:(NSURL *)aURL 
forView:(nullable NSView *)aView;
 
 @property (nonatomic, readonly) id download;
 @property (nonatomic, readonly) NSInteger uniqueID;
 @property (nonatomic, readonly) NSURL *URL;
+@property (nonatomic, nullable, readonly) NSView *view;
 @property (nonatomic, nullable, strong) NSURL *fileURL;
 @property (nonatomic, nullable, readonly) NSString *fileName;
 @property (nonatomic, nullable, strong) NSURL *tempFileURL;

Modified: trunk/bibdesk/BDSKDownloadManager.m
===================================================================
--- trunk/bibdesk/BDSKDownloadManager.m 2025-09-26 16:40:07 UTC (rev 29631)
+++ trunk/bibdesk/BDSKDownloadManager.m 2025-09-26 17:03:52 UTC (rev 29632)
@@ -120,8 +120,8 @@
     [[NSNotificationCenter defaultCenter] 
postNotificationName:BDSKDownloadsDidChangeNotification object:self];
 }
 
-- (void)addDownload:(id)download request:(NSURLRequest *)request {
-    [downloads addObject:[[BDSKWebDownload alloc] initWithDownload:download 
URL:[request URL]]];
+- (void)addDownload:(id)download request:(NSURLRequest *)request 
forView:(NSView *)view {
+    [downloads addObject:[[BDSKWebDownload alloc] initWithDownload:download 
URL:[request URL] forView:view]];
     [self notifyUpdate];
 }
 
@@ -272,6 +272,8 @@
         }
         completionHandler(fileURL);
     };
+    if (window == nil)
+        window = [[[self webDownloadForDownload:download] view] window];
     if (window)
         [sPanel beginSheetModalForWindow:window completionHandler:handler];
     else
@@ -284,15 +286,16 @@
 
 @implementation BDSKWebDownload
 
-@synthesize download, uniqueID, URL, fileURL, tempFileURL, status, 
suggestedFilename;
+@synthesize download, uniqueID, view, URL, fileURL, tempFileURL, status, 
suggestedFilename;
 @dynamic fileName, dateDescription;
 
-- (instancetype)initWithDownload:(id)aDownload URL:(NSURL *)aURL {
+- (instancetype)initWithDownload:(id)aDownload URL:(NSURL *)aURL 
forView:(NSView *)aView {
     self = [super init];
     if (self) {
         static NSInteger currentUniqueID = 0;
         uniqueID = ++currentUniqueID;
         URL = aURL;
+        view = aView;
         fileURL = nil;
         status = BDSKDownloadStatusDownloading;
         download = aDownload;
@@ -334,6 +337,7 @@
             download = nil;
             suggestedFilename = nil;
             tempFileURL = nil;
+            view = nil;
             if (status == BDSKDownloadStatusFailed)
                 fileURL = nil;
         }
@@ -361,7 +365,7 @@
 @implementation BDSKWebDownloadDelegate
 
 - (void)downloadDidBegin:(NSURLDownload *)download {
-    [downloadManager addDownload:download request:[download request]];
+    [downloadManager addDownload:download request:[download request] 
forView:nil];
 }
 
 - (void)downloadDidFinish:(NSURLDownload *)download {

Modified: trunk/bibdesk/BDSKTextImportController.m
===================================================================
--- trunk/bibdesk/BDSKTextImportController.m    2025-09-26 16:40:07 UTC (rev 
29631)
+++ trunk/bibdesk/BDSKTextImportController.m    2025-09-26 17:03:52 UTC (rev 
29632)
@@ -983,7 +983,7 @@
     } else {
         NSURLRequest *request = [NSURLRequest 
requestWithURL:[[navigationResponse response] URL]];
         BDSKDownload *aDownload = [[BDSKDownloader sharedDownloader] 
startFileDownloadWithRequest:request delegate:[[BDSKDownloadManager 
sharedManager] bdskDownloadDelegate]];
-        [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:request];
+        [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:request forView:webView];
         decisionHandler(WKNavigationResponsePolicyCancel);
     }
 }
@@ -997,7 +997,7 @@
     } else if ([[[navigationAction request] 
valueForHTTPHeaderField:@"Content-Disposition"] hasPrefix:@"attachment"]) {
         NSURLRequest *request = [navigationAction request];
         BDSKDownload *aDownload = [[BDSKDownloader sharedDownloader] 
startFileDownloadWithRequest:request delegate:[[BDSKDownloadManager 
sharedManager] bdskDownloadDelegate]];
-        [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:request];
+        [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:request forView:webView];
         decisionHandler(WKNavigationActionPolicyCancel, preferences);
     } else {
         decisionHandler(WKNavigationActionPolicyAllow, preferences);
@@ -1006,12 +1006,12 @@
 
 - (void)webView:(WKWebView *)aWebView navigationAction:(WKNavigationAction 
*)navigationAction didBecomeDownload:(WKDownload *)aDownload 
API_AVAILABLE(macos(11.3)) {
     [aDownload setDelegate:[[BDSKDownloadManager sharedManager] 
wkDownloadDelegate]];
-    [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:[aDownload originalRequest]];
+    [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:[aDownload originalRequest] forView:webView];
 }
 
 - (void)webView:(WKWebView *)aWebView navigationResponse:(WKNavigationResponse 
*)navigationResponse didBecomeDownload:(WKDownload *)aDownload 
API_AVAILABLE(macos(11.3)) {
     [aDownload setDelegate:[[BDSKDownloadManager sharedManager] 
wkDownloadDelegate]];
-    [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:[aDownload originalRequest]];
+    [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:[aDownload originalRequest] forView:webView];
 }
 
 #pragma mark BDSKUIDelegate protocol
@@ -1114,11 +1114,11 @@
         if (@available(macOS 11.3, *)) {
             [webView startDownloadUsingRequest:request 
completionHandler:^(WKDownload *aDownload){
                 [aDownload setDelegate:[[BDSKDownloadManager sharedManager] 
wkDownloadDelegate]];
-                [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:request];
+                [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:request forView:webView];
             }];
         } else {
             BDSKDownload *aDownload = [[BDSKDownloader sharedDownloader] 
startFileDownloadWithRequest:request delegate:[[BDSKDownloadManager 
sharedManager] bdskDownloadDelegate]];
-            [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:request];
+            [[BDSKDownloadManager sharedManager] addDownload:aDownload 
request:request forView:webView];
         }
     } else {
         [[NSWorkspace sharedWorkspace] openURLWithDefaultApp:url];

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