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