[PATCH v2 08/17] editor: Insert commit-string at cursor
Jan Arne Petersen
jpetersen at openismus.com
Sun Sep 9 14:08:37 PDT 2012
From: Jan Arne Petersen <jpetersen at openismus.com>
Instead of appending at the end, insert the commit-string at the cursor
position.
Signed-off-by: Jan Arne Petersen <jpetersen at openismus.com>
---
clients/editor.c | 34 ++++++++++++++++++++++++----------
1 file changed, 24 insertions(+), 10 deletions(-)
diff --git a/clients/editor.c b/clients/editor.c
index b375938..295018a 100644
--- a/clients/editor.c
+++ b/clients/editor.c
@@ -205,15 +205,7 @@ static void text_entry_button_handler(struct widget *widget,
struct input *input, uint32_t time,
uint32_t button,
enum wl_pointer_button_state state, void *data);
-
-static void
-text_entry_append(struct text_entry *entry, const char *text)
-{
- entry->text = realloc(entry->text, strlen(entry->text) + strlen(text) + 1);
- strcat(entry->text, text);
- text_layout_set_text(entry->layout, entry->text);
-}
-
+static void text_entry_insert_at_cursor(struct text_entry *entry, const char *text);
static void
text_model_commit_string(void *data,
@@ -223,7 +215,12 @@ text_model_commit_string(void *data,
{
struct text_entry *entry = data;
- text_entry_append(entry, text);
+ if (index > strlen(text)) {
+ fprintf(stderr, "Invalid cursor index %d\n", index);
+ index = strlen(text);
+ }
+
+ text_entry_insert_at_cursor(entry, text);
widget_schedule_redraw(entry->widget);
}
@@ -409,6 +406,23 @@ text_entry_deactivate(struct text_entry *entry,
}
static void
+text_entry_insert_at_cursor(struct text_entry *entry, const char *text)
+{
+ char *new_text = malloc(strlen(entry->text) + strlen(text) + 1);
+
+ strncpy(new_text, entry->text, entry->cursor);
+ strcpy(new_text + entry->cursor, text);
+ strcpy(new_text + entry->cursor + strlen(text),
+ entry->text + entry->cursor);
+
+ free(entry->text);
+ entry->text = new_text;
+ entry->cursor += strlen(text);
+
+ text_layout_set_text(entry->layout, entry->text);
+}
+
+static void
text_entry_set_cursor_position(struct text_entry *entry,
int32_t x, int32_t y)
{
--
1.7.11.4
More information about the wayland-devel
mailing list