This fixes a long-standing bug, for some reason (namely, switch from closed to inlined did not correctly recalculate the width), but does not fix an *existing* bug that is new to 1.4.0cvs (bug 965). Jug, if you're listening: why doesn't the insettext->update() correctly deal with the cursor positioning changing ?
But really this is a matter of a start of cleanup, only insetert uses the insetcollapsable need_update handling, so it should go there. It also doesn't yet fix bug 966, which is old. OK ? regards, john ? a.diff Index: insetcollapsable.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.C,v retrieving revision 1.129 diff -u -p -r1.129 insetcollapsable.C --- insetcollapsable.C 19 Mar 2003 14:45:18 -0000 1.129 +++ insetcollapsable.C 19 Mar 2003 18:56:03 -0000 @@ -46,7 +46,7 @@ class LyXText; InsetCollapsable::InsetCollapsable(BufferParams const & bp, bool collapsed) : UpdatableInset(), collapsed_(collapsed), inset(bp), button_length(0), button_top_y(0), button_bottom_y(0), - need_update(NONE), label("Label"), + label("Label"), #if 0 autocollapse(false), #endif @@ -64,7 +64,7 @@ InsetCollapsable::InsetCollapsable(Inset : UpdatableInset(in, same_id), collapsed_(in.collapsed_), framecolor(in.framecolor), labelfont(in.labelfont), inset(in.inset), button_length(0), button_top_y(0), button_bottom_y(0), - need_update(NONE), label(in.label), + label(in.label), #if 0 autocollapse(in.autocollapse), #endif @@ -189,12 +189,6 @@ void InsetCollapsable::draw(BufferView * lyx::Assert(bv); cache(bv); - if (need_update != NONE) { - const_cast<InsetText *>(&inset)->update(bv, f, true); - bv->text->postChangedInDraw(); - need_update = NONE; - return; - } if (nodraw()) return; Index: insetcollapsable.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetcollapsable.h,v retrieving revision 1.94 diff -u -p -r1.94 insetcollapsable.h --- insetcollapsable.h 17 Mar 2003 01:34:34 -0000 1.94 +++ insetcollapsable.h 19 Mar 2003 18:56:04 -0000 @@ -33,11 +33,6 @@ class LyXCursor; class InsetCollapsable : public UpdatableInset { public: /// - enum UpdateCodes { - NONE = 0, - FULL - }; - /// static int const TEXT_TO_TOP_OFFSET = 2; /// static int const TEXT_TO_BOTTOM_OFFSET = 2; @@ -226,7 +221,6 @@ protected: /// mutable int topx; mutable int topbaseline; - mutable UpdateCodes need_update; private: /// Index: insetert.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetert.C,v retrieving revision 1.110 diff -u -p -r1.110 insetert.C --- insetert.C 19 Mar 2003 14:45:19 -0000 1.110 +++ insetert.C 19 Mar 2003 18:56:05 -0000 @@ -53,7 +53,7 @@ void InsetERT::init() InsetERT::InsetERT(BufferParams const & bp, bool collapsed) - : InsetCollapsable(bp, collapsed) + : InsetCollapsable(bp, collapsed), need_update(false) { if (collapsed) status_ = Collapsed; @@ -64,7 +64,8 @@ InsetERT::InsetERT(BufferParams const & InsetERT::InsetERT(InsetERT const & in, bool same_id) - : InsetCollapsable(in, same_id), status_(in.status_) + : InsetCollapsable(in, same_id), status_(in.status_), + need_update(false) { init(); } @@ -572,6 +573,14 @@ void InsetERT::draw(BufferView * bv, LyX lyx::Assert(bv); cache(bv); + if (need_update) { + InsetText * it = const_cast<InsetText *>(&inset); + it->update(bv, f, true); + bv->text->postChangedInDraw(); + need_update = false; + return; + } + Painter & pain = bv->painter(); button_length = width_collapsed(); @@ -601,7 +610,6 @@ void InsetERT::draw(BufferView * bv, LyX draw_collapsed(pain, bl, old_x); inset.draw(bv, f, bl + descent_collapsed() + inset.ascent(bv, f), x); } - need_update = NONE; } @@ -623,7 +631,7 @@ void InsetERT::status(BufferView * bv, E { if (st != status_) { status_ = st; - need_update = FULL; + need_update = true; switch (st) { case Inlined: if (bv) @@ -710,10 +718,10 @@ void InsetERT::update(BufferView * bv, L bool reinit) { if (inset.need_update & InsetText::INIT || - inset.need_update & InsetText::FULL) - { + inset.need_update & InsetText::FULL) { setButtonLabel(); } + InsetCollapsable::update(bv, font, reinit); } Index: insetert.h =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/insetert.h,v retrieving revision 1.64 diff -u -p -r1.64 insetert.h --- insetert.h 17 Mar 2003 01:34:34 -0000 1.64 +++ insetert.h 19 Mar 2003 18:56:05 -0000 @@ -149,6 +149,9 @@ private: /// mutable ERTStatus status_; + + /// repaint needed ? + mutable bool need_update; };