]> git.lyx.org Git - lyx.git/blobdiff - src/LyXFunc.cpp
Embedding: saving inzip name to .lyx file so that embedded files can always be found...
[lyx.git] / src / LyXFunc.cpp
index d4536dbc7065328a164e4777258619e426e7fc17..7a499f1dd773d65bab9ccd80c4674087aa659794 100644 (file)
@@ -513,6 +513,15 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
        case LFUN_DIALOG_TOGGLE:
        case LFUN_DIALOG_SHOW:
        case LFUN_DIALOG_UPDATE:
+               if (cmd.argument() == "prefs"
+                   || cmd.argument() == "aboutlyx")
+                       enable = true;
+               else if (lyx_view_)
+                       return lyx_view_->getStatus(cmd);
+               else
+                       enable = false;
+               break;
+
        case LFUN_TOOLBAR_TOGGLE:
        case LFUN_INSET_APPLY:
        case LFUN_BUFFER_WRITE:
@@ -571,7 +580,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
        }
        
        // This could be used for the no-GUI version. The GUI version is handled in
-       // LyXView::getStatus().
+       // LyXView::getStatus(). See above.
        /*
        case LFUN_BUFFER_WRITE:
        case LFUN_BUFFER_WRITE_AS: {
@@ -1650,6 +1659,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        TextClassPtr oldClass = buffer->params().getTextClassPtr();
                        view()->cursor().recordUndoFullDocument();
                        buffer->params().clearLayoutModules();
+                       buffer->params().makeTextClass();
                        updateLayout(oldClass, buffer);
                        updateFlags = Update::Force | Update::FitCursor;
                        break;
@@ -1661,6 +1671,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        TextClassPtr oldClass = buffer->params().getTextClassPtr();
                        view()->cursor().recordUndoFullDocument();
                        buffer->params().addLayoutModule(argument);
+                       buffer->params().makeTextClass();
                        updateLayout(oldClass, buffer);
                        updateFlags = Update::Force | Update::FitCursor;
                        break;
@@ -1689,6 +1700,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        TextClassPtr oldClass = buffer->params().getTextClassPtr();
                        view()->cursor().recordUndoFullDocument();
                        buffer->params().setBaseClass(new_class);
+                       buffer->params().makeTextClass();
                        updateLayout(oldClass, buffer);
                        updateFlags = Update::Force | Update::FitCursor;
                        break;
@@ -1701,6 +1713,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        textclass_type const tc = buffer->params().getBaseClass();
                        textclasslist.reset(tc);
                        buffer->params().setBaseClass(tc);
+                       buffer->params().makeTextClass();
                        updateLayout(oldClass, buffer);
                        updateFlags = Update::Force | Update::FitCursor;
                        break;
@@ -1738,13 +1751,14 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                case LFUN_BOOKMARK_GOTO:
                        // go to bookmark, open unopened file and switch to buffer if necessary
                        gotoBookmark(convert<unsigned int>(to_utf8(cmd.argument())), true, true);
+                       updateFlags = Update::FitCursor;
                        break;
 
                case LFUN_BOOKMARK_CLEAR:
                        LyX::ref().session().bookmarks().clear();
                        break;
 
-               default: {
+               default:
                        BOOST_ASSERT(theApp());
                        // Let the frontend dispatch its own actions.
                        if (theApp()->dispatch(cmd))
@@ -1759,20 +1773,24 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                                break;
                        }
 
-                       // FIXME: Probably a good idea to inverse the Cursor and BufferView
-                       // dispatching.
+                       BOOST_ASSERT(lyx_view_->view());
+                       // Let the current BufferView dispatch its own actions.
+                       if (view()->dispatch(cmd)) {
+                               // The BufferView took care of its own updates if needed.
+                               updateFlags = Update::None;
+                               break;
+                       }
 
                        // Let the current Cursor dispatch its own actions.
-                       BOOST_ASSERT(lyx_view_->view());
                        view()->cursor().getPos(cursorPosBeforeDispatchX_,
                                                cursorPosBeforeDispatchY_);
                        view()->cursor().dispatch(cmd);
                        updateFlags = view()->cursor().result().update();
-                       if (!view()->cursor().result().dispatched())
-                               // Let the current BufferView dispatch its own actions.
-                               updateFlags = view()->dispatch(cmd);
-                       break;
-               }
+                       if (!view()->cursor().result().dispatched()) {
+                               // No update needed in this case (e.g. when reaching
+                               // top of document.
+                               updateFlags = Update::None;
+                       }
                }
 
                if (lyx_view_ && lyx_view_->buffer()) {
@@ -1786,7 +1804,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        if (flag.enabled()
                            && !lyxaction.funcHasFlag(action, LyXAction::NoBuffer)
                            && !lyxaction.funcHasFlag(action, LyXAction::ReadOnly))
-                               lyx_view_->buffer()->markDirty();
+                               lyx_view_->buffer()->markDirty();                       
 
                        //Do we have a selection?
                        theSelection().haveSelection(view()->cursor().selection());
@@ -2253,6 +2271,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_USE_ESC_CHARS:
        case LyXRC::RC_USE_INP_ENC:
        case LyXRC::RC_USE_PERS_DICT:
+       case LyXRC::RC_USE_TOOLTIP:
        case LyXRC::RC_USE_PIXMAP_CACHE:
        case LyXRC::RC_USE_SPELL_LIB:
        case LyXRC::RC_VIEWDVI_PAPEROPTION: