* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author none
+ * \author Peter Kümmel
* \author Lars Gullik Bjønnes
*
* Full author contact details are available in file CREDITS.
namespace lyx {
-/// Maybe this can go entirely
-class DispatchResult {
+
+class DispatchResult
+{
public:
///
- DispatchResult() : dispatched_(false), error_(false),
- update_(Update::None), need_buf_update_(false) {}
+ DispatchResult() :
+ dispatched_(false),
+ error_(false),
+ update_(Update::None),
+ need_buf_update_(false),
+ need_msg_update_(true)
+ {}
///
- DispatchResult(bool disp, Update::flags f)
- : dispatched_(disp), error_(false), update_(f) {}
+ DispatchResult(bool dispatched, Update::flags f) :
+ dispatched_(dispatched),
+ error_(false),
+ update_(f),
+ need_buf_update_(false),
+ need_msg_update_(true)
+ {}
///
bool dispatched() const { return dispatched_; }
///
///
docstring message() { return message_; }
///
- void setMessage(docstring m) { message_ = m; }
+ void setMessage(docstring const & m) { message_ = m; }
+ ///
+ void setMessage(std::string const & m) { message_ = from_utf8(m); }
///
Update::flags screenUpdate() const { return update_; }
///
void forceBufferUpdate() { need_buf_update_ = true; }
/// Clear the flag indicating we need an update
void clearBufferUpdate() { need_buf_update_ = false; }
+ ///
+ bool needMessageUpdate() const { return need_msg_update_; }
+ /// Force the buffer to be updated
+ void forceMessageUpdate() { need_msg_update_ = true; }
+ /// Clear the flag indicating we need an update
+ void suppressMessageUpdate() { need_msg_update_ = false; }
+
private:
/// was the event fully dispatched?
bool dispatched_;
docstring message_;
///
bool need_buf_update_;
+ ///
+ bool need_msg_update_;
};
// update gui
current_view_->restartCursor();
}
- // Some messages may already be translated, so we cannot use _()
- current_view_->message(makeDispatchMessage(
- translateIfPossible(dr.message()), cmd));
+ if (dr.needMessageUpdate()) {
+ // Some messages may already be translated, so we cannot use _()
+ current_view_->message(makeDispatchMessage(
+ translateIfPossible(dr.message()), cmd));
+ }
}
}
-void GuiView::reloadBuffer()
+bool GuiView::reloadBuffer()
{
Buffer * buf = &documentBufferView()->buffer();
- buf->reload();
+ return buf->reload();
}
}
-//FIXME use a DispatchResult object to transmit messages
-void GuiView::dispatchVC(FuncRequest const & cmd)
+void GuiView::dispatchVC(FuncRequest const & cmd, DispatchResult & dr)
{
- // message for statusbar
- string msg;
Buffer * buffer = documentBufferView()
? &(documentBufferView()->buffer()) : 0;
if (!buffer || !ensureBufferClean(buffer))
break;
if (!buffer->lyxvc().inUse()) {
- if (buffer->lyxvc().registrer())
+ if (buffer->lyxvc().registrer()) {
reloadBuffer();
+ dr.suppressMessageUpdate();
+ }
}
break;
if (!buffer || !ensureBufferClean(buffer))
break;
if (buffer->lyxvc().inUse() && !buffer->isReadonly()) {
- msg = buffer->lyxvc().checkIn();
- if (!msg.empty())
+ dr.setMessage(buffer->lyxvc().checkIn());
+ if (!dr.message().empty())
reloadBuffer();
}
break;
if (!buffer || !ensureBufferClean(buffer))
break;
if (buffer->lyxvc().inUse()) {
- msg = buffer->lyxvc().checkOut();
+ dr.setMessage(buffer->lyxvc().checkOut());
reloadBuffer();
}
break;
frontend::Alert::error(_("Revision control error."),
_("Error when setting the locking property."));
} else {
- msg = res;
+ dr.setMessage(res);
reloadBuffer();
}
}
LASSERT(buffer, return);
buffer->lyxvc().revert();
reloadBuffer();
+ dr.suppressMessageUpdate();
break;
case LFUN_VC_UNDO_LAST:
LASSERT(buffer, return);
buffer->lyxvc().undoLast();
reloadBuffer();
+ dr.suppressMessageUpdate();
break;
case LFUN_VC_REPO_UPDATE:
LASSERT(buffer, return);
if (ensureBufferClean(buffer)) {
- msg = buffer->lyxvc().repoUpdate();
+ dr.setMessage(buffer->lyxvc().repoUpdate());
checkExternallyModifiedBuffers();
}
break;
default:
break;
}
-
- if (!msg.empty())
- message(from_utf8(msg));
}
case LFUN_VC_UNDO_LAST:
case LFUN_VC_COMMAND:
case LFUN_VC_COMPARE:
- dispatchVC(cmd);
+ dispatchVC(cmd, dr);
break;
case LFUN_SERVER_GOTO_FILE_ROW:
///
Dialog * build(std::string const & name);
///
- void reloadBuffer();
+ bool reloadBuffer();
///
- void dispatchVC(FuncRequest const & cmd);
+ void dispatchVC(FuncRequest const & cmd, DispatchResult & dr);
///
void showMessage();