This should bring basck basic selection outside mathed.
Andre'
--
Those who desire to give up Freedom in order to gain Security, will not have,
nor do they deserve, either one. (T. Jefferson or B. Franklin or both...)
? support/1.diff
Index: BufferView_pimpl.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/BufferView_pimpl.C,v
retrieving revision 1.504
diff -u -p -r1.504 BufferView_pimpl.C
--- BufferView_pimpl.C 6 Feb 2004 13:59:24 -0000 1.504
+++ BufferView_pimpl.C 6 Feb 2004 16:40:13 -0000
@@ -890,7 +890,9 @@ bool BufferView::Pimpl::workAreaDispatch
cmd.y += bv_->top_y();
//lyxerr << "*** workAreaDispatch: request: " << cmd << std::endl;
LCursor cur(*bv_);
+ cur.selection() = bv_->cursor().selection();
switch (cmd.action) {
+
#if 0
case LFUN_MOUSE_MOTION: {
if (!available())
@@ -910,9 +912,10 @@ bool BufferView::Pimpl::workAreaDispatch
}
return true;
}
+#else
+ case LFUN_MOUSE_MOTION:
#endif
- case LFUN_MOUSE_MOTION:
case LFUN_MOUSE_PRESS:
case LFUN_MOUSE_RELEASE:
case LFUN_MOUSE_DOUBLE:
Index: cursor.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor.C,v
retrieving revision 1.52
diff -u -p -r1.52 cursor.C
--- cursor.C 6 Feb 2004 16:14:04 -0000 1.52
+++ cursor.C 6 Feb 2004 16:40:13 -0000
@@ -736,10 +737,11 @@ void LCursor::selClearOrDel()
std::ostream & operator<<(std::ostream & os, LCursor const & cur)
{
- os << "\n";
for (size_t i = 0, n = cur.cursor_.size(); i != n; ++i)
os << " (" << cur.cursor_[i] << " | " << cur.anchor_[i] << "\n";
- return os << "current: " << cur.current_ << endl;
+ os << " current: " << cur.current_ << endl;
+ os << " selection: " << cur.selection_ << endl;
+ return os;
}
Index: text3.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text3.C,v
retrieving revision 1.218
diff -u -p -r1.218 text3.C
--- text3.C 6 Feb 2004 13:59:25 -0000 1.218
+++ text3.C 6 Feb 2004 16:40:13 -0000
@@ -587,15 +587,12 @@ DispatchResult LyXText::dispatch(LCursor
break;
case LFUN_BREAKLINE: {
- lyx::pos_type body = cursorPar()->beginOfBody();
-
// Not allowed by LaTeX (labels or empty par)
- if (cursor().pos() <= body)
- break;
-
- replaceSelection(bv->getLyXText());
- insertInset(new InsetNewline);
- moveCursor(cur, false);
+ if (cursor().pos() > cursorPar()->beginOfBody()) {
+ replaceSelection(this);
+ insertInset(new InsetNewline);
+ moveCursor(cur, false);
+ }
break;
}
@@ -661,7 +658,7 @@ DispatchResult LyXText::dispatch(LCursor
break;
case LFUN_BREAKPARAGRAPH:
- replaceSelection(bv->getLyXText());
+ replaceSelection(this);
breakParagraph(bv->buffer()->paragraphs(), 0);
bv->update();
cur.resetAnchor();
@@ -670,7 +667,7 @@ DispatchResult LyXText::dispatch(LCursor
break;
case LFUN_BREAKPARAGRAPHKEEPLAYOUT:
- replaceSelection(bv->getLyXText());
+ replaceSelection(this);
breakParagraph(bv->buffer()->paragraphs(), 1);
bv->update();
cur.resetAnchor();
@@ -684,7 +681,7 @@ DispatchResult LyXText::dispatch(LCursor
// Otherwise, do the same as LFUN_BREAKPARAGRAPH.
#warning look here
// CursorSlice cur = cursor();
- replaceSelection(bv->getLyXText());
+ replaceSelection(this);
if (cur.pos() == 0) {
ParagraphParameters & params = getPar(cur.current())->params();
setParagraph(
@@ -824,7 +821,7 @@ DispatchResult LyXText::dispatch(LCursor
case LFUN_PASTE:
cur.message(_("Paste"));
- replaceSelection(bv->getLyXText());
+ replaceSelection(this);
#warning FIXME Check if the arg is in the domain of available selections.
if (isStrUnsignedInt(cmd.argument))
pasteSelection(strToUnsignedInt(cmd.argument));
@@ -985,7 +982,7 @@ DispatchResult LyXText::dispatch(LCursor
}
case LFUN_QUOTE: {
- replaceSelection(bv->getLyXText());
+ replaceSelection(this);
ParagraphList::iterator pit = cursorPar();
lyx::pos_type pos = cursor().pos();
char c;
@@ -1008,7 +1005,7 @@ DispatchResult LyXText::dispatch(LCursor
}
case LFUN_DATE_INSERT: {
- replaceSelection(bv->getLyXText());
+ replaceSelection(this);
time_t now_time_t = time(NULL);
struct tm * now_tm = localtime(&now_time_t);
setlocale(LC_TIME, "");
@@ -1030,7 +1027,7 @@ DispatchResult LyXText::dispatch(LCursor
}
case LFUN_MOUSE_TRIPLE:
- if (bv->buffer() && cmd.button() == mouse_button::button1) {
+ if (cmd.button() == mouse_button::button1) {
selection_possible = true;
cursorHome();
cur.resetAnchor();
@@ -1041,7 +1038,7 @@ DispatchResult LyXText::dispatch(LCursor
break;
case LFUN_MOUSE_DOUBLE:
- if (bv->buffer() && cmd.button() == mouse_button::button1) {
+ if (cmd.button() == mouse_button::button1) {
selection_possible = true;
selectWord(lyx::WHOLE_WORD_STRICT);
bv->haveSelection(cur.selection());
@@ -1049,15 +1046,9 @@ DispatchResult LyXText::dispatch(LCursor
break;
case LFUN_MOUSE_MOTION: {
-#if 0
// Only use motion with button 1
//if (ev.button() != mouse_button::button1)
// return false;
- // don't set anchor_
- bv->cursor().cursor_ = cur.cursor_;
-
- if (!bv->buffer())
- break;
// The test for not selection possible is needed, that
// only motion events are used, where the bottom press
// event was on the drawing area too
@@ -1068,6 +1059,7 @@ DispatchResult LyXText::dispatch(LCursor
}
RowList::iterator cursorrow = cursorRow();
+#warning
setCursorFromCoordinates(cmd.x, cmd.y);
// This is to allow jumping over large insets
@@ -1078,16 +1070,16 @@ DispatchResult LyXText::dispatch(LCursor
else if (cmd.y - bv->top_y() < 0)
cursorUp(true);
}
- cur.setSelection();
-#endif
+
+ // don't set anchor_
+ bv->cursor().cursor_ = cur.cursor_;
+ bv->cursor().setSelection();
+
break;
}
// Single-click on work area
case LFUN_MOUSE_PRESS: {
- if (!bv->buffer())
- break;
-
// ok ok, this is a hack (for xforms)
// We shouldn't go further down as we really should only do the
// scrolling and be done with this. Otherwise we may open some
@@ -1096,11 +1088,19 @@ DispatchResult LyXText::dispatch(LCursor
bv->scroll(-lyxrc.wheel_jump);
break;
}
+
if (cmd.button() == mouse_button::button5) {
bv->scroll(lyxrc.wheel_jump);
break;
}
+ // Right click on a footnote flag opens float menu
+ if (cmd.button() == mouse_button::button3) {
+ cur.clearSelection();
+ selection_possible = false;
+ break;
+ }
+
// Middle button press pastes if we have a selection
// We do this here as if the selection was inside an inset
// it could get cleared on the unlocking of the inset so
@@ -1116,12 +1116,6 @@ DispatchResult LyXText::dispatch(LCursor
// Clear the selection
cur.clearSelection();
- // Right click on a footnote flag opens float menu
- if (cmd.button() == mouse_button::button3) {
- selection_possible = false;
- break;
- }
-
setCursorFromCoordinates(cur.current(), cmd.x - xo_,
cmd.y - yo_);
cur.resetAnchor();
@@ -1148,9 +1142,6 @@ DispatchResult LyXText::dispatch(LCursor
}
case LFUN_MOUSE_RELEASE: {
- if (!bv->buffer())
- break;
-
// do nothing if we used the mouse wheel
if (cmd.button() == mouse_button::button4
|| cmd.button() == mouse_button::button5)