diff --git a/src/Gui/KSMainWindow.h b/src/Gui/KSMainWindow.h --- a/src/Gui/KSMainWindow.h +++ b/src/Gui/KSMainWindow.h @@ -52,6 +52,14 @@ }; void quit(const QuitBehavior quitBehavior = QuitBehavior::QuitImmediately); + enum class MessageDuration { + AutoHide, + Persistent + }; + void showInlineMessage(const QString& message, + const KMessageWidget::MessageType messageType, + const MessageDuration messageDuration = MessageDuration::AutoHide); + private slots: void captureScreenshot(ImageGrabber::GrabMode mode, int timeout, bool includePointer, bool includeDecorations); diff --git a/src/Gui/KSMainWindow.cpp b/src/Gui/KSMainWindow.cpp --- a/src/Gui/KSMainWindow.cpp +++ b/src/Gui/KSMainWindow.cpp @@ -328,39 +328,54 @@ // is not working quite right, see Bug #389694 which needs fixing. } -void KSMainWindow::showImageSharedFeedback(bool error, const QString &message) +void KSMainWindow::showInlineMessage(const QString& message, const KMessageWidget::MessageType messageType, const MessageDuration messageDuration) { - if (error) { - mMessageWidget->setMessageType(KMessageWidget::Error); - mMessageWidget->setText(i18n("There was a problem sharing the image: %1", message)); + mMessageWidget->setText(message); + mMessageWidget->setMessageType(messageType); + + switch (messageType) { + case KMessageWidget::Error: mMessageWidget->setIcon(QIcon::fromTheme(QStringLiteral("dialog-error"))); - } else { - mMessageWidget->setMessageType(KMessageWidget::Positive); - if (message.isEmpty()) - mMessageWidget->setText(i18n("Image shared")); - else - mMessageWidget->setText(i18n("You can find the shared image at: %1", message)); + break; + case KMessageWidget::Positive: mMessageWidget->setIcon(QIcon::fromTheme(QStringLiteral("dialog-ok-apply"))); + break; + case KMessageWidget::Information: + mMessageWidget->setIcon(QIcon::fromTheme(QStringLiteral("dialog-information"))); + break; + default: + ; } mMessageWidget->animatedShow(); - QTimer::singleShot(20000, mMessageWidget, &KMessageWidget::animatedHide); + if (messageDuration == MessageDuration::AutoHide) { + QTimer::singleShot(10000, mMessageWidget, &KMessageWidget::animatedHide); + } } -void KSMainWindow::sendToClipboard() +void KSMainWindow::showImageSharedFeedback(bool error, const QString &message) { - ExportManager::instance()->doCopyToClipboard(); - - if (SpectacleConfig::instance()->quitAfterSaveOrCopyChecked()) { - quit(); + if (error) { + showInlineMessage(i18n("There was a problem sharing the image: %1", message), + KMessageWidget::Error); + } else { + if (message.isEmpty()) { + showInlineMessage(i18n("Image shared"), KMessageWidget::Positive); + } else { + showInlineMessage(i18n("You can find the shared image at: %1", message), + KMessageWidget::Positive); + } } +} - mMessageWidget->setMessageType(KMessageWidget::Information); - mMessageWidget->setText(i18n("The screenshot has been copied to the clipboard.")); - mMessageWidget->setIcon(QIcon::fromTheme(QStringLiteral("dialog-information"))); +void KSMainWindow::sendToClipboard() +{ + ExportManager::instance()->doCopyToClipboard(); - mMessageWidget->animatedShow(); - QTimer::singleShot(10000, mMessageWidget, &KMessageWidget::animatedHide); + SpectacleConfig::instance()->quitAfterSaveOrCopyChecked() + ? quit() + : showInlineMessage(i18n("The screenshot has been copied to the clipboard."), + KMessageWidget::Information); } void KSMainWindow::showPreferencesDialog()