Merge branch 'fixes' into 'master'

Fixes

See merge request Librem5/squeekboard!74
This commit is contained in:
David Boddie
2019-07-15 22:20:40 +00:00

View File

@ -57,9 +57,6 @@ typedef struct _EekGtkKeyboardPrivate
{ {
EekRenderer *renderer; EekRenderer *renderer;
EekKeyboard *keyboard; EekKeyboard *keyboard;
gulong key_locked_handler;
gulong key_unlocked_handler;
gulong symbol_index_changed_handler;
EekTheme *theme; EekTheme *theme;
GdkEventSequence *sequence; // unowned reference GdkEventSequence *sequence; // unowned reference
@ -330,17 +327,23 @@ eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
EekKeyboard *keyboard) EekKeyboard *keyboard)
{ {
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
if (priv->keyboard == keyboard)
return;
if (priv->keyboard) {
g_signal_handlers_disconnect_by_data(priv->keyboard, self);
g_object_unref (priv->keyboard);
}
priv->keyboard = g_object_ref (keyboard); priv->keyboard = g_object_ref (keyboard);
priv->key_locked_handler = g_signal_connect (priv->keyboard, "key-locked",
g_signal_connect (priv->keyboard, "key-locked", G_CALLBACK(on_key_locked), self);
G_CALLBACK(on_key_locked), self); g_signal_connect (priv->keyboard, "key-unlocked",
priv->key_unlocked_handler = G_CALLBACK(on_key_unlocked), self);
g_signal_connect (priv->keyboard, "key-unlocked", g_signal_connect (priv->keyboard, "symbol-index-changed",
G_CALLBACK(on_key_unlocked), self); G_CALLBACK(on_symbol_index_changed), self);
priv->symbol_index_changed_handler =
g_signal_connect (priv->keyboard, "symbol-index-changed",
G_CALLBACK(on_symbol_index_changed), self);
} }
static void static void
@ -374,21 +377,9 @@ eek_gtk_keyboard_dispose (GObject *object)
} }
if (priv->keyboard) { if (priv->keyboard) {
if (g_signal_handler_is_connected (priv->keyboard,
priv->key_locked_handler))
g_signal_handler_disconnect (priv->keyboard,
priv->key_locked_handler);
if (g_signal_handler_is_connected (priv->keyboard,
priv->key_unlocked_handler))
g_signal_handler_disconnect (priv->keyboard,
priv->key_unlocked_handler);
if (g_signal_handler_is_connected (priv->keyboard,
priv->symbol_index_changed_handler))
g_signal_handler_disconnect (priv->keyboard,
priv->symbol_index_changed_handler);
GList *list, *head; GList *list, *head;
g_signal_handlers_disconnect_by_data(priv->keyboard, self);
list = eek_keyboard_get_pressed_keys (priv->keyboard); list = eek_keyboard_get_pressed_keys (priv->keyboard);
for (head = list; head; head = g_list_next (head)) { for (head = list; head; head = g_list_next (head)) {
g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey pressed"); g_log("squeek", G_LOG_LEVEL_DEBUG, "emit EekKey pressed");