#include "frontends/Clipboard.h"
#include "frontends/Selection.h"
+#include "insets/InsetArgument.h"
#include "insets/InsetCollapsable.h"
#include "insets/InsetCommand.h"
#include "insets/InsetExternal.h"
// Merge multiple paragraphs -- hack
while (cur.lastpit() > 0)
mergeParagraph(bparams, cur.text()->paragraphs(), 0);
+ Cursor old = cur;
cur.leaveInset(*inset);
+ if (cmd.action() == LFUN_PREVIEW_INSERT
+ || cmd.action() == LFUN_IPA_INSERT)
+ // trigger preview
+ notifyCursorLeavesOrEnters(old, cur);
}
} else {
cur.leaveInset(*inset);
}
break;
- case LFUN_BREAK_PARAGRAPH:
+ case LFUN_PARAGRAPH_BREAK:
cap::replaceSelection(cur);
breakParagraph(cur, cmd.argument() == "inverse");
cur.resetAnchor();
}
case LFUN_LANGUAGE: {
- Language const * lang = languages.getLanguage(to_utf8(cmd.argument()));
- if (!lang)
+ string const lang_arg = cmd.getArg(0);
+ bool const reset = (lang_arg.empty() || lang_arg == "reset");
+ Language const * lang =
+ reset ? reset_language
+ : languages.getLanguage(lang_arg);
+ // we allow reset_language, which is 0, but only if it
+ // was requested via empty or "reset" arg.
+ if (!lang && !reset)
break;
+ bool const toggle = (cmd.getArg(1) != "set");
selectWordWhenUnderCursor(cur, WHOLE_WORD_STRICT);
Font font(ignore_font, lang);
- toggleAndShow(cur, this, font, false);
+ toggleAndShow(cur, this, font, toggle);
break;
}
FontInfo const & fontinfo = cur.real_current_font.fontInfo();
bool enable = true;
+ bool allow_in_passthru = false;
InsetCode code = NO_CODE;
switch (cmd.action()) {
break;
case LFUN_ARGUMENT_INSERT: {
code = ARG_CODE;
+ allow_in_passthru = true;
+ string const arg = cmd.getArg(0);
+ if (arg.empty()) {
+ enable = false;
+ break;
+ }
Layout const & lay = cur.paragraph().layout();
- int const numargs = lay.reqargs + lay.optargs;
- enable = cur.paragraph().insetList().count(ARG_CODE) < numargs;
+ Layout::LaTeXArgMap args = lay.latexargs();
+ Layout::LaTeXArgMap::const_iterator const lait =
+ args.find(convert<unsigned int>(arg));
+ if (lait != args.end()) {
+ enable = true;
+ InsetList::const_iterator it = cur.paragraph().insetList().begin();
+ InsetList::const_iterator const end = cur.paragraph().insetList().end();
+ for (; it != end; ++it) {
+ if (it->inset->lyxCode() == ARG_CODE) {
+ InsetArgument const * ins =
+ static_cast<InsetArgument const *>(it->inset);
+ if (ins->name() == arg) {
+ // we have this already
+ enable = false;
+ break;
+ }
+ }
+ }
+ } else
+ enable = false;
break;
}
case LFUN_INDEX_INSERT:
case LFUN_LANGUAGE:
enable = !cur.paragraph().isPassThru();
- flag.setOnOff(to_utf8(cmd.argument()) == cur.real_current_font.language()->lang());
+ flag.setOnOff(cmd.getArg(0) == cur.real_current_font.language()->lang());
break;
- case LFUN_BREAK_PARAGRAPH:
+ case LFUN_PARAGRAPH_BREAK:
enable = cur.inset().getLayout().isMultiPar();
break;
if (code != NO_CODE
&& (cur.empty()
|| !cur.inset().insetAllowed(code)
- || cur.paragraph().layout().pass_thru))
+ || (cur.paragraph().layout().pass_thru && !allow_in_passthru)))
enable = false;
flag.setEnabled(enable);