Skip to content

Commit ad8e5ba

Browse files
committed
Keep track of refs using NSMenuItem -representedObject instead of ivars
1 parent fe4b10e commit ad8e5ba

File tree

4 files changed

+38
-33
lines changed

4 files changed

+38
-33
lines changed

Classes/Controllers/PBGitHistoryController.m

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -640,25 +640,9 @@ - (NSArray *)menuItemsForPaths:(NSArray *)paths
640640

641641
#pragma mark Repository Methods
642642

643-
- (id <PBGitRefish>)refishForSender:(id)sender
644-
{
645-
return [self refishForSender:sender refishTypes:nil];
646-
}
647-
648643
- (id <PBGitRefish>)refishForSender:(id)sender refishTypes:(NSArray *)types
649644
{
650-
if ([sender isKindOfClass:[PBRefMenuItem class]]) {
651-
id <PBGitRefish> refish = [[(PBRefMenuItem *)sender refishs] firstObject];
652-
653-
if (!types || [types indexOfObject:[refish refishType]] != NSNotFound)
654-
return refish;
655-
return nil;
656-
}
657-
658-
if ([types indexOfObject:kGitXCommitType] == NSNotFound)
659-
return nil;
660-
661-
return self.selectedCommits.firstObject;
645+
return [self.windowController performSelector:@selector(refishForSender:refishTypes:) withObject:sender withObject:types];
662646
}
663647

664648
- (IBAction)fetchRemote:(id)sender

Classes/Controllers/PBGitWindowController.m

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ - (BOOL) validateMenuItem:(NSMenuItem *)menuItem remoteTitle:(NSString *)localis
9595

9696
if (ref.isRemote) {
9797
menuItem.title = [NSString stringWithFormat:NSLocalizedString(localisationKeyWithRemote, @""), ref.remoteName];
98+
menuItem.representedObject = ref;
9899
return YES;
99100
}
100101

@@ -268,6 +269,24 @@ - (void)revealURLsInFinder:(NSArray <NSURL *> *)fileURLs
268269

269270
#pragma mark IBActions
270271

272+
- (id <PBGitRefish>)refishForSender:(id)sender refishTypes:(NSArray *)types
273+
{
274+
if ([sender isKindOfClass:[NSMenuItem class]]) {
275+
id <PBGitRefish> refish = nil;
276+
if ([(refish = [(NSMenuItem *)sender representedObject]) conformsToProtocol:@protocol(PBGitRefish)]) {
277+
if (!types || [types indexOfObject:[refish refishType]] != NSNotFound)
278+
return refish;
279+
}
280+
281+
return nil;
282+
}
283+
284+
if ([types indexOfObject:kGitXCommitType] == NSNotFound)
285+
return nil;
286+
287+
return sidebarController.historyViewController.selectedCommits.firstObject;
288+
}
289+
271290
- (IBAction) showAddRemoteSheet:(id)sender
272291
{
273292
[self addRemote:sender];
@@ -324,6 +343,7 @@ - (void)performFetchForRef:(PBGitRef *)ref
324343
}
325344

326345
- (IBAction) fetchRemote:(id)sender {
346+
/* FIXME: this is wrong, you can right-click in the sidebar but try to fetch the *selected* ref */
327347
PBGitRef *ref = [self selectedItem].ref;
328348
[self performFetchForRef:ref];
329349
}
@@ -520,10 +540,9 @@ - (void) createBranch:(id)sender
520540
{
521541
PBGitRef *currentRef = [self.repository.currentBranch ref];
522542

523-
id <PBGitRefish> refish = nil;
524-
if ([sender isKindOfClass:[PBRefMenuItem class]]) {
525-
refish = [[(PBRefMenuItem *)sender refishs] firstObject];
526-
} else {
543+
/* WIP: must check */
544+
id <PBGitRefish> refish = [self refishForSender:sender refishTypes:nil];
545+
if (!refish) {
527546
PBGitCommit *selectedCommit = sidebarController.historyViewController.selectedCommits.firstObject;
528547
if (!selectedCommit || [selectedCommit hasRef:currentRef]) {
529548
refish = currentRef;
@@ -554,12 +573,11 @@ - (void) createBranch:(id)sender
554573
}];
555574
}
556575

557-
- (void) createTag:(PBRefMenuItem *)sender
576+
- (IBAction) createTag:(id)sender
558577
{
559-
id <PBGitRefish> refish = nil;
560-
if ([sender isKindOfClass:[PBRefMenuItem class]]) {
561-
refish = [sender refishs].firstObject;
562-
} else {
578+
/* WIP: must check */
579+
id <PBGitRefish> refish = [self refishForSender:sender refishTypes:nil];
580+
if (!refish) {
563581
PBGitCommit *selectedCommit = sidebarController.historyViewController.selectedCommits.firstObject;
564582
if (selectedCommit)
565583
refish = selectedCommit;

Classes/Views/PBRefMenuItem.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@
1111
#import "PBGitCommit.h"
1212

1313
@interface PBRefMenuItem : NSMenuItem {
14-
NSArray<id<PBGitRefish>> *refishs;
1514
}
1615

17-
@property NSArray<id<PBGitRefish>> *refishs;
1816

1917
+ (PBRefMenuItem *) separatorItem;
2018
+ (NSArray *) defaultMenuItemsForRef:(PBGitRef *)refs inRepository:(PBGitRepository *)repo target:(id)target;

Classes/Views/PBRefMenuItem.m

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#import "PBGitRevSpecifier.h"
1212

1313
@implementation PBRefMenuItem
14-
@synthesize refishs;
1514

1615
+ (PBRefMenuItem *) itemWithTitle:(NSString *)title action:(SEL)selector enabled:(BOOL)isEnabled
1716
{
@@ -57,7 +56,9 @@ + (PBRefMenuItem *) separatorItem
5756

5857
for (PBRefMenuItem *item in items) {
5958
item.target = target;
60-
item.refishs = @[ref];
59+
if (!item.representedObject) {
60+
item.representedObject = ref;
61+
}
6162
}
6263

6364
return items;
@@ -170,11 +171,11 @@ + (PBRefMenuItem *) separatorItem
170171
for (NSString *remote in remoteNames) {
171172
PBRefMenuItem *remoteItem = [PBRefMenuItem itemWithTitle:remote action:@selector(pushToRemote:) enabled:YES];
172173
remoteItem.target = target;
173-
remoteItem.refishs = @[ref];
174174
remoteItem.representedObject = remote;
175175
[remotesMenu addItem:remoteItem];
176176
}
177177
[pushToItem setSubmenu:remotesMenu];
178+
pushToItem.representedObject = ref;
178179
[items addObject:pushToItem];
179180
}
180181
}
@@ -194,7 +195,9 @@ + (PBRefMenuItem *) separatorItem
194195

195196
for (PBRefMenuItem *item in items) {
196197
item.target = target;
197-
item.refishs = @[ref];
198+
if (!item.representedObject) {
199+
item.representedObject = ref;
200+
}
198201
}
199202

200203
return items;
@@ -251,7 +254,9 @@ + (PBRefMenuItem *) separatorItem
251254

252255
for (PBRefMenuItem *item in items) {
253256
item.target = target;
254-
item.refishs = commits;
257+
if (!item.representedObject) {
258+
item.representedObject = isSingleCommitSelection ? firstCommit : commits;
259+
}
255260
}
256261

257262
return items;

0 commit comments

Comments
 (0)