- bool found = false;
-
- if (!bv->available() || searchstr.empty())
- return found;
-
- bv->hideCursor();
- bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
-
- LyXText * ltCur = bv->text;
- if (ltCur->selection)
- ltCur->cursor = forward ? ltCur->sel_end_cursor
- : ltCur->sel_start_cursor;
-
- if (forward
- ? SearchForward(bv, searchstr, casesens, matchwrd)
- : SearchBackward(bv, searchstr, casesens, matchwrd)) {
- bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
- bv->toggleSelection();
- bv->text->ClearSelection(bv);
- bv->text->SetSelectionOverString(bv, searchstr);
- bv->toggleSelection(false);
- found = true;
- };
-
- if (bv->focus())
- bv->showCursor();
-
- return found;
+ if (!bv->available() || searchstr.empty())
+ return false;
+
+ LyXText * text = bv->getLyXText();
+
+ bv->hideCursor();
+ bv->update(text, BufferView::SELECT|BufferView::FITCUR);
+
+ if (text->selection.set())
+ text->cursor = forward ?
+ text->selection.end : text->selection.start;
+
+ SearchResult result = SR_NOT_FOUND;
+
+ if (!frominset && bv->theLockingInset()) {
+ bool found = forward ?
+ bv->theLockingInset()->searchForward(bv, searchstr, casesens, matchwrd) :
+ bv->theLockingInset()->searchBackward(bv, searchstr, casesens, matchwrd);
+ if (found)
+ result = SR_FOUND_NOUPDATE;
+ else {
+ text = bv->getLyXText();
+ Paragraph * par = text->cursor.par();
+ pos_type pos = text->cursor.pos();
+ if (forward) {
+ if (pos < par->size() - 1)
+ ++pos;
+ else {
+ pos = 0;
+ par = par->next();
+ }
+ if (par)
+ text->setCursor(bv, par, pos);
+ }
+ if (par) {
+ result = forward ?
+ SearchForward(bv, text, searchstr, casesens, matchwrd) :
+ SearchBackward(bv, text, searchstr, casesens, matchwrd);
+ }
+ }
+ } else {
+ result = forward ?
+ SearchForward(bv, text, searchstr, casesens, matchwrd) :
+ SearchBackward(bv, text, searchstr, casesens, matchwrd);
+ }
+
+ bool found = true;
+ if (result == SR_FOUND) {
+ // the actual text pointer could have changed!
+ bv->update(bv->getLyXText(), BufferView::SELECT|BufferView::FITCUR);
+ bv->toggleSelection();
+ bv->getLyXText()->clearSelection();
+ bv->getLyXText()->setSelectionOverString(bv, searchstr);
+ bv->toggleSelection(false);
+ bv->update(bv->getLyXText(), BufferView::SELECT|BufferView::FITCUR);
+ } else if (result == SR_NOT_FOUND)
+ found = false;
+
+ if (bv->focus())
+ bv->showCursor();
+
+ return found;