aboutsummaryrefslogtreecommitdiff
path: root/src/tool_text.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2011-10-04 22:42:02 +0200
committerThomas White <taw@bitwiz.org.uk>2011-10-04 22:42:02 +0200
commit0d8188624b9668834e22127025b67e3dbd832ecd (patch)
tree7f1e91218d82627f9a16db0170673e17ebf62c7b /src/tool_text.c
parent71d3e037a6934fbb4b57aed30c77efcc1efff3b0 (diff)
Fix cursor (finally..?)
Diffstat (limited to 'src/tool_text.c')
-rw-r--r--src/tool_text.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/tool_text.c b/src/tool_text.c
index 8866d61..53abe19 100644
--- a/src/tool_text.c
+++ b/src/tool_text.c
@@ -197,7 +197,7 @@ void insert_text(struct object *op, char *t)
{
struct text_object *o = (struct text_object *)op;
char *tmp;
- size_t tlen, olen;
+ size_t tlen, olen, offs;
int i;
assert(o->base.type == TEXT);
@@ -219,14 +219,16 @@ void insert_text(struct object *op, char *t)
tmp = malloc(o->text_len);
if ( tmp == NULL ) return;
- for ( i=0; i<o->insertion_point; i++ ) {
+ offs = o->insertion_point + o->insertion_trail;
+
+ for ( i=0; i<offs; i++ ) {
tmp[i] = o->text[i];
}
for ( i=0; i<tlen; i++ ) {
- tmp[i+o->insertion_point] = t[i];
+ tmp[i+offs] = t[i];
}
for ( i=0; i<olen-o->insertion_point; i++ ) {
- tmp[i+o->insertion_point+tlen] = o->text[i+o->insertion_point];
+ tmp[i+offs+tlen] = o->text[i+offs];
}
tmp[olen+tlen] = '\0';
memcpy(o->text, tmp, o->text_len);
@@ -419,7 +421,8 @@ static void click_select(struct presentation *p, struct toolinfo *tip,
v = pango_layout_xy_to_index(o->layout, xp, yp, &idx, &trail);
- o->insertion_point = idx+trail;
+ o->insertion_point = idx;
+ o->insertion_trail = trail;
}