Index: addons/katebuild-plugin/plugin_katebuild.h =================================================================== --- addons/katebuild-plugin/plugin_katebuild.h +++ addons/katebuild-plugin/plugin_katebuild.h @@ -130,7 +130,20 @@ bool checkLocal(const QUrl &dir); void clearBuildResults(); - void displayBuildResult(const QString &message, KTextEditor::Message::MessageType level); + /** + * Display a user information on the current active view. + * @parm message the text to show + * @parm type the message type + * @parm autoHideDelay the time the message will be shown. When 0 is the + * delay set to a sane default, when -1 is auto hide disabled + * @parm updateOnly when true will an already shown message text updated + * to @p message and the parameter @p type and @p autoHideDelay + * will be ignored. Should there no old message exist will a new + * message created with respect of all arguments + * + * @see KTextEditor::message + */ + void postMessage(const QString &message, KTextEditor::Message::MessageType type, int autoHideDelay = 0, bool updateOnly = false); KTextEditor::MainWindow *m_win; QWidget *m_toolView; @@ -142,6 +155,7 @@ QString m_stdOut; QString m_stdErr; QString m_currentlyBuildingTarget; + int m_hideViewOnSuccess = 0; // Hide view when > 0 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 @@ -62,7 +62,8 @@ static const QString DefTargetName = QStringLiteral("all"); static const QString DefBuildCmd = QStringLiteral("make"); static const QString DefCleanCmd = QStringLiteral("make clean"); - +static const bool OnlyUpdateMessageText = true; +static const int NeverHide = 60 * 60 * 1000; // 1hour delay, quirk to avoid forced "Close" button /******************************************************************/ KateBuildPlugin::KateBuildPlugin(QObject *parent, const VariantList&): @@ -507,7 +508,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; @@ -541,9 +541,6 @@ { if (m_proc.state() != QProcess::NotRunning) { m_buildCancelled = true; - QString msg = i18n("Building %1 cancelled", m_currentlyBuildingTarget); - m_buildUi.buildStatusLabel->setText(msg); - m_buildUi.buildStatusLabel2->setText(msg); m_proc.terminate(); return true; } @@ -576,6 +573,7 @@ void KateBuildView::slotBuildDefaultTarget() { QModelIndex defaultTarget = m_targetsUi->targetsModel.defaultTarget(m_targetsUi->targetsView->currentIndex()); m_targetsUi->targetsView->setCurrentIndex(defaultTarget); + m_hideViewOnSuccess = 2; buildCurrentTarget(); } @@ -599,17 +597,17 @@ /******************************************************************/ bool KateBuildView::buildCurrentTarget() { - if (m_proc.state() != QProcess::NotRunning) { - displayBuildResult(i18n("Already building..."), KTextEditor::Message::Warning); - return false; + if (m_proc.state() == QProcess::Running) { + m_win->showToolView(m_toolView); + return true; } 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; } @@ -622,7 +620,7 @@ 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; } } @@ -641,29 +639,56 @@ buildCmd.replace(QStringLiteral("%f"), docFInfo.absoluteFilePath()); buildCmd.replace(QStringLiteral("%d"), docFInfo.absolutePath()); } + + --m_hideViewOnSuccess; m_filenameDetectorGccWorked = false; m_currentlyBuildingTarget = QStringLiteral("%1: %2").arg(targetSet).arg(cmdName); m_buildCancelled = false; 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, NeverHide); + return startProcess(dir, buildCmd); } /******************************************************************/ -void KateBuildView::displayBuildResult(const QString &msg, KTextEditor::Message::MessageType level) +void KateBuildView::postMessage(const QString &msg, KTextEditor::Message::MessageType type, int autoHideDelay/* = 0*/, bool updateOnly/* = false*/) { KTextEditor::View *kv = m_win->activeView(); if (!kv) return; - delete m_infoMessage; - m_infoMessage = new KTextEditor::Message(xi18nc("@info", "