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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd9b3b0da8d7451cf3d5bb0c8b3f7094aa8d3e799e98b496bca70bd33c288d85
4
- data.tar.gz: 0f485accdde26fe341e0f1a4fbc789e6148b54720deb57f07a5475cc1e6aed6a
3
+ metadata.gz: 4eef3e193759ac51e31073e02a8861b457a4012b72c2a91c4387235db3ce2696
4
+ data.tar.gz: becec7e1af13027c9f5c25dc6d8c50e3be19cb23e6ce5b8d9d59aadcfbe8c437
5
5
  SHA512:
6
- metadata.gz: 2338f7ca8fa704d59d04d70fd85b49dbeafed777fea482eb2e529238fe9a013262584779fd631b28b36ae744dd2b87556a633aed16bedf8173d633487274ca77
7
- data.tar.gz: de6373a9858118b3812f7287061775a298c54166f6322416c7c484b2dc3f3926deb4e346343c00c571a7d421bd06bda283744eec77d8bf4ac91f3e6dc34f4e40
6
+ metadata.gz: 29e8df3ec0d53f627bd04183b7acfed4a9b2bc85cd93939704b7df52a6c603d9e3eae7c8745a27db971ae433b9d7f195def24a3069abfdbe29f280671e118d8c
7
+ data.tar.gz: c456df1df1c72f9d1923991ec089b96b3c60a6d5c0927824bab07166bc7fd292e0e57d9ca4474d43a0afba8e0214afbc6df2e782092262829a6a6bf11fa9c238
@@ -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
+ }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cocoadock
4
- VERSION = "0.2.0"
4
+ VERSION = "0.4.0"
5
5
  end
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.2.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-11 00:00:00.000000000 Z
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: