diff --git a/src/LyXFunc.cpp b/src/LyXFunc.cpp index 9eab7f85ed..615b65c5f2 100644 --- a/src/LyXFunc.cpp +++ b/src/LyXFunc.cpp @@ -530,13 +530,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd, DispatchResult & dr) break; // Let the current LyXView dispatch its own actions. - //FIXME: pass dr to LyXView::dispatch - if (lv->dispatch(cmd)) { - BufferView * bv = lv->currentBufferView(); - if (bv) - dr = bv->cursor().result(); - break; - } + lv->dispatch(cmd, dr); BufferView * bv = lv->currentBufferView(); LASSERT(bv, /**/); diff --git a/src/frontends/LyXView.h b/src/frontends/LyXView.h index 2525df4259..8735903202 100644 --- a/src/frontends/LyXView.h +++ b/src/frontends/LyXView.h @@ -22,6 +22,7 @@ namespace support { class FileName; } class Buffer; class BufferView; class Cursor; +class DispatchResult; class FuncStatus; class FuncRequest; class Inset; @@ -64,7 +65,7 @@ public: virtual bool getStatus(FuncRequest const & cmd, FuncStatus & flag) = 0; /// dispatch command. /// \return true if the \c FuncRequest has been dispatched. - virtual bool dispatch(FuncRequest const & cmd) = 0; + virtual void dispatch(FuncRequest const & cmd, DispatchResult & dr) = 0; /// virtual void restartCursor() = 0; diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 8cbfc9e97e..fe0c201b8d 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -16,6 +16,7 @@ #include "GuiView.h" #include "Dialog.h" +#include "DispatchResult.h" #include "FileDialog.h" #include "FontLoader.h" #include "GuiApplication.h" @@ -2452,6 +2453,7 @@ void GuiView::checkExternallyModifiedBuffers() } +//FIXME use a DispatchResult object to transmit messages void GuiView::dispatchVC(FuncRequest const & cmd) { // message for statusbar @@ -2688,22 +2690,22 @@ static docstring previewAndDestroy(Buffer * buffer, string const & format) #endif -bool GuiView::dispatch(FuncRequest const & cmd) +void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr) { BufferView * bv = currentBufferView(); // By default we won't need any update. - if (bv) - bv->cursor().updateFlags(Update::None); + dr.update(Update::None); + // assume cmd will be dispatched + dr.dispatched(true); Buffer * doc_buffer = documentBufferView() ? &(documentBufferView()->buffer()) : 0; - bool dispatched = true; - if (cmd.origin == FuncRequest::TOC) { GuiToc * toc = static_cast(findOrBuild("toc", false)); + // FIXME: do we need to pass a DispatchResult object here? toc->doDispatch(bv->cursor(), cmd); - return true; + return; } string const argument = to_utf8(cmd.argument()); @@ -2721,11 +2723,13 @@ bool GuiView::dispatch(FuncRequest const & cmd) if (!doc_buffer) break; if (cmd.argument() == "custom") { - lyx::dispatch(FuncRequest(LFUN_DIALOG_SHOW, "sendto")); + dispatch(FuncRequest(LFUN_DIALOG_SHOW, "sendto"), + dr); break; } if (doc_buffer->doExport(argument, false)) { - message(bformat(_("Error exporting to format: %1$s."), + dr.setError(true); + dr.setMessage(bformat(_("Error exporting to format: %1$s."), cmd.argument())); } break; @@ -2810,8 +2814,10 @@ bool GuiView::dispatch(FuncRequest const & cmd) theBufferList().getBuffer(FileName(to_utf8(cmd.argument()))); if (buffer) setBuffer(buffer); - else - message(_("Document not loaded")); + else { + dr.setError(true); + dr.setMessage(_("Document not loaded")); + } } break; @@ -2922,6 +2928,7 @@ bool GuiView::dispatch(FuncRequest const & cmd) // FIXME: get rid of this indirection; GuiView ask the inset // if he is kind enough to update itself... FuncRequest fr(LFUN_INSET_DIALOG_UPDATE, cmd.argument()); + //FIXME: pass DispatchResult here? inset->dispatch(currentBufferView()->cursor(), fr); } else if (name == "paragraph") { lyx::dispatch(FuncRequest(LFUN_PARAGRAPH_UPDATE)); @@ -2933,9 +2940,9 @@ bool GuiView::dispatch(FuncRequest const & cmd) case LFUN_DIALOG_TOGGLE: { if (isDialogVisible(cmd.getArg(0))) - dispatch(FuncRequest(LFUN_DIALOG_HIDE, cmd.argument())); + dispatch(FuncRequest(LFUN_DIALOG_HIDE, cmd.argument()), dr); else - dispatch(FuncRequest(LFUN_DIALOG_SHOW, cmd.argument())); + dispatch(FuncRequest(LFUN_DIALOG_SHOW, cmd.argument()), dr); break; } @@ -3088,7 +3095,7 @@ bool GuiView::dispatch(FuncRequest const & cmd) break; default: - dispatched = false; + dr.dispatched(false); break; } @@ -3100,7 +3107,7 @@ bool GuiView::dispatch(FuncRequest const & cmd) statusBar()->hide(); } - return dispatched; + return; } diff --git a/src/frontends/qt4/GuiView.h b/src/frontends/qt4/GuiView.h index 2b9a0eee6f..061060a8c3 100644 --- a/src/frontends/qt4/GuiView.h +++ b/src/frontends/qt4/GuiView.h @@ -79,7 +79,7 @@ public: void updateMessage(QString const & str); bool getStatus(FuncRequest const & cmd, FuncStatus & flag); - bool dispatch(FuncRequest const & cmd); + void dispatch(FuncRequest const & cmd, DispatchResult & dr); void restartCursor(); void updateCompletion(Cursor & cur, bool start, bool keep); void setFocus(); diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp index 1af30982de..dde2d710ca 100644 --- a/src/frontends/qt4/GuiWorkArea.cpp +++ b/src/frontends/qt4/GuiWorkArea.cpp @@ -466,7 +466,8 @@ void GuiWorkArea::dispatch(FuncRequest const & cmd0, KeyModifier mod) { // Handle drag&drop if (cmd0.action == LFUN_FILE_OPEN) { - lyx_view_->dispatch(cmd0); + DispatchResult dr; + lyx_view_->dispatch(cmd0, dr); return; }