]> git.lyx.org Git - lyx.git/blobdiff - src/text3.C
Partial fix bug 2092: branches not propagated to child documents
[lyx.git] / src / text3.C
index 5c75729a69c18332217517a50146e4b081a25bff..f9e37c61311ceb128de9a96a01c29b0deb66d073 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "lyxtext.h"
 
+#include "BranchList.h"
 #include "FloatList.h"
 #include "FuncStatus.h"
 #include "buffer.h"
@@ -192,8 +193,10 @@ bool LyXText::cursorPrevious(LCursor & cur)
 
        int x = cur.x_target();
 
-       setCursorFromCoordinates(cur, x, 0);
-       bool updated = cursorUp(cur);
+       bool updated = setCursorFromCoordinates(cur, x, 0);
+       if (updated)
+               cur.bv().update();
+       updated |= cursorUp(cur);
 
        if (cpar == cur.pit() && cpos == cur.pos()) {
                // we have a row which is taller than the workarea. The
@@ -213,8 +216,10 @@ bool LyXText::cursorNext(LCursor & cur)
        lyx::pit_type cpar = cur.pit();
 
        int x = cur.x_target();
-       setCursorFromCoordinates(cur, x, cur.bv().workHeight() - 1);
-       bool updated = cursorDown(cur);
+       bool updated = setCursorFromCoordinates(cur, x, cur.bv().workHeight() - 1);
+       if (updated)
+               cur.bv().update();
+       updated |= cursorDown(cur);
 
        if (cpar == cur.pit() && cpos == cur.pos()) {
                // we have a row which is taller than the workarea. The
@@ -751,20 +756,26 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
 
        case LFUN_NEXT_INSET_TOGGLE: {
                InsetBase * inset = cur.nextInset();
+               // this is the real function we want to invoke
+               cmd = FuncRequest(LFUN_INSET_TOGGLE);
+               cur.undispatched();
+               // if there is an inset at cursor, see whether it
+               // wants to toggle.
                if (inset) {
-                       cur.clearSelection();
-                       FuncRequest fr = cmd;
-                       fr.action = LFUN_INSET_TOGGLE;
-                       inset->dispatch(cur, fr);
+                       LCursor tmpcur = cur;
+                       tmpcur.pushLeft(*inset);
+                       inset->dispatch(tmpcur, cmd);
+                       if (tmpcur.result().dispatched()) {
+                               cur.clearSelection();
+                               cur.dispatched();
+                       }
                }
+               // if it did not work, try the underlying inset.
+               if (!cur.result().dispatched())
+                       cur.inset().dispatch(cur, cmd);
                break;
        }
 
-       case LFUN_KEYMAP_TOGGLE:
-               cur.clearSelection();
-               bv->switchKeyMap();
-               break;
-
        case LFUN_SPACE_INSERT:
                if (cur.paragraph().layout()->free_spacing)
                        insertChar(cur, ' ');
@@ -1551,8 +1562,10 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
                        FuncStatus & flag) const
 {
        BOOST_ASSERT(cur.text() == this);
+
        LyXFont const & font = real_current_font;
        bool enable = true;
+       InsetBase::Code code = InsetBase::NO_CODE;
 
        switch (cmd.action) {
 
@@ -1564,11 +1577,6 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
                enable = changeDepthAllowed(cur, INC_DEPTH);
                break;
 
-       case LFUN_INSET_OPTARG:
-               enable = numberOfOptArgs(cur.paragraph())
-                       < cur.paragraph().layout()->optionalargs;
-               break;
-
        case LFUN_APPENDIX:
                flag.setOnOff(cur.paragraph().params().startOfAppendix());
                return true;
@@ -1577,10 +1585,6 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
                enable = (cur.paragraph().layout()->labeltype == LABEL_BIBLIO);
                break;
 
-#if 0
-       // the functions which insert insets
-       InsetBase::Code code = InsetBase::NO_CODE;
-       switch (cmd.action) {
        case LFUN_DIALOG_SHOW_NEW_INSET:
                if (cmd.argument == "bibitem")
                        code = InsetBase::BIBITEM_CODE;
@@ -1658,7 +1662,7 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
                break;
        case LFUN_INSERT_CHARSTYLE:
                code = InsetBase::CHARSTYLE_CODE;
-               if (buf->params().getLyXTextClass().charstyles().empty())
+               if (cur.buffer().params().getLyXTextClass().charstyles().empty())
                        enable = false;
                break;
        case LFUN_INSERT_BOX:
@@ -1666,7 +1670,7 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
                break;
        case LFUN_INSERT_BRANCH:
                code = InsetBase::BRANCH_CODE;
-               if (buf->params().branchlist().empty())
+               if (cur.buffer().getMasterBuffer()->params().branchlist().empty())
                        enable = false;
                break;
        case LFUN_INSERT_LABEL:
@@ -1674,6 +1678,8 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
                break;
        case LFUN_INSET_OPTARG:
                code = InsetBase::OPTARG_CODE;
+               enable = numberOfOptArgs(cur.paragraph())
+                       < cur.paragraph().layout()->optionalargs;
                break;
        case LFUN_ENVIRONMENT_INSERT:
                code = InsetBase::BOX_CODE;
@@ -1708,6 +1714,11 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
                if (cur.inTexted())
                        code = InsetBase::SPACE_CODE;
                break;
+
+#ifdef WITH_WARNINGS
+#warning This LFUN is not used anymore and should be nuked (JMarc 29/10/2005)
+#endif
+#if 0
        case LFUN_INSET_DIALOG_SHOW: {
                InsetBase * inset = cur.nextInset();
                enable = inset;
@@ -1721,37 +1732,8 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
                }
                break;
        }
-       default:
-               break;
-       }
-
-       if (code != InsetBase::NO_CODE
-                       && (cur.empty() || !cur.inset().insetAllowed(code)))
-               enable = false;
-
 #endif
 
-       case LFUN_DIALOG_SHOW_NEW_INSET:
-       case LFUN_INSET_ERT:
-       case LFUN_INSERT_BOX:
-       case LFUN_INSERT_BRANCH:
-       case LFUN_ENVIRONMENT_INSERT:
-       case LFUN_INDEX_INSERT:
-       case LFUN_INDEX_PRINT:
-       case LFUN_TOC_INSERT:
-       case LFUN_HTMLURL:
-       case LFUN_URL:
-       case LFUN_QUOTE:
-       case LFUN_HYPHENATION:
-       case LFUN_LIGATURE_BREAK:
-       case LFUN_HFILL:
-       case LFUN_MENU_SEPARATOR:
-       case LFUN_LDOTS:
-       case LFUN_END_OF_SENTENCE:
-       case LFUN_SPACE_INSERT:
-       case LFUN_INSET_DIALOG_SHOW:
-               break;
-
        case LFUN_INSET_MODIFY:
                // We need to disable this, because we may get called for a
                // tabular cell via
@@ -1838,15 +1820,6 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
        case LFUN_PASTESELECTION:
        case LFUN_DATE_INSERT:
        case LFUN_SELFINSERT:
-       case LFUN_INSERT_LABEL:
-       case LFUN_INSERT_NOTE:
-       case LFUN_INSERT_CHARSTYLE:
-       case LFUN_INSET_FLOAT:
-       case LFUN_INSET_FOOTNOTE:
-       case LFUN_INSET_MARGINAL:
-       case LFUN_INSET_WIDE_FLOAT:
-       case LFUN_INSET_WRAP:
-       case LFUN_TABULAR_INSERT:
        case LFUN_INSERT_LINE:
        case LFUN_INSERT_PAGEBREAK:
        case LFUN_MATH_DISPLAY:
@@ -1883,13 +1856,11 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
        case LFUN_HUNG_UMLAUT:
        case LFUN_CIRCLE:
        case LFUN_OGONEK:
-       case LFUN_FLOAT_LIST:
        case LFUN_ACCEPT_CHANGE:
        case LFUN_REJECT_CHANGE:
        case LFUN_THESAURUS_ENTRY:
        case LFUN_PARAGRAPH_APPLY:
        case LFUN_ESCAPE:
-       case LFUN_KEYMAP_TOGGLE:
        case LFUN_ENDBUF:
        case LFUN_BEGINNINGBUF:
        case LFUN_BEGINNINGBUFSEL:
@@ -1901,6 +1872,11 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
        default:
                return false;
        }
+
+       if (code != InsetBase::NO_CODE
+           && (cur.empty() || !cur.inset().insetAllowed(code)))
+               enable = false;
+
        flag.enabled(enable);
        return true;
 }