summaryrefslogtreecommitdiff
path: root/src/textbuf.cpp
diff options
context:
space:
mode:
authorzuu <zuu@openttd.org>2012-09-10 18:45:29 +0000
committerzuu <zuu@openttd.org>2012-09-10 18:45:29 +0000
commit0656a8d40bfa670183454abe5bc6478beb061768 (patch)
treead9929b0e59bb6067ca8fd1796d2fd18c48d810c /src/textbuf.cpp
parentbacad1478a9412c5a056c13eacf1328a960fec0f (diff)
downloadopenttd-0656a8d40bfa670183454abe5bc6478beb061768.tar.xz
(svn r24520) -Feature [FS#5203]: Ctrl + Arrow keys to move entire words in text edit boxes (sbr)
Diffstat (limited to 'src/textbuf.cpp')
-rw-r--r--src/textbuf.cpp40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/textbuf.cpp b/src/textbuf.cpp
index 673e77e49..d9069755a 100644
--- a/src/textbuf.cpp
+++ b/src/textbuf.cpp
@@ -224,7 +224,7 @@ WChar Textbuf::MoveCaretRight()
/**
* Handle text navigation with arrow keys left/right.
* This defines where the caret will blink and the next characer interaction will occur
- * @param navmode Direction in which navigation occurs WKC_LEFT, WKC_RIGHT, WKC_END, WKC_HOME
+ * @param navmode Direction in which navigation occurs (WKC_CTRL |) WKC_LEFT, (WKC_CTRL |) WKC_RIGHT, WKC_END, WKC_HOME
* @return Return true on successful change of Textbuf, or false otherwise
*/
bool Textbuf::MovePos(int navmode)
@@ -237,6 +237,26 @@ bool Textbuf::MovePos(int navmode)
}
break;
+ case WKC_CTRL | WKC_LEFT: {
+ if (!this->CanMoveCaretLeft()) break;
+
+ /* Unconditionally move one char to the left. */
+ WChar c = this->MoveCaretLeft();
+ /* Consume left whitespaces. */
+ while (IsWhitespace(c)) {
+ if (!this->CanMoveCaretLeft()) return true;
+ c = this->MoveCaretLeft();
+ }
+ /* Consume left word. */
+ while (!IsWhitespace(c)) {
+ if (!this->CanMoveCaretLeft()) return true;
+ c = this->MoveCaretLeft();
+ }
+ /* Place caret at the begining of the left word. */
+ this->MoveCaretRight();
+ return true;
+ }
+
case WKC_RIGHT:
if (this->CanMoveCaretRight()) {
this->MoveCaretRight();
@@ -244,6 +264,24 @@ bool Textbuf::MovePos(int navmode)
}
break;
+ case WKC_CTRL | WKC_RIGHT: {
+ if (!this->CanMoveCaretRight()) break;
+
+ /* Unconditionally move one char to the right. */
+ WChar c = this->MoveCaretRight();
+ /* Continue to consume current word. */
+ while (!IsWhitespace(c)) {
+ if (!this->CanMoveCaretRight()) return true;
+ c = this->MoveCaretRight();
+ }
+ /* Consume right whitespaces. */
+ while (IsWhitespace(c)) {
+ if (!this->CanMoveCaretRight()) return true;
+ c = this->MoveCaretRight();
+ }
+ return true;
+ }
+
case WKC_HOME:
this->caretpos = 0;
this->caretxoffs = 0;