Patch by x-ist, thanks! Fixes non-terminating ReplaceAll, #8141.

This commit is contained in:
Humdinger
2012-07-25 18:48:24 +02:00
parent f081f8b731
commit a736c8aa6b
2 changed files with 20 additions and 6 deletions
+18 -5
View File
@@ -1408,7 +1408,7 @@ StyledEditWindow::_RevertToSaved()
bool bool
StyledEditWindow::_Search(BString string, bool caseSensitive, bool wrap, StyledEditWindow::_Search(BString string, bool caseSensitive, bool wrap,
bool backSearch) bool backSearch, bool scrollToOccurence)
{ {
int32 start; int32 start;
int32 finish; int32 finish;
@@ -1450,7 +1450,9 @@ StyledEditWindow::_Search(BString string, bool caseSensitive, bool wrap,
if (start != B_ERROR) { if (start != B_ERROR) {
finish = start + length; finish = start + length;
fTextView->Select(start, finish); fTextView->Select(start, finish);
fTextView->ScrollToSelection();
if (scrollToOccurence)
fTextView->ScrollToSelection();
return true; return true;
} }
@@ -1501,17 +1503,28 @@ StyledEditWindow::_ReplaceAll(BString findThis, BString replaceWith,
{ {
bool first = true; bool first = true;
fTextView->SetSuppressChanges(true); fTextView->SetSuppressChanges(true);
while (_Search(findThis, caseSensitive, true, false)) {
// start from the beginning of text
fTextView->Select(0,0);
int32 start, finish;
// iterate occurences of findThis without wrapping around
while (_Search(findThis, caseSensitive, false, false, false)) {
if (first) { if (first) {
_UpdateCleanUndoRedoSaveRevert(); _UpdateCleanUndoRedoSaveRevert();
first = false; first = false;
} }
int32 start, finish;
fTextView->GetSelection(&start, &finish); fTextView->GetSelection(&start, &finish);
fTextView->Delete(start, start + findThis.Length()); fTextView->Delete(start, start + findThis.Length());
fTextView->Insert(start, replaceWith.String(), replaceWith.Length()); fTextView->Insert(start, replaceWith.String(), replaceWith.Length());
// advance the caret behind the inserted text
start += replaceWith.Length();
fTextView->Select(start, start);
} }
fTextView->ScrollToSelection();
fTextView->SetSuppressChanges(false); fTextView->SetSuppressChanges(false);
} }
+2 -1
View File
@@ -57,7 +57,8 @@ private:
status_t _LoadFile(entry_ref* ref); status_t _LoadFile(entry_ref* ref);
void _RevertToSaved(); void _RevertToSaved();
bool _Search(BString searchFor, bool caseSensitive, bool _Search(BString searchFor, bool caseSensitive,
bool wrap, bool backSearch); bool wrap, bool backSearch,
bool scrollToOccurence = true);
void _FindSelection(); void _FindSelection();
bool _Replace(BString findThis, BString replaceWith, bool _Replace(BString findThis, BString replaceWith,
bool caseSensitive, bool wrap, bool caseSensitive, bool wrap,