Skip to content

Commit 494d037

Browse files
Setup for custom title delay settings.
1 parent 29b75f7 commit 494d037

File tree

1 file changed

+63
-6
lines changed

1 file changed

+63
-6
lines changed

sources/iTermDelayedTitleSetter.m

Lines changed: 63 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,89 @@
77
//
88

99
#import "iTermDelayedTitleSetter.h"
10+
#import "DebugLogging.h"
1011

1112
NSString *const kDelayedTitleSetterSetTitle = @"kDelayedTitleSetterSetTitle";
1213
NSString *const kDelayedTitleSetterTitleKey = @"title";
1314

15+
static NSString * const kDelayedTitleSetterCustomDelayKey = @"DelayedTitleCustomDelayTimeInterval";
16+
1417
static const NSTimeInterval kDelay = 0.1;
1518

19+
static const char * kDelayedTitleSetterNSTimeIntervalObjCType = @encode(NSTimeInterval);
20+
21+
static const char * kDelayedTitleSetterFloatObjCType = @encode(float);
22+
1623
@interface iTermDelayedTitleSetter()
1724
@property(nonatomic, assign) NSTimer *timer;
1825
@property(nonatomic, copy) NSString *pendingTitle;
1926
@end
2027

2128
@implementation iTermDelayedTitleSetter
2229

30+
+ (void) initialize {
31+
[super initialize];
32+
[[NSUserDefaults standardUserDefaults] registerDefaults:@{ kDelayedTitleSetterCustomDelayKey : @(kDelay) }];
33+
}
34+
2335
- (void)dealloc {
2436
[_pendingTitle release];
2537
[super dealloc];
2638
}
2739

40+
- (NSTimeInterval) titleDelayDuration {
41+
NSNumber *titleDelayDurationNumber = [[NSUserDefaults standardUserDefaults] objectForKey:kDelayedTitleSetterCustomDelayKey];
42+
43+
if (![titleDelayDurationNumber isKindOfClass:[NSNumber class]]) {
44+
// Validate the duration, if it's not a number remove it.
45+
46+
DLog(@"duration isn't a number! (%@) %@", NSStringFromClass([titleDelayDurationNumber class]), titleDelayDurationNumber);
47+
48+
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kDelayedTitleSetterCustomDelayKey];
49+
50+
[[NSUserDefaults standardUserDefaults] synchronize];
51+
52+
titleDelayDurationNumber = @(kDelay);
53+
} else {
54+
const char *titleDelayDurationObjCType = [titleDelayDurationNumber objCType];
55+
56+
if (strcmp(titleDelayDurationObjCType, kDelayedTitleSetterNSTimeIntervalObjCType) != 0) {
57+
if (strcmp(titleDelayDurationObjCType, kDelayedTitleSetterFloatObjCType) != 0) {
58+
DLog(@"types not equal: ori: %s saved: %s", kDelayedTitleSetterNSTimeIntervalObjCType, titleDelayDurationObjCType);
59+
60+
titleDelayDurationNumber = @(kDelay);
61+
}
62+
}
63+
}
64+
65+
NSTimeInterval titleDelayDuration = [titleDelayDurationNumber doubleValue];
66+
67+
if (titleDelayDuration < 0) {
68+
titleDelayDuration = kDelay;
69+
70+
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kDelayedTitleSetterCustomDelayKey];
71+
72+
[[NSUserDefaults standardUserDefaults] synchronize];
73+
}
74+
75+
return titleDelayDuration;
76+
}
77+
2878
- (void)setTitle:(NSString *)title {
2979
self.pendingTitle = title;
30-
if (!self.timer) {
31-
self.timer = [NSTimer scheduledTimerWithTimeInterval:kDelay
32-
target:self
33-
selector:@selector(timerDidFire:)
34-
userInfo:nil
35-
repeats:NO];
80+
81+
NSTimeInterval timerDelay = [self titleDelayDuration];
82+
83+
if (timerDelay > 0) {
84+
if (!self.timer) {
85+
self.timer = [NSTimer scheduledTimerWithTimeInterval:[self titleDelayDuration]
86+
target:self
87+
selector:@selector(timerDidFire:)
88+
userInfo:nil
89+
repeats:NO];
90+
}
91+
} else {
92+
[self timerDidFire:nil];
3693
}
3794
}
3895

0 commit comments

Comments
 (0)