Merge lp:~larsu/gsettings-qt/lp1349787 into lp:gsettings-qt

Proposed by Lars Karlitski
Status: Superseded
Proposed branch: lp:~larsu/gsettings-qt/lp1349787
Merge into: lp:gsettings-qt
Diff against target: 293 lines (+66/-141)
4 files modified
debian/libgsettings-qt1.symbols (+6/-3)
examples/choices.qml (+19/-8)
src/qconftypes.cpp (+26/-130)
tests/manual (+15/-0)
To merge this branch: bzr merge lp:~larsu/gsettings-qt/lp1349787
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Needs Fixing
Ubuntu Touch System Settings Pending
Review via email: mp+228821@code.launchpad.net

This proposal has been superseded by a proposal from 2014-07-30.

Commit message

qconftypes: support a{ss}

We don't support a{sv} because gsettings is typed more strictly than javascript and qvariant.

Description of the change

qconftypes: support a{ss}

We don't support a{sv} because gsettings is typed more strictly than javascript and qvariant.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
lp:~larsu/gsettings-qt/lp1349787 updated
64. By Lars Karlitski

Remove symbols from libgsettings-qt1.symbols

These functions were never exposed in any headers and not used by anyone.

65. By Lars Karlitski

symbols: make detach_helper_grow optional

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/libgsettings-qt1.symbols'
2--- debian/libgsettings-qt1.symbols 2014-04-10 17:27:58 +0000
3+++ debian/libgsettings-qt1.symbols 2014-07-30 12:47:31 +0000
4@@ -1,8 +1,6 @@
5 libgsettings-qt.so.1 libgsettings-qt1 #MINVER#
6 (c++)"qtify_name(char const*)@Base" 0.1+14.04.20140408
7 (c++)"unqtify_name(QString const&)@Base" 0.1+14.04.20140408
8- (c++)"qconf_types_unpack(_GVariant*, void*)@Base" 0.1+14.04.20140408
9- (c++)"qconf_types_collect(_GVariantType const*, void const*)@Base" 0.1+14.04.20140408
10 (c++)"qconf_types_convert(_GVariantType const*)@Base" 0.1+14.04.20140408
11 (c++)"qconf_types_to_qvariant(_GVariant*)@Base" 0.1+14.04.20140408
12 (c++)"qconf_types_collect_from_variant(_GVariantType const*, QVariant const&)@Base" 0.1+14.04.20140408
13@@ -22,7 +20,6 @@
14 (c++)"QGSettings::~QGSettings()@Base" 0.1+14.04.20140408
15 (c++)"QGSettings::~QGSettings()@Base" 0.1+14.04.20140408
16 (c++)"QGSettingsPrivate::settingChanged(_GSettings*, char const*, void*)@Base" 0.1+14.04.20140408
17- (c++|optional=templinst)"QList<QString>::detach_helper_grow(int, int)@Base" 0.1+14.04.20140408
18 (c++|optional=templinst)"QList<QString>::append(QString const&)@Base" 0.1+14.04.20140408
19 (c++|optional=templinst)"QList<QString>::QList(QList<QString> const&)@Base" 0.1+14.04.20140408
20 (c++|optional=templinst)"QList<QString>::QList(QList<QString> const&)@Base" 0.1+14.04.20140408
21@@ -34,6 +31,12 @@
22 (c++|optional=templinst)"QList<QVariant>::QList(QList<QVariant> const&)@Base" 0.1+14.04.20140408
23 (c++|optional=templinst)"QList<QVariant>::~QList()@Base" 0.1+14.04.20140408
24 (c++|optional=templinst)"QList<QVariant>::~QList()@Base" 0.1+14.04.20140408
25+ (c++)"QList<QString>::detach_helper_grow(int, int)@Base" 0replaceme
26+ (c++)"QMap<QString, QVariant>::detach_helper()@Base" 0replaceme
27+ (c++)"QMap<QString, QVariant>::~QMap()@Base" 0replaceme
28+ (c++)"QMap<QString, QVariant>::~QMap()@Base" 0replaceme
29+ (c++)"QMapNode<QString, QVariant>::destroySubTree()@Base" 0replaceme
30+ (c++)"QMapNode<QString, QVariant>::copy(QMapData<QString, QVariant>*) const@Base" 0replaceme
31 (c++)"QString::~QString()@Base" 0.1+14.04.20140408
32 (c++)"QString::~QString()@Base" 0.1+14.04.20140408
33 (c++)"QGSettings::metaObject() const@Base" 0.1+14.04.20140408
34
35=== modified file 'examples/choices.qml'
36--- examples/choices.qml 2014-06-23 13:29:16 +0000
37+++ examples/choices.qml 2014-07-30 12:47:31 +0000
38@@ -1,22 +1,33 @@
39
40+import GSettings 1.0
41 import QtQuick 2.0
42-import GSettings 1.0
43+import Ubuntu.Components 0.1
44+import Ubuntu.Components.ListItems 0.1 as ListItems
45
46 Item {
47- width: 200
48+ width: 400
49 height: 300
50
51 GSettings {
52 id: settings
53- schema.id: "org.gnome.desktop.interface"
54+ schema.id: "com.canonical.Unity.Lenses"
55 }
56
57- ListView {
58+ Column {
59 anchors.fill: parent
60- model: settings.schema.choices('toolbarStyle')
61-
62- delegate: Text {
63- text: modelData
64+
65+ ListItems.Standard {
66+ text: 'Dash search'
67+ control: Switch {
68+ checked: settings.remoteContentSearch == 'all'
69+ onClicked: settings.remoteContentSearch = checked ? 'all' : 'none'
70+ }
71+ }
72+
73+ ListItems.SingleValue {
74+ text: 'Possible values'
75+ value: settings.schema.choices('remoteContentSearch').join(', ')
76 }
77 }
78 }
79+
80
81=== modified file 'src/qconftypes.cpp'
82--- src/qconftypes.cpp 2013-07-23 14:35:38 +0000
83+++ src/qconftypes.cpp 2014-07-30 12:47:31 +0000
84@@ -53,6 +53,7 @@
85 * string s QString QVariant::String
86 * string array* as QStringList QVariant::StringList
87 * byte array ay QByteArray QVariant::ByteArray
88+ * dictionary a{ss} QVariantMap QVariant::Map
89 *
90 * [*] not strictly an array, but called as such for sake of
91 * consistency with the 'a' appearing in the DBus type system
92@@ -106,142 +107,15 @@
93 else if (g_variant_type_equal(gtype, G_VARIANT_TYPE_BYTESTRING))
94 return QVariant::ByteArray;
95
96+ else if (g_variant_type_equal(gtype, G_VARIANT_TYPE ("a{ss}")))
97+ return QVariant::Map;
98+
99 // fall through
100 default:
101 return QVariant::Invalid;
102 }
103 }
104
105-GVariant *qconf_types_collect(const GVariantType *gtype, const void *argument)
106-{
107- switch (g_variant_type_peek_string(gtype)[0]) {
108- case G_VARIANT_CLASS_BOOLEAN:
109- return g_variant_new_boolean(*(const bool *) argument);
110-
111- case G_VARIANT_CLASS_BYTE:
112- return g_variant_new_byte(*(const char *) argument);
113-
114- case G_VARIANT_CLASS_INT16:
115- return g_variant_new_int16(*(const int *) argument);
116-
117- case G_VARIANT_CLASS_UINT16:
118- return g_variant_new_uint16(*(const unsigned int *) argument);
119-
120- case G_VARIANT_CLASS_INT32:
121- return g_variant_new_int32(*(const int *) argument);
122-
123- case G_VARIANT_CLASS_UINT32:
124- return g_variant_new_uint32(*(const unsigned int *) argument);
125-
126- case G_VARIANT_CLASS_INT64:
127- return g_variant_new_int64(*(const long long *) argument);
128-
129- case G_VARIANT_CLASS_UINT64:
130- return g_variant_new_int64(*(const unsigned long long *) argument);
131-
132- case G_VARIANT_CLASS_DOUBLE:
133- return g_variant_new_double(*(const double *) argument);
134-
135- case G_VARIANT_CLASS_STRING:
136- {
137- const QString& string = *(const QString *) argument;
138- return g_variant_new_string(string.toUtf8());
139- }
140-
141- case G_VARIANT_CLASS_ARRAY:
142- if (g_variant_type_equal(gtype, G_VARIANT_TYPE_STRING_ARRAY)) {
143- const QStringList& list = *(const QStringList *) argument;
144- GVariantBuilder builder;
145-
146- g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY);
147-
148- Q_FOREACH (const QString& string, list)
149- g_variant_builder_add(&builder, "s", string.toUtf8().constData());
150-
151- return g_variant_builder_end(&builder);
152- } else if (g_variant_type_equal(gtype, G_VARIANT_TYPE_BYTESTRING)) {
153- const QByteArray& array = *(const QByteArray *) argument;
154- gsize size = array.size();
155- gpointer data;
156-
157- data = g_memdup(array.data(), size);
158-
159- return g_variant_new_from_data(G_VARIANT_TYPE_BYTESTRING,
160- data, size, TRUE, g_free, data);
161- }
162-
163- // fall through
164- default:
165- g_assert_not_reached();
166- }
167-}
168-
169-void qconf_types_unpack(GVariant *value, void *argument)
170-{
171- switch (g_variant_classify(value)) {
172- case G_VARIANT_CLASS_BOOLEAN:
173- *(bool *) argument = g_variant_get_boolean(value);
174- break;
175-
176- case G_VARIANT_CLASS_BYTE:
177- *(char *) argument = g_variant_get_byte(value);
178- break;
179-
180- case G_VARIANT_CLASS_INT16:
181- *(int *) argument = g_variant_get_int16(value);
182- break;
183-
184- case G_VARIANT_CLASS_UINT16:
185- *(unsigned int *) argument = g_variant_get_uint16(value);
186- break;
187-
188- case G_VARIANT_CLASS_INT32:
189- *(int *) argument = g_variant_get_int32(value);
190- break;
191-
192- case G_VARIANT_CLASS_UINT32:
193- *(unsigned int *) argument = g_variant_get_uint32(value);
194- break;
195-
196- case G_VARIANT_CLASS_INT64:
197- *(long long *) argument = g_variant_get_int64(value);
198- break;
199-
200- case G_VARIANT_CLASS_UINT64:
201- *(unsigned long long *) argument = g_variant_get_uint64(value);
202- break;
203-
204- case G_VARIANT_CLASS_DOUBLE:
205- *(double *) argument = g_variant_get_double(value);
206- break;
207-
208- case G_VARIANT_CLASS_STRING:
209- *(QString *) argument = QString(g_variant_get_string(value, NULL));
210- break;
211-
212- case G_VARIANT_CLASS_ARRAY:
213- if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING_ARRAY)) {
214- GVariantIter iter;
215- QStringList list;
216- const gchar *str;
217-
218- g_variant_iter_init (&iter, value);
219- while (g_variant_iter_next (&iter, "&s", &str))
220- list.append (str);
221-
222- *(QStringList *) argument = list;
223- break;
224- } else if (g_variant_is_of_type(value, G_VARIANT_TYPE_BYTESTRING)) {
225- *(QByteArray *) argument = QByteArray(g_variant_get_bytestring(value));
226- break;
227- }
228-
229- // fall through
230- default:
231- g_assert_not_reached();
232- }
233-}
234-
235 QVariant qconf_types_to_qvariant(GVariant *value)
236 {
237 switch (g_variant_classify(value)) {
238@@ -288,6 +162,17 @@
239 return QVariant(list);
240 } else if (g_variant_is_of_type(value, G_VARIANT_TYPE_BYTESTRING)) {
241 return QVariant(QByteArray(g_variant_get_bytestring(value)));
242+ } else if (g_variant_is_of_type(value, G_VARIANT_TYPE("a{ss}"))) {
243+ GVariantIter iter;
244+ QMap<QString, QVariant> map;
245+ const gchar *key;
246+ const gchar *val;
247+
248+ g_variant_iter_init (&iter, value);
249+ while (g_variant_iter_next (&iter, "{&s&s}", &key, &val))
250+ map.insert(key, QVariant(val));
251+
252+ return map;
253 }
254
255 // fall through
256@@ -349,6 +234,17 @@
257
258 return g_variant_new_from_data(G_VARIANT_TYPE_BYTESTRING,
259 data, size, TRUE, g_free, data);
260+ } else if (g_variant_type_equal(gtype, G_VARIANT_TYPE("a{ss}"))) {
261+ GVariantBuilder builder;
262+ g_variant_builder_init(&builder, G_VARIANT_TYPE ("a{ss}"));
263+ QMapIterator<QString, QVariant> it(v.toMap());
264+ while (it.hasNext()) {
265+ it.next();
266+ QByteArray key = it.key().toUtf8();
267+ QByteArray val = it.value().toByteArray();
268+ g_variant_builder_add (&builder, "{ss}", key.constData(), val.constData());
269+ }
270+ return g_variant_builder_end (&builder);
271 }
272
273 // fall through
274
275=== added file 'tests/manual'
276--- tests/manual 1970-01-01 00:00:00 +0000
277+++ tests/manual 2014-07-30 12:47:31 +0000
278@@ -0,0 +1,15 @@
279+
280+Test-case gsettings-qt/unity8-check-setting
281+<dl>
282+ <dt>Open system settings with the security panel </dt>
283+ <dd>Ensure "Dash search" is set to "Phone and Internet"</dd>
284+ <dt>Change "Dash search" to "Phone only"</dt>
285+ <dd>Ensure that the music and video lenses don't show online content</dd>
286+</dl>
287+
288+Test-case gsettings-qt/run-example
289+<dl>
290+ <dt>Download the <a href="http://bazaar.launchpad.net/~system-settings-touch/gsettings-qt/trunk/view/head:/examples/choices.qml">choices example</a> and run it with qmlscene</dt>
291+ <dd>Ensure that the switch is synchronized with the "Dash Search" setting in the security panel of system settings</dd>
292+ <dd>Ensure that the "Possible values" list item has a value of "all, none"</dd>
293+</dl>

Subscribers

People subscribed via source and target branches

to all changes: