@@ -89,38 +89,46 @@ void KeyboardLayoutsModel::buildModel()
90 beginResetModel();
90 beginResetModel();
93+ GList *sources, *tmp;
94+ const gchar *display_name;
95+ const gchar *short_name;
96+ const gchar *xkb_layout;
97+ const gchar *xkb_variant;
92 if (m_language.isEmpty()) {
99 if (m_language.isEmpty()) {
93− GList *sources, *tmp;
94− const gchar *display_name;
95− const gchar *short_name;
96− const gchar *xkb_layout;
97− const gchar *xkb_variant;
98 sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
100 sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
102+ sources = gnome_xkb_info_get_layouts_for_language(m_xkbInfo, m_language.toUtf8().constData());
100− m_layouts.clear();
105+ m_layouts.clear();
101− m_layouts.reserve(g_list_length(sources));
106+ m_layouts.reserve(g_list_length(sources));
103− for (tmp = sources; tmp != NULL; tmp = tmp->next) {
108+ qDebug() << "!!! Got" << m_layouts.count() << "layouts";
104− gnome_xkb_info_get_layout_info(m_xkbInfo, (const gchar *)tmp->data,
105− &display_name, &short_name, &xkb_layout, &xkb_variant);
107− KeyboardLayoutInfo layout;
110+ for (tmp = sources; tmp != NULL; tmp = tmp->next) {
108− layout.id = QString::fromUtf8((const gchar *)tmp->data);
111+ gboolean result = gnome_xkb_info_get_layout_info(m_xkbInfo, (const gchar *)tmp->data,
109− layout.shortName = QString::fromUtf8(short_name);
112+ &display_name, &short_name, &xkb_layout, &xkb_variant);
110− layout.displayName = QString::fromUtf8(display_name);
113+ if (!result) {
111− layout.layoutAndVariant = QString::fromUtf8(g_strconcat(xkb_layout, "+", xkb_variant, NULL));
114+ qWarning() << "!!! Skipping invalid layout";
118+ KeyboardLayoutInfo layout;
119+ layout.id = QString::fromUtf8((const gchar *)tmp->data);
113− if (!layout.shortName.isEmpty()) {
120+ layout.shortName = QString::fromUtf8(short_name);
114− qDebug() << "Appending layout with id:" << layout.id;
121+ layout.displayName = QString::fromUtf8(display_name);
115− m_layouts.append(layout);
122+ layout.layoutAndVariant = QString::fromUtf8(g_strconcat(xkb_layout, "+", xkb_variant, NULL));
124+ if (!layout.shortName.isEmpty()) {
125+ qDebug() << "!!! Appending layout with id:" << layout.id;
126+ m_layouts.append(layout);
119− g_list_free(sources);
128+
120− std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
130+ g_list_free(sources);
131+ std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
125 endResetModel();
133 endResetModel();