: buffer_view_(0), lyx_view_(0),
cursor_visible_(false),
need_resize_(false), schedule_redraw_(false),
- preedit_lines_(1), completer_(new GuiCompleter(this)),
+ preedit_lines_(1), completer_(new GuiCompleter(this, this)),
context_target_pos_()
{
}
GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & gv)
- : buffer_view_(0), lyx_view_(0),
+ : buffer_view_(0), read_only_(buffer.isReadonly()), lyx_view_(0),
cursor_visible_(false),
need_resize_(false), schedule_redraw_(false),
- preedit_lines_(1), completer_(new GuiCompleter(this)),
+ preedit_lines_(1), completer_(new GuiCompleter(this, this)),
context_target_pos_()
{
setGuiView(gv);
delete buffer_view_;
delete cursor_;
// Completer has a QObject parent and is thus automatically destroyed.
+ // See #4758.
// delete completer_;
}
void GuiWorkArea::setBuffer(Buffer & buffer)
{
delete buffer_view_;
- buffer_view_ = new BufferView(buffer),
+ buffer_view_ = new BufferView(buffer);
buffer.workAreaManager().add(this);
// HACK: Prevents an additional redraw when the scrollbar pops up
}
-void GuiWorkArea::redraw()
+void GuiWorkArea::redraw(bool update_metrics)
{
if (!isVisible())
// No need to redraw in this case.
// No need to do anything if this is the current view. The BufferView
// metrics are already up to date.
- if (lyx_view_ != guiApp->currentView()
+ if (update_metrics || lyx_view_ != guiApp->currentView()
|| lyx_view_->currentWorkArea() != this) {
// FIXME: it would be nice to optimize for the off-screen case.
buffer_view_->updateMetrics();
if (lyxerr.debugging(Debug::WORKAREA))
buffer_view_->coordCache().dump();
+
+ setReadOnly(buffer_view_->buffer().isReadonly());
}
{
// Handle drag&drop
if (cmd0.action == LFUN_FILE_OPEN) {
- lyx_view_->dispatch(cmd0);
+ DispatchResult dr;
+ lyx_view_->dispatch(cmd0, dr);
return;
}
void GuiWorkArea::focusInEvent(QFocusEvent * e)
{
- /*
- LYXERR(Debug::DEBUG, "GuiWorkArea::focusInEvent(): " << this << std::endl);
- GuiWorkArea * old_gwa = theGuiApp()->currentView()->currentWorkArea();
- if (old_gwa)
- old_gwa->stopBlinkingCursor();
- lyx_view_->setCurrentWorkArea(this);
- */
-
+ LYXERR(Debug::DEBUG, "GuiWorkArea::focusInEvent(): " << this << endl);
if (lyx_view_->currentWorkArea() != this)
lyx_view_->setCurrentWorkArea(this);
void GuiWorkArea::focusOutEvent(QFocusEvent * e)
{
- LYXERR(Debug::DEBUG, "GuiWorkArea::focusOutEvent(): " << this << std::endl);
+ LYXERR(Debug::DEBUG, "GuiWorkArea::focusOutEvent(): " << this << endl);
stopBlinkingCursor();
QAbstractScrollArea::focusOutEvent(e);
}
scroll_value *= delta;
// Take into account user preference.
- scroll_value *= lyxrc.mouse_wheel_speed;
+ scroll_value = int(scroll_value * lyxrc.mouse_wheel_speed);
LYXERR(Debug::SCROLLING, "wheelScrollLines = " << lines
<< " delta = " << delta << " scroll_value = " << scroll_value
<< " page_step = " << page_step);
if (need_resize_) {
screen_ = QPixmap(viewport()->width(), viewport()->height());
resizeBufferView();
- hideCursor();
- showCursor();
+ if (cursor_visible_) {
+ hideCursor();
+ showCursor();
+ }
}
QPainter pain(viewport());
}
-void GuiWorkArea::setReadOnly(bool)
+void GuiWorkArea::setReadOnly(bool read_only)
{
+ if (read_only_ == read_only)
+ return;
+ read_only_ = read_only;
updateWindowTitle();
if (this == lyx_view_->currentWorkArea())
lyx_view_->updateDialogs();
stopBlinkingCursor();
if (view().currentWorkArea() != this)
return;
- LASSERT(view().currentMainWorkArea(), /* */);
+ // No problem if currentMainWorkArea() is 0 (setCurrentWorkArea()
+ // tolerates it and shows the background logo), what happens if
+ // an EmbeddedWorkArea is closed after closing all document WAs
view().setCurrentWorkArea(view().currentMainWorkArea());
}
return;
GuiWorkArea * wa = dynamic_cast<GuiWorkArea *>(widget(i));
LASSERT(wa, return);
- BufferView & bv = wa->bufferView();
- bv.cursor().fixIfBroken();
- bv.updateMetrics();
wa->setUpdatesEnabled(true);
- wa->redraw();
+ wa->redraw(true);
wa->setFocus();
///
currentWorkAreaChanged(wa);
LYXERR(Debug::GUI, "currentTabChanged " << i
- << "File" << bv.buffer().absFileName());
+ << " File: " << wa->bufferView().buffer().absFileName());
}