Revert "BTextView: Update word-wise/line-wise shortcuts"

This reverts commit 74ef92bc55.

Change-Id: I441d9cce87670e17141051fded594ae8aa6fc1fd
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9299
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
waddlesplash
2025-05-21 17:46:34 +00:00
parent c8f38f4627
commit 888ea83454
2 changed files with 211 additions and 330 deletions
+9 -13
View File
@@ -470,23 +470,19 @@ private:
LayoutData* fLayoutData; LayoutData* fLayoutData;
int32 fLastClickOffset; int32 fLastClickOffset;
bool fInstalledNavigateCommandWordwiseShortcuts : 1;
bool fInstalledNavigateOptionWordwiseShortcuts : 1; bool fInstalledNavigateOptionWordwiseShortcuts : 1;
bool fInstalledSelectOptionWordwiseShortcuts : 1; bool fInstalledNavigateOptionLinewiseShortcuts : 1;
bool fInstalledRemoveCommandLinewiseShortcuts : 1;
bool fInstalledRemoveOptionWordwiseShortcuts : 1;
bool fInstalledNavigateCommandHorizontalLinewiseShortcuts : 1;
bool fInstalledNavigateCommandVerticalLinewiseShortcuts : 1;
bool fInstalledNavigateControlHorizontalLinewiseShortcuts : 1;
bool fInstalledNavigateControlVerticalLinewiseShortcuts : 1;
bool fInstalledSelectCommandHorizontalLinewiseShortcuts : 1;
bool fInstalledSelectCommandVerticalLinewiseShortcuts : 1;
bool fInstalledSelectControlHorizontalLinewiseShortcuts : 1;
bool fInstalledSelectControlVerticalLinewiseShortcuts : 1;
bool fInstalledNavigateHomeEndDocwiseShortcuts : 1; bool fInstalledNavigateHomeEndDocwiseShortcuts : 1;
bool fInstalledSelectCommandWordwiseShortcuts : 1;
bool fInstalledSelectOptionWordwiseShortcuts : 1;
bool fInstalledSelectOptionLinewiseShortcuts : 1;
bool fInstalledSelectHomeEndDocwiseShortcuts : 1; bool fInstalledSelectHomeEndDocwiseShortcuts : 1;
bool fInstalledRemoveCommandWordwiseShortcuts : 1;
bool fInstalledRemoveOptionWordwiseShortcuts : 1;
uint32 _reserved[6]; uint32 _reserved[6];
}; };
+202 -317
View File
@@ -3230,23 +3230,19 @@ BTextView::_InitObject(BRect textRect, const BFont* initialFont,
fLines = new LineBuffer; fLines = new LineBuffer;
fStyles = new StyleBuffer(&font, initialColor); fStyles = new StyleBuffer(&font, initialColor);
fInstalledNavigateCommandWordwiseShortcuts = false;
fInstalledNavigateOptionWordwiseShortcuts = false; fInstalledNavigateOptionWordwiseShortcuts = false;
fInstalledSelectOptionWordwiseShortcuts = false; fInstalledNavigateOptionLinewiseShortcuts = false;
fInstalledRemoveCommandLinewiseShortcuts = false;
fInstalledRemoveOptionWordwiseShortcuts = false;
fInstalledNavigateCommandHorizontalLinewiseShortcuts = false;
fInstalledNavigateCommandVerticalLinewiseShortcuts = false;
fInstalledNavigateControlHorizontalLinewiseShortcuts = false;
fInstalledNavigateControlVerticalLinewiseShortcuts = false;
fInstalledSelectCommandHorizontalLinewiseShortcuts = false;
fInstalledSelectCommandVerticalLinewiseShortcuts = false;
fInstalledSelectControlHorizontalLinewiseShortcuts = false;
fInstalledSelectControlVerticalLinewiseShortcuts = false;
fInstalledNavigateHomeEndDocwiseShortcuts = false; fInstalledNavigateHomeEndDocwiseShortcuts = false;
fInstalledSelectCommandWordwiseShortcuts = false;
fInstalledSelectOptionWordwiseShortcuts = false;
fInstalledSelectOptionLinewiseShortcuts = false;
fInstalledSelectHomeEndDocwiseShortcuts = false; fInstalledSelectHomeEndDocwiseShortcuts = false;
fInstalledRemoveCommandWordwiseShortcuts = false;
fInstalledRemoveOptionWordwiseShortcuts = false;
// We put these here instead of in the constructor initializer list // We put these here instead of in the constructor initializer list
// to have less code duplication, and a single place where to do changes // to have less code duplication, and a single place where to do changes
// if needed. // if needed.
@@ -3312,14 +3308,9 @@ BTextView::_HandleBackspace(int32 modifiers)
bool optionKeyDown = (modifiers & B_OPTION_KEY) != 0; bool optionKeyDown = (modifiers & B_OPTION_KEY) != 0;
bool commandKeyDown = (modifiers & B_COMMAND_KEY) != 0; bool commandKeyDown = (modifiers & B_COMMAND_KEY) != 0;
if (optionKeyDown) { if ((commandKeyDown || optionKeyDown) && !controlKeyDown) {
// delete previous word with option held down
fSelStart = _PreviousWordStart(fCaretOffset - 1); fSelStart = _PreviousWordStart(fCaretOffset - 1);
fSelEnd = fCaretOffset; fSelEnd = fCaretOffset;
} else if (commandKeyDown && !controlKeyDown) {
// delete to beginning of line with command held down
fSelStart = _PreviousLineStart(fCaretOffset);
fSelEnd = fCaretOffset;
} }
if (fUndo) { if (fUndo) {
@@ -3385,10 +3376,8 @@ BTextView::_HandleArrowKey(uint32 arrowKey, int32 modifiers)
else if (fSelStart != fSelEnd && !shiftKeyDown) else if (fSelStart != fSelEnd && !shiftKeyDown)
fCaretOffset = fSelStart; fCaretOffset = fSelStart;
else { else {
if (optionKeyDown) if ((commandKeyDown || optionKeyDown) && !controlKeyDown)
fCaretOffset = _PreviousWordStart(fCaretOffset - 1); fCaretOffset = _PreviousWordStart(fCaretOffset - 1);
else if (commandKeyDown || controlKeyDown)
fCaretOffset = _PreviousLineStart(fCaretOffset);
else else
fCaretOffset = _PreviousInitialByte(fCaretOffset); fCaretOffset = _PreviousInitialByte(fCaretOffset);
@@ -3414,10 +3403,8 @@ BTextView::_HandleArrowKey(uint32 arrowKey, int32 modifiers)
else if (fSelStart != fSelEnd && !shiftKeyDown) else if (fSelStart != fSelEnd && !shiftKeyDown)
fCaretOffset = fSelEnd; fCaretOffset = fSelEnd;
else { else {
if (optionKeyDown) if ((commandKeyDown || optionKeyDown) && !controlKeyDown)
fCaretOffset = _NextWordEnd(fCaretOffset); fCaretOffset = _NextWordEnd(fCaretOffset);
else if (commandKeyDown || controlKeyDown)
fCaretOffset = _NextLineEnd(fCaretOffset);
else else
fCaretOffset = _NextInitialByte(fCaretOffset); fCaretOffset = _NextInitialByte(fCaretOffset);
@@ -3444,9 +3431,9 @@ BTextView::_HandleArrowKey(uint32 arrowKey, int32 modifiers)
else if (fSelStart != fSelEnd && !shiftKeyDown) else if (fSelStart != fSelEnd && !shiftKeyDown)
fCaretOffset = fSelStart; fCaretOffset = fSelStart;
else { else {
if (optionKeyDown) { if (optionKeyDown && !commandKeyDown && !controlKeyDown)
fCaretOffset = _PreviousLineStart(fCaretOffset); fCaretOffset = _PreviousLineStart(fCaretOffset);
} else if (commandKeyDown || controlKeyDown) { else if (commandKeyDown && !optionKeyDown && !controlKeyDown) {
_ScrollTo(0, 0); _ScrollTo(0, 0);
fCaretOffset = 0; fCaretOffset = 0;
} else { } else {
@@ -3488,9 +3475,9 @@ BTextView::_HandleArrowKey(uint32 arrowKey, int32 modifiers)
else if (fSelStart != fSelEnd && !shiftKeyDown) else if (fSelStart != fSelEnd && !shiftKeyDown)
fCaretOffset = fSelEnd; fCaretOffset = fSelEnd;
else { else {
if (optionKeyDown) { if (optionKeyDown && !commandKeyDown && !controlKeyDown)
fCaretOffset = _NextLineEnd(fCaretOffset); fCaretOffset = _NextLineEnd(fCaretOffset);
} else if (commandKeyDown || controlKeyDown) { else if (commandKeyDown && !optionKeyDown && !controlKeyDown) {
_ScrollTo(0, fTextRect.bottom + fLayoutData->bottomInset); _ScrollTo(0, fTextRect.bottom + fLayoutData->bottomInset);
fCaretOffset = fText->Length(); fCaretOffset = fText->Length();
} else { } else {
@@ -3551,14 +3538,9 @@ BTextView::_HandleDelete(int32 modifiers)
bool optionKeyDown = (modifiers & B_OPTION_KEY) != 0; bool optionKeyDown = (modifiers & B_OPTION_KEY) != 0;
bool commandKeyDown = (modifiers & B_COMMAND_KEY) != 0; bool commandKeyDown = (modifiers & B_COMMAND_KEY) != 0;
if (optionKeyDown) { if ((commandKeyDown || optionKeyDown) && !controlKeyDown) {
// delete next word with option held down
fSelStart = fCaretOffset; fSelStart = fCaretOffset;
fSelEnd = _NextWordEnd(fCaretOffset) + 1; fSelEnd = _NextWordEnd(fCaretOffset) + 1;
} else if (commandKeyDown && !controlKeyDown) {
// delete to end of line with command held down
fSelStart = fCaretOffset;
fSelEnd = _NextLineEnd(fCaretOffset);
} }
if (fUndo) { if (fUndo) {
@@ -5238,237 +5220,163 @@ BTextView::_Activate()
if (Bounds().Contains(where)) if (Bounds().Contains(where))
_TrackMouse(where, NULL); _TrackMouse(where, NULL);
// bail out if not connected to app server if (Window() != NULL) {
if (Window() == NULL) BMessage* message;
return;
// Define alternate shorcuts for Windows/Linux mode, these shortcuts if (!Window()->HasShortcut(B_LEFT_ARROW, B_COMMAND_KEY)
// may be already be taken by application shortcuts. && !Window()->HasShortcut(B_RIGHT_ARROW, B_COMMAND_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_LEFT_ARROW);
message->AddInt32("modifiers", B_COMMAND_KEY);
Window()->AddShortcut(B_LEFT_ARROW, B_COMMAND_KEY, message, this);
BMessage* message; message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_RIGHT_ARROW);
message->AddInt32("modifiers", B_COMMAND_KEY);
Window()->AddShortcut(B_RIGHT_ARROW, B_COMMAND_KEY, message, this);
// set Option+Left/Right for word-wise navigation fInstalledNavigateCommandWordwiseShortcuts = true;
if (!Window()->HasShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY) }
&& !Window()->HasShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY)) { if (!Window()->HasShortcut(B_LEFT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY)
message = new BMessage(kMsgNavigateArrow); && !Window()->HasShortcut(B_RIGHT_ARROW,
message->AddInt32("key", B_LEFT_ARROW); B_COMMAND_KEY | B_SHIFT_KEY)) {
message->AddInt32("modifiers", B_OPTION_KEY); message = new BMessage(kMsgNavigateArrow);
Window()->AddShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY, message, this); message->AddInt32("key", B_LEFT_ARROW);
message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_LEFT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY,
message, this);
message = new BMessage(kMsgNavigateArrow); message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_RIGHT_ARROW); message->AddInt32("key", B_RIGHT_ARROW);
message->AddInt32("modifiers", B_OPTION_KEY); message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_RIGHT_ARROW, B_OPTION_KEY, message, this); Window()->AddShortcut(B_RIGHT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY,
message, this);
fInstalledNavigateOptionWordwiseShortcuts = true; fInstalledSelectCommandWordwiseShortcuts = true;
} }
if (!Window()->HasShortcut(B_DELETE, B_COMMAND_KEY)
&& !Window()->HasShortcut(B_BACKSPACE, B_COMMAND_KEY)) {
message = new BMessage(kMsgRemoveWord);
message->AddInt32("key", B_DELETE);
message->AddInt32("modifiers", B_COMMAND_KEY);
Window()->AddShortcut(B_DELETE, B_COMMAND_KEY, message, this);
// set Shift+Option+Left/Right for word-wise selection message = new BMessage(kMsgRemoveWord);
if (!Window()->HasShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY | B_SHIFT_KEY) message->AddInt32("key", B_BACKSPACE);
&& !Window()->HasShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY | B_SHIFT_KEY)) { message->AddInt32("modifiers", B_COMMAND_KEY);
message = new BMessage(kMsgNavigateArrow); Window()->AddShortcut(B_BACKSPACE, B_COMMAND_KEY, message, this);
message->AddInt32("key", B_LEFT_ARROW);
message->AddInt32("modifiers", B_OPTION_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY | B_SHIFT_KEY, message,
this);
message = new BMessage(kMsgNavigateArrow); fInstalledRemoveCommandWordwiseShortcuts = true;
message->AddInt32("key", B_RIGHT_ARROW); }
message->AddInt32("modifiers", B_OPTION_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY | B_SHIFT_KEY, message,
this);
fInstalledSelectOptionWordwiseShortcuts = true; if (!Window()->HasShortcut(B_LEFT_ARROW, B_OPTION_KEY)
} && !Window()->HasShortcut(B_RIGHT_ARROW, B_OPTION_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_LEFT_ARROW);
message->AddInt32("modifiers", B_OPTION_KEY);
Window()->AddShortcut(B_LEFT_ARROW, B_OPTION_KEY, message, this);
// set Command+Delete for line-wise deletion message = new BMessage(kMsgNavigateArrow);
if (!Window()->HasShortcut(B_DELETE, B_COMMAND_KEY) message->AddInt32("key", B_RIGHT_ARROW);
&& !Window()->HasShortcut(B_BACKSPACE, B_COMMAND_KEY)) { message->AddInt32("modifiers", B_OPTION_KEY);
message = new BMessage(kMsgRemoveWord); Window()->AddShortcut(B_RIGHT_ARROW, B_OPTION_KEY, message, this);
message->AddInt32("key", B_DELETE);
message->AddInt32("modifiers", B_COMMAND_KEY);
Window()->AddShortcut(B_DELETE, B_COMMAND_KEY, message, this);
message = new BMessage(kMsgRemoveWord); fInstalledNavigateOptionWordwiseShortcuts = true;
message->AddInt32("key", B_BACKSPACE); }
message->AddInt32("modifiers", B_COMMAND_KEY); if (!Window()->HasShortcut(B_LEFT_ARROW, B_OPTION_KEY | B_SHIFT_KEY)
Window()->AddShortcut(B_BACKSPACE, B_COMMAND_KEY, message, this); && !Window()->HasShortcut(B_RIGHT_ARROW,
B_OPTION_KEY | B_SHIFT_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_LEFT_ARROW);
message->AddInt32("modifiers", B_OPTION_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_LEFT_ARROW, B_OPTION_KEY | B_SHIFT_KEY,
message, this);
fInstalledRemoveCommandLinewiseShortcuts = true; message = new BMessage(kMsgNavigateArrow);
} message->AddInt32("key", B_RIGHT_ARROW);
// set Option+Delete for word-wise deletion message->AddInt32("modifiers", B_OPTION_KEY | B_SHIFT_KEY);
if (!Window()->HasShortcut(B_DELETE, B_NO_COMMAND_KEY | B_OPTION_KEY) Window()->AddShortcut(B_RIGHT_ARROW, B_OPTION_KEY | B_SHIFT_KEY,
&& !Window()->HasShortcut(B_BACKSPACE, B_NO_COMMAND_KEY | B_OPTION_KEY)) { message, this);
message = new BMessage(kMsgRemoveWord);
message->AddInt32("key", B_DELETE);
message->AddInt32("modifiers", B_OPTION_KEY);
Window()->AddShortcut(B_DELETE, B_NO_COMMAND_KEY | B_OPTION_KEY, message, this);
message = new BMessage(kMsgRemoveWord); fInstalledSelectOptionWordwiseShortcuts = true;
message->AddInt32("key", B_BACKSPACE); }
message->AddInt32("modifiers", B_OPTION_KEY); if (!Window()->HasShortcut(B_DELETE, B_OPTION_KEY)
Window()->AddShortcut(B_BACKSPACE, B_NO_COMMAND_KEY | B_OPTION_KEY, message, this); && !Window()->HasShortcut(B_BACKSPACE, B_OPTION_KEY)) {
message = new BMessage(kMsgRemoveWord);
message->AddInt32("key", B_DELETE);
message->AddInt32("modifiers", B_OPTION_KEY);
Window()->AddShortcut(B_DELETE, B_OPTION_KEY, message, this);
fInstalledRemoveOptionWordwiseShortcuts = true; message = new BMessage(kMsgRemoveWord);
} message->AddInt32("key", B_BACKSPACE);
message->AddInt32("modifiers", B_OPTION_KEY);
Window()->AddShortcut(B_BACKSPACE, B_OPTION_KEY, message, this);
// set Command+Left/Right to navigate to the beginning and end of a line fInstalledRemoveOptionWordwiseShortcuts = true;
if (!Window()->HasShortcut(B_LEFT_ARROW, B_COMMAND_KEY) }
&& !Window()->HasShortcut(B_RIGHT_ARROW, B_COMMAND_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_LEFT_ARROW);
message->AddInt32("modifiers", B_COMMAND_KEY);
Window()->AddShortcut(B_LEFT_ARROW, B_COMMAND_KEY, message, this);
message = new BMessage(kMsgNavigateArrow); if (!Window()->HasShortcut(B_UP_ARROW, B_OPTION_KEY)
message->AddInt32("key", B_RIGHT_ARROW); && !Window()->HasShortcut(B_DOWN_ARROW, B_OPTION_KEY)) {
message->AddInt32("modifiers", B_COMMAND_KEY); message = new BMessage(kMsgNavigateArrow);
Window()->AddShortcut(B_RIGHT_ARROW, B_COMMAND_KEY, message, this); message->AddInt32("key", B_UP_ARROW);
message->AddInt32("modifiers", B_OPTION_KEY);
Window()->AddShortcut(B_UP_ARROW, B_OPTION_KEY, message, this);
fInstalledNavigateCommandHorizontalLinewiseShortcuts = true; message = new BMessage(kMsgNavigateArrow);
} message->AddInt32("key", B_DOWN_ARROW);
// set Control+Left/Right alternate for Win/Linux mode message->AddInt32("modifiers", B_OPTION_KEY);
if (!Window()->HasShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY) Window()->AddShortcut(B_DOWN_ARROW, B_OPTION_KEY, message, this);
&& !Window()->HasShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_LEFT_ARROW);
message->AddInt32("modifiers", B_CONTROL_KEY);
Window()->AddShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY, message, this);
message = new BMessage(kMsgNavigateArrow); fInstalledNavigateOptionLinewiseShortcuts = true;
message->AddInt32("key", B_RIGHT_ARROW); }
message->AddInt32("modifiers", B_CONTROL_KEY); if (!Window()->HasShortcut(B_UP_ARROW, B_OPTION_KEY | B_SHIFT_KEY)
Window()->AddShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY, message, this); && !Window()->HasShortcut(B_DOWN_ARROW,
B_OPTION_KEY | B_SHIFT_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_UP_ARROW);
message->AddInt32("modifiers", B_OPTION_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_UP_ARROW, B_OPTION_KEY | B_SHIFT_KEY,
message, this);
fInstalledNavigateControlHorizontalLinewiseShortcuts = true; message = new BMessage(kMsgNavigateArrow);
} message->AddInt32("key", B_DOWN_ARROW);
message->AddInt32("modifiers", B_OPTION_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_DOWN_ARROW, B_OPTION_KEY | B_SHIFT_KEY,
message, this);
// set Command+Up/Down to navigate to the beginning and end of a line fInstalledSelectOptionLinewiseShortcuts = true;
if (!Window()->HasShortcut(B_UP_ARROW, B_COMMAND_KEY) }
&& !Window()->HasShortcut(B_DOWN_ARROW, B_COMMAND_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_UP_ARROW);
message->AddInt32("modifiers", B_COMMAND_KEY);
Window()->AddShortcut(B_UP_ARROW, B_COMMAND_KEY, message, this);
message = new BMessage(kMsgNavigateArrow); if (!Window()->HasShortcut(B_HOME, B_COMMAND_KEY)
message->AddInt32("key", B_DOWN_ARROW); && !Window()->HasShortcut(B_END, B_COMMAND_KEY)) {
message->AddInt32("modifiers", B_COMMAND_KEY); message = new BMessage(kMsgNavigatePage);
Window()->AddShortcut(B_DOWN_ARROW, B_COMMAND_KEY, message, this); message->AddInt32("key", B_HOME);
message->AddInt32("modifiers", B_COMMAND_KEY);
Window()->AddShortcut(B_HOME, B_COMMAND_KEY, message, this);
fInstalledNavigateCommandVerticalLinewiseShortcuts = true; message = new BMessage(kMsgNavigatePage);
} message->AddInt32("key", B_END);
// set Control+Up/Down alternative to Win/Linux mode message->AddInt32("modifiers", B_COMMAND_KEY);
if (!Window()->HasShortcut(B_UP_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY) Window()->AddShortcut(B_END, B_COMMAND_KEY, message, this);
&& !Window()->HasShortcut(B_DOWN_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_UP_ARROW);
message->AddInt32("modifiers", B_CONTROL_KEY);
Window()->AddShortcut(B_UP_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY, message, this);
message = new BMessage(kMsgNavigateArrow); fInstalledNavigateHomeEndDocwiseShortcuts = true;
message->AddInt32("key", B_DOWN_ARROW); }
message->AddInt32("modifiers", B_CONTROL_KEY); if (!Window()->HasShortcut(B_HOME, B_COMMAND_KEY | B_SHIFT_KEY)
Window()->AddShortcut(B_DOWN_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY, message, this); && !Window()->HasShortcut(B_END, B_COMMAND_KEY | B_SHIFT_KEY)) {
message = new BMessage(kMsgNavigatePage);
message->AddInt32("key", B_HOME);
message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_HOME, B_COMMAND_KEY | B_SHIFT_KEY,
message, this);
fInstalledNavigateControlVerticalLinewiseShortcuts = true; message = new BMessage(kMsgNavigatePage);
} message->AddInt32("key", B_END);
message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_END, B_COMMAND_KEY | B_SHIFT_KEY,
message, this);
// set Shift+Command+Left/Right to select to the beginning/end of line fInstalledSelectHomeEndDocwiseShortcuts = true;
if (!Window()->HasShortcut(B_LEFT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY) }
&& !Window()->HasShortcut(B_RIGHT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_LEFT_ARROW);
message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_LEFT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY, message, this);
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_RIGHT_ARROW);
message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_RIGHT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY, message, this);
fInstalledSelectCommandHorizontalLinewiseShortcuts = true;
}
// set Shift+Control+Left/Right alternate for Win/Linux mode
if (!Window()->HasShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY)
&& !Window()->HasShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_LEFT_ARROW);
message->AddInt32("modifiers", B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY, message,
this);
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_RIGHT_ARROW);
message->AddInt32("modifiers", B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY,
message, this);
fInstalledSelectControlHorizontalLinewiseShortcuts = true;
}
// set Shift+Command+Up/Down to select to the beginning/end of line
if (!Window()->HasShortcut(B_UP_ARROW, B_COMMAND_KEY | B_SHIFT_KEY)
&& !Window()->HasShortcut(B_DOWN_ARROW, B_COMMAND_KEY | B_SHIFT_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_UP_ARROW);
message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_UP_ARROW, B_COMMAND_KEY | B_SHIFT_KEY, message, this);
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_DOWN_ARROW);
message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_DOWN_ARROW, B_COMMAND_KEY | B_SHIFT_KEY, message, this);
fInstalledSelectCommandVerticalLinewiseShortcuts = true;
}
// set Shift+Control+Up/Down alternate for Win/Linux mode
if (!Window()->HasShortcut(B_UP_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY)
&& !Window()->HasShortcut(B_DOWN_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY)) {
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_UP_ARROW);
message->AddInt32("modifiers", B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_UP_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY, message,
this);
message = new BMessage(kMsgNavigateArrow);
message->AddInt32("key", B_DOWN_ARROW);
message->AddInt32("modifiers", B_CONTROL_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_DOWN_ARROW, B_CONTROL_KEY | B_SHIFT_KEY, message, this);
fInstalledSelectControlVerticalLinewiseShortcuts = true;
}
// set Command+Home/End for doc-wise navigation
if (!Window()->HasShortcut(B_HOME, B_COMMAND_KEY)
&& !Window()->HasShortcut(B_END, B_COMMAND_KEY)) {
message = new BMessage(kMsgNavigatePage);
message->AddInt32("key", B_HOME);
message->AddInt32("modifiers", B_COMMAND_KEY);
Window()->AddShortcut(B_HOME, B_COMMAND_KEY, message, this);
message = new BMessage(kMsgNavigatePage);
message->AddInt32("key", B_END);
message->AddInt32("modifiers", B_COMMAND_KEY);
Window()->AddShortcut(B_END, B_COMMAND_KEY, message, this);
fInstalledNavigateHomeEndDocwiseShortcuts = true;
}
// set Shift+Commmand Home/End for doc-wise selection
if (!Window()->HasShortcut(B_HOME, B_COMMAND_KEY | B_SHIFT_KEY)
&& !Window()->HasShortcut(B_END, B_COMMAND_KEY | B_SHIFT_KEY)) {
message = new BMessage(kMsgNavigatePage);
message->AddInt32("key", B_HOME);
message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_HOME, B_COMMAND_KEY | B_SHIFT_KEY, message, this);
message = new BMessage(kMsgNavigatePage);
message->AddInt32("key", B_END);
message->AddInt32("modifiers", B_COMMAND_KEY | B_SHIFT_KEY);
Window()->AddShortcut(B_END, B_COMMAND_KEY | B_SHIFT_KEY, message, this);
fInstalledSelectHomeEndDocwiseShortcuts = true;
} }
} }
@@ -5488,84 +5396,61 @@ BTextView::_Deactivate()
} else } else
_HideCaret(); _HideCaret();
// bail out if not connected to app server if (Window() != NULL) {
if (Window() == NULL) if (fInstalledNavigateCommandWordwiseShortcuts) {
return; Window()->RemoveShortcut(B_LEFT_ARROW, B_COMMAND_KEY);
Window()->RemoveShortcut(B_RIGHT_ARROW, B_COMMAND_KEY);
fInstalledNavigateCommandWordwiseShortcuts = false;
}
if (fInstalledSelectCommandWordwiseShortcuts) {
Window()->RemoveShortcut(B_LEFT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_RIGHT_ARROW,
B_COMMAND_KEY | B_SHIFT_KEY);
fInstalledSelectCommandWordwiseShortcuts = false;
}
if (fInstalledRemoveCommandWordwiseShortcuts) {
Window()->RemoveShortcut(B_DELETE, B_COMMAND_KEY);
Window()->RemoveShortcut(B_BACKSPACE, B_COMMAND_KEY);
fInstalledRemoveCommandWordwiseShortcuts = false;
}
// word-wise shortcuts use option or command+control if (fInstalledNavigateOptionWordwiseShortcuts) {
if (fInstalledNavigateOptionWordwiseShortcuts) { Window()->RemoveShortcut(B_LEFT_ARROW, B_OPTION_KEY);
Window()->RemoveShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY); Window()->RemoveShortcut(B_RIGHT_ARROW, B_OPTION_KEY);
Window()->RemoveShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY); fInstalledNavigateOptionWordwiseShortcuts = false;
fInstalledNavigateOptionWordwiseShortcuts = false; }
} if (fInstalledSelectOptionWordwiseShortcuts) {
if (fInstalledSelectOptionWordwiseShortcuts) { Window()->RemoveShortcut(B_LEFT_ARROW, B_OPTION_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY | B_SHIFT_KEY); Window()->RemoveShortcut(B_RIGHT_ARROW, B_OPTION_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_OPTION_KEY | B_SHIFT_KEY); fInstalledSelectOptionWordwiseShortcuts = false;
fInstalledSelectOptionWordwiseShortcuts = false; }
} if (fInstalledRemoveOptionWordwiseShortcuts) {
if (fInstalledRemoveCommandLinewiseShortcuts) { Window()->RemoveShortcut(B_DELETE, B_OPTION_KEY);
Window()->RemoveShortcut(B_DELETE, B_COMMAND_KEY); Window()->RemoveShortcut(B_BACKSPACE, B_OPTION_KEY);
Window()->RemoveShortcut(B_BACKSPACE, B_COMMAND_KEY); fInstalledRemoveOptionWordwiseShortcuts = false;
fInstalledRemoveCommandLinewiseShortcuts = false; }
}
if (fInstalledRemoveOptionWordwiseShortcuts) {
Window()->RemoveShortcut(B_DELETE, B_NO_COMMAND_KEY | B_OPTION_KEY);
Window()->RemoveShortcut(B_BACKSPACE, B_NO_COMMAND_KEY | B_OPTION_KEY);
fInstalledRemoveOptionWordwiseShortcuts = false;
}
// line-wise shortcuts use command or control if (fInstalledNavigateOptionLinewiseShortcuts) {
if (fInstalledNavigateCommandHorizontalLinewiseShortcuts) { Window()->RemoveShortcut(B_UP_ARROW, B_OPTION_KEY);
Window()->RemoveShortcut(B_LEFT_ARROW, B_COMMAND_KEY); Window()->RemoveShortcut(B_DOWN_ARROW, B_OPTION_KEY);
Window()->RemoveShortcut(B_RIGHT_ARROW, B_COMMAND_KEY); fInstalledNavigateOptionLinewiseShortcuts = false;
fInstalledNavigateCommandHorizontalLinewiseShortcuts = false; }
} if (fInstalledSelectOptionLinewiseShortcuts) {
if (fInstalledNavigateCommandVerticalLinewiseShortcuts) { Window()->RemoveShortcut(B_UP_ARROW, B_OPTION_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_UP_ARROW, B_COMMAND_KEY); Window()->RemoveShortcut(B_DOWN_ARROW, B_OPTION_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_DOWN_ARROW, B_COMMAND_KEY); fInstalledSelectOptionLinewiseShortcuts = false;
fInstalledNavigateCommandVerticalLinewiseShortcuts = false; }
}
if (fInstalledNavigateControlHorizontalLinewiseShortcuts) {
Window()->RemoveShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY);
Window()->RemoveShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY);
fInstalledNavigateControlHorizontalLinewiseShortcuts = false;
}
if (fInstalledNavigateControlVerticalLinewiseShortcuts) {
Window()->RemoveShortcut(B_UP_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY);
Window()->RemoveShortcut(B_DOWN_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY);
fInstalledNavigateControlVerticalLinewiseShortcuts = false;
}
if (fInstalledSelectCommandHorizontalLinewiseShortcuts) {
Window()->RemoveShortcut(B_LEFT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_RIGHT_ARROW, B_COMMAND_KEY | B_SHIFT_KEY);
fInstalledSelectCommandHorizontalLinewiseShortcuts = false;
}
if (fInstalledSelectCommandVerticalLinewiseShortcuts) {
Window()->RemoveShortcut(B_UP_ARROW, B_COMMAND_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_DOWN_ARROW, B_COMMAND_KEY | B_SHIFT_KEY);
fInstalledSelectCommandVerticalLinewiseShortcuts = false;
}
if (fInstalledSelectControlHorizontalLinewiseShortcuts) {
Window()->RemoveShortcut(B_LEFT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_RIGHT_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY);
fInstalledSelectControlHorizontalLinewiseShortcuts = false;
}
if (fInstalledSelectControlVerticalLinewiseShortcuts) {
Window()->RemoveShortcut(B_UP_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_DOWN_ARROW, B_NO_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY);
fInstalledSelectControlVerticalLinewiseShortcuts = false;
}
// doc-wise shortcuts use command if (fInstalledNavigateHomeEndDocwiseShortcuts) {
if (fInstalledNavigateHomeEndDocwiseShortcuts) { Window()->RemoveShortcut(B_HOME, B_COMMAND_KEY);
Window()->RemoveShortcut(B_HOME, B_COMMAND_KEY); Window()->RemoveShortcut(B_END, B_COMMAND_KEY);
Window()->RemoveShortcut(B_END, B_COMMAND_KEY); fInstalledNavigateHomeEndDocwiseShortcuts = false;
fInstalledNavigateHomeEndDocwiseShortcuts = false; }
} if (fInstalledSelectHomeEndDocwiseShortcuts) {
if (fInstalledSelectHomeEndDocwiseShortcuts) { Window()->RemoveShortcut(B_HOME, B_COMMAND_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_HOME, B_COMMAND_KEY | B_SHIFT_KEY); Window()->RemoveShortcut(B_END, B_COMMAND_KEY | B_SHIFT_KEY);
Window()->RemoveShortcut(B_END, B_COMMAND_KEY | B_SHIFT_KEY); fInstalledSelectHomeEndDocwiseShortcuts = false;
fInstalledSelectHomeEndDocwiseShortcuts = false; }
} }
} }