#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;
lyx_view_.disconnectBufferView();
}
- theApp->setBufferView(buffer_view);
-
hideCursor();
buffer_view_ = buffer_view;
toggleCursor();
void WorkArea::stopBlinkingCursor()
{
cursor_timeout_.stop();
+ hideCursor();
}
void WorkArea::startBlinkingCursor()
{
+ showCursor();
cursor_timeout_.restart();
}
-void WorkArea::checkAndGreyOut()
-{
- if (greyed_out_)
- greyOut();
-}
-
-
-void WorkArea::redraw(bool singlePar)
+void WorkArea::redraw()
{
- if (!buffer_view_)
- return;
-
- if (!buffer_view_->buffer()) {
- checkAndGreyOut();
+ if (!buffer_view_ || !buffer_view_->buffer()) {
+ greyed_out_ = true;
+ // The argument here are meaningless.
+ expose(1,1,1,1);
return;
}
- buffer_view_->updateMetrics(singlePar);
+ // No need to do anything if this is the current view. The BufferView
+ // metrics are already up to date.
+ if (&lyx_view_ != theApp()->currentView())
+ // FIXME: it would be nice to optimize for the off-screen case.
+ buffer_view_->updateMetrics(false);
updateScrollbar();
ViewMetricsInfo const & vi = buffer_view_->viewMetricsInfo();
greyed_out_ = false;
- lyxerr[Debug::WORKAREA] << "WorkArea::redraw screen" << endl;
+ if (lyxerr.debugging(Debug::WORKAREA)) {
+ 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();
void WorkArea::processKeySym(LyXKeySymPtr key,
key_modifier::state state)
{
- hideCursor();
+ // In order to avoid bad surprise in the middle of an operation, we better stop
+ // the blinking cursor.
+ stopBlinkingCursor();
theLyXFunc().setLyXView(&lyx_view_);
theLyXFunc().processKeySym(key, state);
- /* This is perhaps a bit of a hack. When we move
- * around, or type, it's nice to be able to see
- * the cursor immediately after the keypress. So
- * we reset the toggle timeout and force the visibility
- * of the cursor. Note we cannot do this inside
- * dispatch() itself, because that's called recursively.
+ /* When we move around, or type, it's nice to be able to see
+ * the cursor immediately after the keypress.
*/
-// if (buffer_view_->buffer())
- toggleCursor();
+ startBlinkingCursor();
}
theLyXFunc().setLyXView(&lyx_view_);
- buffer_view_->workAreaDispatch(cmd0);
+ bool needRedraw = buffer_view_->workAreaDispatch(cmd0);
// Skip these when selecting
if (cmd0.action != LFUN_MOUSE_MOTION) {
lyx_view_.updateToolbars();
}
- // 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();
+
+ // GUI tweaks except with mouse motion with no button pressed.
+ if (!(cmd0.action == LFUN_MOUSE_MOTION
+ && cmd0.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();
+ }
- redraw();
+ if (needRedraw)
+ redraw();
}
lyx_view_.message(_("Formatting document..."));
buffer_view_->workAreaResize(width(), height());
lyx_view_.updateLayoutChoice();
- redraw();
lyx_view_.busy(false);
lyx_view_.clearMessage();
}
}
-void WorkArea::greyOut()
-{
- greyed_out_ = true;
- expose(4, 5, 3, 3);
-}
-
-
void WorkArea::showCursor()
{
if (cursor_visible_)