]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Do not crash when entering math in ct mode with merge dialog open.
[lyx.git] / src / BufferView.cpp
index 84194605a59200d3a6f816f22aa40e02d73e6720..392f380f1d248f729e23e1e08339cb5d3ff74829 100644 (file)
@@ -62,6 +62,8 @@
 #include "insets/InsetRef.h"
 #include "insets/InsetText.h"
 
+#include "mathed/MathData.h"
+
 #include "frontends/alert.h"
 #include "frontends/Application.h"
 #include "frontends/Delegates.h"
@@ -684,6 +686,10 @@ Change const BufferView::getCurrentChange() const
                return Change(Change::UNCHANGED);
 
        DocIterator dit = d->cursor_.selectionBegin();
+       // The selected content might have been changed (see #7685)
+       while (dit.inMathed())
+               // Find enclosing text cursor
+               dit.pop_back();
        return dit.paragraph().lookupChange(dit.pos());
 }
 
@@ -1079,7 +1085,6 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
        case LFUN_BIBTEX_DATABASE_ADD:
        case LFUN_BIBTEX_DATABASE_DEL:
        case LFUN_STATISTICS:
-       case LFUN_BRANCH_ADD_INSERT:
        case LFUN_KEYMAP_OFF:
        case LFUN_KEYMAP_PRIMARY:
        case LFUN_KEYMAP_SECONDARY:
@@ -1154,6 +1159,10 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                flag.setEnabled(cur.inset().allowParagraphCustomization(cur.idx()));
                break;
 
+       case LFUN_BRANCH_ADD_INSERT:
+               flag.setEnabled(!(cur.inTexted() && cur.paragraph().isPassThru()));
+               break;
+
        case LFUN_DIALOG_SHOW_NEW_INSET:
                // FIXME: this is wrong, but I do not understand the
                // intent (JMarc)
@@ -1496,6 +1505,8 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
 
        case LFUN_WORD_FIND_FORWARD:
        case LFUN_WORD_FIND_BACKWARD: {
+               // FIXME THREAD
+               // Would it maybe be better if this variable were view specific anyway?
                static docstring last_search;
                docstring searched_string;
 
@@ -2491,7 +2502,8 @@ void BufferView::putSelectionAt(DocIterator const & cur,
 
 bool BufferView::selectIfEmpty(DocIterator & cur)
 {
-       if (!cur.paragraph().empty())
+       if ((cur.inTexted() && !cur.paragraph().empty())
+           || (cur.inMathed() && !cur.cell().empty()))
                return false;
 
        pit_type const beg_pit = cur.pit();