[PATCH 08/12] editor: Insert commit-string at cursor

Jan Arne Petersen jpetersen at openismus.com
Thu Aug 30 10:16:13 PDT 2012


From: Jan Arne Petersen <jpetersen at openismus.com>

Instead of appending at the end, insert the commit-string at the cursor
position.
---
 clients/editor.c | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/clients/editor.c b/clients/editor.c
index 33e9d3d..4720dd9 100644
--- a/clients/editor.c
+++ b/clients/editor.c
@@ -206,15 +206,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,
@@ -224,7 +216,7 @@ text_model_commit_string(void *data,
 {
 	struct text_entry *entry = data;
 
-	text_entry_append(entry, text);	
+	text_entry_insert_at_cursor(entry, text);
 
 	widget_schedule_redraw(entry->widget);
 }
@@ -410,6 +402,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