Merge branch 'respond-to-input-source-changes' into 'master'

Respond to input source changes

See merge request Librem5/squeekboard!88
This commit is contained in:
David Boddie
2019-07-20 15:31:40 +00:00
2 changed files with 16 additions and 3 deletions

View File

@ -345,7 +345,6 @@ settings_update_layout(EekboardContextService *context)
g_autofree gchar *keyboard_type = NULL;
g_autofree gchar *keyboard_layout = NULL;
settings_get_layout(context->priv->settings, &keyboard_type, &keyboard_layout);
g_debug("type=%s, layout=%s", keyboard_type, keyboard_layout);
if (!keyboard_type) {
keyboard_type = g_strdup("us");
@ -358,6 +357,7 @@ settings_update_layout(EekboardContextService *context)
static guint keyboard_id = 0;
EekKeyboard *keyboard = g_hash_table_lookup(context->priv->keyboard_hash,
GUINT_TO_POINTER(keyboard_id));
g_debug("type=%s, layout=%s, keyboard=%p", keyboard_type, keyboard_layout, keyboard);
// create a keyboard
if (!keyboard) {
EekboardContextServiceClass *klass = EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context);

View File

@ -94,6 +94,15 @@ on_notify_keyboard (GObject *object,
// but simpler than adding a check in the window showing procedure
eekboard_context_service_set_keymap(EEKBOARD_CONTEXT_SERVICE(context),
keyboard);
/* Recreate the keyboard widget to keep in sync with the keymap. */
gboolean visible;
g_object_get (context, "visible", &visible, NULL);
if (visible) {
eekboard_context_service_hide_keyboard(EEKBOARD_CONTEXT_SERVICE(context));
eekboard_context_service_show_keyboard(EEKBOARD_CONTEXT_SERVICE(context));
}
}
static void
@ -250,8 +259,12 @@ server_context_service_real_show_keyboard (EekboardContextService *_context)
if (!context->window)
make_window (context);
if (!context->widget)
make_widget (context);
if (context->widget) {
gtk_widget_destroy(context->widget);
context->widget = NULL;
}
make_widget (context);
EEKBOARD_CONTEXT_SERVICE_CLASS (server_context_service_parent_class)->
show_keyboard (_context);