diff options
| author | Teddy Wing | 2018-10-29 21:03:16 +0100 |
|---|---|---|
| committer | Teddy Wing | 2018-10-29 21:03:16 +0100 |
| commit | 9c3ca6c3ed6703881993a05051d997c686a24b0b (patch) | |
| tree | 9f76d31ad27c419fe2d3a72b42620c3d94be9a87 | |
| parent | 44f6a2d5544e3ad49e5e3c52167c045aed1d56b2 (diff) | |
| download | dome-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.h | 8 | ||||
| -rw-r--r-- | src/ffi.rs | 6 | ||||
| -rw-r--r-- | src/map.rs | 10 |
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); @@ -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] @@ -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 => (), |
