On Wed, Mar 19, 2003 at 05:23:17PM +0100, Andre Poenitz wrote: > My bibkey breaking...
I'm going to stop now, btw. I hacked out the direct updates (below) and it breaks everything so badly that there is no point attempting (ever) cleaning this up. john Index: BufferView_pimpl.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView_pimpl.C,v retrieving revision 1.347 diff -u -p -r1.347 BufferView_pimpl.C --- BufferView_pimpl.C 19 Mar 2003 14:45:04 -0000 1.347 +++ BufferView_pimpl.C 19 Mar 2003 16:30:11 -0000 @@ -499,9 +499,64 @@ void BufferView::Pimpl::workAreaResize() } +void BufferView::Pimpl::updateInset(Inset * inset) +{ + if (!inset || !available()) { + lyxerr << "calling updateInset(), no inset" << endl; + return; + } + + lyxerr << "calling updateInset()" << endl; + + // first check for locking insets + if (bv_->theLockingInset()) { + if (bv_->theLockingInset() == inset) { + if (bv_->text->updateInset(inset)) { + lyxerr << "Calling update() within" << endl; + //update(); + updateScrollbar(); + return; + } + } else if (bv_->theLockingInset()->updateInsetInInset(bv_, inset)) { + if (bv_->text->updateInset(bv_->theLockingInset())) { + lyxerr << "Calling update() within 2" << endl; + //update(); + updateScrollbar(); + return; + } + } + } + + // 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(BufferView::UPDATE); + if (bv_->text->updateInset(inset)) { + update(BufferView::SELECT); + return; + } + } else if (static_cast<UpdatableInset *>(tl_inset) + ->updateInsetInInset(bv_, inset)) + { + if (bv_->text->updateInset(tl_inset)) { + lyxerr << "Calling update() within 3" << endl; + // update(); + updateScrollbar(); + } + } +} + + void BufferView::Pimpl::update() { + lyxerr << "calling update()" << endl; if (!bv_->theLockingInset() || !bv_->theLockingInset()->nodraw()) { + lyxerr << "actually doing update()" << endl; screen().update(*bv_); bool fitc = false; while (bv_->text->status() == LyXText::CHANGED_IN_DRAW) { @@ -539,12 +594,14 @@ void BufferView::Pimpl::update(LyXText * text->fullRebreak(); +#if 0 if (text->inset_owner) { text->inset_owner->setUpdateStatus(bv_, InsetText::NONE); updateInset(text->inset_owner); } else { update(); } +#endif } @@ -558,12 +615,14 @@ void BufferView::Pimpl::update(BufferVie text->fullRebreak(); +#if 0 if (text->inset_owner) { text->inset_owner->setUpdateStatus(bv_, InsetText::NONE); updateInset(text->inset_owner); } else { update(); } +#endif } @@ -942,6 +1001,7 @@ bool BufferView::Pimpl::dispatch(FuncReq // Make sure that the cached BufferView is correct. FuncRequest ev = ev_in; ev.setView(bv_); + bool ret = true; lyxerr[Debug::ACTION] << "BufferView::Pimpl::Dispatch:" << " action[" << ev.action << ']' @@ -1270,10 +1330,10 @@ bool BufferView::Pimpl::dispatch(FuncReq break; default: - return bv_->getLyXText()->dispatch(FuncRequest(ev, bv_)); + ret = bv_->getLyXText()->dispatch(FuncRequest(ev, bv_)); } // end of switch - return true; + return ret; } @@ -1335,50 +1395,4 @@ bool BufferView::Pimpl::insertInset(Inse unFreezeUndo(); return true; -} - - -void BufferView::Pimpl::updateInset(Inset * inset) -{ - if (!inset || !available()) - return; - - // first check for locking insets - if (bv_->theLockingInset()) { - if (bv_->theLockingInset() == inset) { - if (bv_->text->updateInset(inset)) { - update(); - updateScrollbar(); - return; - } - } else if (bv_->theLockingInset()->updateInsetInInset(bv_, inset)) { - if (bv_->text->updateInset(bv_->theLockingInset())) { - update(); - updateScrollbar(); - return; - } - } - } - - // 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(BufferView::UPDATE); - if (bv_->text->updateInset(inset)) { - update(BufferView::SELECT); - return; - } - } else if (static_cast<UpdatableInset *>(tl_inset) - ->updateInsetInInset(bv_, inset)) - { - if (bv_->text->updateInset(tl_inset)) { - update(); - updateScrollbar(); - } - } } Index: commandtags.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/commandtags.h,v retrieving revision 1.117 diff -u -p -r1.117 commandtags.h --- commandtags.h 13 Mar 2003 13:56:20 -0000 1.117 +++ commandtags.h 19 Mar 2003 16:30:12 -0000 @@ -147,7 +147,6 @@ enum kb_action { LFUN_MATH_MUTATE, // Andre' 20010523 LFUN_MATH_IMPORT_SELECTION, // Andre' 20010704 LFUN_MATH_SPACE, // Andre' 20010725 - LFUN_FIGURE, LFUN_DELETE_WORD_FORWARD, LFUN_DELETE_WORD_BACKWARD, LFUN_DELETE_LINE_FORWARD, Index: lyxfunc.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxfunc.C,v retrieving revision 1.419 diff -u -p -r1.419 lyxfunc.C --- lyxfunc.C 19 Mar 2003 14:45:09 -0000 1.419 +++ lyxfunc.C 19 Mar 2003 16:30:15 -0000 @@ -1577,15 +1577,34 @@ void LyXFunc::dispatch(FuncRequest const break; } // end of switch - view()->owner()->updateLayoutChoice(); - view()->fitCursor(); - - // If we executed a mutating lfun, mark the buffer as dirty - if (!lyxaction.funcHasFlag(ev.action, LyXAction::NoBuffer) - && !lyxaction.funcHasFlag(ev.action, LyXAction::ReadOnly)) - view()->buffer()->markDirty(); exit_with_message: + + view()->owner()->updateLayoutChoice(); + + if (view()->available()) { + view()->fitCursor(); + + // If we executed a mutating lfun, mark the buffer as dirty + if (!lyxaction.funcHasFlag(ev.action, LyXAction::NoBuffer) + && !lyxaction.funcHasFlag(ev.action, LyXAction::ReadOnly)) + view()->buffer()->markDirty(); + + LyXText * lt = view()->getLyXText(); + + if (lt != view()->text) { + lt->inset_owner->setUpdateStatus(view(), InsetText::NONE); + view()->updateInset(lt->inset_owner); + } + + lyxerr << "start of lfun update { " << endl; + if (view()->text->status() != LyXText::UNCHANGED) + view()->update(); + lyxerr << "} end of lfun update" << endl; + + } + + sendDispatchMessage(getMessage(), ev, verbose); } Index: text3.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text3.C,v retrieving revision 1.53 diff -u -p -r1.53 text3.C --- text3.C 19 Mar 2003 15:04:23 -0000 1.53 +++ text3.C 19 Mar 2003 16:30:17 -0000 @@ -1393,7 +1393,7 @@ Inset::RESULT LyXText::dispatch(FuncRequ bv->screen().toggleSelection(bv->text, bv); bv->text->clearSelection(); bv->text->fullRebreak(); - bv->update(); + // bv->update(); bv->updateScrollbar(); // Single left click in math inset? Index: frontends/screen.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/screen.C,v retrieving revision 1.33 diff -u -p -r1.33 screen.C --- frontends/screen.C 17 Mar 2003 16:24:57 -0000 1.33 +++ frontends/screen.C 19 Mar 2003 16:30:18 -0000 @@ -250,6 +250,7 @@ void LyXScreen::update(BufferView & bv, int const vheight = workarea().workHeight(); LyXText * text = bv.text; + lyxerr << "Starting paint" << endl; workarea().getPainter().start(); switch (text->status()) { @@ -275,6 +276,7 @@ void LyXScreen::update(BufferView & bv, break; case LyXText::CHANGED_IN_DRAW: // just to remove the warning case LyXText::UNCHANGED: + lyxerr << "Doing nothing" << endl; // Nothing needs done break; }