#include "rowpainter.h"
#include "gettext.h"
-#include "support/filetools.h" // LibFileSearch
#include "support/forkedcontr.h"
#include <boost/utility.hpp>
#include <boost/bind.hpp>
#include <boost/current_function.hpp>
-using lyx::support::libFileSearch;
using lyx::support::ForkedcallsController;
using std::endl;
// No need to do anything if this is the current view. The BufferView
// metrics are already up to date.
- if (&lyx_view_ != &theApp()->currentView())
+ if (&lyx_view_ != theApp()->currentView())
// FIXME: it would be nice to optimize for the off-screen case.
buffer_view_->updateMetrics(false);
ViewMetricsInfo const & vi = buffer_view_->viewMetricsInfo();
greyed_out_ = false;
- if (lyxerr.debugging(Debug::WORKAREA)) {
- lyxerr[Debug::WORKAREA] << "WorkArea::redraw screen" << endl;
- }
+ LYXERR(Debug::WORKAREA) << "WorkArea::redraw screen" << endl;
+
int const ymin = std::max(vi.y1, 0);
int const ymax = vi.p2 < vi.size - 1 ? vi.y2 : height();
expose(0, ymin, width(), ymax - ymin);
- //lyxerr[Debug::WORKAREA]
+ //LYXERR(Debug::WORKAREA)
//<< " ymin = " << ymin << " width() = " << width()
// << " ymax-ymin = " << ymax-ymin << std::endl;
}
-void WorkArea::processKeySym(LyXKeySymPtr key,
- key_modifier::state state)
+void WorkArea::processKeySym(LyXKeySymPtr key, key_modifier::state state)
{
// In order to avoid bad surprise in the middle of an operation, we better stop
// the blinking cursor.
}
-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) {
theLyXFunc().setLyXView(&lyx_view_);
- std::pair<bool, 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;
+ // In order to avoid bad surprise in the middle of an operation, we better stop
+ // the blinking cursor.
+ if (!(cmd.action == LFUN_MOUSE_MOTION
+ && cmd.button() == mouse_button::none))
+ stopBlinkingCursor();
+
+ bool const needRedraw = buffer_view_->workAreaDispatch(cmd);
+
+ if (needRedraw)
+ redraw();
+
// 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();
}
-
// 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.
- hideCursor();
- toggleCursor();
+ startBlinkingCursor();
}
-
- if (needRedraw.first)
- redraw();
}
lyx_view_.message(_("Formatting document..."));
buffer_view_->workAreaResize(width(), height());
lyx_view_.updateLayoutChoice();
- redraw();
- lyx_view_.busy(false);
lyx_view_.clearMessage();
+ lyx_view_.busy(false);
}
void WorkArea::scrollBufferView(int position)
{
+ stopBlinkingCursor();
buffer_view_->scrollDocView(position);
redraw();
- hideCursor();
if (lyxrc.cursor_follows_scrollbar) {
buffer_view_->setCursorFromScrollbar();
lyx_view_.updateLayoutChoice();
}
- toggleCursor();
+ // Show the cursor immediately after any operation.
+ startBlinkingCursor();
}
CursorShape shape = BAR_SHAPE;
- LyXText const & text = *buffer_view_->getLyXText();
+ LyXText const & text = *buffer_view_->cursor().innerText();
LyXFont const & realfont = text.real_current_font;
BufferParams const & bp = buffer_view_->buffer()->params();
bool const samelang = realfont.language() == bp.language;