mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-26 03:11:59 +00:00
This patch does two closely related things.
The main thing it does is integrate mouse-modifiers into the FuncRequest machinery. Previously, these had to be passed separately, which led to some ugly function signatures. There was also an unnecessary form of the constructor, which can now be removed. No change of behavior is intended.
This commit is contained in:
parent
f46a52d97f
commit
4b64aaf4ce
@ -31,43 +31,38 @@ FuncRequest const FuncRequest::noaction(LFUN_NOACTION);
|
|||||||
|
|
||||||
FuncRequest::FuncRequest(Origin o)
|
FuncRequest::FuncRequest(Origin o)
|
||||||
: action_(LFUN_NOACTION), origin_(o), x_(0), y_(0),
|
: action_(LFUN_NOACTION), origin_(o), x_(0), y_(0),
|
||||||
button_(mouse_button::none)
|
button_(mouse_button::none), modifier_(NoModifier)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
FuncRequest::FuncRequest(FuncCode act, Origin o)
|
FuncRequest::FuncRequest(FuncCode act, Origin o)
|
||||||
: action_(act), origin_(o), x_(0), y_(0),
|
: action_(act), origin_(o), x_(0), y_(0),
|
||||||
button_(mouse_button::none)
|
button_(mouse_button::none), modifier_(NoModifier)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
FuncRequest::FuncRequest(FuncCode act, docstring const & arg, Origin o)
|
FuncRequest::FuncRequest(FuncCode act, docstring const & arg, Origin o)
|
||||||
: action_(act), argument_(arg), origin_(o), x_(0), y_(0),
|
: action_(act), argument_(arg), origin_(o), x_(0), y_(0),
|
||||||
button_(mouse_button::none)
|
button_(mouse_button::none), modifier_(NoModifier)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
FuncRequest::FuncRequest(FuncCode act, string const & arg, Origin o)
|
FuncRequest::FuncRequest(FuncCode act, string const & arg, Origin o)
|
||||||
: action_(act), argument_(from_utf8(arg)), origin_(o), x_(0), y_(0),
|
: action_(act), argument_(from_utf8(arg)), origin_(o), x_(0), y_(0),
|
||||||
button_(mouse_button::none)
|
button_(mouse_button::none), modifier_(NoModifier)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
FuncRequest::FuncRequest(FuncCode act, int ax, int ay,
|
FuncRequest::FuncRequest(FuncCode act, int ax, int ay,
|
||||||
mouse_button::state but, Origin o)
|
mouse_button::state but, KeyModifier modifier, Origin o)
|
||||||
: action_(act), origin_(o), x_(ax), y_(ay), button_(but)
|
: action_(act), origin_(o), x_(ax), y_(ay), button_(but),
|
||||||
|
modifier_(modifier)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
FuncRequest::FuncRequest(FuncRequest const & cmd, docstring const & arg, Origin o)
|
FuncRequest::FuncRequest(FuncRequest const & cmd, docstring const & arg, Origin o)
|
||||||
: action_(cmd.action()), argument_(arg), origin_(o),
|
: action_(cmd.action()), argument_(arg), origin_(o),
|
||||||
x_(cmd.x_), y_(cmd.y_), button_(cmd.button_)
|
x_(cmd.x_), y_(cmd.y_), button_(cmd.button_), modifier_(NoModifier)
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
FuncRequest::FuncRequest(FuncRequest const & cmd, string const & arg, Origin o)
|
|
||||||
: action_(cmd.action()), argument_(from_utf8(arg)), origin_(o),
|
|
||||||
x_(cmd.x_), y_(cmd.y_), button_(cmd.button_)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include "support/docstring.h"
|
#include "support/docstring.h"
|
||||||
|
|
||||||
|
#include "frontends/KeyModifier.h"
|
||||||
#include "frontends/mouse_state.h"
|
#include "frontends/mouse_state.h"
|
||||||
|
|
||||||
|
|
||||||
@ -47,7 +48,7 @@ public:
|
|||||||
explicit FuncRequest(FuncCode act, Origin o = INTERNAL);
|
explicit FuncRequest(FuncCode act, Origin o = INTERNAL);
|
||||||
/// actions without extra argument
|
/// actions without extra argument
|
||||||
FuncRequest(FuncCode act, int x, int y, mouse_button::state button,
|
FuncRequest(FuncCode act, int x, int y, mouse_button::state button,
|
||||||
Origin o = INTERNAL);
|
KeyModifier modifier, Origin o = INTERNAL);
|
||||||
/// actions with extra argument
|
/// actions with extra argument
|
||||||
FuncRequest(FuncCode act, docstring const & arg,
|
FuncRequest(FuncCode act, docstring const & arg,
|
||||||
Origin o = INTERNAL);
|
Origin o = INTERNAL);
|
||||||
@ -57,9 +58,6 @@ public:
|
|||||||
/// for changing requests a bit
|
/// for changing requests a bit
|
||||||
FuncRequest(FuncRequest const & cmd, docstring const & arg,
|
FuncRequest(FuncRequest const & cmd, docstring const & arg,
|
||||||
Origin o = INTERNAL);
|
Origin o = INTERNAL);
|
||||||
/// for changing requests a bit. FIXME: remove this
|
|
||||||
FuncRequest(FuncRequest const & cmd, std::string const & arg,
|
|
||||||
Origin o = INTERNAL);
|
|
||||||
|
|
||||||
/// access the whole argument
|
/// access the whole argument
|
||||||
docstring const & argument() const { return argument_; }
|
docstring const & argument() const { return argument_; }
|
||||||
@ -79,6 +77,8 @@ public:
|
|||||||
void set_y(int y) { y_ = y; }
|
void set_y(int y) { y_ = y; }
|
||||||
///
|
///
|
||||||
mouse_button::state button() const { return button_; }
|
mouse_button::state button() const { return button_; }
|
||||||
|
///
|
||||||
|
KeyModifier modifier() { return modifier_; }
|
||||||
|
|
||||||
/// argument parsing, extract argument i as std::string
|
/// argument parsing, extract argument i as std::string
|
||||||
std::string getArg(unsigned int i) const;
|
std::string getArg(unsigned int i) const;
|
||||||
@ -103,6 +103,8 @@ private:
|
|||||||
int y_;
|
int y_;
|
||||||
/// some extra information (like button number)
|
/// some extra information (like button number)
|
||||||
mouse_button::state button_;
|
mouse_button::state button_;
|
||||||
|
///
|
||||||
|
KeyModifier modifier_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1175,7 +1175,7 @@ void Server::callback(string const & msg)
|
|||||||
// connect to the lyxfunc in the single GuiView we
|
// connect to the lyxfunc in the single GuiView we
|
||||||
// support currently. (Lgb)
|
// support currently. (Lgb)
|
||||||
|
|
||||||
FuncRequest fr(lyxaction.lookupFunc(cmd), arg);
|
FuncRequest fr(lyxaction.lookupFunc(cmd), from_ascii(arg));
|
||||||
fr.setOrigin(FuncRequest::LYXSERVER);
|
fr.setOrigin(FuncRequest::LYXSERVER);
|
||||||
DispatchResult dr;
|
DispatchResult dr;
|
||||||
theApp()->dispatch(fr, dr);
|
theApp()->dispatch(fr, dr);
|
||||||
|
@ -1608,8 +1608,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
|||||||
switch (cmd.button()) {
|
switch (cmd.button()) {
|
||||||
case mouse_button::button1:
|
case mouse_button::button1:
|
||||||
// Set the cursor
|
// Set the cursor
|
||||||
if (!bv->mouseSetCursor(cur, cmd.argument() == "region-select"))
|
if (!bv->mouseSetCursor(cur, cmd.modifier() == ShiftModifier))
|
||||||
cur.screenUpdateFlags(Update::FitCursor);
|
cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
|
||||||
if (bvcur.wordSelection())
|
if (bvcur.wordSelection())
|
||||||
selectWord(bvcur, WHOLE_WORD);
|
selectWord(bvcur, WHOLE_WORD);
|
||||||
break;
|
break;
|
||||||
|
@ -521,28 +521,15 @@ void GuiWorkArea::processKeySym(KeySymbol const & key, KeyModifier mod)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GuiWorkArea::Private::dispatch(FuncRequest const & cmd0, KeyModifier mod)
|
void GuiWorkArea::Private::dispatch(FuncRequest const & cmd)
|
||||||
{
|
{
|
||||||
// Handle drag&drop
|
// Handle drag&drop
|
||||||
if (cmd0.action() == LFUN_FILE_OPEN) {
|
if (cmd.action() == LFUN_FILE_OPEN) {
|
||||||
DispatchResult dr;
|
DispatchResult dr;
|
||||||
lyx_view_->dispatch(cmd0, dr);
|
lyx_view_->dispatch(cmd, dr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FuncRequest cmd;
|
|
||||||
|
|
||||||
if (cmd0.action() == LFUN_MOUSE_PRESS) {
|
|
||||||
if (mod == ShiftModifier)
|
|
||||||
cmd = FuncRequest(cmd0, "region-select");
|
|
||||||
else if (mod == ControlModifier)
|
|
||||||
cmd = FuncRequest(cmd0, "paragraph-select");
|
|
||||||
else
|
|
||||||
cmd = cmd0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
cmd = cmd0;
|
|
||||||
|
|
||||||
bool const notJustMovingTheMouse =
|
bool const notJustMovingTheMouse =
|
||||||
cmd.action() != LFUN_MOUSE_MOTION || cmd.button() != mouse_button::none;
|
cmd.action() != LFUN_MOUSE_MOTION || cmd.button() != mouse_button::none;
|
||||||
|
|
||||||
@ -815,7 +802,7 @@ void GuiWorkArea::mousePressEvent(QMouseEvent * e)
|
|||||||
if (d->dc_event_.active && d->dc_event_ == *e) {
|
if (d->dc_event_.active && d->dc_event_ == *e) {
|
||||||
d->dc_event_.active = false;
|
d->dc_event_.active = false;
|
||||||
FuncRequest cmd(LFUN_MOUSE_TRIPLE, e->x(), e->y(),
|
FuncRequest cmd(LFUN_MOUSE_TRIPLE, e->x(), e->y(),
|
||||||
q_button_state(e->button()));
|
q_button_state(e->button()), q_key_state(e->modifiers()));
|
||||||
d->dispatch(cmd);
|
d->dispatch(cmd);
|
||||||
e->accept();
|
e->accept();
|
||||||
return;
|
return;
|
||||||
@ -826,8 +813,8 @@ void GuiWorkArea::mousePressEvent(QMouseEvent * e)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
FuncRequest const cmd(LFUN_MOUSE_PRESS, e->x(), e->y(),
|
FuncRequest const cmd(LFUN_MOUSE_PRESS, e->x(), e->y(),
|
||||||
q_button_state(e->button()));
|
q_button_state(e->button()), q_key_state(e->modifiers()));
|
||||||
d->dispatch(cmd, q_key_state(e->modifiers()));
|
d->dispatch(cmd);
|
||||||
|
|
||||||
// Save the context menu on mouse press, because also the mouse
|
// Save the context menu on mouse press, because also the mouse
|
||||||
// cursor is set on mouse press. Afterwards, we can either release
|
// cursor is set on mouse press. Afterwards, we can either release
|
||||||
@ -847,7 +834,7 @@ void GuiWorkArea::mouseReleaseEvent(QMouseEvent * e)
|
|||||||
d->synthetic_mouse_event_.timeout.stop();
|
d->synthetic_mouse_event_.timeout.stop();
|
||||||
|
|
||||||
FuncRequest const cmd(LFUN_MOUSE_RELEASE, e->x(), e->y(),
|
FuncRequest const cmd(LFUN_MOUSE_RELEASE, e->x(), e->y(),
|
||||||
q_button_state(e->button()));
|
q_button_state(e->button()), q_key_state(e->modifiers()));
|
||||||
d->dispatch(cmd);
|
d->dispatch(cmd);
|
||||||
e->accept();
|
e->accept();
|
||||||
}
|
}
|
||||||
@ -858,7 +845,7 @@ void GuiWorkArea::mouseMoveEvent(QMouseEvent * e)
|
|||||||
// we kill the triple click if we move
|
// we kill the triple click if we move
|
||||||
doubleClickTimeout();
|
doubleClickTimeout();
|
||||||
FuncRequest cmd(LFUN_MOUSE_MOTION, e->x(), e->y(),
|
FuncRequest cmd(LFUN_MOUSE_MOTION, e->x(), e->y(),
|
||||||
q_motion_state(e->buttons()));
|
q_motion_state(e->buttons()), q_key_state(e->modifiers()));
|
||||||
|
|
||||||
e->accept();
|
e->accept();
|
||||||
|
|
||||||
@ -1122,7 +1109,7 @@ void GuiWorkArea::mouseDoubleClickEvent(QMouseEvent * ev)
|
|||||||
SLOT(doubleClickTimeout()));
|
SLOT(doubleClickTimeout()));
|
||||||
FuncRequest cmd(LFUN_MOUSE_DOUBLE,
|
FuncRequest cmd(LFUN_MOUSE_DOUBLE,
|
||||||
ev->x(), ev->y(),
|
ev->x(), ev->y(),
|
||||||
q_button_state(ev->button()));
|
q_button_state(ev->button()), q_key_state(ev->modifiers()));
|
||||||
d->dispatch(cmd);
|
d->dispatch(cmd);
|
||||||
ev->accept();
|
ev->accept();
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ struct GuiWorkArea::Private
|
|||||||
/// hide the cursor
|
/// hide the cursor
|
||||||
void removeCursor();
|
void removeCursor();
|
||||||
///
|
///
|
||||||
void dispatch(FuncRequest const & cmd0, KeyModifier = NoModifier);
|
void dispatch(FuncRequest const & cmd0);
|
||||||
/// hide the visible cursor, if it is visible
|
/// hide the visible cursor, if it is visible
|
||||||
void hideCursor();
|
void hideCursor();
|
||||||
/// show the cursor if it is not visible
|
/// show the cursor if it is not visible
|
||||||
|
@ -1550,7 +1550,7 @@ void InsetMathNest::lfunMousePress(Cursor & cur, FuncRequest & cmd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool do_selection = cmd.button() == mouse_button::button1
|
bool do_selection = cmd.button() == mouse_button::button1
|
||||||
&& cmd.argument() == "region-select";
|
&& cmd.modifier() == ShiftModifier;
|
||||||
bv.mouseSetCursor(cur, do_selection);
|
bv.mouseSetCursor(cur, do_selection);
|
||||||
if (cmd.button() == mouse_button::button1) {
|
if (cmd.button() == mouse_button::button1) {
|
||||||
//lyxerr << "## lfunMousePress: setting cursor to: " << cur << endl;
|
//lyxerr << "## lfunMousePress: setting cursor to: " << cur << endl;
|
||||||
|
Loading…
Reference in New Issue
Block a user