@@ -25,8 +25,7 @@ Q_DECLARE_METATYPE(StringMapList)
25struct KeyboardLayoutInfo {
25struct KeyboardLayoutInfo {
26 QString id;
26 QString id;
27 QString displayName;
27 QString displayName;
28− QString shortName; // language
28+ QString language;
29− QString layoutAndVariant;
32KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
31KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
@@ -35,8 +34,7 @@ KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
35 m_roleNames = {
34 m_roleNames = {
36 {LayoutIdRole, "layoutId"},
35 {LayoutIdRole, "layoutId"},
37 {DisplayNameRole, "displayName"},
36 {DisplayNameRole, "displayName"},
38− {ShortNameRole, "shortName"},
37+ {LanguageRole, "language"}
39− {LayoutAndVariantRole, "layoutAndVariant"}
42 qDBusRegisterMetaType<StringMapList>();
40 qDBusRegisterMetaType<StringMapList>();
@@ -73,8 +71,8 @@ static bool compareLayouts(const KeyboardLayoutInfo &layout0, const KeyboardLayo
73 QString name1(layout1.displayName);
71 QString name1(layout1.displayName);
75 if (name0 == name1) {
73 if (name0 == name1) {
76− name0 = layout0.shortName;
74+ name0 = layout0.language;
77− name1 = layout1.shortName;
75+ name1 = layout1.language;
79 if (name0 == name1) {
77 if (name0 == name1) {
80 name0 = layout0.id;
78 name0 = layout0.id;
@@ -89,23 +87,15 @@ void KeyboardLayoutsModel::buildModel()
90 beginResetModel();
88 beginResetModel();
93 GList *sources, *tmp;
90 GList *sources, *tmp;
94 const gchar *display_name;
91 const gchar *display_name;
95 const gchar *short_name;
92 const gchar *short_name;
96 const gchar *xkb_layout;
93 const gchar *xkb_layout;
97 const gchar *xkb_variant;
94 const gchar *xkb_variant;
99− if (m_language.isEmpty()) {
100− sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
96+ sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
102− sources = gnome_xkb_info_get_layouts_for_language(m_xkbInfo, m_language.toUtf8().constData());
105 m_layouts.clear();
98 m_layouts.clear();
106− m_layouts.reserve(g_list_length(sources));
108− qDebug() << "!!! Got" << m_layouts.count() << "layouts";
110 for (tmp = sources; tmp != NULL; tmp = tmp->next) {
100 for (tmp = sources; tmp != NULL; tmp = tmp->next) {
111 gboolean result = gnome_xkb_info_get_layout_info(m_xkbInfo, (const gchar *)tmp->data,
101 gboolean result = gnome_xkb_info_get_layout_info(m_xkbInfo, (const gchar *)tmp->data,
@@ -117,17 +107,16 @@ void KeyboardLayoutsModel::buildModel()
118 KeyboardLayoutInfo layout;
108 KeyboardLayoutInfo layout;
119 layout.id = QString::fromUtf8((const gchar *)tmp->data);
109 layout.id = QString::fromUtf8((const gchar *)tmp->data);
120− layout.shortName = QString::fromUtf8(short_name);
110+ layout.language = QString::fromUtf8(short_name);
121 layout.displayName = QString::fromUtf8(display_name);
111 layout.displayName = QString::fromUtf8(display_name);
122− layout.layoutAndVariant = QString::fromUtf8(g_strconcat(xkb_layout, "+", xkb_variant, NULL));
124− if (!layout.shortName.isEmpty()) {
113+ if (layout.language.isEmpty() || layout.language == m_language) {
125− qDebug() << "!!! Appending layout with id:" << layout.id;
126 m_layouts.append(layout);
114 m_layouts.append(layout);
115+ qDebug() << "Inserted layout:" << layout.id << ", language:" << layout.language;
130 g_list_free(sources);
118 g_list_free(sources);
131 std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
120 std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
133 endResetModel();
122 endResetModel();
@@ -156,10 +145,8 @@ QVariant KeyboardLayoutsModel::data(const QModelIndex &index, int role) const
156 return layout.displayName;
145 return layout.displayName;
157 case LayoutIdRole:
146 case LayoutIdRole:
158 return layout.id;
147 return layout.id;
159− case ShortNameRole:
148+ case LanguageRole:
160− return layout.shortName;
149+ return layout.language;
161− case LayoutAndVariantRole:
162− return layout.layoutAndVariant;
163 default: {
150 default: {
164 qWarning() << Q_FUNC_INFO << "unsupported data role";
151 qWarning() << Q_FUNC_INFO << "unsupported data role";
165 return QVariant();
152 return QVariant();