diff --git a/src/frontends/WorkArea.C b/src/frontends/WorkArea.C index 643447e6b4..abe266cd79 100644 --- a/src/frontends/WorkArea.C +++ b/src/frontends/WorkArea.C @@ -182,7 +182,7 @@ void WorkArea::processKeySym(LyXKeySymPtr key, key_modifier::state state) } -void WorkArea::dispatch(FuncRequest const & cmd0) +void WorkArea::dispatch(FuncRequest const & cmd0, key_modifier::state k) { // Handle drag&drop if (cmd0.action == LFUN_FILE_OPEN) { @@ -192,10 +192,23 @@ void WorkArea::dispatch(FuncRequest const & cmd0) theLyXFunc().setLyXView(&lyx_view_); - bool needRedraw = buffer_view_->workAreaDispatch(cmd0); + FuncRequest cmd; + + if (cmd0.action == LFUN_MOUSE_PRESS) { + if (k == key_modifier::shift) + cmd = FuncRequest(cmd0, "region-select"); + else if (k == key_modifier::ctrl) + cmd = FuncRequest(cmd0, "paragraph-select"); + else + cmd = cmd0; + } + else + cmd = cmd0; + + bool needRedraw = buffer_view_->workAreaDispatch(cmd); // Skip these when selecting - if (cmd0.action != LFUN_MOUSE_MOTION) { + if (cmd.action != LFUN_MOUSE_MOTION) { lyx_view_.updateLayoutChoice(); lyx_view_.updateMenubar(); lyx_view_.updateToolbars(); @@ -203,14 +216,14 @@ void WorkArea::dispatch(FuncRequest const & cmd0) // GUI tweaks except with mouse motion with no button pressed. - if (!(cmd0.action == LFUN_MOUSE_MOTION - && cmd0.button() == mouse_button::none)) { + if (!(cmd.action == LFUN_MOUSE_MOTION + && cmd.button() == mouse_button::none)) { // Slight hack: this is only called currently when we // clicked somewhere, so we force through the display // of the new status here. lyx_view_.clearMessage(); - // Show the cursor immediately after any operation. + // Show the cursor immediately after any operation. hideCursor(); toggleCursor(); } diff --git a/src/frontends/WorkArea.h b/src/frontends/WorkArea.h index bca23d19f9..12baf43217 100644 --- a/src/frontends/WorkArea.h +++ b/src/frontends/WorkArea.h @@ -98,7 +98,8 @@ protected: /// cause the display of the given area of the work area virtual void expose(int x, int y, int w, int h) = 0; /// - void dispatch(FuncRequest const & cmd0); + void dispatch(FuncRequest const & cmd0, + key_modifier::state = key_modifier::none); /// void resizeBufferView(); /// diff --git a/src/frontends/qt4/GuiWorkArea.C b/src/frontends/qt4/GuiWorkArea.C index 10ccfe8b78..261aaef8f8 100644 --- a/src/frontends/qt4/GuiWorkArea.C +++ b/src/frontends/qt4/GuiWorkArea.C @@ -290,8 +290,8 @@ void GuiWorkArea::mousePressEvent(QMouseEvent * e) } FuncRequest const cmd(LFUN_MOUSE_PRESS, e->x(), e->y(), - q_button_state(e->button())); - dispatch(cmd); + q_button_state(e->button())); + dispatch(cmd, q_key_state(e->modifiers())); }