summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-02-10 23:22:46 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2013-02-10 23:22:46 +0000
commitb38520da995218a3d774ea407493ffa7adf4cbcd (patch)
treec08d4fb21c941abaf52da1406038a29d3316586f
parent315f5a8ca13f680bd1111b5108e8c3c23131f1f7 (diff)
downloadnetsurf-b38520da995218a3d774ea407493ffa7adf4cbcd.tar.gz
netsurf-b38520da995218a3d774ea407493ffa7adf4cbcd.tar.bz2
Implement delete line. (Ctrl+U on RISC OS.)
-rw-r--r--desktop/textarea.c44
1 files changed, 36 insertions, 8 deletions
diff --git a/desktop/textarea.c b/desktop/textarea.c
index 62ee05a12..9dd3ace2d 100644
--- a/desktop/textarea.c
+++ b/desktop/textarea.c
@@ -1726,15 +1726,14 @@ bool textarea_keypress(struct textarea *ta, uint32_t key)
caret = ta->sel_start;
ta->sel_start = ta->sel_end = -1;
- redraw = true;
} else if (caret > 0) {
if (!textarea_replace_text(ta,
caret - 1,
caret, "", 0, false))
return false;
caret--;
- redraw = true;
}
+ redraw = true;
break;
case KEY_CR:
case KEY_NL:
@@ -1749,17 +1748,47 @@ bool textarea_keypress(struct textarea *ta, uint32_t key)
caret = ta->sel_start + 1;
ta->sel_start = ta->sel_end = -1;
- redraw = true;
} else {
if (!textarea_replace_text(ta,
caret, caret,
"\n", 1, false))
return false;
caret++;
- redraw = true;
}
+ redraw = true;
break;
case KEY_CUT_LINE:
+ /* Not actually CUT to clipboard, just delete */
+ if (readonly)
+ break;
+ if (ta->sel_start != -1) {
+ if (!textarea_replace_text(ta,
+ ta->sel_start,
+ ta->sel_end, "", 0, false))
+ return false;
+ ta->sel_start = ta->sel_end = -1;
+ } else {
+ if (ta->lines[line].b_length != 0) {
+ /* Delete line */
+ b_off = ta->lines[line].b_start;
+ b_len = ta->lines[line].b_length;
+ l_len = utf8_bounded_length(
+ &(ta->text.data[b_off]),
+ b_len);
+ caret -= ta->caret_pos.char_off;
+ if (!textarea_replace_text(ta, caret,
+ caret + l_len, "", 0,
+ false))
+ return false;
+ } else if (caret < ta->text.utf8_len) {
+ /* Delete blank line */
+ if (!textarea_replace_text(ta,
+ caret, caret + 1, "", 0,
+ false))
+ return false;
+ }
+ }
+ redraw = true;
break;
case KEY_PASTE:
{
@@ -1785,7 +1814,6 @@ bool textarea_keypress(struct textarea *ta, uint32_t key)
caret = ta->sel_start + clipboard_chars;
ta->sel_start = ta->sel_end = -1;
- redraw = true;
} else {
if (!textarea_replace_text(ta,
caret, caret,
@@ -1793,8 +1821,8 @@ bool textarea_keypress(struct textarea *ta, uint32_t key)
false))
return false;
caret += clipboard_chars;
- redraw = true;
}
+ redraw = true;
free(clipboard);
}
@@ -2019,8 +2047,8 @@ bool textarea_keypress(struct textarea *ta, uint32_t key)
return false;
ta->sel_start = ta->sel_end = -1;
} else {
- b_off = ta->lines[ta->caret_pos.line].b_start;
- b_len = ta->lines[ta->caret_pos.line].b_length;
+ b_off = ta->lines[line].b_start;
+ b_len = ta->lines[line].b_length;
l_len = utf8_bounded_length(
&(ta->text.data[b_off]),
b_len);