on xenial help sign in
more effective filtering
5fefdf3Lukáš Tinkl
plugins/Wizard/keyboardLayoutsModel.cpp+18−10
@@ -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();
42
42
43− connect(this, &KeyboardLayoutsModel::languageChanged, this, &KeyboardLayoutsModel::buildModel);
44 buildModel();
43 buildModel();
44+ connect(this, &KeyboardLayoutsModel::languageChanged, this, &KeyboardLayoutsModel::updateModel);
45}
45}
46
46
47KeyboardLayoutsModel::~KeyboardLayoutsModel()
47KeyboardLayoutsModel::~KeyboardLayoutsModel()
@@ -85,8 +85,6 @@ static bool compareLayouts(const KeyboardLayoutInfo &layout0, const KeyboardLayo
85
85
86void KeyboardLayoutsModel::buildModel()
86void KeyboardLayoutsModel::buildModel()
87{
87{
88− beginResetModel();
89−
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()
95
93
96 sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
94 sources = gnome_xkb_info_get_all_layouts(m_xkbInfo);
97
95
98− m_layouts.clear();
99−
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);
112
108
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;
116− }
117 }
111 }
118 g_list_free(sources);
112 g_list_free(sources);
119
113
120− std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
114+ std::sort(m_db.begin(), m_db.end(), compareLayouts);
115+}
121
116
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);
122 endResetModel();
130 endResetModel();
123}
131}
124
132
plugins/Wizard/keyboardLayoutsModel.h+2
@@ -52,11 +52,13 @@ Q_SIGNALS:
52
52
53private Q_SLOTS:
53private Q_SLOTS:
54 void buildModel();
54 void buildModel();
55+ void updateModel();
55
56
56private:
57private:
57 QString m_language;
58 QString m_language;
58 QHash<int, QByteArray> m_roleNames;
59 QHash<int, QByteArray> m_roleNames;
59 QVector<KeyboardLayoutInfo> m_layouts;
60 QVector<KeyboardLayoutInfo> m_layouts;
61+ QVector<KeyboardLayoutInfo> m_db;
60 GnomeXkbInfo *m_xkbInfo = nullptr;
62 GnomeXkbInfo *m_xkbInfo = nullptr;
61};
63};
62
64