From d027ea9e6425fa485dd6f32d414f4ab848b48c9a Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Wed, 29 Aug 2018 14:06:02 +0200 Subject: c_run_key_action(): Add `mode` argument Add a nullable `mode` argument like `trigger`. Change `trigger` to make it non-nullable again. We can now pass a mode trigger in from FFI and handle it in our Rust function. --- src/cocoa_bridge.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'src/cocoa_bridge.rs') diff --git a/src/cocoa_bridge.rs b/src/cocoa_bridge.rs index 4d63c44..b329ae8 100644 --- a/src/cocoa_bridge.rs +++ b/src/cocoa_bridge.rs @@ -61,16 +61,28 @@ pub struct CKeyActionResult { #[no_mangle] pub extern "C" fn c_run_key_action( - trigger: *const Trigger, + trigger: Trigger, + mode: *const Trigger, ) -> *const CKeyActionResult { let trigger = unsafe { - assert!(!trigger.is_null()); - assert!(!(*trigger).buttons.is_null()); + assert!(!trigger.buttons.is_null()); - slice::from_raw_parts((*trigger).buttons, (*trigger).length as usize) + slice::from_raw_parts(trigger.buttons, trigger.length as usize) }; - let result = match run_key_action_for_mode(trigger, None) { + let mode = unsafe { + if mode.is_null() { + None + } else { + assert!(!(*mode).buttons.is_null()); + + Some( + slice::from_raw_parts((*mode).buttons, (*mode).length as usize) + ) + } + }; + + let result = match run_key_action_for_mode(trigger, mode) { Some(k) => { match k.action { Some(a) => { -- cgit v1.2.3