-
Notifications
You must be signed in to change notification settings - Fork 0
/
WMDashboardManager.m
78 lines (57 loc) · 1.92 KB
/
WMDashboardManager.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//
// WMDashboardManager.m
// Widget Manager
//
// Created by Marc Charbonneau on 3/14/06.
// Copyright 2006 __MyCompanyName__. All rights reserved.
//
#import "WMDashboardManager.h"
#import "WMWidget.h"
@implementation WMDashboardManager
#pragma mark API
+ (id)sharedManager;
{
static id sharedManager = nil;
if ( !sharedManager )
sharedManager = [[self alloc] init];
return sharedManager;
}
- (void)killDock;
{
system( "ps axwww | grep -i CoreServices/Dock.app/Contents/MacOS/Dock | grep -v grep | awk '{print $1}' | xargs kill -3" );
// todo: I should have a better way of finding the dock process. This returns the PID of Dock for all users,
// which fails, but is still undesirable.
// For some users the dock will not re-launch automatically; this should take care of that.
[[NSWorkspace sharedWorkspace] launchAppWithBundleIdentifier:@"com.apple.dock"
options:NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor:nil
launchIdentifier:nil];
}
- (void)refresh;
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CFStringRef key = (CFStringRef)@"layer-gadgets";
CFStringRef appID = (CFStringRef)@"com.apple.dashboard";
CFPreferencesAppSynchronize( appID );
NSArray *infoArray = (NSArray *)CFPreferencesCopyValue( key, appID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost );
NSEnumerator *enumerator = [infoArray objectEnumerator];
NSDictionary *info;
NSMutableArray *paths = [NSMutableArray arrayWithCapacity:[infoArray count]];
while ( info = [enumerator nextObject] )
{
NSString *path = [info objectForKey:@"path"];
if ( path != nil )
{
[paths addObject:[path stringByStandardizingPath]];
}
}
[infoArray release];
[_runningWidgetPaths release];
_runningWidgetPaths = [paths copy];
[pool release];
}
- (BOOL)isWidgetRunning:(WMWidget *)widget;
{
return [_runningWidgetPaths containsObject:[widget path]];
}
@end