diff --git a/eek/eek-key.c b/eek/eek-key.c index f94baca3..5dc32dac 100644 --- a/eek/eek-key.c +++ b/eek/eek-key.c @@ -46,7 +46,6 @@ typedef struct _EekKeyPrivate { gulong oref; // UI outline reference struct squeek_key *state; - gboolean is_locked; } EekKeyPrivate; G_DEFINE_TYPE_WITH_PRIVATE (EekKey, eek_key, EEK_TYPE_ELEMENT) @@ -55,7 +54,7 @@ void eek_key_set_locked (EekKey *self, gboolean value) { EekKeyPrivate *priv = eek_key_get_instance_private (self); - priv->is_locked = value; + squeek_key_set_pressed(priv->state, value); } static void @@ -261,7 +260,7 @@ eek_key_is_locked (EekKey *key) EekKeyPrivate *priv = eek_key_get_instance_private (key); - return priv->is_locked; + return (bool)squeek_key_is_locked(priv->state); } void eek_key_set_pressed(EekKey *key, gboolean value) diff --git a/eek/eek-keyboard.c b/eek/eek-keyboard.c index f1037e0b..19d6c9bd 100644 --- a/eek/eek-keyboard.c +++ b/eek/eek-keyboard.c @@ -59,8 +59,6 @@ enum { VIEW_SYMBOLS }; -static guint signals[LAST_SIGNAL] = { 0, }; - #define EEK_KEYBOARD_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEYBOARD, EekKeyboardPrivate)) diff --git a/src/keyboard.h b/src/keyboard.h index ff336f5e..2fc40152 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -15,6 +15,8 @@ void squeek_key_add_symbol(struct squeek_key* key, const char *tooltip); uint32_t squeek_key_is_pressed(struct squeek_key *key); void squeek_key_set_pressed(struct squeek_key *key, uint32_t pressed); +uint32_t squeek_key_is_locked(struct squeek_key *key); +void squeek_key_set_locked(struct squeek_key *key, uint32_t pressed); uint32_t squeek_key_get_keycode(struct squeek_key *key); void squeek_key_set_keycode(struct squeek_key *key, uint32_t keycode); diff --git a/src/keyboard.rs b/src/keyboard.rs index a7be346e..c3dc412c 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -27,6 +27,7 @@ pub mod c { Box::into_raw(Box::new( KeyState { pressed: false, + locked: false, keycode: keycode, symbols: Vec::new(), } @@ -53,6 +54,20 @@ pub mod c { key.pressed = pressed != 0; } + #[no_mangle] + pub extern "C" + fn squeek_key_is_locked(key: *const KeyState) -> u32 { + let key = unsafe { &*key }; + return key.locked as u32; + } + + #[no_mangle] + pub extern "C" + fn squeek_key_set_locked(key: *mut KeyState, locked: u32) { + let key = unsafe { &mut *key }; + key.locked = locked != 0; + } + #[no_mangle] pub extern "C" fn squeek_key_get_keycode(key: *const KeyState) -> u32 { @@ -232,6 +247,7 @@ pub mod c { #[derive(Debug)] pub struct KeyState { pressed: bool, + locked: bool, keycode: u32, symbols: Vec, }