]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Cleanup mouse/selection/context-menu interactions.
[lyx.git] / src / BufferView.cpp
index 0a0a642003321422d841a00140c7fbe2133d2da5..9b3ae322bb3a3eec65c958a8035c6e3506ccfa89 100644 (file)
@@ -862,13 +862,12 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
        case LFUN_BIBTEX_DATABASE_ADD:
        case LFUN_BIBTEX_DATABASE_DEL:
        case LFUN_STATISTICS:
-       case LFUN_NEXT_INSET_TOGGLE:
                flag.enabled(true);
                break;
 
-       case LFUN_NEXT_INSET_MODIFY: {
+       case LFUN_NEXT_INSET_TOGGLE: {
                // this is the real function we want to invoke
-               FuncRequest tmpcmd = FuncRequest(LFUN_INSET_MODIFY, cmd.argument());
+               FuncRequest tmpcmd = FuncRequest(LFUN_INSET_TOGGLE, cmd.argument());
                // if there is an inset at cursor, see whether it
                // can be modified.
                Inset * inset = cur.nextInset();
@@ -878,14 +877,33 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
                        break;
                }
                // if it did not work, try the underlying inset.
-               inset = &cur.inset();
+               if (!inset || !cur.result().dispatched())
+                       getStatus(tmpcmd);
+
+               if (!cur.result().dispatched())
+                       // else disable
+                       flag.enabled(false);
+               break;
+       }
+
+       case LFUN_NEXT_INSET_MODIFY: {
+               // this is the real function we want to invoke
+               FuncRequest tmpcmd = FuncRequest(LFUN_INSET_MODIFY, cmd.argument());
+               // if there is an inset at cursor, see whether it
+               // can be modified.
+               Inset * inset = cur.nextInset();
                if (inset) {
                        inset->getStatus(cur, tmpcmd, flag);
                        return flag;
                        break;
                }
-               // else disable
-               flag.enabled(false);
+               // if it did not work, try the underlying inset.
+               if (!inset || !cur.result().dispatched())
+                       getStatus(tmpcmd);
+
+               if (!cur.result().dispatched())
+                       // else disable
+                       flag.enabled(false);
                break;
        }
 
@@ -948,31 +966,20 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
 
        case LFUN_INSET_SETTINGS: {
                InsetCode code = cur.inset().lyxCode();
+               if (cur.nextInset())
+                       code = cur.nextInset()->lyxCode();
                bool enable = false;
                switch (code) {
                        case TABULAR_CODE:
-                               enable = cmd.argument() == "tabular";
-                               break;
                        case ERT_CODE:
-                               enable = cmd.argument() == "ert";
-                               break;
                        case FLOAT_CODE:
-                               enable = cmd.argument() == "float";
-                               break;
                        case WRAP_CODE:
-                               enable = cmd.argument() == "wrap";
-                               break;
                        case NOTE_CODE:
-                               enable = cmd.argument() == "note";
-                               break;
                        case BRANCH_CODE:
-                               enable = cmd.argument() == "branch";
-                               break;
                        case BOX_CODE:
-                               enable = cmd.argument() == "box";
-                               break;
                        case LISTINGS_CODE:
-                               enable = cmd.argument() == "listings";
+                               enable = (cmd.argument().empty() ||
+                                         cmd.getArg(0) == insetName(code));
                                break;
                        default:
                                break;
@@ -1324,7 +1331,7 @@ bool BufferView::dispatch(FuncRequest const & cmd)
                        }
                }
                // if it did not work, try the underlying inset.
-               if (!cur.result().dispatched())
+               if (!inset || !cur.result().dispatched())
                        cur.dispatch(tmpcmd);
 
                if (!cur.result().dispatched())
@@ -1344,9 +1351,10 @@ bool BufferView::dispatch(FuncRequest const & cmd)
                if (inset)
                        inset->dispatch(cur, tmpcmd);
                // if it did not work, try the underlying inset.
-               else if (&cur.inset())
-                       cur.inset().dispatch(cur, tmpcmd);
-               else
+               if (!inset || !cur.result().dispatched())
+                       cur.dispatch(tmpcmd);
+
+               if (!cur.result().dispatched())
                        // It did not work too; no action needed.
                        break;
                cur.clearSelection();
@@ -1562,7 +1570,7 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
 
        // Now dispatch to the temporary cursor. If the real cursor should
        // be modified, the inset's dispatch has to do so explicitly.
-       if (!cur.result().dispatched())
+       if (!inset || !cur.result().dispatched())
                cur.dispatch(cmd);
 
        // Notify left insets