@@ -17,17 +17,14 @@
1717#include <QDBusMetaType>
1818#include <QDebug>
1919
20+#define GNOME_DESKTOP_USE_UNSTABLE_API
21+#include <libgnome-desktop/gnome-xkb-info.h>
22+
2023#include "keyboardLayoutsModel.h"
2124
2225typedef QList<QMap<QString, QString>> StringMapList;
2326Q_DECLARE_METATYPE(StringMapList)
2427
25−struct KeyboardLayoutInfo {
26− QString id;
27− QString displayName;
28− QString language;
29−};
30−
3128KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
3229 : QAbstractListModel(parent)
3330{
@@ -38,19 +35,11 @@ KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
3835 };
3936
4037 qDBusRegisterMetaType<StringMapList>();
41− m_xkbInfo = gnome_xkb_info_new();
4238
4339 buildModel();
4440 connect(this, &KeyboardLayoutsModel::languageChanged, this, &KeyboardLayoutsModel::updateModel);
4541}
4642
47−KeyboardLayoutsModel::~KeyboardLayoutsModel()
48−{
49− if (m_xkbInfo != nullptr) {
50− g_object_unref(m_xkbInfo);
51− }
52−}
53−
5443QString KeyboardLayoutsModel::language() const
5544{
5645 return m_language;
@@ -91,13 +80,15 @@ void KeyboardLayoutsModel::buildModel()
9180 const gchar *xkb_layout;
9281 const gchar *xkb_variant;
9382
94− sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
83+ GnomeXkbInfo * xkbInfo(gnome_xkb_info_new());
84+
85+ sources = gnome_xkb_info_get_all_layouts(xkbInfo);
9586
9687 for (tmp = sources; tmp != NULL; tmp = tmp->next) {
97− gboolean result = gnome_xkb_info_get_layout_info(m_xkbInfo, (const gchar *)tmp->data,
88+ gboolean result = gnome_xkb_info_get_layout_info(xkbInfo, (const gchar *)tmp->data,
9889 &display_name, &short_name, &xkb_layout, &xkb_variant);
9990 if (!result) {
100− qWarning() << "!!! Skipping invalid layout";
91+ qWarning() << "Skipping invalid layout";
10192 continue;
10293 }
10394
@@ -109,6 +100,7 @@ void KeyboardLayoutsModel::buildModel()
109100 m_db.append(layout);
110101 }
111102 g_list_free(sources);
103+ g_object_unref(xkbInfo);
112104
113105 std::sort(m_db.begin(), m_db.end(), compareLayouts);
114106}
@@ -148,7 +140,7 @@ QVariant KeyboardLayoutsModel::data(const QModelIndex &index, int role) const
148140 return QVariant();
149141 }
150142
151− KeyboardLayoutInfo layout = m_layouts.at(row);
143+ const KeyboardLayoutInfo &layout = m_layouts.at(row);
152144
153145 switch (role) {
154146 case Qt::DisplayRole: