aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-10-29 21:03:16 +0100
committerTeddy Wing2018-10-29 21:03:16 +0100
commit9c3ca6c3ed6703881993a05051d997c686a24b0b (patch)
tree9f76d31ad27c419fe2d3a72b42620c3d94be9a87
parent44f6a2d5544e3ad49e5e3c52167c045aed1d56b2 (diff)
downloaddome-key-map-9c3ca6c3ed6703881993a05051d997c686a24b0b.tar.bz2
run_key_action(): Call a function pointer when mode changes
Take a function pointer argument that will be called whenever a mode is activated or deactivated. We'll be using this on the Objective-C side to play audio when the mode changes.
-rw-r--r--dome_key_map.h8
-rw-r--r--src/ffi.rs6
-rw-r--r--src/map.rs10
3 files changed, 16 insertions, 8 deletions
diff --git a/dome_key_map.h b/dome_key_map.h
index e1df9e5..97aa8f5 100644
--- a/dome_key_map.h
+++ b/dome_key_map.h
@@ -14,9 +14,9 @@ typedef enum {
} HeadphoneButton;
typedef enum {
- PlayAudio_Yes,
- PlayAudio_No,
-} PlayAudio;
+ ModeChange_Activated,
+ ModeChange_Deactivated,
+} ModeChange;
typedef struct State State;
@@ -51,7 +51,7 @@ void dome_key_logger_init(void);
Config *dome_key_parse_args(const char *const *args, size_t length, Config *config_ptr);
-void dome_key_run_key_action(State *state, Trigger trigger, PlayAudio play_audio);
+void dome_key_run_key_action(State *state, Trigger trigger, void (*on_mode_change)(ModeChange));
void dome_key_state_free(State *ptr);
diff --git a/src/ffi.rs b/src/ffi.rs
index 1ea2eae..55b0998 100644
--- a/src/ffi.rs
+++ b/src/ffi.rs
@@ -9,7 +9,7 @@ use xdg;
use {HeadphoneButton, MapGroup};
use config::{self, Config};
-use map::{PlayAudio, run_key_action};
+use map::{ModeChange, run_key_action};
use trial;
#[repr(C)]
@@ -90,7 +90,7 @@ pub extern "C" fn dome_key_state_load_map_group(ptr: *mut State) {
pub extern "C" fn dome_key_run_key_action(
state: *mut State,
trigger: Trigger,
- play_audio: PlayAudio,
+ on_mode_change: extern "C" fn(mode_change: ModeChange),
) {
let trigger = unsafe {
assert!(!trigger.buttons.is_null());
@@ -103,7 +103,7 @@ pub extern "C" fn dome_key_run_key_action(
&mut *state
};
- run_key_action(&mut state, trigger, play_audio);
+ run_key_action(&mut state, trigger, on_mode_change);
}
#[no_mangle]
diff --git a/src/map.rs b/src/map.rs
index f2cd770..54da17a 100644
--- a/src/map.rs
+++ b/src/map.rs
@@ -21,10 +21,16 @@ impl PlayAudio {
}
}
+#[repr(C)]
+pub enum ModeChange {
+ Activated,
+ Deactivated,
+}
+
pub fn run_key_action<'a>(
state: &mut State,
trigger: &'a [HeadphoneButton],
- play_audio: PlayAudio,
+ on_mode_change: extern "C" fn(mode_change: ModeChange),
) {
match state.map_group {
Some(ref map_group) => {
@@ -43,6 +49,7 @@ pub fn run_key_action<'a>(
// Err(e) => error!("{}", e),
// }
// }
+ on_mode_change(ModeChange::Deactivated);
return;
}
@@ -68,6 +75,7 @@ pub fn run_key_action<'a>(
// Err(e) => error!("{}", e),
// }
// }
+ on_mode_change(ModeChange::Activated);
}
},
None => (),