]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Paragraph::inInset() shall not be used if the owner inset was not initialized. Make...
[lyx.git] / src / BufferView.cpp
index a98fcfe095f47159b7c1a97056bfa80f22c2b98c..2620dd65f730ee44aace1187eaf4a8165c609707 100644 (file)
@@ -533,6 +533,10 @@ docstring BufferView::toolTip(int x, int y) const
 
 docstring BufferView::contextMenu(int x, int y) const
 {
+       //If there is a selection, return the containing inset menu
+       if (d->cursor_.selection())
+               return d->cursor_.inset().contextMenu(*this, x, y);
+
        // Get inset under mouse, if there is one.
        Inset const * covering_inset = getCoveringInset(buffer_.text(), x, y);
        if (covering_inset)
@@ -602,31 +606,28 @@ void BufferView::setCursorFromScrollbar()
        int const height = 2 * defaultRowHeight();
        int const first = height;
        int const last = height_ - height;
-       Cursor & cur = d->cursor_;
+       int newy = 0;
+       Cursor const & oldcur = d->cursor_;
 
-       switch (cursorStatus(cur)) {
+       switch (cursorStatus(oldcur)) {
        case CUR_ABOVE:
-               // We reset the cursor because cursorStatus() does not
-               // work when the cursor is within mathed.
-               cur.reset(buffer_.inset());
-               tm.setCursorFromCoordinates(cur, 0, first);
-               cur.clearSelection();
+               newy = first;
                break;
        case CUR_BELOW:
-               // We reset the cursor because cursorStatus() does not
-               // work when the cursor is within mathed.
-               cur.reset(buffer_.inset());
-               tm.setCursorFromCoordinates(cur, 0, last);
-               cur.clearSelection();
+               newy = last;
                break;
        case CUR_INSIDE:
-               int const y = getPos(cur, cur.boundary()).y_;
-               int const newy = min(last, max(y, first));
-               if (y != newy) {
-                       cur.reset(buffer_.inset());
-                       tm.setCursorFromCoordinates(cur, 0, newy);
-               }
+               int const y = getPos(oldcur, oldcur.boundary()).y_;
+               newy = min(last, max(y, first));
+               if (y == newy) 
+                       return;
        }
+       // We reset the cursor because cursorStatus() does not
+       // work when the cursor is within mathed.
+       Cursor cur(*this);
+       cur.reset(buffer_.inset());
+       tm.setCursorFromCoordinates(cur, 0, newy);
+       mouseSetCursor(cur);
 }
 
 
@@ -1483,6 +1484,7 @@ docstring const BufferView::requestSelection()
 {
        Cursor & cur = d->cursor_;
 
+       LYXERR(Debug::SELECTION, "requestSelection: cur.selection: " << cur.selection());
        if (!cur.selection()) {
                d->xsel_cache_.set = false;
                return docstring();