cocoadock 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/cocoadock/cocoadock.m +139 -0
- data/lib/cocoadock/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4eef3e193759ac51e31073e02a8861b457a4012b72c2a91c4387235db3ce2696
|
|
4
|
+
data.tar.gz: becec7e1af13027c9f5c25dc6d8c50e3be19cb23e6ce5b8d9d59aadcfbe8c437
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 29e8df3ec0d53f627bd04183b7acfed4a9b2bc85cd93939704b7df52a6c603d9e3eae7c8745a27db971ae433b9d7f195def24a3069abfdbe29f280671e118d8c
|
|
7
|
+
data.tar.gz: c456df1df1c72f9d1923991ec089b96b3c60a6d5c0927824bab07166bc7fd292e0e57d9ca4474d43a0afba8e0214afbc6df2e782092262829a6a6bf11fa9c238
|
data/ext/cocoadock/cocoadock.m
CHANGED
|
@@ -8,6 +8,131 @@ VALUE cocoadock_initialize(VALUE self);
|
|
|
8
8
|
VALUE cocoadock_is_app_to_dock(VALUE self, VALUE path);
|
|
9
9
|
VALUE cocoadock_add_app_to_dock(VALUE self, VALUE path);
|
|
10
10
|
VALUE cocoadock_remove_app_from_dock(VALUE self, VALUE path);
|
|
11
|
+
VALUE cocoadock_remove_others_in_dock(VALUE self);
|
|
12
|
+
VALUE cocoadock_remove_all_apps_in_dock(VALUE self);
|
|
13
|
+
|
|
14
|
+
NSMutableArray *LoadDockApps(void) {
|
|
15
|
+
CFArrayRef persistentApps = CFPreferencesCopyAppValue(
|
|
16
|
+
CFSTR("persistent-apps"),
|
|
17
|
+
CFSTR("com.apple.dock")
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
if (!persistentApps) {
|
|
21
|
+
return [NSMutableArray array];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
NSMutableArray *apps =
|
|
25
|
+
[(__bridge NSArray *)persistentApps mutableCopy];
|
|
26
|
+
|
|
27
|
+
CFRelease(persistentApps);
|
|
28
|
+
return apps;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
void SaveDockApps(NSArray *apps) {
|
|
32
|
+
CFPreferencesSetAppValue(
|
|
33
|
+
CFSTR("persistent-apps"),
|
|
34
|
+
(__bridge CFArrayRef)apps,
|
|
35
|
+
CFSTR("com.apple.dock")
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
CFPreferencesAppSynchronize(CFSTR("com.apple.dock"));
|
|
39
|
+
|
|
40
|
+
system("killall Dock");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
NSMutableArray *LoadDockOthers(void) {
|
|
44
|
+
CFArrayRef persistentOthers = CFPreferencesCopyAppValue(
|
|
45
|
+
CFSTR("persistent-others"),
|
|
46
|
+
CFSTR("com.apple.dock")
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
if (!persistentOthers) {
|
|
50
|
+
return [NSMutableArray array];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
NSMutableArray *others =
|
|
54
|
+
[(__bridge NSArray *)persistentOthers mutableCopy];
|
|
55
|
+
|
|
56
|
+
CFRelease(persistentOthers);
|
|
57
|
+
return others;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
void SaveDockOthers(NSArray *others) {
|
|
61
|
+
CFPreferencesSetAppValue(
|
|
62
|
+
CFSTR("persistent-others"),
|
|
63
|
+
(__bridge CFArrayRef)others,
|
|
64
|
+
CFSTR("com.apple.dock")
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
CFPreferencesAppSynchronize(CFSTR("com.apple.dock"));
|
|
68
|
+
|
|
69
|
+
system("killall Dock");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
BOOL RemoveAllAppsInDock(void) {
|
|
73
|
+
|
|
74
|
+
int attempts = 0;
|
|
75
|
+
|
|
76
|
+
while (attempts < 3) {
|
|
77
|
+
|
|
78
|
+
NSMutableArray *apps = LoadDockApps();
|
|
79
|
+
|
|
80
|
+
if (apps.count == 0) {
|
|
81
|
+
return YES; // Already empty
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
[apps removeAllObjects];
|
|
85
|
+
|
|
86
|
+
SaveDockApps(apps);
|
|
87
|
+
|
|
88
|
+
// Give Dock time to restart & commit
|
|
89
|
+
[NSThread sleepForTimeInterval:0.25];
|
|
90
|
+
|
|
91
|
+
// Verify
|
|
92
|
+
NSMutableArray *verify = LoadDockApps();
|
|
93
|
+
if (verify.count == 0) {
|
|
94
|
+
return YES;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
attempts++;
|
|
98
|
+
[NSThread sleepForTimeInterval:0.1];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return NO;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
BOOL RemoveOthersInDock(void) {
|
|
105
|
+
|
|
106
|
+
int attempts = 0;
|
|
107
|
+
|
|
108
|
+
while (attempts < 3) {
|
|
109
|
+
|
|
110
|
+
NSMutableArray *others = LoadDockOthers();
|
|
111
|
+
|
|
112
|
+
if (others.count == 0) {
|
|
113
|
+
return YES; // Already empty
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
[others removeAllObjects];
|
|
117
|
+
|
|
118
|
+
SaveDockOthers(others);
|
|
119
|
+
|
|
120
|
+
// Give Dock time to restart and commit
|
|
121
|
+
[NSThread sleepForTimeInterval:0.25];
|
|
122
|
+
|
|
123
|
+
// Verify
|
|
124
|
+
NSMutableArray *verify = LoadDockOthers();
|
|
125
|
+
if (verify.count == 0) {
|
|
126
|
+
return YES;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
attempts++;
|
|
130
|
+
[NSThread sleepForTimeInterval:0.1];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return NO;
|
|
134
|
+
}
|
|
135
|
+
|
|
11
136
|
|
|
12
137
|
BOOL IsAppInDock(NSString *bundleID) {
|
|
13
138
|
if (!bundleID) return NO;
|
|
@@ -236,6 +361,10 @@ void removeAppFromDock(const char* app_path) {
|
|
|
236
361
|
}
|
|
237
362
|
}
|
|
238
363
|
|
|
364
|
+
void removeOthersInDock () {
|
|
365
|
+
RemoveOthersInDock();
|
|
366
|
+
}
|
|
367
|
+
|
|
239
368
|
RUBY_FUNC_EXPORTED void
|
|
240
369
|
Init_cocoadock(void)
|
|
241
370
|
{
|
|
@@ -245,6 +374,8 @@ Init_cocoadock(void)
|
|
|
245
374
|
rb_define_method(rb_mCocoadockClass, "add_app", cocoadock_add_app_to_dock, 1);
|
|
246
375
|
rb_define_method(rb_mCocoadockClass, "app_in_dock?", cocoadock_is_app_to_dock, 1);
|
|
247
376
|
rb_define_method(rb_mCocoadockClass, "remove_app", cocoadock_remove_app_from_dock, 1);
|
|
377
|
+
rb_define_method(rb_mCocoadockClass, "remove_others", cocoadock_remove_others_in_dock, 0);
|
|
378
|
+
rb_define_method(rb_mCocoadockClass, "remove_all", cocoadock_remove_all_apps_in_dock, 0);
|
|
248
379
|
}
|
|
249
380
|
|
|
250
381
|
VALUE cocoadock_initialize(VALUE self) {
|
|
@@ -271,3 +402,11 @@ VALUE cocoadock_remove_app_from_dock(VALUE self, VALUE path) {
|
|
|
271
402
|
//NSString *appPath = [[NSString alloc] initWithCString:c_app_path encoding:NSUTF8StringEncoding];
|
|
272
403
|
removeAppFromDock(c_app_path);
|
|
273
404
|
}
|
|
405
|
+
|
|
406
|
+
VALUE cocoadock_remove_others_in_dock(VALUE self) {
|
|
407
|
+
removeOthersInDock();
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
VALUE cocoadock_remove_all_apps_in_dock(VALUE self) {
|
|
411
|
+
RemoveAllAppsInDock();
|
|
412
|
+
}
|
data/lib/cocoadock/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cocoadock
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tommy Jeff
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-02-
|
|
10
|
+
date: 2026-02-12 00:00:00.000000000 Z
|
|
11
11
|
dependencies: []
|
|
12
12
|
description: Cocoa dock functions for Ruby on macOS
|
|
13
13
|
email:
|