// by a binding
if (keysym->isText() && keyseq.length() == 1) {
lyxerr[Debug::KEY] << "isText() is true, inserting." << endl;
- func = FuncRequest(LFUN_SELFINSERT);
+ func = FuncRequest(LFUN_SELFINSERT,
+ FuncRequest::KEYBOARD);
} else {
lyxerr[Debug::KEY] << "Unknown, !isText() - giving up" << endl;
owner->message(_("Unknown function."));
if (func.action == LFUN_SELFINSERT) {
if (encoded_last_key != 0) {
string const arg(1, encoded_last_key);
- dispatch(FuncRequest(LFUN_SELFINSERT, arg));
+ dispatch(FuncRequest(LFUN_SELFINSERT, arg,
+ FuncRequest::KEYBOARD));
lyxerr[Debug::KEY]
<< "SelfInsert arg[`" << arg << "']" << endl;
}
enable = cmd.argument == "custom"
|| Exporter::IsExportable(*buf, cmd.argument);
break;
- case LFUN_CUT:
- case LFUN_COPY:
- enable = cur.selection();
- break;
case LFUN_RUNCHKTEX:
enable = buf->isLatex() && lyxrc.chktex_command != "none";
case LFUN_LAYOUT:
case LFUN_LAYOUT_PARAGRAPH:
- enable = !cur.inset().forceDefaultParagraphs(&cur.inset());
+ enable = !cur.inset().forceDefaultParagraphs(cur.idx());
break;
case LFUN_VC_REGISTER:
break;
}
+ case LFUN_INSERT_CITATION: {
+ FuncRequest fr(LFUN_INSET_INSERT, "citation");
+ enable = getStatus(fr).enabled();
+ break;
+ }
+
+ case LFUN_MENUWRITE: {
+ enable = !view()->buffer()->isClean();
+ break;
+ }
+
// this one is difficult to get right. As a half-baked
// solution, we consider only the first action of the sequence
case LFUN_SEQUENCE: {
case LFUN_CANCEL:
case LFUN_META_FAKE:
case LFUN_CLOSEBUFFER:
- case LFUN_MENUWRITE:
case LFUN_WRITEAS:
case LFUN_UPDATE:
case LFUN_PREVIEW:
owner->getDialogs().disconnect(argument);
break;
+
+ case LFUN_INSERT_CITATION: {
+ if (!argument.empty()) {
+ // we can have one optional argument, delimited by '|'
+ // citation-insert <key>|<text_before>
+ // this should be enhanced to also support text_after
+ // and citation style
+ string arg = argument;
+ string opt1;
+ if (contains(argument, "|")) {
+ arg = token(argument, '|', 0);
+ opt1 = '[' + token(argument, '|', 1) + ']';
+ }
+ std::ostringstream os;
+ os << "citation LatexCommand\n"
+ << "\\cite" << opt1 << "{" << arg << "}\n"
+ << "\\end_inset";
+ FuncRequest fr(LFUN_INSET_INSERT, os.str());
+ dispatch(fr);
+ } else
+ dispatch(FuncRequest(LFUN_DIALOG_SHOW, "citation"));
+ break;
+ }
+
case LFUN_CHILDOPEN: {
string const filename =
MakeAbsPath(argument, owner->buffer()->filePath());
InsetIterator const end = inset_iterator_end(inset);
for (; it != end; ++it) {
if (inset_code == InsetBase::NO_CODE
- || inset_code == it->lyxCode())
- it->dispatch(cur, fr);
+ || inset_code == it->lyxCode()) {
+ LCursor tmpcur = cur;
+ tmpcur.pushLeft(*it);
+ it->dispatch(tmpcur, fr);
+ }
}
update = true;
break;
view()->update(Update::FitCursor);
// if we executed a mutating lfun, mark the buffer as dirty
- // FIXME: Why not use flag.enabled() but call getStatus again?
- if (getStatus(cmd).enabled()
- && !lyxaction.funcHasFlag(cmd.action, LyXAction::NoBuffer)
- && !lyxaction.funcHasFlag(cmd.action, LyXAction::ReadOnly))
+ if (flag.enabled()
+ && !lyxaction.funcHasFlag(cmd.action, LyXAction::NoBuffer)
+ && !lyxaction.funcHasFlag(cmd.action, LyXAction::ReadOnly))
view()->buffer()->markDirty();
}