diff options
| -rw-r--r-- | dome_key_map.h | 1 | ||||
| -rw-r--r-- | src/cocoa_bridge.rs | 28 |
2 files changed, 16 insertions, 13 deletions
diff --git a/dome_key_map.h b/dome_key_map.h index 4ee30c3..76b5f1c 100644 --- a/dome_key_map.h +++ b/dome_key_map.h @@ -26,6 +26,7 @@ typedef enum { typedef struct { const char *action; const ActionKind *kind; + const HeadphoneButton *in_mode; } CKeyActionResult; typedef struct { diff --git a/src/cocoa_bridge.rs b/src/cocoa_bridge.rs index 1717b57..920ea02 100644 --- a/src/cocoa_bridge.rs +++ b/src/cocoa_bridge.rs @@ -86,6 +86,7 @@ impl<'a> KeyActionResult<'a> { pub struct CKeyActionResult { pub action: *const c_char, pub kind: *const ActionKind, + pub in_mode: *const HeadphoneButton, } #[no_mangle] @@ -113,25 +114,26 @@ pub extern "C" fn c_run_key_action( let result = match run_key_action_for_mode(trigger, mode) { Some(k) => { - match k.action { - Some(a) => { - CKeyActionResult { - action: a.into_raw(), // memory leak, must be freed from Rust - kind: &k.kind, - } - }, - None => { - CKeyActionResult { - action: ptr::null(), - kind: &k.kind, - } - }, + let action = k.action.map_or_else( + || ptr::null(), + |a| a.into_raw(), + ); + let in_mode = k.in_mode.map_or_else( + || ptr::null(), + |m| m.as_ptr(), + ); + + CKeyActionResult { + action: action, // memory leak, must be freed from Rust + kind: &k.kind, + in_mode: in_mode, } }, None => { CKeyActionResult { action: ptr::null(), kind: ptr::null(), + in_mode: ptr::null(), } } }; |
