application can still be accessed without giving focus to
the main window. In this case, we want to disable the menu
entries that are buffer-related.
+
+ Note that this code is not perfect, as bug 1941 attests:
+ http://bugzilla.lyx.org/show_bug.cgi?id=1941#c4
*/
Buffer * buf;
if (cmd.origin == FuncRequest::UI && !owner->hasFocus())
break;
}
+ case LFUN_INSERT_CITATION: {
+ FuncRequest fr(LFUN_INSET_INSERT, "citation");
+ enable = getStatus(fr).enabled();
+ 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: {
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;
}
case LFUN_TEXTCLASS_APPLY: {
- recordUndoFullDocument(view());
Buffer * buffer = owner->buffer();
lyx::textclass_type const old_class =
break;
owner->message(_("Converting document to new document class..."));
+ recordUndoFullDocument(view());
+ buffer->params().textclass = new_class;
StableDocIterator backcur(view()->cursor());
ErrorList el;
lyx::cap::SwitchBetweenClasses(
void LyXFunc::sendDispatchMessage(string const & msg, FuncRequest const & cmd)
{
- owner->updateMenubar();
- owner->updateToolbars();
+ /* When an action did not originate from the UI/kbd, it makes
+ * sense to avoid updating the GUI. It turns out that this
+ * fixes bug 1941, for reasons that are described here:
+ * http://bugzilla.lyx.org/show_bug.cgi?id=1941#c4
+ */
+ if (cmd.origin != FuncRequest::INTERNAL) {
+ owner->updateMenubar();
+ owner->updateToolbars();
+ }
const bool verbose = (cmd.origin == FuncRequest::UI
|| cmd.origin == FuncRequest::COMMANDBUFFER);