1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-02-15 02:44:42 +00:00

dock badging should be a bit more accurate

This commit is contained in:
Mitchell Livingston 2006-11-05 20:35:00 +00:00
parent b11b48e804
commit d48f684f63
2 changed files with 40 additions and 65 deletions

View file

@ -29,15 +29,10 @@
@interface Badger : NSObject { @interface Badger : NSObject {
NSImage * fDockIcon, * fBadgedDockIcon, NSImage * fDockIcon, * fBadge, * fUploadBadge, * fDownloadBadge;
* fBadge, * fUploadBadge, * fDownloadBadge;
NSDictionary * fAttributes; NSDictionary * fAttributes;
BOOL fNonDefault;
NSLock * fLock;
int fCompleted;
BOOL fSpeedShown;
} }
- (void) updateBadgeWithCompleted: (int) completed uploadRate: (float) uploadRate downloadRate: (float) downloadRate; - (void) updateBadgeWithCompleted: (int) completed uploadRate: (float) uploadRate downloadRate: (float) downloadRate;

View file

@ -39,7 +39,6 @@
{ {
fBadge = [NSImage imageNamed: @"Badge"]; fBadge = [NSImage imageNamed: @"Badge"];
fDockIcon = [[NSApp applicationIconImage] copy]; fDockIcon = [[NSApp applicationIconImage] copy];
fBadgedDockIcon = [fDockIcon copy];
fUploadBadge = [NSImage imageNamed: @"UploadBadge"]; fUploadBadge = [NSImage imageNamed: @"UploadBadge"];
fDownloadBadge = [NSImage imageNamed: @"DownloadBadge"]; fDownloadBadge = [NSImage imageNamed: @"DownloadBadge"];
@ -56,10 +55,7 @@
[stringShadow release]; [stringShadow release];
fLock = [[NSLock alloc] init]; fNonDefault = NO;
fCompleted = 0;
fSpeedShown = NO;
} }
return self; return self;
@ -68,28 +64,22 @@
- (void) dealloc - (void) dealloc
{ {
[fDockIcon release]; [fDockIcon release];
[fBadgedDockIcon release];
[fAttributes release]; [fAttributes release];
[fLock release];
[super dealloc]; [super dealloc];
} }
- (void) updateBadgeWithCompleted: (int) completed uploadRate: (float) uploadRate downloadRate: (float) downloadRate - (void) updateBadgeWithCompleted: (int) completed uploadRate: (float) uploadRate downloadRate: (float) downloadRate
{ {
NSImage * dockIcon = nil;
NSSize iconSize = [fDockIcon size]; NSSize iconSize = [fDockIcon size];
[fLock lock]; //acquire lock to ensure completed badge is accurate NSImage * dockIcon = nil;
//set completed badge
if (fCompleted != completed)
{
dockIcon = [fDockIcon copy];
//set completed badge to top right //set completed badge to top right
if (completed > 0) if (completed > 0)
{ {
dockIcon = [fDockIcon copy];
NSRect badgeRect; NSRect badgeRect;
badgeRect.size = [fBadge size]; badgeRect.size = [fBadge size];
badgeRect.origin.x = iconSize.width - badgeRect.size.width; badgeRect.origin.x = iconSize.width - badgeRect.size.width;
@ -111,14 +101,6 @@
[dockIcon unlockFocus]; [dockIcon unlockFocus];
} }
[fBadgedDockIcon release];
fBadgedDockIcon = [dockIcon copy];
fCompleted = completed;
}
[fLock unlock];
//set upload and download rate badges //set upload and download rate badges
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSString * uploadRateString = uploadRate >= 0.1 && [defaults boolForKey: @"BadgeUploadRate"] NSString * uploadRateString = uploadRate >= 0.1 && [defaults boolForKey: @"BadgeUploadRate"]
@ -129,6 +111,9 @@
BOOL speedShown = uploadRateString || downloadRateString; BOOL speedShown = uploadRateString || downloadRateString;
if (speedShown) if (speedShown)
{ {
if (!dockIcon)
dockIcon = [fDockIcon copy];
NSRect badgeRect; NSRect badgeRect;
badgeRect.size = [fUploadBadge size]; badgeRect.size = [fUploadBadge size];
badgeRect.origin = NSZeroPoint; badgeRect.origin = NSZeroPoint;
@ -139,9 +124,6 @@
stringRect.size.height -= badgeBottomExtra; stringRect.size.height -= badgeBottomExtra;
stringRect.origin.y += badgeBottomExtra; stringRect.origin.y += badgeBottomExtra;
if (!dockIcon)
dockIcon = [fBadgedDockIcon copy];
[dockIcon lockFocus]; [dockIcon lockFocus];
if (uploadRateString) if (uploadRateString)
@ -173,27 +155,25 @@
[dockIcon unlockFocus]; [dockIcon unlockFocus];
} }
if (dockIcon || fSpeedShown) if (fNonDefault || dockIcon)
{ {
if (!dockIcon) if (!dockIcon)
dockIcon = [fBadgedDockIcon copy]; {
fNonDefault = NO;
dockIcon = [fDockIcon retain];
}
else
fNonDefault = YES;
[NSApp setApplicationIconImage: dockIcon]; [NSApp setApplicationIconImage: dockIcon];
[dockIcon release]; [dockIcon release];
} }
fSpeedShown = speedShown;
} }
- (void) clearBadge - (void) clearBadge
{ {
[fBadgedDockIcon release];
fBadgedDockIcon = [fDockIcon copy];
[NSApp setApplicationIconImage: fDockIcon]; [NSApp setApplicationIconImage: fDockIcon];
fNonDefault = NO;
fCompleted = 0;
fSpeedShown = NO;
} }
@end @end