KWin
Loading...
Searching...
No Matches
kcmvirtualkeyboard.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2020 Aleix Pol Gonzalez <aleixpol@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
8
9#include <KApplicationTrader>
10#include <KConfigGroup>
11#include <KDesktopFile>
12#include <KLocalizedString>
13#include <KPluginFactory>
14
15#include <virtualkeyboarddata.h>
16#include <virtualkeyboardsettings.h>
17
18K_PLUGIN_FACTORY_WITH_JSON(KcmVirtualKeyboardFactory, "kcm_virtualkeyboard.json", registerPlugin<KcmVirtualKeyboard>(); registerPlugin<VirtualKeyboardData>();)
19
20KcmVirtualKeyboard::KcmVirtualKeyboard(QObject *parent, const KPluginMetaData &metaData)
21 : KQuickManagedConfigModule(parent, metaData)
22 , m_data(new VirtualKeyboardData(this))
23 , m_model(new VirtualKeyboardsModel(this))
24{
25 qmlRegisterAnonymousType<VirtualKeyboardSettings>("org.kde.kwin.virtualkeyboardsettings", 1);
26}
27
29
30VirtualKeyboardSettings *KcmVirtualKeyboard::settings() const
31{
32 return m_data->settings();
33}
34
36 : QAbstractListModel(parent)
37{
38 m_services = KApplicationTrader::query([](const KService::Ptr &service) {
39 return service->property<bool>("X-KDE-Wayland-VirtualKeyboard");
40 });
41
42 m_services.prepend({});
43}
44
45QHash<int, QByteArray> VirtualKeyboardsModel::roleNames() const
46{
47 QHash<int, QByteArray> ret = QAbstractListModel::roleNames();
48 ret.insert(DesktopFileNameRole, "desktopFileName");
49 return ret;
50}
51
52QVariant VirtualKeyboardsModel::data(const QModelIndex &index, int role) const
53{
54 if (!index.isValid() || index.parent().isValid() || index.row() > m_services.count()) {
55 return {};
56 }
57
58 const KService::Ptr service = m_services[index.row()];
59 switch (role) {
60 case Qt::DisplayRole:
61 return service ? service->name() : i18n("None");
62 case Qt::DecorationRole:
63 return service ? service->icon() : QStringLiteral("edit-none");
64 case Qt::ToolTipRole:
65 return service ? service->comment() : i18n("Do not use any virtual keyboard");
67 return service ? QStandardPaths::locate(QStandardPaths::ApplicationsLocation, service->desktopEntryName() + QLatin1String(".desktop")) : QString();
68 }
69 return {};
70}
71
72int VirtualKeyboardsModel::inputMethodIndex(const QString &desktopFile) const
73{
74 if (desktopFile.isEmpty()) {
75 return 0;
76 }
77
78 int i = 0;
79 for (const auto &service : m_services) {
80 if (service && desktopFile.endsWith(service->desktopEntryName() + QLatin1String(".desktop"))) {
81 return i;
82 }
83 ++i;
84 }
85 return -1;
86}
87
88int VirtualKeyboardsModel::rowCount(const QModelIndex &parent) const
89{
90 return parent.isValid() ? 0 : m_services.count();
91}
92
93#include "kcmvirtualkeyboard.moc"
94#include "moc_kcmvirtualkeyboard.cpp"
~KcmVirtualKeyboard() override
VirtualKeyboardSettings * settings
KcmVirtualKeyboard(QObject *parent, const KPluginMetaData &metaData)
Q_SCRIPTABLE int inputMethodIndex(const QString &desktopFile) const
VirtualKeyboardsModel(QObject *parent=nullptr)
QHash< int, QByteArray > roleNames() const override
int rowCount(const QModelIndex &parent) const override
QVariant data(const QModelIndex &index, int role) const override
K_PLUGIN_FACTORY_WITH_JSON(KcmVirtualKeyboardFactory, "kcm_virtualkeyboard.json", registerPlugin< KcmVirtualKeyboard >();registerPlugin< VirtualKeyboardData >();) KcmVirtualKeyboard