#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/lyxtime.h"
+#include "support/os.h"
#include "mathed/InsetMathHull.h"
#include "mathed/MathMacroTemplate.h"
BufferView * bv = &cur.bv();
TextMetrics & tm = bv->textMetrics(this);
- if (!tm.contains(cur.pit()))
- lyx::dispatch(FuncRequest(LFUN_SCREEN_RECENTER));
+ if (!tm.contains(cur.pit())) {
+ lyx::dispatch(FuncRequest(LFUN_SCREEN_SHOW_CURSOR));
+ tm = bv->textMetrics(this);
+ }
// FIXME: We use the update flag to indicates wether a singlePar or a
// full screen update is needed. We reset it here but shall we restore it
cur.updateFlags(Update::FitCursor);
break;
+ case LFUN_INSET_BEGIN:
+ case LFUN_INSET_BEGIN_SELECT:
+ needsUpdate |= cur.selHandle(cmd.action == LFUN_INSET_BEGIN_SELECT);
+ if (cur.depth() == 1 || cur.pos() > 0)
+ needsUpdate |= cursorTop(cur);
+ else
+ cur.undispatched();
+ cur.updateFlags(Update::FitCursor);
+ break;
+
+ case LFUN_INSET_END:
+ case LFUN_INSET_END_SELECT:
+ needsUpdate |= cur.selHandle(cmd.action == LFUN_INSET_END_SELECT);
+ if (cur.depth() == 1 || cur.pos() < cur.lastpos())
+ needsUpdate |= cursorBottom(cur);
+ else
+ cur.undispatched();
+ cur.updateFlags(Update::FitCursor);
+ break;
+
case LFUN_CHAR_FORWARD:
case LFUN_CHAR_FORWARD_SELECT:
//LYXERR0(" LFUN_CHAR_FORWARD[SEL]:\n" << cur);
break;
}
- case LFUN_INSET_SETTINGS: {
- Inset & inset = cur.inset();
- if (cmd.getArg(0) == insetName(inset.lyxCode())) {
- // This inset dialog has been explicitely requested.
- inset.showInsetDialog(bv);
- break;
- }
- // else, if there is an inset at the cursor, access this
- Inset * next_inset = cur.nextInset();
- if (next_inset) {
- next_inset->showInsetDialog(bv);
- break;
- }
- // if not then access the underlying inset.
- inset.showInsetDialog(bv);
- break;
- }
-
case LFUN_SET_GRAPHICS_GROUP: {
InsetGraphics * ins = graphics::getCurrentGraphicsInset(cur);
if (!ins)
pos_type pos = cur.pos();
BufferParams const & bufparams = bv->buffer().params();
Layout const & style = par.layout();
- if (!style.pass_thru
+ InsetLayout const & ilayout = cur.inset().getLayout(bufparams);
+ if (!style.pass_thru && !ilayout.isPassThru()
&& par.getFontSettings(bufparams, pos).language()->lang() != "hebrew") {
// this avoids a double undo
// FIXME: should not be needed, ideally
cur.resetAnchor();
moveCursor(cur, false);
+ bv->bookmarkEditPosition();
break;
}
break;
}
- case LFUN_INDEX_PRINT:
+ case LFUN_INDEX_PRINT: {
+ InsetCommandParams p(INDEX_PRINT_CODE);
+ if (cmd.argument().empty())
+ p["type"] = from_ascii("idx");
+ else
+ p["type"] = cmd.argument();
+ string const data = InsetCommand::params2string("index_print", p);
+ FuncRequest fr(LFUN_INSET_INSERT, data);
+ dispatch(cur, fr);
+ break;
+ }
+
case LFUN_NOMENCL_PRINT:
case LFUN_TOC_INSERT:
case LFUN_LINE_INSERT:
code = INCLUDE_CODE;
else if (cmd.argument() == "index")
code = INDEX_CODE;
+ else if (cmd.argument() == "index_print")
+ code = INDEX_PRINT_CODE;
else if (cmd.argument() == "nomenclature")
code = NOMENCL_CODE;
else if (cmd.argument() == "label")
enable = cur.inset().insetAllowed(MATH_CODE);
break;
+ case LFUN_DATE_INSERT: {
+ string const format = cmd.argument().empty()
+ ? lyxrc.date_insert_format : to_utf8(cmd.argument());
+ enable = support::os::is_valid_strftime(format);
+ break;
+ }
+
case LFUN_WORD_DELETE_FORWARD:
case LFUN_WORD_DELETE_BACKWARD:
case LFUN_LINE_DELETE:
case LFUN_SERVER_SET_XY:
case LFUN_SERVER_GET_LAYOUT:
case LFUN_LAYOUT:
- case LFUN_DATE_INSERT:
case LFUN_SELF_INSERT:
case LFUN_LINE_INSERT:
case LFUN_MATH_DISPLAY:
case LFUN_PARAGRAPH_PARAMS_APPLY:
case LFUN_PARAGRAPH_PARAMS:
case LFUN_ESCAPE:
- case LFUN_BUFFER_END:
case LFUN_BUFFER_BEGIN:
+ case LFUN_BUFFER_END:
case LFUN_BUFFER_BEGIN_SELECT:
case LFUN_BUFFER_END_SELECT:
+ case LFUN_INSET_BEGIN:
+ case LFUN_INSET_END:
+ case LFUN_INSET_BEGIN_SELECT:
+ case LFUN_INSET_END_SELECT:
case LFUN_UNICODE_INSERT:
// these are handled in our dispatch()
enable = true;