From 2fc8cf1e25fb0fb4cd4861c47e9314451298a6d9 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Tue, 24 Sep 2024 07:43:59 +0200 Subject: [PATCH] do not allow toast notifications on wayland - #1494 --- .../gui/mediaplayer/libmpv/libmpvwidget.cpp | 2 +- .../gui/notifications/basetoastnotification.cpp | 2 +- .../gui/settings/settingsnotifications.cpp | 14 ++++++++++++-- src/librssguard/miscellaneous/application.cpp | 10 +++++++--- src/librssguard/miscellaneous/application.h | 1 + .../miscellaneous/notificationfactory.cpp | 2 +- 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.cpp b/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.cpp index 8c384f924..b5f61748a 100644 --- a/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.cpp +++ b/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.cpp @@ -118,7 +118,7 @@ void LibMpvWidget::initializeGL() { #endif #if defined(QT_FEATURE_wayland) - if (QGuiApplication::platformName() == QStringLiteral("wayland")) { + if (qApp->isWayland()) { display.type = MPV_RENDER_PARAM_WL_DISPLAY; display.data = qApp->nativeInterface()->display(); } diff --git a/src/librssguard/gui/notifications/basetoastnotification.cpp b/src/librssguard/gui/notifications/basetoastnotification.cpp index 5b80cd439..0805f3d27 100644 --- a/src/librssguard/gui/notifications/basetoastnotification.cpp +++ b/src/librssguard/gui/notifications/basetoastnotification.cpp @@ -20,7 +20,7 @@ BaseToastNotification::BaseToastNotification(QWidget* parent) : QDialog(parent), setAttribute(Qt::WidgetAttribute::WA_DeleteOnClose, false); setWindowFlags( -#ifdef Q_OS_MAC +#if defined(Q_OS_MAC) Qt::WindowType::SubWindow | #else Qt::WindowType::Tool | diff --git a/src/librssguard/gui/settings/settingsnotifications.cpp b/src/librssguard/gui/settings/settingsnotifications.cpp index 95f24f194..4d89313fa 100644 --- a/src/librssguard/gui/settings/settingsnotifications.cpp +++ b/src/librssguard/gui/settings/settingsnotifications.cpp @@ -65,8 +65,18 @@ void SettingsNotifications::loadSettings() { ->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::EnableNotifications)).toBool()); m_ui.m_editor->loadNotifications(qApp->notifications()->allNotifications()); - m_ui.m_rbNativeNotifications - ->setChecked(!settings()->value(GROUP(GUI), SETTING(GUI::UseToastNotifications)).toBool()); + if (qApp->isWayland()) { + // Wayland does not support fancy notifications, only system ones. + m_ui.m_rbNativeNotifications->setChecked(true); + m_ui.m_rbCustomNotifications->setEnabled(false); + m_ui.m_rbCustomNotifications + ->setText(tr("%1 (not supported on Wayland)").arg(m_ui.m_rbCustomNotifications->text())); + } + else { + m_ui.m_rbNativeNotifications + ->setChecked(!settings()->value(GROUP(GUI), SETTING(GUI::UseToastNotifications)).toBool()); + } + m_ui.m_sbScreen->setValue(settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsScreen)).toInt()); m_ui.m_sbWidth->setValue(settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsWidth)).toInt()); m_ui.m_sbMargin->setValue(settings()->value(GROUP(GUI), SETTING(GUI::ToastNotificationsMargin)).toInt()); diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index e0c2f5b71..0660b431c 100644 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -153,9 +153,8 @@ Application::Application(const QString& id, int& argc, char** argv, const QStrin m_database = new DatabaseFactory(this); m_downloadManager = nullptr; m_notifications = new NotificationFactory(this); - m_toastNotifications = settings()->value(GROUP(GUI), SETTING(GUI::UseToastNotifications)).toBool() - ? new ToastNotificationsManager(this) - : nullptr; + m_toastNotifications = + (!isWayland() && m_notifications->useToastNotifications()) ? new ToastNotificationsManager(this) : nullptr; m_shouldRestart = false; #if defined(Q_OS_WIN) @@ -301,6 +300,7 @@ Application::Application(const QString& id, int& argc, char** argv, const QStrin setupWorkHorsePool(); + qDebugNN << LOGSEC_CORE << "Platform:" << QUOTE_W_SPACE_DOT(QGuiApplication::platformName()); qDebugNN << LOGSEC_CORE << "SQLite version:" << QUOTE_W_SPACE_DOT(SQLITE_VERSION); qDebugNN << LOGSEC_CORE << "OpenSSL version:" << QUOTE_W_SPACE_DOT(QSslSocket::sslLibraryVersionString()); qDebugNN << LOGSEC_CORE << "OpenSSL supported:" << QUOTE_W_SPACE_DOT(QSslSocket::supportsSsl()); @@ -867,6 +867,10 @@ bool Application::usingLite() const { #endif } +bool Application::isWayland() const { + return QGuiApplication::platformName() == QSL("wayland"); +} + void Application::onCommitData(QSessionManager& manager) { qDebugNN << LOGSEC_CORE << "OS asked application to commit its data."; diff --git a/src/librssguard/miscellaneous/application.h b/src/librssguard/miscellaneous/application.h index ee6b79692..87a401535 100644 --- a/src/librssguard/miscellaneous/application.h +++ b/src/librssguard/miscellaneous/application.h @@ -187,6 +187,7 @@ class RSSGUARD_DLLSPEC Application : public SingleApplication { WebViewer* createWebView(); bool usingLite() const; + bool isWayland() const; #if defined(NO_LITE) bool forcedLite() const; diff --git a/src/librssguard/miscellaneous/notificationfactory.cpp b/src/librssguard/miscellaneous/notificationfactory.cpp index cb7fa3246..be271d3d7 100644 --- a/src/librssguard/miscellaneous/notificationfactory.cpp +++ b/src/librssguard/miscellaneous/notificationfactory.cpp @@ -20,7 +20,7 @@ bool NotificationFactory::areNotificationsEnabled() const { } bool NotificationFactory::useToastNotifications() const { - return qApp->settings()->value(GROUP(GUI), SETTING(GUI::EnableNotifications)).toBool(); + return qApp->settings()->value(GROUP(GUI), SETTING(GUI::UseToastNotifications)).toBool(); } Notification NotificationFactory::notificationForEvent(Notification::Event event) const {