@@ -40,8 +40,8 @@ KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
40 qDBusRegisterMetaType<StringMapList>();
40 qDBusRegisterMetaType<StringMapList>();
41 m_xkbInfo = gnome_xkb_info_new();
41 m_xkbInfo = gnome_xkb_info_new();
43− connect(this, &KeyboardLayoutsModel::languageChanged, this, &KeyboardLayoutsModel::buildModel);
44 buildModel();
43 buildModel();
44+ connect(this, &KeyboardLayoutsModel::languageChanged, this, &KeyboardLayoutsModel::updateModel);
47KeyboardLayoutsModel::~KeyboardLayoutsModel()
47KeyboardLayoutsModel::~KeyboardLayoutsModel()
@@ -85,8 +85,6 @@ static bool compareLayouts(const KeyboardLayoutInfo &layout0, const KeyboardLayo
86void KeyboardLayoutsModel::buildModel()
86void KeyboardLayoutsModel::buildModel()
90 GList *sources, *tmp;
88 GList *sources, *tmp;
91 const gchar *display_name;
89 const gchar *display_name;
92 const gchar *short_name;
90 const gchar *short_name;
@@ -95,8 +93,6 @@ void KeyboardLayoutsModel::buildModel()
96 sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
94 sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
100 for (tmp = sources; tmp != NULL; tmp = tmp->next) {
96 for (tmp = sources; tmp != NULL; tmp = tmp->next) {
101 gboolean result = gnome_xkb_info_get_layout_info(m_xkbInfo, (const gchar *)tmp->data,
97 gboolean result = gnome_xkb_info_get_layout_info(m_xkbInfo, (const gchar *)tmp->data,
102 &display_name, &short_name, &xkb_layout, &xkb_variant);
98 &display_name, &short_name, &xkb_layout, &xkb_variant);
@@ -110,15 +106,27 @@ void KeyboardLayoutsModel::buildModel()
110 layout.language = QString::fromUtf8(short_name);
106 layout.language = QString::fromUtf8(short_name);
111 layout.displayName = QString::fromUtf8(display_name);
107 layout.displayName = QString::fromUtf8(display_name);
113− if (layout.language.isEmpty() || layout.language == m_language) {
114− m_layouts.append(layout);
109+ m_db.append(layout);
115− qDebug() << "Inserted layout:" << layout.id << ", language:" << layout.language;
110+ qDebug() << "DB layout:" << layout.id << ", language:" << layout.language;
118 g_list_free(sources);
112 g_list_free(sources);
120− std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
114+ std::sort(m_db.begin(), m_db.end(), compareLayouts);
117+void KeyboardLayoutsModel::updateModel()
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;
129+ std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
122 endResetModel();
130 endResetModel();