commit 04bf5583b903f4d96edf2de83420beab835fb425
Author: Kornel Benko <[email protected]>
Date: Sat Jul 19 19:25:16 2025 +0200
Moved check for wrapped search to BufferView
Fixes #13200
---
src/BufferView.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++++--------
src/lyxfind.cpp | 40 +++------------------------------------
2 files changed, 50 insertions(+), 45 deletions(-)
diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index a7a5ad93ea..38e71d0792 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -1942,14 +1942,53 @@ void BufferView::dispatch(FuncRequest const & cmd,
DispatchResult & dr)
FindAndReplaceOptions opt;
istringstream iss(to_utf8(cmd.argument()));
iss >> opt;
- if (findAdv(this, opt)) {
- dr.screenUpdate(Update::Force | Update::FitCursor);
- cur.dispatched();
- dispatched = true;
- } else {
- cur.undispatched();
- dispatched = false;
- }
+ bool repeat_search;
+ do {
+ repeat_search = false;
+
+ if (findAdv(this, opt)) {
+ dr.screenUpdate(Update::Force |
Update::FitCursor);
+ cur.dispatched();
+ dispatched = true;
+ } else {
+ DocIterator cur_orig(cursor());
+ if (opt.forward) {
+ docstring q = _("End of file reached
while searching forward.\n"
+ "Continue searching from the
beginning?");
+ int wrap_answer =
frontend::Alert::prompt(_("Wrap search?"),
+ q, 0, 1, _("&Yes"), _("&No"));
+ if (wrap_answer == 0) {
+ cursor().clear();
+
cursor().push_back(CursorSlice(buffer().inset()));
+ repeat_search = true;
+ }
+ }
+ else {
+ docstring q = _("Beginning of file
reached while searching backward.\n"
+ "Continue searching from the
end?");
+ int wrap_answer =
frontend::Alert::prompt(_("Wrap search?"),
+ q, 0, 1, _("&Yes"), _("&No"));
+ if (wrap_answer == 0) {
+
cursor().setCursor(doc_iterator_end(&buffer()));
+ cursor().backwardPos();
+ dispatched = true;
+ repeat_search = true;
+ }
+ }
+
+ if (repeat_search) {
+ clearSelection();
+
cur.setCursor(cursor().selectionBegin());
+ dr.screenUpdate(Update::Force |
Update::FitCursor);
+ cur.dispatched();
+ dispatched = true;
+ }
+ else {
+ cur.undispatched();
+ dispatched = false;
+ }
+ }
+ } while (repeat_search);
break;
}
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index df71e12532..be65634519 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -697,57 +697,23 @@ bool lyxreplace(BufferView * bv, FuncRequest const & ev)
}
-bool findNextChange(BufferView * bv, Cursor & cur, bool const check_wrap)
+bool findNextChange(Cursor & cur)
{
for (; cur; cur.forwardPos())
if (cur.inTexted() && cur.paragraph().isChanged(cur.pos()))
return true;
- if (check_wrap) {
- DocIterator cur_orig(bv->cursor());
- docstring q = _("End of file reached while searching forward.\n"
- "Continue searching from the beginning?");
- int wrap_answer = frontend::Alert::prompt(_("Wrap search?"),
- q, 0, 1, _("&Yes"), _("&No"));
- if (wrap_answer == 0) {
- bv->cursor().clear();
-
bv->cursor().push_back(CursorSlice(bv->buffer().inset()));
- bv->clearSelection();
- cur.setCursor(bv->cursor().selectionBegin());
- if (findNextChange(bv, cur, false))
- return true;
- }
- bv->cursor().setCursor(cur_orig);
- }
-
return false;
}
-bool findPreviousChange(BufferView * bv, Cursor & cur, bool const check_wrap)
+bool findPreviousChange(Cursor & cur)
{
for (cur.backwardPos(); cur; cur.backwardPos()) {
if (cur.inTexted() && cur.paragraph().isChanged(cur.pos()))
return true;
}
- if (check_wrap) {
- DocIterator cur_orig(bv->cursor());
- docstring q = _("Beginning of file reached while searching
backward.\n"
- "Continue searching from the end?");
- int wrap_answer = frontend::Alert::prompt(_("Wrap search?"),
- q, 0, 1, _("&Yes"), _("&No"));
- if (wrap_answer == 0) {
- bv->cursor().setCursor(doc_iterator_end(&bv->buffer()));
- bv->cursor().backwardPos();
- bv->clearSelection();
- cur.setCursor(bv->cursor().selectionBegin());
- if (findPreviousChange(bv, cur, false))
- return true;
- }
- bv->cursor().setCursor(cur_orig);
- }
-
return false;
}
@@ -792,7 +758,7 @@ bool findChange(BufferView * bv, bool forward)
Cursor cur(*bv);
cur.setCursor(forward ? bv->cursor().selectionEnd()
: bv->cursor().selectionBegin());
- forward ? findNextChange(bv, cur, true) : findPreviousChange(bv, cur,
true);
+ forward ? findNextChange(cur) : findPreviousChange(cur);
return selectChange(cur, forward);
}
--
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs