aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2018-08-29 14:06:02 +0200
committerTeddy Wing2018-08-29 14:06:02 +0200
commitd027ea9e6425fa485dd6f32d414f4ab848b48c9a (patch)
treee524c923b4f6379fb195d154e1fb30bb956505ec /src
parentb8b09aa2ef1e945aaf7283de63d1d1f57585373b (diff)
downloaddome-key-map-d027ea9e6425fa485dd6f32d414f4ab848b48c9a.tar.bz2
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.
Diffstat (limited to 'src')
-rw-r--r--src/cocoa_bridge.rs22
1 files changed, 17 insertions, 5 deletions
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) => {