pos_type selendpos = 0;
bool selection = false;
bool mark_set = false;
-
+
owner_->prohibitInput();
owner_->message(_("Formatting document..."));
delete bv_->text;
bv_->text = new LyXText(bv_);
bv_->text->init(bv_);
+ buffer_->resizeInsets(bv_);
} else {
// See if we have a text in TextCache that fits
// the new buffer_ with the correct width.
} else {
bv_->text = new LyXText(bv_);
bv_->text->init(bv_);
+ //buffer_->resizeInsets(bv_);
}
}
+
updateScreen();
if (par) {
bv_->text->selection.set(true);
- /* at this point just to avoid the Delete-Empty-Paragraph
- * Mechanism when setting the cursor */
+ // At this point just to avoid the Delete-Empty-Paragraph-
+ // Mechanism when setting the cursor.
bv_->text->selection.mark(mark_set);
if (selection) {
bv_->text->setCursor(bv_, selstartpar, selstartpos);
// remake the inset locking
bv_->theLockingInset(the_locking_inset);
}
+
bv_->text->first_y = screen_->topCursorVisible(bv_->text);
-#if 0
- buffer_->resizeInsets(bv_);
-#endif
+
// this will scroll the screen such that the cursor becomes visible
updateScrollbar();
redraw();
if (lyxerr.debugging())
textcache.show(lyxerr, "Expose delete all");
textcache.clear();
+ buffer_->resizeInsets(bv_);
} else if (heightChange) {
// Rebuild image of current screen
updateScreen();
return;
int y = text->first_y;
- if (text->inset_owner)
- y += bv_->text->first_y;
Row * cursorrow = text->cursor.row();
+
text->setCursorFromCoordinates(bv_, bv_->text->cursor.x_fix(), y);
finishUndo();
// This is to allow jumping over large insets
bool BufferView::Pimpl::available() const
{
- if (buffer_ && bv_->text) return true;
+ if (buffer_ && bv_->text)
+ return true;
return false;
}
lt->setSelection(bv_);
if (lt->bv_owner)
toggleToggle();
+ else
+ updateInset(lt->inset_owner, false);
+ }
+ if (lt->bv_owner) {
+ update(lt, BufferView::SELECT|BufferView::FITCUR);
+ showCursor();
}
- update(lt, BufferView::SELECT|BufferView::FITCUR);
- showCursor();
/* ---> Everytime the cursor is moved, show the current font state. */
// should this too me moved out of this func?
case LFUN_ENDSEL:
{
LyXText * lt = bv_->getLyXText();
-
+
update(lt, BufferView::SELECT|BufferView::FITCUR);
lt->cursorEnd(bv_);
finishUndo();
| BufferView::FITCUR
| BufferView::CHANGE);
} else {
- protectedBlank(lt);
+ specialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
}
moveCursorUpdate(false);
}
}
-void BufferView::Pimpl::protectedBlank(LyXText * lt)
-{
- if (available()) {
- hideCursor();
- update(lt, BufferView::SELECT|BufferView::FITCUR);
- InsetSpecialChar * new_inset =
- new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
-#ifdef WITH_WARNINGS
-#warning Why is this code different from specialChar() below? (JMarc)
-// the code in specialChar is a generic version of what used to exist
-// for other special chars. I did not merge this case because of the
-// call to updateInset(), but what does it do?
-#endif
- if (!insertInset(new_inset))
- delete new_inset;
- else
- updateInset(new_inset, true);
- }
-}
-
-
void BufferView::Pimpl::specialChar(InsetSpecialChar::Kind kind)
{
if (available()) {
new InsetSpecialChar(kind);
if (!insertInset(new_inset))
delete new_inset;
+ else
+ updateInset(new_inset, true);
}
}
void BufferView::Pimpl::updateInset(Inset * inset, bool mark_dirty)
{
- if (!inset)
+ if (!inset || !available())
return;
// first check for locking insets
}
}
- // then check the current buffer
- if (available()) {
- hideCursor();
+ // then check if the inset is a top_level inset (has no owner)
+ // if yes do the update as always otherwise we have to update the
+ // toplevel inset where this inset is inside
+ Inset * tl_inset = inset;
+ while(tl_inset->owner())
+ tl_inset = tl_inset->owner();
+ hideCursor();
+ if (tl_inset == inset) {
update(bv_->text, BufferView::UPDATE);
if (bv_->text->updateInset(bv_, inset)) {
if (mark_dirty) {
}
return;
}
+ } else if (static_cast<UpdatableInset *>(tl_inset)
+ ->updateInsetInInset(bv_, inset))
+ {
+ if (bv_->text->updateInset(bv_, tl_inset)) {
+ update();
+ updateScrollbar();
+ }
}
}