keyboard: Reset state on activate
Signed-off-by: Jan Arne Petersen <jpetersen@openismus.com>
This commit is contained in:
parent
9d41913eff
commit
b8b76a603f
|
@ -32,6 +32,8 @@
|
|||
#include "input-method-client-protocol.h"
|
||||
#include "text-client-protocol.h"
|
||||
|
||||
struct keyboard;
|
||||
|
||||
struct virtual_keyboard {
|
||||
struct input_panel *input_panel;
|
||||
struct input_method *input_method;
|
||||
|
@ -47,8 +49,7 @@ struct virtual_keyboard {
|
|||
uint32_t content_purpose;
|
||||
char *preferred_language;
|
||||
char *surrounding_text;
|
||||
struct window *window;
|
||||
struct widget *widget;
|
||||
struct keyboard *keyboard;
|
||||
};
|
||||
|
||||
enum key_type {
|
||||
|
@ -637,14 +638,14 @@ handle_commit(void *data,
|
|||
if (keyboard->surrounding_text)
|
||||
fprintf(stderr, "Surrounding text updated: %s\n", keyboard->surrounding_text);
|
||||
|
||||
window_schedule_resize(keyboard->window,
|
||||
window_schedule_resize(keyboard->keyboard->window,
|
||||
layout->columns * key_width,
|
||||
layout->rows * key_height);
|
||||
|
||||
input_method_context_language(context, keyboard->serial, layout->language);
|
||||
input_method_context_text_direction(context, keyboard->serial, layout->text_direction);
|
||||
|
||||
widget_schedule_redraw(keyboard->widget);
|
||||
widget_schedule_redraw(keyboard->keyboard->widget);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -680,6 +681,9 @@ input_method_activate(void *data,
|
|||
{
|
||||
struct virtual_keyboard *keyboard = data;
|
||||
struct wl_array modifiers_map;
|
||||
const struct layout *layout;
|
||||
|
||||
keyboard->keyboard->state = keyboardstate_default;
|
||||
|
||||
if (keyboard->context)
|
||||
input_method_context_destroy(keyboard->context);
|
||||
|
@ -688,6 +692,13 @@ input_method_activate(void *data,
|
|||
free(keyboard->preedit_string);
|
||||
|
||||
keyboard->preedit_string = strdup("");
|
||||
keyboard->content_hint = 0;
|
||||
keyboard->content_purpose = 0;
|
||||
free(keyboard->preferred_language);
|
||||
keyboard->preferred_language = NULL;
|
||||
free(keyboard->surrounding_text);
|
||||
keyboard->surrounding_text = NULL;
|
||||
|
||||
keyboard->serial = serial;
|
||||
|
||||
keyboard->context = context;
|
||||
|
@ -702,6 +713,17 @@ input_method_activate(void *data,
|
|||
input_method_context_modifiers_map(context, &modifiers_map);
|
||||
keyboard->keysym.shift_mask = keysym_modifiers_get_mask(&modifiers_map, "Shift");
|
||||
wl_array_release(&modifiers_map);
|
||||
|
||||
layout = get_current_layout(keyboard);
|
||||
|
||||
window_schedule_resize(keyboard->keyboard->window,
|
||||
layout->columns * key_width,
|
||||
layout->rows * key_height);
|
||||
|
||||
input_method_context_language(context, keyboard->serial, layout->language);
|
||||
input_method_context_text_direction(context, keyboard->serial, layout->text_direction);
|
||||
|
||||
widget_schedule_redraw(keyboard->keyboard->widget);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -755,8 +777,8 @@ keyboard_create(struct output *output, struct virtual_keyboard *virtual_keyboard
|
|||
keyboard->keyboard = virtual_keyboard;
|
||||
keyboard->window = window_create_custom(virtual_keyboard->display);
|
||||
keyboard->widget = window_add_widget(keyboard->window, keyboard);
|
||||
virtual_keyboard->window = keyboard->window;
|
||||
virtual_keyboard->widget = keyboard->widget;
|
||||
|
||||
virtual_keyboard->keyboard = keyboard;
|
||||
|
||||
window_set_title(keyboard->window, "Virtual keyboard");
|
||||
window_set_user_data(keyboard->window, keyboard);
|
||||
|
|
Loading…
Reference in New Issue