locking: Set lock directly on the button
This commit is contained in:
@ -42,14 +42,6 @@ enum {
|
|||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
|
||||||
LOCKED,
|
|
||||||
UNLOCKED,
|
|
||||||
LAST_SIGNAL
|
|
||||||
};
|
|
||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
|
||||||
|
|
||||||
typedef struct _EekKeyPrivate
|
typedef struct _EekKeyPrivate
|
||||||
{
|
{
|
||||||
gulong oref; // UI outline reference
|
gulong oref; // UI outline reference
|
||||||
@ -59,26 +51,11 @@ typedef struct _EekKeyPrivate
|
|||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (EekKey, eek_key, EEK_TYPE_ELEMENT)
|
G_DEFINE_TYPE_WITH_PRIVATE (EekKey, eek_key, EEK_TYPE_ELEMENT)
|
||||||
|
|
||||||
static void
|
void
|
||||||
eek_key_real_locked (EekKey *self)
|
eek_key_set_locked (EekKey *self, gboolean value)
|
||||||
{
|
{
|
||||||
EekKeyPrivate *priv = eek_key_get_instance_private (self);
|
EekKeyPrivate *priv = eek_key_get_instance_private (self);
|
||||||
|
priv->is_locked = value;
|
||||||
priv->is_locked = TRUE;
|
|
||||||
#if DEBUG
|
|
||||||
g_debug ("locked %X", eek_key_get_keycode (self));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
eek_key_real_unlocked (EekKey *self)
|
|
||||||
{
|
|
||||||
EekKeyPrivate *priv = eek_key_get_instance_private (self);
|
|
||||||
|
|
||||||
priv->is_locked = FALSE;
|
|
||||||
#if DEBUG
|
|
||||||
g_debug ("unlocked %X", eek_key_get_keycode (self));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -134,10 +111,6 @@ eek_key_class_init (EekKeyClass *klass)
|
|||||||
gobject_class->get_property = eek_key_get_property;
|
gobject_class->get_property = eek_key_get_property;
|
||||||
gobject_class->finalize = eek_key_finalize;
|
gobject_class->finalize = eek_key_finalize;
|
||||||
|
|
||||||
/* signals */
|
|
||||||
klass->locked = eek_key_real_locked;
|
|
||||||
klass->unlocked = eek_key_real_unlocked;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekKey:oref:
|
* EekKey:oref:
|
||||||
*
|
*
|
||||||
@ -149,42 +122,6 @@ eek_key_class_init (EekKeyClass *klass)
|
|||||||
0, G_MAXULONG, 0,
|
0, G_MAXULONG, 0,
|
||||||
G_PARAM_READWRITE);
|
G_PARAM_READWRITE);
|
||||||
g_object_class_install_property (gobject_class, PROP_OREF, pspec);
|
g_object_class_install_property (gobject_class, PROP_OREF, pspec);
|
||||||
|
|
||||||
/**
|
|
||||||
* EekKey::locked:
|
|
||||||
* @key: an #EekKey
|
|
||||||
*
|
|
||||||
* The ::locked signal is emitted each time @key is shifted to
|
|
||||||
* the locked state. The class handler runs before signal
|
|
||||||
* handlers to allow signal handlers to read the status of @key
|
|
||||||
* with eek_key_is_locked().
|
|
||||||
*/
|
|
||||||
signals[LOCKED] =
|
|
||||||
g_signal_new (I_("locked"),
|
|
||||||
G_TYPE_FROM_CLASS(gobject_class),
|
|
||||||
G_SIGNAL_RUN_FIRST,
|
|
||||||
G_STRUCT_OFFSET(EekKeyClass, locked),
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
g_cclosure_marshal_VOID__VOID,
|
|
||||||
G_TYPE_NONE, 0);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekKey::unlocked:
|
|
||||||
* @key: an #EekKey
|
|
||||||
*
|
|
||||||
* The ::unlocked signal is emitted each time @key is shifted to
|
|
||||||
* the unlocked state.
|
|
||||||
*/
|
|
||||||
signals[UNLOCKED] =
|
|
||||||
g_signal_new (I_("unlocked"),
|
|
||||||
G_TYPE_FROM_CLASS(gobject_class),
|
|
||||||
G_SIGNAL_RUN_LAST,
|
|
||||||
G_STRUCT_OFFSET(EekKeyClass, unlocked),
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
g_cclosure_marshal_VOID__VOID,
|
|
||||||
G_TYPE_NONE, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@ -46,11 +46,6 @@ struct _EekKeyClass
|
|||||||
{
|
{
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
EekElementClass parent_class;
|
EekElementClass parent_class;
|
||||||
|
|
||||||
/*< public >*/
|
|
||||||
/* signals */
|
|
||||||
void (* locked) (EekKey *key);
|
|
||||||
void (* unlocked) (EekKey *key);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GType eek_key_get_type (void) G_GNUC_CONST;
|
GType eek_key_get_type (void) G_GNUC_CONST;
|
||||||
@ -71,6 +66,8 @@ gboolean eek_key_is_pressed (EekKey *key);
|
|||||||
gboolean eek_key_is_locked (EekKey *key);
|
gboolean eek_key_is_locked (EekKey *key);
|
||||||
void eek_key_set_pressed (EekKey *key,
|
void eek_key_set_pressed (EekKey *key,
|
||||||
gboolean value);
|
gboolean value);
|
||||||
|
void
|
||||||
|
eek_key_set_locked (EekKey *self, gboolean value);
|
||||||
void eek_key_share_state(EekKey *self, struct squeek_key *state);
|
void eek_key_share_state(EekKey *self, struct squeek_key *state);
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
#endif /* EEK_KEY_H */
|
#endif /* EEK_KEY_H */
|
||||||
|
|||||||
@ -87,22 +87,6 @@ eek_modifier_key_free (EekModifierKey *modkey)
|
|||||||
g_slice_free (EekModifierKey, modkey);
|
g_slice_free (EekModifierKey, modkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
on_key_locked (EekSection *section,
|
|
||||||
EekKey *key,
|
|
||||||
EekKeyboard *keyboard)
|
|
||||||
{
|
|
||||||
g_signal_emit (keyboard, signals[KEY_LOCKED], 0, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_key_unlocked (EekSection *section,
|
|
||||||
EekKey *key,
|
|
||||||
EekKeyboard *keyboard)
|
|
||||||
{
|
|
||||||
g_signal_emit (keyboard, signals[KEY_UNLOCKED], 0, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
EekSection *
|
EekSection *
|
||||||
eek_keyboard_real_create_section (EekKeyboard *self)
|
eek_keyboard_real_create_section (EekKeyboard *self)
|
||||||
{
|
{
|
||||||
@ -160,7 +144,7 @@ set_key_states (LevelKeyboard *keyboard,
|
|||||||
modifier_key->key = g_object_ref (key);
|
modifier_key->key = g_object_ref (key);
|
||||||
keyboard->locked_keys =
|
keyboard->locked_keys =
|
||||||
g_list_prepend (keyboard->locked_keys, modifier_key);
|
g_list_prepend (keyboard->locked_keys, modifier_key);
|
||||||
g_signal_emit_by_name (modifier_key->key, "locked");
|
eek_key_set_locked(modifier_key->key, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyboard->level == 1) {
|
if (keyboard->level == 1) {
|
||||||
@ -170,7 +154,7 @@ set_key_states (LevelKeyboard *keyboard,
|
|||||||
GList *next = g_list_next (head);
|
GList *next = g_list_next (head);
|
||||||
keyboard->locked_keys =
|
keyboard->locked_keys =
|
||||||
g_list_remove_link (keyboard->locked_keys, head);
|
g_list_remove_link (keyboard->locked_keys, head);
|
||||||
g_signal_emit_by_name (modifier_key->key, "unlocked");
|
eek_key_set_locked(modifier_key->key, false);
|
||||||
g_list_free1 (head);
|
g_list_free1 (head);
|
||||||
head = next;
|
head = next;
|
||||||
}
|
}
|
||||||
@ -285,18 +269,16 @@ static void
|
|||||||
eek_keyboard_real_child_added (EekContainer *self,
|
eek_keyboard_real_child_added (EekContainer *self,
|
||||||
EekElement *element)
|
EekElement *element)
|
||||||
{
|
{
|
||||||
g_signal_connect (element, "key-locked",
|
(void)self;
|
||||||
G_CALLBACK(on_key_locked), self);
|
(void)element;
|
||||||
g_signal_connect (element, "key-unlocked",
|
|
||||||
G_CALLBACK(on_key_unlocked), self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_keyboard_real_child_removed (EekContainer *self,
|
eek_keyboard_real_child_removed (EekContainer *self,
|
||||||
EekElement *element)
|
EekElement *element)
|
||||||
{
|
{
|
||||||
g_signal_handlers_disconnect_by_func (element, on_key_locked, self);
|
(void)self;
|
||||||
g_signal_handlers_disconnect_by_func (element, on_key_unlocked, self);
|
(void)element;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -313,46 +295,6 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
|
|||||||
gobject_class->set_property = eek_keyboard_set_property;
|
gobject_class->set_property = eek_keyboard_set_property;
|
||||||
gobject_class->dispose = eek_keyboard_dispose;
|
gobject_class->dispose = eek_keyboard_dispose;
|
||||||
gobject_class->finalize = eek_keyboard_finalize;
|
gobject_class->finalize = eek_keyboard_finalize;
|
||||||
|
|
||||||
/**
|
|
||||||
* EekKeyboard::key-locked:
|
|
||||||
* @keyboard: an #EekKeyboard
|
|
||||||
* @key: an #EekKey
|
|
||||||
*
|
|
||||||
* The ::key-locked signal is emitted each time a key in @keyboard
|
|
||||||
* is shifted to the locked state.
|
|
||||||
*/
|
|
||||||
signals[KEY_LOCKED] =
|
|
||||||
g_signal_new (I_("key-locked"),
|
|
||||||
G_TYPE_FROM_CLASS(gobject_class),
|
|
||||||
G_SIGNAL_RUN_LAST,
|
|
||||||
G_STRUCT_OFFSET(EekKeyboardClass, key_locked),
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
g_cclosure_marshal_VOID__OBJECT,
|
|
||||||
G_TYPE_NONE,
|
|
||||||
1,
|
|
||||||
EEK_TYPE_KEY);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekKeyboard::key-unlocked:
|
|
||||||
* @keyboard: an #EekKeyboard
|
|
||||||
* @key: an #EekKey
|
|
||||||
*
|
|
||||||
* The ::key-unlocked signal is emitted each time a key in @keyboard
|
|
||||||
* is shifted to the unlocked state.
|
|
||||||
*/
|
|
||||||
signals[KEY_UNLOCKED] =
|
|
||||||
g_signal_new (I_("key-unlocked"),
|
|
||||||
G_TYPE_FROM_CLASS(gobject_class),
|
|
||||||
G_SIGNAL_RUN_LAST,
|
|
||||||
G_STRUCT_OFFSET(EekKeyboardClass, key_unlocked),
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
g_cclosure_marshal_VOID__OBJECT,
|
|
||||||
G_TYPE_NONE,
|
|
||||||
1,
|
|
||||||
EEK_TYPE_KEY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@ -42,14 +42,6 @@ enum {
|
|||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
|
||||||
KEY_LOCKED,
|
|
||||||
KEY_UNLOCKED,
|
|
||||||
LAST_SIGNAL
|
|
||||||
};
|
|
||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
|
||||||
|
|
||||||
struct _EekRow
|
struct _EekRow
|
||||||
{
|
{
|
||||||
gint num_columns;
|
gint num_columns;
|
||||||
@ -104,20 +96,6 @@ eek_section_real_get_row (EekSection *self,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
on_locked (EekKey *key,
|
|
||||||
EekSection *section)
|
|
||||||
{
|
|
||||||
g_signal_emit (section, signals[KEY_LOCKED], 0, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_unlocked (EekKey *key,
|
|
||||||
EekSection *section)
|
|
||||||
{
|
|
||||||
g_signal_emit (section, signals[KEY_UNLOCKED], 0, key);
|
|
||||||
}
|
|
||||||
|
|
||||||
static EekKey *
|
static EekKey *
|
||||||
eek_section_real_create_key (EekSection *self,
|
eek_section_real_create_key (EekSection *self,
|
||||||
const gchar *name,
|
const gchar *name,
|
||||||
@ -204,16 +182,16 @@ static void
|
|||||||
eek_section_real_child_added (EekContainer *self,
|
eek_section_real_child_added (EekContainer *self,
|
||||||
EekElement *element)
|
EekElement *element)
|
||||||
{
|
{
|
||||||
g_signal_connect (element, "locked", G_CALLBACK(on_locked), self);
|
(void)self;
|
||||||
g_signal_connect (element, "unlocked", G_CALLBACK(on_unlocked), self);
|
(void)element;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_section_real_child_removed (EekContainer *self,
|
eek_section_real_child_removed (EekContainer *self,
|
||||||
EekElement *element)
|
EekElement *element)
|
||||||
{
|
{
|
||||||
g_signal_handlers_disconnect_by_func (element, on_locked, self);
|
(void)self;
|
||||||
g_signal_handlers_disconnect_by_func (element, on_unlocked, self);
|
(void)element;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -249,46 +227,6 @@ eek_section_class_init (EekSectionClass *klass)
|
|||||||
g_object_class_install_property (gobject_class,
|
g_object_class_install_property (gobject_class,
|
||||||
PROP_ANGLE,
|
PROP_ANGLE,
|
||||||
pspec);
|
pspec);
|
||||||
|
|
||||||
/**
|
|
||||||
* EekSection::key-locked:
|
|
||||||
* @section: an #EekSection
|
|
||||||
* @key: an #EekKey
|
|
||||||
*
|
|
||||||
* The ::key-locked signal is emitted each time a key in @section
|
|
||||||
* is shifted to the locked state.
|
|
||||||
*/
|
|
||||||
signals[KEY_LOCKED] =
|
|
||||||
g_signal_new (I_("key-locked"),
|
|
||||||
G_TYPE_FROM_CLASS(gobject_class),
|
|
||||||
G_SIGNAL_RUN_LAST,
|
|
||||||
G_STRUCT_OFFSET(EekSectionClass, key_locked),
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
g_cclosure_marshal_VOID__OBJECT,
|
|
||||||
G_TYPE_NONE,
|
|
||||||
1,
|
|
||||||
EEK_TYPE_KEY);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekSection::key-unlocked:
|
|
||||||
* @section: an #EekSection
|
|
||||||
* @key: an #EekKey
|
|
||||||
*
|
|
||||||
* The ::key-unlocked signal is emitted each time a key in @section
|
|
||||||
* is shifted to the unlocked state.
|
|
||||||
*/
|
|
||||||
signals[KEY_UNLOCKED] =
|
|
||||||
g_signal_new (I_("key-unlocked"),
|
|
||||||
G_TYPE_FROM_CLASS(gobject_class),
|
|
||||||
G_SIGNAL_RUN_LAST,
|
|
||||||
G_STRUCT_OFFSET(EekSectionClass, key_unlocked),
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
g_cclosure_marshal_VOID__OBJECT,
|
|
||||||
G_TYPE_NONE,
|
|
||||||
1,
|
|
||||||
EEK_TYPE_KEY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user