Author: vfr
Date: Sat Mar 19 14:14:13 2011
New Revision: 37961
URL: http://www.lyx.org/trac/changeset/37961
Log:
Fix bug #7345: Crash when right clicking on displayed math with selection
Two things have been fixed here:
1) the selection should not be cleared when the user right clicks a math inset
that is part of the selection,
2) the type of context menu should be determined at mouse-press, because that
is the moment when the cursor is set. However, we should do it after setting
the cursor, because setting the cursor might change the selection status and
this influences the choice for the type of context menu.
Modified:
lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.cpp
lyx-devel/trunk/src/mathed/InsetMathNest.cpp
Modified: lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.cpp
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.cpp Sat Mar 19 11:37:24
2011 (r37960)
+++ lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.cpp Sat Mar 19 14:14:13
2011 (r37961)
@@ -772,18 +772,20 @@
return;
}
+ inputContext()->reset();
+
+ FuncRequest const cmd(LFUN_MOUSE_PRESS, e->x(), e->y(),
+ q_button_state(e->button()));
+ dispatch(cmd, q_key_state(e->modifiers()));
+
// Save the context menu on mouse press, because also the mouse
// cursor is set on mouse press. Afterwards, we can either release
// the mousebutton somewhere else, or the cursor might have moved
- // due to the DEPM.
+ // due to the DEPM. We need to do this after the mouse has been
+ // set in dispatch(), because the selection state might change.
if (e->button() == Qt::RightButton)
context_menu_name_ = buffer_view_->contextMenu(e->x(), e->y());
- inputContext()->reset();
-
- FuncRequest const cmd(LFUN_MOUSE_PRESS, e->x(), e->y(),
- q_button_state(e->button()));
- dispatch(cmd, q_key_state(e->modifiers()));
e->accept();
}
Modified: lyx-devel/trunk/src/mathed/InsetMathNest.cpp
==============================================================================
--- lyx-devel/trunk/src/mathed/InsetMathNest.cpp Sat Mar 19 11:37:24
2011 (r37960)
+++ lyx-devel/trunk/src/mathed/InsetMathNest.cpp Sat Mar 19 14:14:13
2011 (r37961)
@@ -1464,6 +1464,15 @@
{
//lyxerr << "## lfunMousePress: buttons: " << cmd.button() << endl;
BufferView & bv = cur.bv();
+ if (cmd.button() == mouse_button::button3) {
+ // Don't do anything if we right-click a
+ // selection, a context menu will popup.
+ if (bv.cursor().selection() && cur >=
bv.cursor().selectionBegin()
+ && cur < bv.cursor().selectionEnd()) {
+ cur.noScreenUpdate();
+ return;
+ }
+ }
bool do_selection = cmd.button() == mouse_button::button1
&& cmd.argument() == "region-select";
bv.mouseSetCursor(cur, do_selection);