File indexing completed on 2024-04-28 05:36:02

0001 #include "softwarerendernotifier.h"
0002 #include <KConfigGroup>
0003 #include <KLocalizedString>
0004 #include <KSharedConfig>
0005 #include <QGuiApplication>
0006 #include <QIcon>
0007 #include <QMenu>
0008 #include <QProcess>
0009 
0010 #include <QQuickWindow>
0011 
0012 void SoftwareRendererNotifier::notifyIfRelevant()
0013 {
0014     if (QQuickWindow::sceneGraphBackend() == QLatin1String("software")) {
0015         auto group = KSharedConfig::openConfig()->group(QStringLiteral("softwarerenderer"));
0016         bool neverShow = group.readEntry("neverShow", false);
0017         if (neverShow) {
0018             return;
0019         }
0020         new SoftwareRendererNotifier(qApp);
0021     }
0022 }
0023 
0024 SoftwareRendererNotifier::SoftwareRendererNotifier(QObject *parent)
0025     : KStatusNotifierItem(parent)
0026 {
0027     setTitle(i18n("Software Renderer In Use"));
0028     setToolTipTitle(i18nc("Tooltip telling user their GL drivers are broken", "Software Renderer In Use"));
0029     setToolTipSubTitle(i18nc("Tooltip telling user their GL drivers are broken", "Rendering may be degraded"));
0030     setIconByName(QStringLiteral("video-card-inactive"));
0031     setStatus(KStatusNotifierItem::Active);
0032     setStandardActionsEnabled(false);
0033 
0034     connect(this, &KStatusNotifierItem::activateRequested, this, []() {
0035         QProcess::startDetached(QStringLiteral("kcmshell6"), {QStringLiteral("qtquicksettings")});
0036     });
0037 
0038     auto menu = new QMenu; // ownership is transferred in setContextMenu
0039     auto action = new QAction(i18n("Never show again"));
0040     connect(action, &QAction::triggered, this, [this]() {
0041         auto group = KSharedConfig::openConfig()->group(QStringLiteral("softwarerenderer"));
0042         group.writeEntry("neverShow", true);
0043         deleteLater();
0044     });
0045     menu->addAction(action);
0046     setContextMenu(menu);
0047 }
0048 
0049 SoftwareRendererNotifier::~SoftwareRendererNotifier() = default;