summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2003-09-30 12:58:33 +0000
committerJames Bursa <james@netsurf-browser.org>2003-09-30 12:58:33 +0000
commit404a17b0a7dc93f3e51102da89290ea904ed31da (patch)
treedb08b0dd2ae560fe8ad0408ca962ade154546c02
parent0a1975f8d6d35cb3aef558de8dff49b2481b4682 (diff)
downloadnetsurf-404a17b0a7dc93f3e51102da89290ea904ed31da.tar.gz
netsurf-404a17b0a7dc93f3e51102da89290ea904ed31da.tar.bz2
[project @ 2003-09-30 12:58:33 by bursa]
Implement return in text areas. svn path=/import/netsurf/; revision=333
-rw-r--r--desktop/browser.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/desktop/browser.c b/desktop/browser.c
index 024694887..4da14f1f6 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -671,6 +671,41 @@ void browser_window_textarea_callback(struct browser_window *bw, char key, void
char_offset++;
} else if (key == 10 || key == 13) {
/* paragraph break */
+ struct box *new_container = box_create(0, 0, 0);
+ struct box *new_text = xcalloc(1, sizeof(*new_text));
+ struct box *t;
+ new_container->type = BOX_INLINE_CONTAINER;
+ new_container->parent = textarea;
+ new_container->next = inline_container->next;
+ inline_container->next = new_container;
+ new_container->prev = inline_container;
+ new_container->last = inline_container->last;
+ if (new_container->next)
+ new_container->next->prev = new_container;
+ else
+ textarea->last = new_container;
+ memcpy(new_text, text_box, sizeof(*new_text));
+ new_text->clone = 1;
+ new_text->text = xcalloc(text_box->length + 1, 1);
+ memcpy(new_text->text, text_box->text + char_offset,
+ text_box->length - char_offset);
+ new_text->length = text_box->length - char_offset;
+ text_box->length = char_offset;
+ new_text->prev = 0;
+ new_text->next = text_box->next;
+ text_box->next = 0;
+ if (new_text->next)
+ new_text->next->prev = new_text;
+ else
+ new_container->last = new_text;
+ text_box->width = new_text->width = UNKNOWN_WIDTH;
+ inline_container->last = text_box;
+ new_container->children = new_text;
+ for (t = new_container->children; t; t = t->next)
+ t->parent = new_container;
+ inline_container = new_container;
+ text_box = inline_container->children;
+ char_offset = 0;
} else if (key == 8 || key == 127) {
/* delete to left */
if (char_offset == 0) {
@@ -1573,4 +1608,3 @@ void browser_form_get_append(char **s, int *length, char sep, char *name, char *
curl_free(name);
curl_free(value);
}
-