fix bug 1892 (cursor moves when inserting index or tabular)

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9984 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2005-05-30 15:35:11 +00:00
parent 3f4a165058
commit 61c245ca32
5 changed files with 44 additions and 35 deletions

View File

@ -1,3 +1,18 @@
2005-05-27 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
Fix bug 1892:
* text2.C (getStringToIndex): constify cur argument.
* factory.C (createInset/LFUN_TABULAR_INSERT): return 0 if no
argument has been given
(createInset/LFUN_INDEX_INSERT): just return a new inset (do not
try to invoke LFUN_INSET_APPLY).
* text3.C (dispatch/LFUN_TABULAR_INSERT): open the tabular dialog
if no inset was created by doInsertInset
(doInsertInset): return true if an inset has been inserted.
2005-05-23 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* vspace.C (asGUIName): new method. A version of the space

View File

@ -56,9 +56,6 @@
#include "mathed/math_macrotemplate.h"
#include "mathed/math_hullinset.h"
#include "frontends/Dialogs.h"
#include "frontends/LyXView.h"
#include "support/lstrings.h"
#include <boost/assert.hpp>
@ -163,15 +160,8 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd)
cmd.argument;
icp.setContents(contents);
string data = InsetCommandMailer::params2string("index", icp);
LyXView * lv = bv->owner();
return new InsetIndex(icp);
if (icp.getContents().empty()) {
lv->getDialogs().show("index", data, 0);
} else {
lv->dispatch(FuncRequest(LFUN_INSET_APPLY, data));
}
return 0;
}
case LFUN_TABULAR_INSERT:
@ -183,7 +173,6 @@ InsetBase * createInset(BufferView * bv, FuncRequest const & cmd)
if (c <= 0) c = 2;
return new InsetTabular(*bv->buffer(), r, c);
}
bv->owner()->getDialogs().show("tabularcreate");
return 0;
case LFUN_INSET_CAPTION: {

View File

@ -105,7 +105,7 @@ public:
void toggleFree(LCursor & cur, LyXFont const &, bool toggleall = false);
///
std::string getStringToIndex(LCursor & cur);
std::string getStringToIndex(LCursor const & cur);
/// insert a character at cursor position
void insertChar(LCursor & cur, char c);

View File

@ -527,31 +527,27 @@ void LyXText::toggleFree(LCursor & cur, LyXFont const & font, bool toggleall)
}
string LyXText::getStringToIndex(LCursor & cur)
string LyXText::getStringToIndex(LCursor const & cur)
{
BOOST_ASSERT(this == cur.text());
// Try implicit word selection
// If there is a change in the language the implicit word selection
// is disabled.
CursorSlice const reset_cursor = cur.top();
bool const implicitSelection =
selectWordWhenUnderCursor(cur, lyx::PREVIOUS_WORD);
string idxstring;
if (!cur.selection())
cur.message(_("Nothing to index!"));
else if (cur.selBegin().pit() != cur.selEnd().pit())
cur.message(_("Cannot index more than one paragraph!"));
else
if (cur.selection()) {
idxstring = cur.selectionAsString(false);
} else {
// Try implicit word selection. If there is a change
// in the language the implicit word selection is
// disabled.
LCursor tmpcur = cur;
selectWord(tmpcur, lyx::PREVIOUS_WORD);
// Reset cursors to their original position.
cur.top() = reset_cursor;
cur.resetAnchor();
// Clear the implicit selection.
if (implicitSelection)
cur.clearSelection();
if (!tmpcur.selection())
cur.message(_("Nothing to index!"));
else if (tmpcur.selBegin().pit() != tmpcur.selEnd().pit())
cur.message(_("Cannot index more than one paragraph!"));
else
idxstring = tmpcur.selectionAsString(false);
}
return idxstring;
}

View File

@ -235,12 +235,12 @@ void specialChar(LCursor & cur, InsetSpecialChar::Kind kind)
}
void doInsertInset(LCursor & cur, LyXText * text,
bool doInsertInset(LCursor & cur, LyXText * text,
FuncRequest const & cmd, bool edit, bool pastesel)
{
InsetBase * inset = createInset(&cur.bv(), cmd);
if (!inset)
return;
return false;
recordUndo(cur);
bool gotsel = false;
@ -255,6 +255,7 @@ void doInsertInset(LCursor & cur, LyXText * text,
if (gotsel && pastesel)
cur.bv().owner()->dispatch(FuncRequest(LFUN_PASTE));
return true;
}
@ -1182,7 +1183,6 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
case LFUN_INSET_FOOTNOTE:
case LFUN_INSET_MARGINAL:
case LFUN_INSET_OPTARG:
case LFUN_TABULAR_INSERT:
case LFUN_ENVIRONMENT_INSERT:
// Open the inset, and move the current selection
// inside it.
@ -1190,6 +1190,15 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
cur.posRight();
break;
case LFUN_TABULAR_INSERT:
// if there were no arguments, just open the dialog
if (doInsertInset(cur, this, cmd, false, true))
cur.posRight();
else
bv->owner()->getDialogs().show("tabularcreate");
break;
case LFUN_INSET_FLOAT:
case LFUN_INSET_WIDE_FLOAT:
case LFUN_INSET_WRAP: