]> git.lyx.org Git - features.git/blobdiff - src/BufferView.cpp
InsetIndex: hide printTree behind a LYX_INSET_INDEX_DEBUG flag
[features.git] / src / BufferView.cpp
index 8ea0204a0a14b5f1035404e2db0b2fc93ea5f0f6..b36b8ee5b6a694fc226862fead4a719e370946bb 100644 (file)
@@ -292,6 +292,8 @@ struct BufferView::Private
        bool clickable_inset_;
        /// shape of the caret
        frontend::CaretGeometry caret_geometry_;
+       ///
+       bool mouse_selecting_ = false;
 };
 
 
@@ -340,11 +342,14 @@ int BufferView::defaultMargin() const
 
 int BufferView::rightMargin() const
 {
-       // The additional test for the case the outliner is opened.
-       if (full_screen_ && lyxrc.full_screen_limit)
-               return max(defaultMargin(), (width_ - lyxrc.full_screen_width) / 2);
+       const int screen_width = inPixels(lyxrc.screen_width);
 
-       return defaultMargin();
+       // The additional test for the case the outliner is opened.
+       if (!lyxrc.screen_limit || width_ < screen_width + 2 * defaultMargin()) {
+               return defaultMargin();
+       } else {
+               return (width_ - screen_width) / 2;
+       }
 }
 
 
@@ -1089,8 +1094,6 @@ void BufferView::makeDocumentClass()
 
 void BufferView::updateDocumentClass(DocumentClassConstPtr olddc)
 {
-       message(_("Converting document to new document class..."));
-
        StableDocIterator backcur(d->cursor_);
        ErrorList & el = buffer_.errorList("Class Switch");
        cap::switchBetweenClasses(
@@ -1719,6 +1722,8 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                }
                if (cur.selection())
                        pattern = cur.selectionAsString(false);
+               else if (!cur.inTexted())
+                       break; // not suitable for selectWord at cursor
                else {
                        pos_type spos = cur.pos();
                        cur.innerText()->selectWord(cur, WHOLE_WORD);
@@ -1874,16 +1879,14 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        message += _("One word");
                message += "\n";
                if (chars_blanks != 1)
-                       message += bformat(_("%1$d characters (including blanks)"),
-                                         chars_blanks);
+                       message += bformat(_("%1$d characters"), chars_blanks);
                else
-                       message += _("One character (including blanks)");
+                       message += _("One character");
                message += "\n";
                if (chars != 1)
-                       message += bformat(_("%1$d characters (excluding blanks)"),
-                                         chars);
+                       message += bformat(_("%1$d characters (no blanks)"), chars);
                else
-                       message += _("One character (excluding blanks)");
+                       message += _("One character (no blanks)");
 
                Alert::information(_("Statistics"), message);
        }
@@ -2066,14 +2069,14 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                // an arbitrary number to limit number of iterations
                const int max_iter = 100000;
                int iterations = 0;
-               Cursor & curs = d->cursor_;
-               Cursor const savecur = curs;
-               curs.reset();
-               if (!curs.nextInset())
-                       curs.forwardInset();
-               curs.beginUndoGroup();
-               while(curs && iterations < max_iter) {
-                       Inset * const ins = curs.nextInset();
+               Cursor & bvcur = d->cursor_;
+               Cursor const savecur = bvcur;
+               bvcur.reset();
+               if (!bvcur.nextInset())
+                       bvcur.forwardInset();
+               bvcur.beginUndoGroup();
+               while(bvcur && iterations < max_iter) {
+                       Inset * const ins = bvcur.nextInset();
                        if (!ins)
                                break;
                        docstring insname = ins->layoutName();
@@ -2081,7 +2084,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                                if (insname == name || name == from_utf8("*")) {
                                        lyx::dispatch(fr, dr);
                                        // we do not want to remember selection here
-                                       curs.clearSelection();
+                                       bvcur.clearSelection();
                                        ++iterations;
                                        break;
                                }
@@ -2091,11 +2094,11 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                                insname = insname.substr(0, i);
                        }
                        // if we did not delete the inset, skip it
-                       if (!curs.nextInset() || curs.nextInset() == ins)
-                               curs.forwardInset();
+                       if (!bvcur.nextInset() || bvcur.nextInset() == ins)
+                               bvcur.forwardInset();
                }
-               curs = savecur;
-               curs.fixIfBroken();
+               bvcur = savecur;
+               bvcur.fixIfBroken();
                /** This is a dummy undo record only to remember the cursor
                 * that has just been set; this will be used on a redo action
                 * (see ticket #10097)
@@ -2103,8 +2106,8 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                 * FIXME: a better fix would be to have a way to set the
                 * cursor value directly, but I am not sure it is worth it.
                 */
-               curs.recordUndo();
-               curs.endUndoGroup();
+               bvcur.recordUndo();
+               bvcur.endUndoGroup();
                dr.screenUpdate(Update::Force);
                dr.forceBufferUpdate();
 
@@ -2468,6 +2471,12 @@ void BufferView::clearLastInset(Inset * inset) const
 }
 
 
+bool BufferView::mouseSelecting() const
+{
+       return d->mouse_selecting_;
+}
+
+
 void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
 {
        //lyxerr << "[ cmd0 " << cmd0 << "]" << endl;
@@ -2490,6 +2499,9 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
        d->mouse_position_cache_.x_ = cmd.x();
        d->mouse_position_cache_.y_ = cmd.y();
 
+       d->mouse_selecting_ =
+               cmd.action() == LFUN_MOUSE_MOTION && cmd.button() == mouse_button::button1;
+
        if (cmd.action() == LFUN_MOUSE_MOTION && cmd.button() == mouse_button::none) {
                updateHoveredInset();
                return;
@@ -2531,8 +2543,8 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
 
        // Notify left insets
        if (cur != old) {
-               bool badcursor = old.fixIfBroken() | cur.fixIfBroken();
-               badcursor |= notifyCursorLeavesOrEnters(old, cur);
+               bool badcursor = old.fixIfBroken() || cur.fixIfBroken();
+               badcursor = badcursor || notifyCursorLeavesOrEnters(old, cur);
                if (badcursor)
                        cursor().fixIfBroken();
        }
@@ -2621,7 +2633,7 @@ bool BufferView::setCursorFromRow(int row)
 {
        TexRow::TextEntry start, end;
        tie(start,end) = buffer_.texrow().getEntriesFromRow(row);
-       LYXERR(Debug::LATEX,
+       LYXERR(Debug::OUTFILE,
               "setCursorFromRow: for row " << row << ", TexRow has found "
               "start (id=" << start.id << ",pos=" << start.pos << "), "
               "end (id=" << end.id << ",pos=" << end.pos << ")");