Skip to content
Snippets Groups Projects
Commit c0591552 authored by George Nachman's avatar George Nachman
Browse files

Wrap-around navigation among split panes.

parent 6d8fe232
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -31,6 +31,9 @@
- (BOOL)allWithBlock:(BOOL (^)(ObjectType anObject))block;
- (ObjectType)maxWithComparator:(NSComparisonResult (^)(ObjectType a, ObjectType b))comparator;
 
// All objects equal to the minimum value.
- (NSArray *)mininumsWithComparator:(NSComparisonResult (^)(id, id))comparator;
// Does the array contain at least one object not equal to @c anObject?
- (BOOL)containsObjectBesides:(ObjectType)anObject;
- (BOOL)containsObjectBesidesObjectsInArray:(NSArray *)array;
Loading
Loading
Loading
Loading
@@ -103,6 +103,24 @@
return max;
}
 
- (NSArray *)mininumsWithComparator:(NSComparisonResult (^)(id, id))comparator {
id min = nil;
for (id object in self) {
if (min == nil || comparator(min, object) == NSOrderedDescending) {
min = object;
}
}
NSMutableArray *result = [NSMutableArray array];
if (min) {
for (id object in self) {
if (comparator(object, min) == NSOrderedSame) {
[result addObject:object];
}
}
}
return result;
}
- (BOOL)anyWithBlock:(BOOL (^)(id anObject))block {
for (id object in self) {
if (block(object)) {
Loading
Loading
Loading
Loading
@@ -1007,9 +1007,30 @@ static void SetAgainstGrainDim(BOOL isVertical, NSSize *dest, CGFloat value) {
verticalDir:(BOOL)verticalDir
after:(BOOL)after {
NSArray<PTYSession *> *sessions = [self sessionsAdjacentToSession:session verticalDir:verticalDir after:after];
return [sessions maxWithComparator:^NSComparisonResult(PTYSession *a, PTYSession *b) {
return [a.activityCounter compare:b.activityCounter];
}];
if (sessions.count) {
return [sessions maxWithComparator:^NSComparisonResult(PTYSession *a, PTYSession *b) {
return [a.activityCounter compare:b.activityCounter];
}];
} else {
sessions = [self sessionsInProjectionOfSession:session verticalDirection:verticalDir after:!after];
NSArray<PTYSession *> *wraparounds = [sessions mininumsWithComparator:^NSComparisonResult(PTYSession *a, PTYSession *b) {
NSRect aRect = [root_ convertRect:a.view.frame fromView:a.view.superview];
NSRect bRect = [root_ convertRect:b.view.frame fromView:b.view.superview];
if (verticalDir) {
SwapSize(&aRect.size);
SwapPoint(&aRect.origin);
SwapSize(&bRect.size);
SwapPoint(&bRect.origin);
}
const CGFloat bLeft = after ? NSMinX(bRect) : -NSMaxX(bRect);
const CGFloat aLeft = after ? NSMinX(aRect) : -NSMaxX(aRect);
return [@(aLeft) compare:@(bLeft)];
}];
return [wraparounds maxWithComparator:^NSComparisonResult(PTYSession *a, PTYSession *b) {
return [a.activityCounter compare:b.activityCounter];
}];
}
}
 
- (PTYSession*)sessionLeftOf:(PTYSession*)session {
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment