diff --git a/clients/keyboard.c b/clients/keyboard.c index 7a267ca49..f1035c223 100644 --- a/clients/keyboard.c +++ b/clients/keyboard.c @@ -894,8 +894,28 @@ handle_content_type(void *data, { struct virtual_keyboard *keyboard = data; - keyboard->content_hint = hint; - keyboard->content_purpose = purpose; + if ((keyboard->content_hint != hint) || (keyboard->content_purpose != purpose)) + { + keyboard->content_hint = hint; + keyboard->content_purpose = purpose; + + // A change of the content type means a new layout. + // So we have to update. + const struct layout *layout = get_current_layout(keyboard); + + zwp_input_method_context_v1_language(context, + keyboard->serial, + layout->language); + zwp_input_method_context_v1_text_direction(context, + keyboard->serial, + layout->text_direction); + + window_schedule_resize(keyboard->keyboard->window, + layout->columns * key_width, + layout->rows * key_height); + + widget_schedule_redraw(keyboard->keyboard->widget); + } } static void