static void text_input_commit_string(void *data, struct wl_text_input *text_input, uint32_t serial, const char *text) { struct text_entry *entry = data; if ((entry->serial - serial) > (entry->serial - entry->reset_serial)) { fprintf(stderr, "Ignore commit. Serial: %u, Current: %u, Reset: %u\n", serial, entry->serial, entry->reset_serial); return; } text_entry_reset_preedit(entry); text_entry_delete_selected_text(entry); if (entry->pending_commit.delete_length) { text_entry_delete_text(entry, entry->pending_commit.delete_index, entry->pending_commit.delete_length); } text_entry_insert_at_cursor(entry, text, entry->pending_commit.cursor, entry->pending_commit.anchor); memset(&entry->pending_commit, 0, sizeof entry->pending_commit); widget_schedule_redraw(entry->widget); }
static void text_model_commit_string(void *data, struct text_model *text_model, const char *text, uint32_t index) { struct text_entry *entry = data; if (index > strlen(text)) fprintf(stderr, "Invalid cursor index %d\n", index); text_entry_delete_selected_text(entry); text_entry_insert_at_cursor(entry, text); widget_schedule_redraw(entry->widget); }
static void text_input_preedit_string(void *data, struct wl_text_input *text_input, uint32_t serial, const char *text, const char *commit) { struct text_entry *entry = data; text_entry_delete_selected_text(entry); text_entry_set_preedit(entry, text, entry->preedit_info.cursor); entry->preedit.commit = strdup(commit); entry->preedit.attr_list = entry->preedit_info.attr_list; entry->preedit_info.cursor = 0; entry->preedit_info.attr_list = NULL; text_entry_update(entry); widget_schedule_redraw(entry->widget); }
static void text_input_preedit_string(void *data, struct wl_text_input *text_input, uint32_t serial, const char *text, const char *commit) { struct text_entry *entry = data; if ((entry->serial - serial) > (entry->serial - entry->reset_serial)) { fprintf(stderr, "Ignore preedit_string. Serial: %u, Current: %u, Reset: %u\n", serial, entry->serial, entry->reset_serial); clear_pending_preedit(entry); return; } if (entry->pending_commit.invalid_delete) { fprintf(stderr, "Ignore preedit_string. Invalid previous delete_surrounding event.\n"); clear_pending_preedit(entry); return; } if (entry->pending_commit.delete_length) { text_entry_delete_text(entry, entry->pending_commit.delete_index, entry->pending_commit.delete_length); } else { text_entry_delete_selected_text(entry); } text_entry_set_preedit(entry, text, entry->preedit_info.cursor); entry->preedit.commit = strdup(commit); entry->preedit.attr_list = pango_attr_list_ref(entry->preedit_info.attr_list); clear_pending_preedit(entry); text_entry_update(entry); widget_schedule_redraw(entry->widget); }