Revision: 27279
          http://sourceforge.net/p/bibdesk/svn/27279
Author:   hofman
Date:     2022-03-07 17:07:13 +0000 (Mon, 07 Mar 2022)
Log Message:
-----------
Implement delegate setter for pboard helper instead of setting the delegate in 
init and terminate

Modified Paths:
--------------
    trunk/bibdesk/BDSKItemPasteboardHelper.h
    trunk/bibdesk/BDSKItemPasteboardHelper.m
    trunk/bibdesk/BibDocument.m
    trunk/bibdesk/BibDocument_DataSource.m

Modified: trunk/bibdesk/BDSKItemPasteboardHelper.h
===================================================================
--- trunk/bibdesk/BDSKItemPasteboardHelper.h    2022-03-07 16:46:37 UTC (rev 
27278)
+++ trunk/bibdesk/BDSKItemPasteboardHelper.h    2022-03-07 17:07:13 UTC (rev 
27279)
@@ -53,10 +53,8 @@
     id<BDSKItemPasteboardHelperDelegate> delegate;
 }
 
-- (id)initWithDelegate:(id<BDSKItemPasteboardHelperDelegate>)aDelegate;
+@property (nonatomic, assign) id <BDSKItemPasteboardHelperDelegate> delegate;
 
-- (void)terminate;
-
 - (void)writeItems:(NSArray *)items textRepresentation:(id)text 
forDragCopyType:(BDSKDragCopyType)dragCopyType toPasteboard:(NSPasteboard 
*)pboard;
 
 - (NSArray *)promisedItemsForPasteboard:(NSPasteboard *)pboard;

Modified: trunk/bibdesk/BDSKItemPasteboardHelper.m
===================================================================
--- trunk/bibdesk/BDSKItemPasteboardHelper.m    2022-03-07 16:46:37 UTC (rev 
27278)
+++ trunk/bibdesk/BDSKItemPasteboardHelper.m    2022-03-07 17:07:13 UTC (rev 
27279)
@@ -57,18 +57,8 @@
 
 @implementation BDSKItemPasteboardHelper
 
-- (id)init {
-    return [self initWithDelegate:nil];
-}
+@synthesize delegate;
 
-- (id)initWithDelegate:(id<BDSKItemPasteboardHelperDelegate>)aDelegate {
-    if (self = [super init]) {
-        promisedPboardTypes = nil;
-        delegate = aDelegate;
-    }
-    return self;
-}
-
 - (void)dealloc {
     // we should have already cleared everything in the final call to 
removePromisedTypesForPasteboard:
     BDSKDESTROY(promisedPboardTypes);
@@ -75,38 +65,40 @@
     [super dealloc];
 }
 
-- (void)terminate {
-    if (delegate) {
-        for (NSString *name in [promisedPboardTypes allKeys]) {
-            NSPasteboard *pboard = [NSPasteboard pasteboardWithName:name];
-            if ([self pasteboardIsValid:pboard] == NO) {
-                [self clearPromisedTypesForPasteboard:pboard];
-                continue;
-            }
-            NSMutableDictionary *dict = [promisedPboardTypes 
objectForKey:name];
-            if (pboard == nil) continue;
-            NSArray *items = [[[dict objectForKey:@"items"] copy] autorelease];
-            if (items == nil) continue;
-            [dict removeObjectForKey:@"items"];
-            NSArray *types = [[[dict objectForKey:@"types"] copy] autorelease];
-            if ([types containsObject:BDSKPasteboardTypePublications]) {
-                [dict setObject:[BibItem archivedPublications:items] 
forKey:@"archivedData"];
-            }
-            if ([types containsObject:NSPasteboardTypePDF] || [types 
containsObject:NSPasteboardTypeRTF] || [types 
containsObject:NSPasteboardTypeString]) {
-                // the remaining type needs a texTask
-                // get intermediate data so we don't need the delegate and the 
items
-                NSString *bibString = nil;
-                bibString = [delegate pasteboardHelper:self 
bibTeXStringForItems:items];
-                if (bibString != nil) {
-                    [dict setObject:bibString forKey:@"bibTeXString"];
-                    [dict setObject:[items valueForKey:@"citeKey"] 
forKey:@"citeKeys"];
-                } else {
+- (void)setDelegate:(id<BDSKItemPasteboardHelperDelegate>)newDelegate {
+    if (newDelegate != delegate) {
+        if (delegate) {
+            for (NSString *name in [promisedPboardTypes allKeys]) {
+                NSPasteboard *pboard = [NSPasteboard pasteboardWithName:name];
+                if ([self pasteboardIsValid:pboard] == NO) {
                     [self clearPromisedTypesForPasteboard:pboard];
+                    continue;
                 }
+                NSMutableDictionary *dict = [promisedPboardTypes 
objectForKey:name];
+                if (pboard == nil) continue;
+                NSArray *items = [[[dict objectForKey:@"items"] copy] 
autorelease];
+                if (items == nil) continue;
+                [dict removeObjectForKey:@"items"];
+                NSArray *types = [[[dict objectForKey:@"types"] copy] 
autorelease];
+                if ([types containsObject:BDSKPasteboardTypePublications]) {
+                    [dict setObject:[BibItem archivedPublications:items] 
forKey:@"archivedData"];
+                }
+                if ([types containsObject:NSPasteboardTypePDF] || [types 
containsObject:NSPasteboardTypeRTF] || [types 
containsObject:NSPasteboardTypeString]) {
+                    // the remaining type needs a texTask
+                    // get intermediate data so we don't need the delegate and 
the items
+                    NSString *bibString = nil;
+                    bibString = [delegate pasteboardHelper:self 
bibTeXStringForItems:items];
+                    if (bibString != nil) {
+                        [dict setObject:bibString forKey:@"bibTeXString"];
+                        [dict setObject:[items valueForKey:@"citeKey"] 
forKey:@"citeKeys"];
+                    } else {
+                        [self clearPromisedTypesForPasteboard:pboard];
+                    }
+                }
             }
         }
+        delegate = newDelegate;
     }
-    delegate = nil;
 }
 
 #pragma mark Promising and adding data

Modified: trunk/bibdesk/BibDocument.m
===================================================================
--- trunk/bibdesk/BibDocument.m 2022-03-07 16:46:37 UTC (rev 27278)
+++ trunk/bibdesk/BibDocument.m 2022-03-07 17:07:13 UTC (rev 27279)
@@ -732,7 +732,7 @@
     // the outline view retains its items, so clean them up as well
     [groupOutlineView reloadData];
     
-       [pboardHelper terminate];
+    [pboardHelper setDelegate:nil];
     [pboardHelper release];
     pboardHelper = nil;
     
@@ -1589,8 +1589,10 @@
 
 - (NSData *)LTBDataAndReturnError:(NSError **)error{
     NSPasteboard *pboard = [NSPasteboard pasteboardWithUniqueName];
-    if (pboardHelper == nil)
-        pboardHelper = [[BDSKItemPasteboardHelper alloc] 
initWithDelegate:self];
+    if (pboardHelper == nil) {
+        pboardHelper = [[BDSKItemPasteboardHelper alloc] init];
+        [pboardHelper setDelegate:self];
+    }
     [pboardHelper writeItems:[self publicationsForSaving] 
textRepresentation:nil forDragCopyType:BDSKDragCopyLTB toPasteboard:pboard];
     NSArray *ltbStrings = [pboard readObjectsForClasses:[NSArray 
arrayWithObject:[NSString class]] options:[NSDictionary dictionary]];
     [pboard clearContents]; // this will clear the pasteboard helper for this 
pasteboard

Modified: trunk/bibdesk/BibDocument_DataSource.m
===================================================================
--- trunk/bibdesk/BibDocument_DataSource.m      2022-03-07 16:46:37 UTC (rev 
27278)
+++ trunk/bibdesk/BibDocument_DataSource.m      2022-03-07 17:07:13 UTC (rev 
27279)
@@ -448,8 +448,10 @@
             }
        }
     
-    if (pboardHelper == nil)
-        pboardHelper = [[BDSKItemPasteboardHelper alloc] 
initWithDelegate:self];
+    if (pboardHelper == nil) {
+        pboardHelper = [[BDSKItemPasteboardHelper alloc] init];
+        [pboardHelper setDelegate:self];
+    }
     [pboardHelper writeItems:pubs textRepresentation:text 
forDragCopyType:dragCopyType toPasteboard:pboard];
     
     return YES;

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