cocoadock 0.2.0 → 0.3.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: 854f6ae805d2626929da28f513cd471e2c252be893a0c062823f52d157b0bb44
4
+ data.tar.gz: 632c33c8faaa92152b5a68a8d9affe598fe8afcbf0b3bc5691f19def81b94ae3
5
5
  SHA512:
6
- metadata.gz: 2338f7ca8fa704d59d04d70fd85b49dbeafed777fea482eb2e529238fe9a013262584779fd631b28b36ae744dd2b87556a633aed16bedf8173d633487274ca77
7
- data.tar.gz: de6373a9858118b3812f7287061775a298c54166f6322416c7c484b2dc3f3926deb4e346343c00c571a7d421bd06bda283744eec77d8bf4ac91f3e6dc34f4e40
6
+ metadata.gz: b3688a9af53f4d84559ac1374485dce4a38bf020a86427a0d7f2d5ce19b9eafcca844f7d630a568e42204b3401a4c44e592f95b2b57d19e1581af1474297ebe6
7
+ data.tar.gz: 6547eff88bb43c512e2879439c9891d5dcfed40ae8afe901c0582d6145fa2d6f1974f66360b6d29b41a166892690985e1b8b826c07e041c8c84ad8d040b17c75
@@ -8,6 +8,69 @@ 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
+
13
+ NSMutableArray *LoadDockOthers(void) {
14
+ CFArrayRef persistentOthers = CFPreferencesCopyAppValue(
15
+ CFSTR("persistent-others"),
16
+ CFSTR("com.apple.dock")
17
+ );
18
+
19
+ if (!persistentOthers) {
20
+ return [NSMutableArray array];
21
+ }
22
+
23
+ NSMutableArray *others =
24
+ [(__bridge NSArray *)persistentOthers mutableCopy];
25
+
26
+ CFRelease(persistentOthers);
27
+ return others;
28
+ }
29
+
30
+ void SaveDockOthers(NSArray *others) {
31
+ CFPreferencesSetAppValue(
32
+ CFSTR("persistent-others"),
33
+ (__bridge CFArrayRef)others,
34
+ CFSTR("com.apple.dock")
35
+ );
36
+
37
+ CFPreferencesAppSynchronize(CFSTR("com.apple.dock"));
38
+
39
+ system("killall Dock");
40
+ }
41
+
42
+ BOOL RemoveOthersInDock(void) {
43
+
44
+ int attempts = 0;
45
+
46
+ while (attempts < 3) {
47
+
48
+ NSMutableArray *others = LoadDockOthers();
49
+
50
+ if (others.count == 0) {
51
+ return YES; // Already empty
52
+ }
53
+
54
+ [others removeAllObjects];
55
+
56
+ SaveDockOthers(others);
57
+
58
+ // Give Dock time to restart and commit
59
+ [NSThread sleepForTimeInterval:0.25];
60
+
61
+ // Verify
62
+ NSMutableArray *verify = LoadDockOthers();
63
+ if (verify.count == 0) {
64
+ return YES;
65
+ }
66
+
67
+ attempts++;
68
+ [NSThread sleepForTimeInterval:0.1];
69
+ }
70
+
71
+ return NO;
72
+ }
73
+
11
74
 
12
75
  BOOL IsAppInDock(NSString *bundleID) {
13
76
  if (!bundleID) return NO;
@@ -236,6 +299,10 @@ void removeAppFromDock(const char* app_path) {
236
299
  }
237
300
  }
238
301
 
302
+ void removeOthersInDock () {
303
+ RemoveOthersInDock();
304
+ }
305
+
239
306
  RUBY_FUNC_EXPORTED void
240
307
  Init_cocoadock(void)
241
308
  {
@@ -245,6 +312,7 @@ Init_cocoadock(void)
245
312
  rb_define_method(rb_mCocoadockClass, "add_app", cocoadock_add_app_to_dock, 1);
246
313
  rb_define_method(rb_mCocoadockClass, "app_in_dock?", cocoadock_is_app_to_dock, 1);
247
314
  rb_define_method(rb_mCocoadockClass, "remove_app", cocoadock_remove_app_from_dock, 1);
315
+ rb_define_method(rb_mCocoadockClass, "remove_others", cocoadock_remove_others_in_dock, 0);
248
316
  }
249
317
 
250
318
  VALUE cocoadock_initialize(VALUE self) {
@@ -271,3 +339,7 @@ VALUE cocoadock_remove_app_from_dock(VALUE self, VALUE path) {
271
339
  //NSString *appPath = [[NSString alloc] initWithCString:c_app_path encoding:NSUTF8StringEncoding];
272
340
  removeAppFromDock(c_app_path);
273
341
  }
342
+
343
+ VALUE cocoadock_remove_others_in_dock(VALUE self) {
344
+ removeOthersInDock();
345
+ }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cocoadock
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
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.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tommy Jeff