@@ -25,8 +25,7 @@ Q_DECLARE_METATYPE(StringMapList)
2525struct KeyboardLayoutInfo {
2626 QString id;
2727 QString displayName;
28− QString shortName; // language
29− QString layoutAndVariant;
28+ QString language;
3029};
3130
3231KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
@@ -35,8 +34,7 @@ KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
3534 m_roleNames = {
3635 {LayoutIdRole, "layoutId"},
3736 {DisplayNameRole, "displayName"},
38− {ShortNameRole, "shortName"},
39− {LayoutAndVariantRole, "layoutAndVariant"}
37+ {LanguageRole, "language"}
4038 };
4139
4240 qDBusRegisterMetaType<StringMapList>();
@@ -73,8 +71,8 @@ static bool compareLayouts(const KeyboardLayoutInfo &layout0, const KeyboardLayo
7371 QString name1(layout1.displayName);
7472
7573 if (name0 == name1) {
76− name0 = layout0.shortName;
77− name1 = layout1.shortName;
74+ name0 = layout0.language;
75+ name1 = layout1.language;
7876
7977 if (name0 == name1) {
8078 name0 = layout0.id;
@@ -89,23 +87,15 @@ void KeyboardLayoutsModel::buildModel()
8987{
9088 beginResetModel();
9189
92−
9390 GList *sources, *tmp;
9491 const gchar *display_name;
9592 const gchar *short_name;
9693 const gchar *xkb_layout;
9794 const gchar *xkb_variant;
9895
99− if (m_language.isEmpty()) {
100− sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
101− } else {
102− sources = gnome_xkb_info_get_layouts_for_language(m_xkbInfo, m_language.toUtf8().constData());
103− }
96+ sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
10497
10598 m_layouts.clear();
106− m_layouts.reserve(g_list_length(sources));
107−
108− qDebug() << "!!! Got" << m_layouts.count() << "layouts";
10999
110100 for (tmp = sources; tmp != NULL; tmp = tmp->next) {
111101 gboolean result = gnome_xkb_info_get_layout_info(m_xkbInfo, (const gchar *)tmp->data,
@@ -117,17 +107,16 @@ void KeyboardLayoutsModel::buildModel()
117107
118108 KeyboardLayoutInfo layout;
119109 layout.id = QString::fromUtf8((const gchar *)tmp->data);
120− layout.shortName = QString::fromUtf8(short_name);
110+ layout.language = QString::fromUtf8(short_name);
121111 layout.displayName = QString::fromUtf8(display_name);
122− layout.layoutAndVariant = QString::fromUtf8(g_strconcat(xkb_layout, "+", xkb_variant, NULL));
123112
124− if (!layout.shortName.isEmpty()) {
125− qDebug() << "!!! Appending layout with id:" << layout.id;
113+ if (layout.language.isEmpty() || layout.language == m_language) {
126114 m_layouts.append(layout);
115+ qDebug() << "Inserted layout:" << layout.id << ", language:" << layout.language;
127116 }
128−
129117 }
130118 g_list_free(sources);
119+
131120 std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
132121
133122 endResetModel();
@@ -156,10 +145,8 @@ QVariant KeyboardLayoutsModel::data(const QModelIndex &index, int role) const
156145 return layout.displayName;
157146 case LayoutIdRole:
158147 return layout.id;
159− case ShortNameRole:
160− return layout.shortName;
161− case LayoutAndVariantRole:
162− return layout.layoutAndVariant;
148+ case LanguageRole:
149+ return layout.language;
163150 default: {
164151 qWarning() << Q_FUNC_INFO << "unsupported data role";
165152 return QVariant();