aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-09-21 12:10:21 +0200
committerTeddy Wing2018-09-21 12:10:21 +0200
commit342a2bebed69e57be8a827ff977d636ae9392924 (patch)
tree78706a21188abb7ce372f5da0461eb6a37c3e53d
parentf6eb63bc9f55f76b5ad2d7496cbeb9afd0a5a0f4 (diff)
downloadDomeKey-342a2bebed69e57be8a827ff977d636ae9392924.tar.bz2
HeadphoneKey: Start of mode handling (WIP)
A nearly-wroking stab at making mode handling work. Here we store the current mode in the `HeadphoneKey` object. We try to save it when getting a mode back from `c_run_key_action()`, and use it as a filter when running `c_run_key_action()`. I had discovered a problem, though. During debugging, I found that the `_in_mode` ivar would end up pointing to the same thing as the current `trigger`. Guessed that this had to do with it being a const pointer, so I started to write some code to store the `Trigger` by value instead of by reference in `HeadphoneKey` `_in_mode`. At this point, a little frustrated, I thought about the overall problem of mode handling again. It occurred to me that I no longer like this idea of storing the current mode in the Objective-C object, as this recent work has left a bad taste in my mouth. Instead, I'm going to try moving mode handling into the Rust library, and make it opaque to the Objective-C code. Hoping that that approach will be a more pleasant endeavor.
-rw-r--r--DomeKey/HeadphoneKey.h3
-rw-r--r--DomeKey/HeadphoneKey.m33
2 files changed, 25 insertions, 11 deletions
diff --git a/DomeKey/HeadphoneKey.h b/DomeKey/HeadphoneKey.h
index cad78ab..9a8bab1 100644
--- a/DomeKey/HeadphoneKey.h
+++ b/DomeKey/HeadphoneKey.h
@@ -22,7 +22,8 @@ static const unsigned int TIMEOUT_MILLISECONDS = 1000;
@interface HeadphoneKey : NSObject {
NSArray *_mikeys;
NSMutableArray *_key_buffer;
- const Trigger *_in_mode;
+// const Trigger *_in_mode;
+ Trigger *_in_mode;
}
- (void)handleDeadKey:(HeadphoneButton)button;
diff --git a/DomeKey/HeadphoneKey.m b/DomeKey/HeadphoneKey.m
index b55c171..47583a7 100644
--- a/DomeKey/HeadphoneKey.m
+++ b/DomeKey/HeadphoneKey.m
@@ -15,6 +15,7 @@
self = [super init];
if (self) {
_key_buffer = [[NSMutableArray alloc] initWithCapacity:5];
+ _in_mode = NULL;
_mikeys = [DDHidAppleMikey allMikeys];
[_mikeys makeObjectsPerformSelector:@selector(setDelegate:)
@@ -79,19 +80,31 @@
.length = count
};
- const CKeyActionResult *result = c_run_key_action(trigger, NULL);
-
- if (result->kind &&
- *result->kind == ActionKind_Map) {
- const char *c = result->action;
- int i = 0;
- while (*c) {
- [KeyboardSimulator simpleKeyPressWithKey:result->action[i]];
- i++;
- *c++;
+ const CKeyActionResult *result = c_run_key_action(trigger, _in_mode);
+
+// if ([self maybeSwitchToMode:result]) {
+// goto cleanup;
+// }
+
+ if (result->kind) {
+ if (*result->kind == ActionKind_Map) {
+ const char *c = result->action;
+ int i = 0;
+ while (*c) {
+ [KeyboardSimulator simpleKeyPressWithKey:result->action[i]];
+ i++;
+ *c++;
+ }
+ }
+ else if (*result->kind == ActionKind_Mode) {
+// [self maybeSwitchToMode:result];
+ _in_mode = malloc(sizeof(Trigger))
+ *_in_mode = *result->in_mode;
+// memcpy(_in_mode, result->in_mode, sizeof(const Trigger));
}
}
+cleanup:
[_key_buffer removeAllObjects];
}