@@ -40,8 +40,8 @@ KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
4040 qDBusRegisterMetaType<StringMapList>();
4141 m_xkbInfo = gnome_xkb_info_new();
4242
43− connect(this, &KeyboardLayoutsModel::languageChanged, this, &KeyboardLayoutsModel::buildModel);
4443 buildModel();
44+ connect(this, &KeyboardLayoutsModel::languageChanged, this, &KeyboardLayoutsModel::updateModel);
4545}
4646
4747KeyboardLayoutsModel::~KeyboardLayoutsModel()
@@ -85,8 +85,6 @@ static bool compareLayouts(const KeyboardLayoutInfo &layout0, const KeyboardLayo
8585
8686void KeyboardLayoutsModel::buildModel()
8787{
88− beginResetModel();
89−
9088 GList *sources, *tmp;
9189 const gchar *display_name;
9290 const gchar *short_name;
@@ -95,8 +93,6 @@ void KeyboardLayoutsModel::buildModel()
9593
9694 sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
9795
98− m_layouts.clear();
99−
10096 for (tmp = sources; tmp != NULL; tmp = tmp->next) {
10197 gboolean result = gnome_xkb_info_get_layout_info(m_xkbInfo, (const gchar *)tmp->data,
10298 &display_name, &short_name, &xkb_layout, &xkb_variant);
@@ -110,15 +106,27 @@ void KeyboardLayoutsModel::buildModel()
110106 layout.language = QString::fromUtf8(short_name);
111107 layout.displayName = QString::fromUtf8(display_name);
112108
113− if (layout.language.isEmpty() || layout.language == m_language) {
114− m_layouts.append(layout);
115− qDebug() << "Inserted layout:" << layout.id << ", language:" << layout.language;
116− }
109+ m_db.append(layout);
110+ qDebug() << "DB layout:" << layout.id << ", language:" << layout.language;
117111 }
118112 g_list_free(sources);
119113
120− std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
114+ std::sort(m_db.begin(), m_db.end(), compareLayouts);
115+}
121116
117+void KeyboardLayoutsModel::updateModel()
118+{
119+ beginResetModel();
120+ m_layouts.clear();
121+
122+ Q_FOREACH(const KeyboardLayoutInfo & info, m_db) {
123+ if (info.language.isEmpty() || info.language == m_language) {
124+ m_layouts.append(info);
125+ qDebug() << "Inserted layout:" << info.id << ", language:" << info.language;
126+ }
127+ }
128+
129+ std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
122130 endResetModel();
123131}
124132