diff options
| -rw-r--r-- | dome_key_map.h | 2 | ||||
| -rw-r--r-- | includer.c | 2 | ||||
| -rw-r--r-- | src/cocoa_bridge.rs | 22 | 
3 files changed, 19 insertions, 7 deletions
| diff --git a/dome_key_map.h b/dome_key_map.h index c6bf4c1..88f7abf 100644 --- a/dome_key_map.h +++ b/dome_key_map.h @@ -27,4 +27,4 @@ typedef struct {    size_t length;  } Trigger; -const CKeyActionResult *c_run_key_action(const Trigger *trigger); +const CKeyActionResult *c_run_key_action(Trigger trigger, const Trigger *mode); @@ -9,7 +9,7 @@ int main() {  		.buttons = buttons,  		.length = SIZE  	}; -	const CKeyActionResult *result = c_run_key_action(&trigger); +	const CKeyActionResult *result = c_run_key_action(trigger, NULL);  	printf("%s", result->action);  	return 0; 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) => { | 
