Always create a new widget for a keyboard and update it if already visible
This commit is contained in:
@ -345,7 +345,6 @@ settings_update_layout(EekboardContextService *context)
|
|||||||
g_autofree gchar *keyboard_type = NULL;
|
g_autofree gchar *keyboard_type = NULL;
|
||||||
g_autofree gchar *keyboard_layout = NULL;
|
g_autofree gchar *keyboard_layout = NULL;
|
||||||
settings_get_layout(context->priv->settings, &keyboard_type, &keyboard_layout);
|
settings_get_layout(context->priv->settings, &keyboard_type, &keyboard_layout);
|
||||||
g_debug("type=%s, layout=%s", keyboard_type, keyboard_layout);
|
|
||||||
|
|
||||||
if (!keyboard_type) {
|
if (!keyboard_type) {
|
||||||
keyboard_type = g_strdup("us");
|
keyboard_type = g_strdup("us");
|
||||||
@ -358,6 +357,7 @@ settings_update_layout(EekboardContextService *context)
|
|||||||
static guint keyboard_id = 0;
|
static guint keyboard_id = 0;
|
||||||
EekKeyboard *keyboard = g_hash_table_lookup(context->priv->keyboard_hash,
|
EekKeyboard *keyboard = g_hash_table_lookup(context->priv->keyboard_hash,
|
||||||
GUINT_TO_POINTER(keyboard_id));
|
GUINT_TO_POINTER(keyboard_id));
|
||||||
|
g_debug("type=%s, layout=%s, keyboard=%p", keyboard_type, keyboard_layout, keyboard);
|
||||||
// create a keyboard
|
// create a keyboard
|
||||||
if (!keyboard) {
|
if (!keyboard) {
|
||||||
EekboardContextServiceClass *klass = EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context);
|
EekboardContextServiceClass *klass = EEKBOARD_CONTEXT_SERVICE_GET_CLASS(context);
|
||||||
|
|||||||
@ -82,7 +82,7 @@ on_notify_keyboard (GObject *object,
|
|||||||
GParamSpec *spec,
|
GParamSpec *spec,
|
||||||
ServerContextService *context)
|
ServerContextService *context)
|
||||||
{
|
{
|
||||||
const EekKeyboard *keyboard;
|
EekKeyboard *keyboard;
|
||||||
|
|
||||||
keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context));
|
keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context));
|
||||||
|
|
||||||
@ -94,6 +94,16 @@ on_notify_keyboard (GObject *object,
|
|||||||
// but simpler than adding a check in the window showing procedure
|
// but simpler than adding a check in the window showing procedure
|
||||||
eekboard_context_service_set_keymap(EEKBOARD_CONTEXT_SERVICE(context),
|
eekboard_context_service_set_keymap(EEKBOARD_CONTEXT_SERVICE(context),
|
||||||
keyboard);
|
keyboard);
|
||||||
|
|
||||||
|
/* Recreate the keyboard widget to keep in sync with the keymap. */
|
||||||
|
EekboardContextService *service = EEKBOARD_CONTEXT_SERVICE(context);
|
||||||
|
gboolean visible;
|
||||||
|
g_object_get(service, "visible", &visible, NULL);
|
||||||
|
|
||||||
|
if (visible) {
|
||||||
|
eekboard_context_service_hide_keyboard (service);
|
||||||
|
eekboard_context_service_show_keyboard (service);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -250,8 +260,12 @@ server_context_service_real_show_keyboard (EekboardContextService *_context)
|
|||||||
|
|
||||||
if (!context->window)
|
if (!context->window)
|
||||||
make_window (context);
|
make_window (context);
|
||||||
if (!context->widget)
|
if (context->widget) {
|
||||||
make_widget (context);
|
gtk_widget_destroy (GTK_WIDGET (context->widget));
|
||||||
|
context->widget = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
make_widget (context);
|
||||||
|
|
||||||
EEKBOARD_CONTEXT_SERVICE_CLASS (server_context_service_parent_class)->
|
EEKBOARD_CONTEXT_SERVICE_CLASS (server_context_service_parent_class)->
|
||||||
show_keyboard (_context);
|
show_keyboard (_context);
|
||||||
|
|||||||
Reference in New Issue
Block a user