summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--desktop/browser.c33
-rw-r--r--riscos/gui.c7
2 files changed, 37 insertions, 3 deletions
diff --git a/desktop/browser.c b/desktop/browser.c
index cc845d4e5..3ad447f94 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -732,7 +732,7 @@ void browser_window_textarea_callback(struct browser_window *bw, char key, void
text_box->length = 0;
text_box->width = UNKNOWN_WIDTH;
char_offset--;
- }
+ }
} else {
/* delete a character */
memmove(text_box->text + char_offset - 1,
@@ -742,6 +742,20 @@ void browser_window_textarea_callback(struct browser_window *bw, char key, void
text_box->width = UNKNOWN_WIDTH;
char_offset--;
}
+ } else if (key == 28 && char_offset != text_box->length) {
+ /* Right cursor -> */
+ char_offset++;
+ } else if (key == 29 && char_offset != 0) {
+ /* Left cursor <- */
+ char_offset--;
+ } else if (key == 30) {
+ /* Up Cursor */
+ /* TODO */
+ return;
+ } else if (key == 31) {
+ /* Down cursor */
+ /* TODO */
+ return;
} else {
return;
}
@@ -788,7 +802,7 @@ void browser_window_textarea_callback(struct browser_window *bw, char key, void
if (!t->next) assert(ic->last == t);
}
} */
-
+
if (text_box->length < char_offset) {
/* the text box has been split and the caret is in the second part */
char_offset -= (text_box->length + 1); /* +1 for the space */
@@ -862,6 +876,7 @@ void browser_window_input_callback(struct browser_window *bw, char key, void *p)
int char_offset = input->gadget->caret_char_offset;
int pixel_offset;
unsigned long actual_x, actual_y;
+ struct form* form = input->gadget->form;
box_coords(input, &actual_x, &actual_y);
@@ -895,6 +910,20 @@ void browser_window_input_callback(struct browser_window *bw, char key, void *p)
text_box->length--;
input->gadget->value[text_box->length] = 0;
char_offset--;
+ } else if (key == 10 || key == 13) {
+ /* Return/Enter hit */
+ browser_form_submit(bw, form);
+ /*TODO: remove caret from new page */
+ } else if (key == 9) {
+ /* Tab */
+ /* TODO: tabbing between inputs */
+ return;
+ } else if (key == 28 && char_offset != text_box->length) {
+ /* Right cursor -> */
+ char_offset++;
+ } else if (key == 29 && char_offset != 0) {
+ /* Left cursor <- */
+ char_offset--;
} else {
return;
}
diff --git a/riscos/gui.c b/riscos/gui.c
index 0ef0911c9..88d6e2499 100644
--- a/riscos/gui.c
+++ b/riscos/gui.c
@@ -1364,9 +1364,14 @@ void ro_gui_keypress(wimp_key* key)
{
gui_window* g;
- if (key->i == -1 && key->c < 256) {
+ if (key->i == -1 && (key->c < 256 || (key->c >= 396 && key->c <= 399))) {
g = ro_lookup_gui_from_w(key->w);
if (g) {
+ /* Munge cursor keys into unused control chars */
+ if (key->c == 396) key->c = 29; /* Left */
+ else if (key->c == 397) key->c = 28; /* Right */
+ else if (key->c == 398) key->c = 31; /* Down */
+ else if (key->c == 399) key->c = 30; /* Up */
browser_window_key_press(g->data.browser.bw, (char) key->c);
return;
}