File: softwarerendernotifier.cpp

package info (click to toggle)
plasma-workspace 4%3A6.5.4-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 99,452 kB
  • sloc: cpp: 125,486; python: 4,246; xml: 2,449; perl: 572; sh: 230; javascript: 75; ruby: 39; ansic: 13; makefile: 9
file content (58 lines) | stat: -rw-r--r-- 1,954 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
    SPDX-FileCopyrightText: 2018 David Edmundson <davidedmundson@kde.org>

    SPDX-License-Identifier: GPL-2.0-or-later
*/

#include "softwarerendernotifier.h"

#include <QGuiApplication>
#include <QIcon>
#include <QMenu>
#include <QProcess>
#include <QQuickWindow>

#include <KConfigGroup>
#include <KLocalizedString>
#include <KSharedConfig>

void SoftwareRendererNotifier::notifyIfRelevant()
{
    if (QQuickWindow::sceneGraphBackend() == QLatin1String("software")) {
        auto group = KSharedConfig::openConfig()->group(QStringLiteral("softwarerenderer"));
        bool neverShow = group.readEntry("neverShow", false);
        if (neverShow) {
            return;
        }
        new SoftwareRendererNotifier(qApp);
    }
}

SoftwareRendererNotifier::SoftwareRendererNotifier(QObject *parent)
    : KStatusNotifierItem(parent)
{
    setTitle(i18n("Software Renderer In Use"));
    setToolTipTitle(i18nc("Tooltip telling user their GL drivers are broken", "Software Renderer In Use"));
    setToolTipSubTitle(i18nc("Tooltip telling user their GL drivers are broken", "Rendering may be degraded"));
    setIconByName(QStringLiteral("video-card-inactive"));
    setStatus(KStatusNotifierItem::Active);
    setStandardActionsEnabled(false);

    connect(this, &KStatusNotifierItem::activateRequested, this, []() {
        QProcess::startDetached(QStringLiteral("kcmshell6"), {QStringLiteral("qtquicksettings")});
    });

    auto menu = new QMenu; // ownership is transferred in setContextMenu
    auto action = new QAction(i18n("Never show again"));
    connect(action, &QAction::triggered, this, [this]() {
        auto group = KSharedConfig::openConfig()->group(QStringLiteral("softwarerenderer"));
        group.writeEntry("neverShow", true);
        deleteLater();
    });
    menu->addAction(action);
    setContextMenu(menu);
}

SoftwareRendererNotifier::~SoftwareRendererNotifier() = default;

#include "moc_softwarerendernotifier.cpp"