]> git.lyx.org Git - features.git/commitdiff
make sure the 'setStatus(Collapsed)' crash won't occur otherwise
authorAndré Pönitz <poenitz@gmx.net>
Fri, 6 May 2005 20:00:31 +0000 (20:00 +0000)
committerAndré Pönitz <poenitz@gmx.net>
Fri, 6 May 2005 20:00:31 +0000 (20:00 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9917 a592a061-630c-0410-9148-cb99ea01b6c8

src/cursor.C
src/cursor.h
src/frontends/LyXView.C
src/frontends/LyXView.h
src/insets/ChangeLog
src/insets/insetbranch.C
src/insets/insetcharstyle.C
src/insets/insetcollapsable.C
src/insets/insetcollapsable.h
src/insets/insetert.C
src/lyxfunc.C

index f0fb6577c928862d079112b58bd26220424de418..d77f7c25c918735a8a0a0390eaa6e4ecca31088f 100644 (file)
@@ -507,7 +507,7 @@ std::ostream & operator<<(std::ostream & os, LCursor const & cur)
 
 bool LCursor::isInside(InsetBase const * p)
 {
-       for (size_t i = 0; i < depth(); ++i)
+       for (size_t i = 0; i != depth(); ++i)
                if (&operator[](i).inset() == p)
                        return true;
        return false;
@@ -1187,4 +1187,3 @@ void LCursor::fixIfBroken()
                lyxerr << "correcting cursor to level " << depth() << endl;
        }
 }
-
index d4ac28fe7145f93b992de915f7d329a033a8d957..5cd4b39ad52c20a8de90b9b2fe34862570c3e376 100644 (file)
@@ -53,7 +53,7 @@ public:
        bool popLeft();
        /// pop one slice off the cursor stack and go right
        bool popRight();
-       /// make sure cursor is outside given inset
+       /// make sure we are outside of given inset
        void leaveInset(InsetBase const & inset);
        /// sets cursor part
        void setCursor(DocIterator const & it);
index 6b87c07997c14d118f779aaacb8d8b7aad4469a1..48c4e4df9942e68339fb6eb5601658304769c828 100644 (file)
@@ -203,20 +203,6 @@ void LyXView::dispatch(FuncRequest const & cmd)
 }
 
 
-LyXFunc & LyXView::getLyXFunc()
-{
-       BOOST_ASSERT(lyxfunc_.get());
-       return *lyxfunc_.get();
-}
-
-
-LyXFunc const & LyXView::getLyXFunc() const
-{
-       BOOST_ASSERT(lyxfunc_.get());
-       return *lyxfunc_.get();
-}
-
-
 Buffer const * const LyXView::updateInset(InsetBase const * inset) const
 {
        Buffer const * buffer_ptr = 0;
index 5caff004b782b63ecdd88fdafaee24f26addbc95..c43dc7118638b69930cad6f8c0a786a2dfa73ef7 100644 (file)
@@ -80,9 +80,9 @@ public:
        Buffer * buffer() const;
 
        /// return the LyX function handler for this view
-       LyXFunc & getLyXFunc();
+       LyXFunc & getLyXFunc() { return *lyxfunc_.get(); }
        ///
-       LyXFunc const & getLyXFunc() const;
+       LyXFunc const & getLyXFunc() const { return *lyxfunc_.get(); }
 
        /// return the toolbar for this view
        Toolbars & getToolbars() { return *toolbars_.get(); }
index a1c624ae973c358a21d5e568421ca555d65170f7..49d2ce026c24b95cb4f4c04d0ecd112d261777e5 100644 (file)
@@ -1,8 +1,3 @@
-
-2005-05-07  André Pönitz  <poenitz@gmx.net>
-
-       * insetert.C (doDispatch): move cursor out of collapsed insets
-
 2005-05-06  José Matos  <jamatos@lyx.org>
 
        * insetcommandparams.C (scanCommand): fix out of range string access.
index 70fa28a7ed25ce7611cabe8d98e506f4d9dce2f1..d32362907ee2ea9ed8d2f5df8a4cdbd6bc7733a6 100644 (file)
@@ -147,32 +147,24 @@ void InsetBranch::doDispatch(LCursor & cur, FuncRequest & cmd)
                cur.dispatched();
 
                if (cmd.argument == "open")
-                       setStatus(Open);
-               else if (cmd.argument == "close") {
-                       setStatus(Collapsed);
-                       cur.leaveInset(*this);
-               } else if (cmd.argument == "toggle") {
-                       if (isOpen()) {
-                               setStatus(Collapsed);
-                               cur.leaveInset(*this);
-                       } else {
-                               setStatus(Open);
-                       }
-
-               // The branch inset uses "assign".
-               } else if (cmd.argument == "assign" || cmd.argument.empty()) {
+                       setStatus(cur, Open);
+               else if (cmd.argument == "close")
+                       setStatus(cur, Collapsed);
+               else if (cmd.argument == "toggle")
+                       setStatus(cur, isOpen() ? Collapsed : Open);
+               else if (cmd.argument == "assign" || cmd.argument.empty()) {
+                       // The branch inset uses "assign".
                        BranchList const & branchlist =
                                cur.buffer().params().branchlist();
                        if (isBranchSelected(branchlist)) {
                                if (status() != Open)
-                                       setStatus(Open);
+                                       setStatus(cur, Open);
                                else
                                        cur.undispatched();
                        } else {
-                               if (status() != Collapsed) {
-                                       setStatus(Collapsed);
-                                       cur.leaveInset(*this);
-                               } else
+                               if (status() != Collapsed)
+                                       setStatus(cur, Collapsed);
+                               else
                                        cur.undispatched();
                        }
                }
@@ -198,7 +190,8 @@ bool InsetBranch::getStatus(LCursor & cur, FuncRequest const & cmd,
                if (cmd.argument == "open" || cmd.argument == "close" ||
                    cmd.argument == "toggle")
                        flag.enabled(true);
-               else if (cmd.argument == "assign" || cmd.argument.empty()) {
+               else if (cmd.argument == "assign"
+                          || cmd.argument.empty()) {
                        BranchList const & branchlist =
                                cur.buffer().params().branchlist();
                        if (isBranchSelected(branchlist))
index e98f78bc9ae5440e42bcd4a18029831afe1c8571..62025c7249e260b315fe7da1c19ce6f8b72aa075 100644 (file)
@@ -45,7 +45,7 @@ using std::ostringstream;
 void InsetCharStyle::init()
 {
        setInsetName("CharStyle");
-       setStatus(Inlined);
+       setInlined();
        setDrawFrame(false);
        has_label_ = true;
 }
@@ -126,7 +126,7 @@ void InsetCharStyle::write(Buffer const & buf, ostream & os) const
 void InsetCharStyle::read(Buffer const & buf, LyXLex & lex)
 {
        InsetCollapsable::read(buf, lex);
-       setStatus(Inlined);
+       setInlined();
 }
 
 
@@ -209,7 +209,7 @@ void InsetCharStyle::getDrawFont(LyXFont & font) const
 
 void InsetCharStyle::doDispatch(LCursor & cur, FuncRequest & cmd)
 {
-       setStatus(Inlined);
+       setInlined();
        switch (cmd.action) {
                case LFUN_MOUSE_PRESS:
                        if (cmd.button() == mouse_button::button3)
index 41e76541473fc7d64c12eebd4b619869ec36886c..e825670b80326aa0de4cb96b4754700b476eb847 100644 (file)
@@ -206,8 +206,7 @@ void InsetCollapsable::getCursorPos
                if (openinlined_)
                        x += dimensionCollapsed().wid;
                else
-                       y += dimensionCollapsed().height() - ascent()
-                          + TEXT_TO_INSET_OFFSET + textdim_.asc;
+                       y += dimensionCollapsed().height() - ascent() + TEXT_TO_INSET_OFFSET + textdim_.asc;
        }
 
        x += TEXT_TO_INSET_OFFSET;
@@ -316,8 +315,7 @@ void InsetCollapsable::doDispatch(LCursor & cur, FuncRequest & cmd)
                case Open: {
                        if (hitButton(cmd)) {
                                lyxerr << "InsetCollapsable::lfunMouseRelease 2" << endl;
-                               setStatus(Collapsed);
-                               cur.leaveInset(*this);
+                               setStatus(cur, Collapsed);
                                cur.bv().cursor() = cur;
                        } else {
                                lyxerr << "InsetCollapsable::lfunMouseRelease 3" << endl;
@@ -335,18 +333,12 @@ void InsetCollapsable::doDispatch(LCursor & cur, FuncRequest & cmd)
 
        case LFUN_INSET_TOGGLE:
                if (cmd.argument == "open")
-                       setStatus(Open);
-               else if (cmd.argument == "close") {
-                       setStatus(Collapsed);
-                       cur.leaveInset(*this);
-               } else if (cmd.argument == "toggle" || cmd.argument.empty()) {
-                       if (isOpen()) {
-                               setStatus(Collapsed);
-                               cur.leaveInset(*this);
-                       } else {
-                               setStatus(Open);
-                       }
-               } else // if assign or anything else
+                       setStatus(cur, Open);
+               else if (cmd.argument == "close")
+                       setStatus(cur, Collapsed);
+               else if (cmd.argument == "toggle" || cmd.argument.empty())
+                       setStatus(cur, isOpen() ? Collapsed : Open);
+               else // if assign or anything else
                        cur.undispatched();
                cur.dispatched();
                break;
@@ -388,29 +380,18 @@ int InsetCollapsable::scroll(bool recursive) const
 }
 
 
-void InsetCollapsable::open()
-{
-       if (status_ == Collapsed)   // ...but not inlined
-               setStatus(Open);
-}
-
-
-void InsetCollapsable::close()
-{
-       setStatus(Collapsed);
-}
-
-
 void InsetCollapsable::setLabel(string const & l)
 {
        label = l;
 }
 
 
-void InsetCollapsable::setStatus(CollapseStatus status)
+void InsetCollapsable::setStatus(LCursor & cur, CollapseStatus status)
 {
        status_ = status;
        setButtonLabel();
+       if (status_ == Collapsed)
+               cur.leaveInset(*this);
 }
 
 
index 9b9e84ed13c3a99a860f6718faefc9676f42cd9a..1f747325d9e3ce15eafebd03a0a854197090f404 100644 (file)
@@ -83,17 +83,13 @@ public:
        ///
        CollapseStatus status() const { return status_; }
        ///
-       void open();
-       ///
-       void close();
-       ///
        bool allowSpellCheck() const { return true; }
        ///
        bool getStatus(LCursor &, FuncRequest const &, FuncStatus &) const;
 
 protected:
        ///
-       void setStatus(CollapseStatus st);
+       void setStatus(LCursor & cur, CollapseStatus st);
        ///
        virtual void doDispatch(LCursor & cur, FuncRequest & cmd);
        ///
@@ -106,6 +102,8 @@ protected:
        void edit(LCursor & cur, bool left);
        ///
        InsetBase * editXY(LCursor & cur, int x, int y) const;
+       ///
+       void setInlined() { status_ = Inlined; }
 
 protected:
        ///
index 412205160b77e07ff64201765d22ed8abbca555a..3d4b17887a612c6d3d581f9bb2edc798d519a85b 100644 (file)
@@ -207,9 +207,7 @@ void InsetERT::doDispatch(LCursor & cur, FuncRequest & cmd)
        case LFUN_INSET_MODIFY: {
                InsetCollapsable::CollapseStatus st;
                InsetERTMailer::string2params(cmd.argument, st);
-               setStatus(st);
-               if (status() == Collapsed)
-                       cur.leaveInset(*this);
+               setStatus(cur, st);
                break;
        }
        case LFUN_PASTE:
index 4abde3aecf3bea064eaf76ea3238f29c5ae6d832..57bd08c78862eb7c06499c5ac47dcecf86f11c79 100644 (file)
@@ -1518,7 +1518,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                }
                }
 
-               BOOST_ASSERT(view());
                if (view()->available()) {
                        // Redraw screen unless explicitly told otherwise.
                        // This also initializes the position cache for all insets