Revision: 22675
          http://sourceforge.net/p/bibdesk/svn/22675
Author:   hofman
Date:     2018-09-26 14:11:41 +0000 (Wed, 26 Sep 2018)
Log Message:
-----------
Only use subject for remove command when it is a valid container specifier for 
the objects

Modified Paths:
--------------
    trunk/bibdesk/BDSKRemoveCommand.m

Modified: trunk/bibdesk/BDSKRemoveCommand.m
===================================================================
--- trunk/bibdesk/BDSKRemoveCommand.m   2018-09-26 13:49:06 UTC (rev 22674)
+++ trunk/bibdesk/BDSKRemoveCommand.m   2018-09-26 14:11:41 UTC (rev 22675)
@@ -93,35 +93,54 @@
             
             if (containerSpecifier == nil) {
                 
-                // get it from the subject of the event when it was not given
-                if (containerSpecifier == nil)
+                // get the container object from the subject of the event when 
it was not given
+                if (containerSpecifier == nil) {
                     containerSpecifier = [self subjectSpecifier];
-                
-                if (containerSpecifier == nil) {
-                    // finally, try the container of the objects
-                    id obj = directParameter;
-                    if ([obj isKindOfClass:[NSArray class]])
-                        obj = [obj firstObject];
-                    if ([obj respondsToSelector:@selector(containerSpecifier)])
-                        containerSpecifier = [obj containerSpecifier];
+                    removeContainer = [containerSpecifier 
objectsByEvaluatingSpecifier];
+                    // the subject should be a valid container object, not a 
collection
+                    if ([removeContainer 
respondsToSelector:@selector(objectSpecifier)]) {
+                        containerClassDescription = [removeContainer 
scriptClassDescription];
+                        for (NSString *key in [containerClassDescription 
toManyRelationshipKeys]) {
+                            if ([containerClassDescription 
hasWritablePropertyForKey:key] &&
+                                [removeClassDescription 
isKindOfClassDescription:[containerClassDescription 
classDescriptionForKey:key]]) {
+                                removeKey = key;
+                                break;
+                            }
+                        }
+                    }
+                    
+                    if (removeKey == nil) {
+                        removeContainer = nil;
+                        containerClassDescription = nil;
+                        // finally, try the container of the objects
+                        id obj = directParameter;
+                        if ([obj isKindOfClass:[NSArray class]])
+                            obj = [obj firstObject];
+                        if ([obj 
respondsToSelector:@selector(containerSpecifier)])
+                            containerSpecifier = [obj containerSpecifier];
+                        else
+                            containerSpecifier = nil;
+                    }
                 }
             }
             
-            if ([containerSpecifier isKindOfClass:[NSPropertySpecifier 
class]]) {
-                removeContainer = [[containerSpecifier containerSpecifier] 
objectsByEvaluatingSpecifier];
-                removeKey = [containerSpecifier key];
-            } else if (containerSpecifier) {
-                removeContainer = [containerSpecifier 
objectsByEvaluatingSpecifier];
-                // make sure this is a valid object, so not something like a 
range specifier
-                if ([removeContainer 
respondsToSelector:@selector(objectSpecifier)] == NO) {
-                    removeContainer = nil;
-                } else {
-                    containerClassDescription = [removeContainer 
scriptClassDescription];
-                    for (NSString *key in [containerClassDescription 
toManyRelationshipKeys]) {
-                        if ([containerClassDescription 
hasWritablePropertyForKey:key] &&
-                            [removeClassDescription 
isKindOfClassDescription:[containerClassDescription 
classDescriptionForKey:key]]) {
-                            removeKey = key;
-                            break;
+            if (containerSpecifier && removeKey == nil) {
+                if ([containerSpecifier isKindOfClass:[NSPropertySpecifier 
class]]) {
+                    removeContainer = [[containerSpecifier containerSpecifier] 
objectsByEvaluatingSpecifier];
+                    removeKey = [containerSpecifier key];
+                } else if (containerSpecifier) {
+                    removeContainer = [containerSpecifier 
objectsByEvaluatingSpecifier];
+                    // make sure this is a valid object, so not something like 
a range specifier
+                    if ([removeContainer 
respondsToSelector:@selector(objectSpecifier)] == NO) {
+                        removeContainer = nil;
+                    } else {
+                        containerClassDescription = [removeContainer 
scriptClassDescription];
+                        for (NSString *key in [containerClassDescription 
toManyRelationshipKeys]) {
+                            if ([containerClassDescription 
hasWritablePropertyForKey:key] &&
+                                [removeClassDescription 
isKindOfClassDescription:[containerClassDescription 
classDescriptionForKey:key]]) {
+                                removeKey = key;
+                                break;
+                            }
                         }
                     }
                 }

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