File indexing completed on 2024-05-05 14:11:57
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("kcmshell5"), {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;