aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-08-16 05:26:40 +0200
committerTeddy Wing2018-08-16 06:55:02 +0200
commitb298df219eb007ea11e6c14a332fd3f4924ff7d2 (patch)
tree05030eb3c9d39b03a90c3fc26bced7fb1df67576
parenta74ee6a73ad437725557b05a304041337bb2ff31 (diff)
downloadDomeKey-b298df219eb007ea11e6c14a332fd3f4924ff7d2.tar.bz2
Use an `NSApplication`
Previously the `setListenInExclusiveMode:` call did appear to work, disabling the normal functioning of the headphone buttons. But my `NSLog`s in `ddhidAppleMikey:press:upOrDown:` didn't get printed, the method having not been called. Since all the other applications I found using DDHidLib were GUI apps using `NSApplication`, I decided to take this approach here. Set up the `NSApplication` in `main.c` and added a new `AppDelegate` class. It seems like the reference to my `HeadphoneKey` instance wasn't getting retained or something. When I moved the: HeadphoneKey *h = [[HeadphoneKey alloc] init]; line into `AppDelegate`'s `applicationDidFinishLaunching:`, nothing changed. However, when I moved all code from `HeadphoneKey` into `AppDelegate`, my `ddhidAppleMikey:press:upOrDown:` method _did_ get called. At that point, it was logical to try adding a `HeadphoneKey` instance variable and `init`ing into that variable. As a result, we now have a working `ddhidAppleMikey:press:upOrDown:` delegate method that correctly logs the headphone key events! Here are the reference applications I looked at using DDHidLib, found using a simple GitHub search: - https://github.com/radiant-player/radiant-player-mac/pull/450/files - https://github.com/7hil/mac_ear_control/blob/8859ed554517ce798b8ae7c2d0e78610b9994300/mac_ear_control/AppDelegate.m - https://github.com/7hil/mac_ear_control/blob/8859ed554517ce798b8ae7c2d0e78610b9994300/mac_ear_control/AppDelegate.m - https://github.com/schrekia/beardedspice-enhanced/blob/a9b78c0dbae6bca2cb0d2ecc362e4b7fe5b02129/BeardedSpiceControllers/BSCService.m - https://github.com/beardedspice/beardedspice/blob/8e1aea5bda68395e6b0d866bca9289a2a5ba40ed/BeardedSpiceControllers/BSCService.m - https://github.com/beardedspice/beardedspice/blob/8e1aea5bda68395e6b0d866bca9289a2a5ba40ed/BeardedSpiceControllers/BSCService.m - https://github.com/BarakaAka1Only/radiant-player-mac-BarakaLyrics/blob/1ce889bbb80f081209aff7936a329a3b426462e9/radiant-player-mac/AppDelegate.m - https://github.com/zsszatmari/MagicKeys/blob/210015d5da876cd7bb1daf73efa3c775c18e7973/MagicKeys-Agent/SPMediaKeyTap.m Thanks immensely this Cocoa With Love article from Matt Gallagher, which was invaluable in showing me how to create a minimal Cocoa application without needing a nib, Info.plist, or even application bundle (instead putting everything in a single executable, making it easier to distribute this as a command-line application with a built-in daemon): https://www.cocoawithlove.com/2010/09/minimalist-cocoa-programming.html
-rw-r--r--DomeKey.xcodeproj/project.pbxproj6
-rw-r--r--DomeKey.xcodeproj/xcuserdata/tw.xcuserdatad/xcschemes/xcschememanagement.plist2
-rw-r--r--DomeKey/AppDelegate.h16
-rw-r--r--DomeKey/AppDelegate.m18
-rw-r--r--DomeKey/main.m10
5 files changed, 47 insertions, 5 deletions
diff --git a/DomeKey.xcodeproj/project.pbxproj b/DomeKey.xcodeproj/project.pbxproj
index 6f61405..ff696e3 100644
--- a/DomeKey.xcodeproj/project.pbxproj
+++ b/DomeKey.xcodeproj/project.pbxproj
@@ -9,6 +9,7 @@
/* Begin PBXBuildFile section */
D110C9482122E2D80094F963 /* HeadphoneKey.m in Sources */ = {isa = PBXBuildFile; fileRef = D110C9472122E2D80094F963 /* HeadphoneKey.m */; };
D110C94A2122F1ED0094F963 /* libddhid.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D160C32221197983007D1B50 /* libddhid.a */; };
+ D11184622125206E00961687 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D11184612125206E00961687 /* AppDelegate.m */; };
D160C2A12118EF9D007D1B50 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D160C2A02118EF9D007D1B50 /* main.m */; };
/* End PBXBuildFile section */
@@ -65,6 +66,8 @@
/* Begin PBXFileReference section */
D110C9462122E2D80094F963 /* HeadphoneKey.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HeadphoneKey.h; sourceTree = "<group>"; };
D110C9472122E2D80094F963 /* HeadphoneKey.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HeadphoneKey.m; sourceTree = "<group>"; };
+ D11184602125206E00961687 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ D11184612125206E00961687 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
D160C29D2118EF9D007D1B50 /* DomeKey */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = DomeKey; sourceTree = BUILT_PRODUCTS_DIR; };
D160C2A02118EF9D007D1B50 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
D160C31521197983007D1B50 /* DDHidLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = DDHidLib.xcodeproj; path = lib/DDHidLib/DDHidLib.xcodeproj; sourceTree = "<group>"; };
@@ -105,6 +108,8 @@
D110C9462122E2D80094F963 /* HeadphoneKey.h */,
D110C9472122E2D80094F963 /* HeadphoneKey.m */,
D160C2A02118EF9D007D1B50 /* main.m */,
+ D11184602125206E00961687 /* AppDelegate.h */,
+ D11184612125206E00961687 /* AppDelegate.m */,
);
path = DomeKey;
sourceTree = "<group>";
@@ -225,6 +230,7 @@
files = (
D110C9482122E2D80094F963 /* HeadphoneKey.m in Sources */,
D160C2A12118EF9D007D1B50 /* main.m in Sources */,
+ D11184622125206E00961687 /* AppDelegate.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/DomeKey.xcodeproj/xcuserdata/tw.xcuserdatad/xcschemes/xcschememanagement.plist b/DomeKey.xcodeproj/xcuserdata/tw.xcuserdatad/xcschemes/xcschememanagement.plist
index 1112607..424ba24 100644
--- a/DomeKey.xcodeproj/xcuserdata/tw.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/DomeKey.xcodeproj/xcuserdata/tw.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -7,7 +7,7 @@
<key>DomeKey.xcscheme</key>
<dict>
<key>orderHint</key>
- <integer>1</integer>
+ <integer>0</integer>
</dict>
</dict>
</dict>
diff --git a/DomeKey/AppDelegate.h b/DomeKey/AppDelegate.h
new file mode 100644
index 0000000..6b1d9a4
--- /dev/null
+++ b/DomeKey/AppDelegate.h
@@ -0,0 +1,16 @@
+//
+// AppDelegate.h
+// DomeKey
+//
+// Created by tw on 8/16/18.
+// Copyright © 2018 tw. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "HeadphoneKey.h"
+
+@interface AppDelegate : NSObject <NSApplicationDelegate> {
+ HeadphoneKey *_headphone_key;
+}
+
+@end
diff --git a/DomeKey/AppDelegate.m b/DomeKey/AppDelegate.m
new file mode 100644
index 0000000..3e4f3d8
--- /dev/null
+++ b/DomeKey/AppDelegate.m
@@ -0,0 +1,18 @@
+//
+// AppDelegate.m
+// DomeKey
+//
+// Created by tw on 8/16/18.
+// Copyright © 2018 tw. All rights reserved.
+//
+
+#import "AppDelegate.h"
+
+@implementation AppDelegate
+
+- (void)applicationDidFinishLaunching:(NSNotification *)notification
+{
+ _headphone_key = [[HeadphoneKey alloc] init];
+}
+
+@end
diff --git a/DomeKey/main.m b/DomeKey/main.m
index 27df36e..e61929c 100644
--- a/DomeKey/main.m
+++ b/DomeKey/main.m
@@ -7,16 +7,18 @@
//
#import <Foundation/Foundation.h>
-#import "HeadphoneKey.h"
+#import "AppDelegate.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
+ [NSApplication sharedApplication];
+ AppDelegate *app = [[AppDelegate alloc] init];
+ [NSApp setDelegate:app];
+
// insert code here...
NSLog(@"Hello, World!");
- HeadphoneKey *h = [[HeadphoneKey alloc] init];
- while (YES) {
- }
+ [NSApp run];
}
return 0;
}