Index: addons/katebuild-plugin/plugin_katebuild.h =================================================================== --- addons/katebuild-plugin/plugin_katebuild.h +++ addons/katebuild-plugin/plugin_katebuild.h @@ -130,7 +130,7 @@ bool checkLocal(const QUrl &dir); void clearBuildResults(); - void displayBuildResult(const QString &message, KTextEditor::Message::MessageType level); + void postMessage(const QString &message, KTextEditor::Message::MessageType type); KTextEditor::MainWindow *m_win; QWidget *m_toolView; @@ -142,6 +142,7 @@ QString m_stdOut; QString m_stdErr; QString m_currentlyBuildingTarget; + bool m_hideViewOnSuccess = false; bool m_buildCancelled; int m_displayModeBeforeBuild; QString m_make_dir; Index: addons/katebuild-plugin/plugin_katebuild.cpp =================================================================== --- addons/katebuild-plugin/plugin_katebuild.cpp +++ addons/katebuild-plugin/plugin_katebuild.cpp @@ -492,7 +492,6 @@ m_buildUi.u_tabWidget->setCurrentIndex(1); m_displayModeBeforeBuild = m_buildUi.displayModeSlider->value(); m_buildUi.displayModeSlider->setValue(0); - m_win->showToolView(m_toolView); // set working directory m_make_dir = dir; @@ -584,30 +583,35 @@ /******************************************************************/ bool KateBuildView::buildCurrentTarget() { - if (m_proc.state() != QProcess::NotRunning) { - displayBuildResult(i18n("Already building..."), KTextEditor::Message::Warning); + if (m_proc.state() == QProcess::Running) { + m_win->showToolView(m_toolView); + if (!m_infoMessage) { + postMessage(i18n("Building target is still in progress..."), KTextEditor::Message::Information); + } return false; } QFileInfo docFInfo = docUrl().toLocalFile(); // docUrl() saves the current document QModelIndex ind = m_targetsUi->targetsView->currentIndex(); m_previousIndex = ind; if (!ind.isValid()) { - KMessageBox::sorry(nullptr, i18n("No target available for building.")); + postMessage(i18n("No target available for building."), KTextEditor::Message::Error); return false; } QString buildCmd = m_targetsUi->targetsModel.command(ind); QString cmdName = m_targetsUi->targetsModel.cmdName(ind); QString workDir = m_targetsUi->targetsModel.workDir(ind); QString targetSet = m_targetsUi->targetsModel.targetName(ind); + // This looks (no, is!) bad but seems to work so far, improvements are welcome + m_hideViewOnSuccess = (cmdName == i18n("Build")); QString dir = workDir; if (workDir.isEmpty()) { dir = docFInfo.absolutePath(); if (dir.isEmpty()) { - KMessageBox::sorry(nullptr, i18n("There is no local file or directory specified for building.")); + postMessage(i18n("There is no local file or directory specified for building."), KTextEditor::Message::Error); return false; } } @@ -632,17 +636,33 @@ QString msg = i18n("Building target %1 ...", m_currentlyBuildingTarget); m_buildUi.buildStatusLabel->setText(msg); m_buildUi.buildStatusLabel2->setText(msg); + postMessage(i18n("Building target..."), KTextEditor::Message::Information); return startProcess(dir, buildCmd); } /******************************************************************/ -void KateBuildView::displayBuildResult(const QString &msg, KTextEditor::Message::MessageType level) +void KateBuildView::postMessage(const QString &msg, KTextEditor::Message::MessageType type) { KTextEditor::View *kv = m_win->activeView(); if (!kv) return; + QString msgType; + switch (type) { + // FIXME How about a function in KTextEditor::Message to get these translated message type names? + case KTextEditor::Message::Positive: + case KTextEditor::Message::Information: + msgType = i18n("Info"); + break; + case KTextEditor::Message::Warning: + msgType = i18n("Warning"); + break; + case KTextEditor::Message::Error: + msgType = i18n("Error"); + break; + } delete m_infoMessage; - m_infoMessage = new KTextEditor::Message(xi18nc("@info", "