]> git.lyx.org Git - features.git/commitdiff
Fix crash on exit after a Buffer switch.
authorAbdelrazak Younes <younes@lyx.org>
Wed, 23 Aug 2006 08:27:51 +0000 (08:27 +0000)
committerAbdelrazak Younes <younes@lyx.org>
Wed, 23 Aug 2006 08:27:51 +0000 (08:27 +0000)
Log:
* lyxfunc.C:
  - LyXFunc::dispatch(): put some save guards before using
    BufferView::cursor() and sendDispatchMessage().

* BufferView_pimpl.C
  - BufferView::Pimpl::setBuffer(): return before if exiting.

* WorkArea.C:
  - WorkArea::redraw(): update the toolbar when greying out.

* LyXView.C:
  - LyXView::setBuffer(): sanitization

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14815 a592a061-630c-0410-9148-cb99ea01b6c8

src/BufferView_pimpl.C
src/frontends/LyXView.C
src/frontends/WorkArea.C
src/lyxfunc.C

index 4290cbb710bfdd33a868559405bd0f388b374e2a..eeefd6d4f16e2b5d1262f9b6e0dae5e532626ad0 100644 (file)
@@ -260,6 +260,12 @@ void BufferView::Pimpl::setBuffer(Buffer * b)
                        boost::tie(cursor_.pit(), cursor_.pos()) );
        }
 
+       // If we're quitting lyx, don't bother updating stuff
+       if (quitting) {
+               buffer_ = 0;
+               return;
+       }
+
        // If we are closing current buffer, switch to the first in
        // buffer list.
        if (!b) {
@@ -277,10 +283,6 @@ void BufferView::Pimpl::setBuffer(Buffer * b)
        anchor_ref_ = 0;
        offset_ref_ = 0;
 
-       // If we're quitting lyx, don't bother updating stuff
-       if (quitting)
-               return;
-
        if (buffer_) {
                lyxerr[Debug::INFO] << BOOST_CURRENT_FUNCTION
                                    << "Buffer addr: " << buffer_ << endl;
index e9bcd1adc101befe632219e02b248fc3bf6eb7e1..2abb0deee49dc26ee03ed1db4174b643f6731fd1 100644 (file)
@@ -139,22 +139,19 @@ void LyXView::setBuffer(Buffer * b)
 
        work_area_->bufferView().setBuffer(b);
 
-       if (work_area_->bufferView().buffer())
-       {
+       if (work_area_->bufferView().buffer()) {
                // Buffer-dependent dialogs should be updated or
                // hidden. This should go here because some dialogs (eg ToC)
                // require bv_->text.
                getDialogs().updateBufferDependent(true);
+               connectBuffer(*work_area_->bufferView().buffer());
+               setLayout(work_area_->bufferView().firstLayout());
        }
 
        updateMenubar();
        updateToolbars();
        updateLayoutChoice();
        updateWindowTitle();
-       if (b) {
-               connectBuffer(*b);
-               setLayout(work_area_->bufferView().firstLayout());
-       }
        redrawWorkArea();
 }
 
index 6b1f61e66de09263503547c23e8b0742ba096662..b47fae73d918449c18b83c3ed3c0e985332c5b1d 100644 (file)
@@ -192,6 +192,7 @@ void WorkArea::redraw()
 
        if (!buffer_view_->buffer()) {
                greyOut();
+               updateScrollbar();
                return;
        }
 
index 6cc001266b76bad37e8a5047ad629689105c442d..2d1f1b65eba6fd7f58f4d55a84d040a3e31c9746 100644 (file)
@@ -1611,13 +1611,14 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                            && !lyxaction.funcHasFlag(cmd.action, LyXAction::NoBuffer)
                            && !lyxaction.funcHasFlag(cmd.action, LyXAction::ReadOnly))
                                view()->buffer()->markDirty();
-               }
 
-               if (view()->cursor().inTexted()) {
-                       view()->owner()->updateLayoutChoice();
+                       if (view()->cursor().inTexted()) {
+                               view()->owner()->updateLayoutChoice();
+                       }
                }
        }
-       sendDispatchMessage(_(getMessage()), cmd);
+       if (!quitting)
+               sendDispatchMessage(_(getMessage()), cmd);
 }