]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
Fix text direction issue for InsetInfo in RTL context
[lyx.git] / src / Text3.cpp
index 9d0e8ffd52f3d45f9233354e8ddb17b480601da4..c4cf664802d18e6a5c5f38a9b9cc0d426d627705 100644 (file)
@@ -292,7 +292,7 @@ static bool doInsertInset(Cursor & cur, Text * text,
                if (cmd.action() == LFUN_INDEX_INSERT)
                        copySelectionToTemp(cur);
                else
-                       cutSelectionToTemp(cur, false, pastesel);
+                       cutSelectionToTemp(cur, pastesel);
                cur.clearSelection();
                gotsel = true;
        } else if (cmd.action() == LFUN_INDEX_INSERT) {
@@ -572,16 +572,16 @@ Language const * getLanguage(Cursor const & cur, string const & lang)
 }
 
 
-docstring resolveLayout(docstring layout, Cursor const & cur)
+docstring resolveLayout(docstring layout, DocIterator const & dit)
 {
-       Paragraph const & par = cur.paragraph();
+       Paragraph const & par = dit.paragraph();
        docstring const old_layout = par.layout().name();
-       DocumentClass const & tclass = cur.buffer()->params().documentClass();
+       DocumentClass const & tclass = dit.buffer()->params().documentClass();
 
        if (layout.empty())
                layout = tclass.defaultLayoutName();
 
-       if (cur.inset().forcePlainLayout(cur.idx()))
+       if (dit.inset().forcePlainLayout(dit.idx()))
                // in this case only the empty layout is allowed
                layout = tclass.plainLayoutName();
        else if (par.usePlainLayout()) {
@@ -606,7 +606,7 @@ docstring resolveLayout(docstring layout, Cursor const & cur)
 }
 
 
-bool isAlreadyLayout(docstring const & layout, Cursor const & cur)
+bool isAlreadyLayout(docstring const & layout, CursorData const & cur)
 {
        ParagraphList const & pars = cur.text()->paragraphs();
 
@@ -713,7 +713,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_WORD_DELETE_FORWARD:
                if (cur.selection())
-                       cutSelection(cur, true, false);
+                       cutSelection(cur, false);
                else
                        deleteWordForward(cur, cmd.getArg(0) == "force");
                finishChange(cur, false);
@@ -721,7 +721,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_WORD_DELETE_BACKWARD:
                if (cur.selection())
-                       cutSelection(cur, true, false);
+                       cutSelection(cur, false);
                else
                        deleteWordBackward(cur, cmd.getArg(0) == "force");
                finishChange(cur, false);
@@ -729,7 +729,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_LINE_DELETE_FORWARD:
                if (cur.selection())
-                       cutSelection(cur, true, false);
+                       cutSelection(cur, false);
                else
                        tm->deleteLineForward(cur);
                finishChange(cur, false);
@@ -1207,7 +1207,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        needsUpdate |= erase(cur);
                        cur.resetAnchor();
                } else {
-                       cutSelection(cur, true, false);
+                       cutSelection(cur, false);
                        singleParUpdate = false;
                }
                moveCursor(cur, false);
@@ -1237,7 +1237,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                }
                        }
                } else {
-                       cutSelection(cur, true, false);
+                       cutSelection(cur, false);
                        singleParUpdate = false;
                }
                break;
@@ -1322,7 +1322,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        }
                        */
                        if (cur.selection())
-                               cutSelection(cur, true, false);
+                               cutSelection(cur, false);
                        cur.insert(inset);
                        cur.forceBufferUpdate();
                        if (inset->editable() && inset->asInsetText())
@@ -1514,7 +1514,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        }
 
        case LFUN_CUT:
-               cutSelection(cur, true, true);
+               cutSelection(cur, true);
                cur.message(_("Cut"));
                break;
 
@@ -1546,7 +1546,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                cur.message(cur.paragraph().layout().name());
                break;
 
-       case LFUN_LAYOUT: {
+       case LFUN_LAYOUT:
+       case LFUN_LAYOUT_TOGGLE: {
                bool const ignoreautonests = cmd.getArg(1) == "ignoreautonests";
                docstring req_layout = ignoreautonests ? from_utf8(cmd.getArg(0)) : cmd.argument();
                LYXERR(Debug::INFO, "LFUN_LAYOUT: (arg) " << to_utf8(req_layout));
@@ -1561,6 +1562,11 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                docstring const old_layout = cur.paragraph().layout().name();
                bool change_layout = !isAlreadyLayout(layout, cur);
 
+               if (cmd.action() == LFUN_LAYOUT_TOGGLE && !change_layout) {
+                       change_layout = true;
+                       layout = resolveLayout(docstring(), cur);
+               }
+
                if (change_layout) {
                        setLayout(cur, layout);
                        if (cur.pit() > 0 && !ignoreautonests) {
@@ -1913,14 +1919,11 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                // true (on).
 
                if (lyxrc.auto_region_delete && cur.selection())
-                       cutSelection(cur, false, false);
-
+                       cutSelection(cur, false);
                cur.clearSelection();
 
-               docstring::const_iterator cit = cmd.argument().begin();
-               docstring::const_iterator const end = cmd.argument().end();
-               for (; cit != end; ++cit)
-                       bv->translateAndInsert(*cit, this, cur);
+               for (char_type c : cmd.argument())
+                       bv->translateAndInsert(c, this, cur);
 
                cur.resetAnchor();
                moveCursor(cur, false);
@@ -1997,7 +2000,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                if (cmd.argument().empty() && cur.selection()) {
                        // if command argument is empty use current selection as parameter.
                        docstring ds = cur.selectionAsString(false);
-                       cutSelection(cur, true, false);
+                       cutSelection(cur, false);
                        FuncRequest cmd0(cmd, ds);
                        inset = createInset(cur.buffer(), cmd0);
                } else {
@@ -2466,7 +2469,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                if (tclass.floats().typeExist(to_utf8(cmd.argument()))) {
                        cur.recordUndo();
                        if (cur.selection())
-                               cutSelection(cur, true, false);
+                               cutSelection(cur, false);
                        breakParagraph(cur);
 
                        if (cur.lastpos() != 0) {
@@ -3286,7 +3289,8 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                }
                break;
 
-       case LFUN_LAYOUT: {
+       case LFUN_LAYOUT:
+       case LFUN_LAYOUT_TOGGLE: {
                bool const ignoreautonests = cmd.getArg(1) == "ignoreautonests";
                docstring const req_layout = ignoreautonests ? from_utf8(cmd.getArg(0)) : cmd.argument();
                docstring const layout = resolveLayout(req_layout, cur);