void GuiView::on_currentWorkAreaChanged(GuiWorkArea * wa)
{
+ QObject::disconnect(d.current_work_area_, SIGNAL(busy(bool)),
+ this, SLOT(setBusy(bool)));
disconnectBuffer();
disconnectBufferView();
connectBufferView(wa->bufferView());
d.current_work_area_ = wa;
QObject::connect(wa, SIGNAL(titleChanged(GuiWorkArea *)),
this, SLOT(updateWindowTitle(GuiWorkArea *)));
+ QObject::connect(wa, SIGNAL(busy(bool)), this, SLOT(setBusy(bool)));
updateWindowTitle(wa);
structureChanged();
// busy state didn't change
return;
- if (d.current_work_area_) {
- //Why would we want to stop updates only for one workarea and
- //not for the others ? This leads to problems as in #7314 (vfr).
- //d.current_work_area_->setUpdatesEnabled(!busy);
- if (busy)
- d.current_work_area_->stopBlinkingCursor();
- else
- d.current_work_area_->startBlinkingCursor();
- }
-
- if (busy)
+ if (busy) {
QApplication::setOverrideCursor(Qt::WaitCursor);
- else
- QApplication::restoreOverrideCursor();
+ return;
+ }
+ QApplication::restoreOverrideCursor();
+ updateLayoutList();
}
int id() const { return id_; }
- ///
- void setBusy(bool);
/// are we busy ?
bool busy() const;
void triggerShowDialog(QString const & qname, QString const & qdata, Inset * inset);
public Q_SLOTS:
+ ///
+ void setBusy(bool);
/// idle timeout.
/// clear any temporary message and replace with current status.
void clearMessage();
buffer_view_->mouseEventDispatch(cmd);
// Skip these when selecting
+ // FIXME: let GuiView take care of those.
if (cmd.action() != LFUN_MOUSE_MOTION) {
completer_->updateVisibility(false, false);
lyx_view_->updateDialogs();
// Slight hack: this is only called currently when we
// clicked somewhere, so we force through the display
// of the new status here.
+ // FIXME: let GuiView take care of those.
lyx_view_->clearMessage();
// Show the cursor immediately after any operation
{
// WARNING: Please don't put any code that will trigger a repaint here!
// We are already inside a paint event.
- lyx_view_->setBusy(true);
+ p->stopBlinkingCursor();
+ // Warn our container (GuiView).
+ p->busy(true);
+
Point point;
int h = 0;
buffer_view_->cursorPosAndHeight(point, h);
// as the scrollbar paramters are then set for the first time.
updateScrollbar();
- lyx_view_->updateLayoutList();
- lyx_view_->setBusy(false);
need_resize_ = false;
+ p->busy(false);
+ // Eventually, restart the cursor after the resize event.
+ // We might be resizing even if the focus is on another widget so we only
+ // restart the cursor if we have the focus.
+ if (p->hasFocus())
+ QTimer::singleShot(50, p, SLOT(startBlinkingCursor()));
}
if (lyxrc.cursor_follows_scrollbar) {
d->buffer_view_->setCursorFromScrollbar();
+ // FIXME: let GuiView take care of those.
d->lyx_view_->updateLayoutList();
}
// Show the cursor immediately after any operation.
BufferView const & bufferView() const;
///
void redraw(bool update_metrics);
- ///
- void stopBlinkingCursor();
- ///
- void startBlinkingCursor();
+
/// Process Key pressed event.
/// This needs to be public because it is accessed externally by GuiView.
void processKeySym(KeySymbol const & key, KeyModifier mod);
GuiView const & view() const;
GuiView & view();
+public Q_SLOTS:
+ ///
+ void stopBlinkingCursor();
+ ///
+ void startBlinkingCursor();
+
Q_SIGNALS:
///
void titleChanged(GuiWorkArea *);
+ ///
+ void busy(bool);
private Q_SLOTS:
/// Scroll the BufferView.