Skip to content

Commit 08b82de

Browse files
authored
Merge pull request ElektraInitiative#3168 from manuelm/gh3162
GLIB changes
2 parents 8a45186 + caa0a4a commit 08b82de

File tree

6 files changed

+30
-97
lines changed

6 files changed

+30
-97
lines changed

doc/news/_preparation_next_release.md

+4
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,10 @@ you up to date with the multi-language support provided by Elektra.
198198
- Warnings about cmake policies are avoided. _(Markus Raab)_
199199
- We removed the Haskell and GI bindings. _(Markus Raab)_
200200
- Avoid unnecessary copying std::string where possible (setString and setMeta only). _(Manuel Mausz)_
201+
- GLIB: removed `gelektra_keyset_resize`. _(Manuel Mausz)_
202+
- GLIB: removed `gelektra_keyset_rewind`, `gelektra_keyset_next`, `gelektra_keyset_current`, `gelektra_keyset_getcursor`, `gelektra_keyset_setcursor`. _(Manuel Mausz)_
203+
- GLIB: renamed `gelektra_keyset_atcursor` to `gelektra_keyset_at`. _(Manuel Mausz)_
204+
- gsettings: adapt iterator. _(Manuel Mausz)_
201205

202206
### Java
203207

src/bindings/glib/gelektra-key.c

+12-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#include "gelektra-key.h"
2-
#include <kdbprivate.h>
32
#include <string.h>
43

54
enum
@@ -21,7 +20,8 @@ static void gelektra_key_init (GElektraKey * self)
2120
keyIncRef (self->key);
2221
}
2322

24-
static void gelektra_key_set_property (GObject * object, guint property_id, const GValue * value ELEKTRA_UNUSED, GParamSpec * pspec)
23+
static void gelektra_key_set_property (GObject * object, guint property_id, const GValue * value __attribute__ ((unused)),
24+
GParamSpec * pspec)
2525
{
2626
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
2727
}
@@ -118,9 +118,12 @@ GElektraKey * gelektra_key_new (const gchar * name, ...)
118118
if (name)
119119
{
120120
va_start (va, name);
121-
keyVInit (key->key, name, va);
122-
keyIncRef (key->key); // keyVInit cleared the refcount
121+
Key * newkey = keyVNew (name, va);
123122
va_end (va);
123+
if (newkey == NULL) return NULL;
124+
125+
Key * old = gelektra_key_swap (key, newkey);
126+
keyDel (old);
124127
}
125128
return key;
126129
}
@@ -160,9 +163,12 @@ static void gelektra_key_gi_init_va (GElektraKey * key, const gchar * name, ...)
160163
if (!name) return;
161164
va_list va;
162165
va_start (va, name);
163-
keyVInit (key->key, name, va);
164-
keyIncRef (key->key); // keyVInit cleared the refcount
166+
Key * newkey = keyVNew (name, va);
165167
va_end (va);
168+
if (newkey == NULL) return;
169+
170+
Key * old = gelektra_key_swap (key, newkey);
171+
keyDel (old);
166172
}
167173

168174
/**

src/bindings/glib/gelektra-keyset.c

+2-63
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#include "gelektra-keyset.h"
2-
#include <kdbprivate.h>
32
#include <string.h>
43

54
G_DEFINE_TYPE (GElektraKeySet, gelektra_keyset, G_TYPE_OBJECT)
@@ -49,8 +48,6 @@ GElektraKeySet * gelektra_keyset_new (gsize alloc, ...)
4948
GElektraKeySet * ks = g_object_new (GELEKTRA_TYPE_KEYSET, NULL);
5049
if (alloc > 0)
5150
{
52-
ksResize (ks->keyset, alloc);
53-
5451
va_start (va, alloc);
5552
GElektraKey * key = (GElektraKey *) va_arg (va, GElektraKey *);
5653
while (key)
@@ -203,11 +200,6 @@ GElektraKeySet * gelektra_keyset_cut (GElektraKeySet * ks, const GElektraKey * p
203200
return gelektra_keyset_make (ksCut (ks->keyset, point->key));
204201
}
205202

206-
gint gelektra_keyset_resize (GElektraKeySet * ks, gsize alloc)
207-
{
208-
return ksResize (ks->keyset, alloc);
209-
}
210-
211203
gssize gelektra_keyset_len (const GElektraKeySet * ks)
212204
{
213205
return ksGetSize (ks->keyset);
@@ -243,35 +235,6 @@ GElektraKey * gelektra_keyset_lookup_byname (GElektraKeySet * ks, const char * n
243235
}
244236

245237
/* iterating */
246-
gint gelektra_keyset_rewind (GElektraKeySet * ks)
247-
{
248-
return ksRewind (ks->keyset);
249-
}
250-
251-
/**
252-
* gelektra_keyset_next:
253-
* @ks: A #GElektraKeySet
254-
*
255-
* Returns: (transfer full): Next #GElektraKey in @ks
256-
* see ksNext
257-
*/
258-
GElektraKey * gelektra_keyset_next (GElektraKeySet * ks)
259-
{
260-
return gelektra_key_make (ksNext (ks->keyset));
261-
}
262-
263-
/**
264-
* gelektra_keyset_current:
265-
* @ks: A #GElektraKeySet
266-
*
267-
* Returns: (transfer full): Current #GElektraKey in @ks
268-
* see ksCurrent
269-
*/
270-
GElektraKey * gelektra_keyset_current (const GElektraKeySet * ks)
271-
{
272-
return gelektra_key_make (ksCurrent (ks->keyset));
273-
}
274-
275238
/**
276239
* gelektra_keyset_head:
277240
* @ks: A #GElektraKeySet
@@ -297,38 +260,14 @@ GElektraKey * gelektra_keyset_tail (const GElektraKeySet * ks)
297260
}
298261

299262
/**
300-
* gelektra_keyset_getcursor:
301-
* @ks: A #GElektraKeySet
302-
*
303-
* Returns: Current cursor position
304-
* see ksGetCursor
305-
*/
306-
gssize gelektra_keyset_getcursor (const GElektraKeySet * ks)
307-
{
308-
return ksGetCursor (ks->keyset);
309-
}
310-
311-
/**
312-
* gelektra_keyset_setcursor:
313-
* @ks: A #GElektraKeySet
314-
* @pos: The new cursor position
315-
*
316-
* see ksSetCursor
317-
*/
318-
gint gelektra_keyset_setcursor (GElektraKeySet * ks, gssize pos)
319-
{
320-
return ksSetCursor (ks->keyset, pos);
321-
}
322-
323-
/**
324-
* gelektra_keyset_atcursor:
263+
* gelektra_keyset_at:
325264
* @ks: A #GElektraKeySet
326265
* @pos: The cursor position
327266
*
328267
* Returns: (transfer full): #GElektraKey in @ks at @pos
329268
* see ksAtCursor
330269
*/
331-
GElektraKey * gelektra_keyset_atcursor (GElektraKeySet * ks, gssize pos)
270+
GElektraKey * gelektra_keyset_at (GElektraKeySet * ks, gssize pos)
332271
{
333272
if (pos < 0) pos += gelektra_keyset_len (ks);
334273
return gelektra_key_make (ksAtCursor (ks->keyset, pos));

src/bindings/glib/gelektra-keyset.h

+1-8
Original file line numberDiff line numberDiff line change
@@ -61,24 +61,17 @@ gssize gelektra_keyset_append_keyset (GElektraKeySet * ks, GElektraKeySet * appe
6161
gssize gelektra_keyset_gi_append_keyset (GElektraKeySet * ks, GElektraKeySet * append);
6262
GElektraKey * gelektra_keyset_pop (GElektraKeySet * ks);
6363
GElektraKeySet * gelektra_keyset_cut (GElektraKeySet * ks, const GElektraKey * point);
64-
gint gelektra_keyset_resize (GElektraKeySet * ks, gsize alloc);
6564
gssize gelektra_keyset_len (const GElektraKeySet * ks);
6665

6766
/* searching */
6867
GElektraKey * gelektra_keyset_lookup (GElektraKeySet * ks, GElektraKey * key, GElektraKdbOptions options);
6968
GElektraKey * gelektra_keyset_lookup_byname (GElektraKeySet * ks, const char * name, GElektraKdbOptions options);
7069

7170
/* iterating */
72-
gint gelektra_keyset_rewind (GElektraKeySet * ks);
73-
GElektraKey * gelektra_keyset_next (GElektraKeySet * ks);
74-
GElektraKey * gelektra_keyset_current (const GElektraKeySet * ks);
75-
7671
GElektraKey * gelektra_keyset_head (const GElektraKeySet * ks);
7772
GElektraKey * gelektra_keyset_tail (const GElektraKeySet * ks);
7873

79-
gssize gelektra_keyset_getcursor (const GElektraKeySet * ks);
80-
gint gelektra_keyset_setcursor (GElektraKeySet * ks, gssize pos);
81-
GElektraKey * gelektra_keyset_atcursor (GElektraKeySet * ks, gssize pos);
74+
GElektraKey * gelektra_keyset_at (GElektraKeySet * ks, gssize pos);
8275

8376
G_END_DECLS
8477

src/bindings/glib/tests/testglib_keyset.c

+5-15
Original file line numberDiff line numberDiff line change
@@ -101,20 +101,13 @@ static void test_iterating (void)
101101
g_object_ref (key2);
102102
ks = gelektra_keyset_new (3, key1, gelektra_key_new ("user/b", GELEKTRA_KEY_END), key2, GELEKTRA_KEYSET_END);
103103

104-
guint cnt = 0;
105-
gelektra_keyset_rewind (ks);
106-
while ((tmpkey = gelektra_keyset_next (ks)) != NULL)
104+
gssize pos = 0;
105+
while ((tmpkey = gelektra_keyset_at (ks, pos)) != NULL)
107106
{
108-
GElektraKey * curkey = gelektra_keyset_current (ks);
109-
succeed_if (gelektra_key_cmp (tmpkey, curkey) == 0, "iterators returned different keys");
110-
g_object_unref (curkey);
111-
112-
succeed_if (gelektra_keyset_getcursor (ks) == cnt, "cursor is at unexpected position");
113-
114-
++cnt;
107+
++pos;
115108
g_object_unref (tmpkey);
116109
}
117-
succeed_if (cnt == 3, "some keys are missing");
110+
succeed_if (pos == 3, "some keys are missing");
118111

119112
tmpkey = gelektra_keyset_head (ks);
120113
succeed_if (gelektra_key_cmp (tmpkey, key1) == 0, "keyset_head returned unexpected key");
@@ -124,13 +117,10 @@ static void test_iterating (void)
124117
succeed_if (gelektra_key_cmp (tmpkey, key2) == 0, "keyset_tail returned unexpected key");
125118
g_object_unref (tmpkey);
126119

127-
tmpkey = gelektra_keyset_atcursor (ks, 0);
120+
tmpkey = gelektra_keyset_at (ks, 0);
128121
succeed_if (gelektra_key_cmp (tmpkey, key1) == 0, "keyset_atcursor returned unexpected key");
129122
g_object_unref (tmpkey);
130123

131-
gelektra_keyset_setcursor (ks, 1);
132-
succeed_if (gelektra_keyset_getcursor (ks) == 1, "cursor is at unexpected position");
133-
134124
g_object_unref (key1);
135125
g_object_unref (key2);
136126
g_object_unref (ks);

src/bindings/gsettings/elektrasettingsbackend.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -372,21 +372,22 @@ static void elektra_settings_key_changed (GDBusConnection * connection G_GNUC_UN
372372
gchar const * keypathname = g_variant_get_string (variant, NULL);
373373
ElektraSettingsBackend * esb = (ElektraSettingsBackend *) user_data;
374374
GElektraKeySet * ks = gelektra_keyset_dup (esb->subscription_gks);
375-
gelektra_keyset_rewind (ks);
376375
GElektraKey * key = gelektra_key_new (keypathname, KEY_VALUE, "", KEY_END);
377376
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s %s!",
378377
"GSEttings Path: ", (g_strstr_len (g_strstr_len (keypathname, -1, "/") + 1, -1, "/")));
379-
gelektra_keyset_next (ks);
380-
do
378+
GElektraKey * item;
379+
gssize pos = 0;
380+
while ((item = gelektra_keyset_at (ks, pos)) != NULL)
381381
{
382-
if (gelektra_key_isbeloworsame (key, gelektra_keyset_current (ks)))
382+
if (gelektra_key_isbeloworsame (key, item))
383383
{
384384
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s!", "Subscribed key changed");
385385
gchar * gsettingskeyname = g_strdup (g_strstr_len (g_strstr_len (keypathname, -1, "/") + 1, -1, "/"));
386386
g_settings_backend_changed (user_data, gsettingskeyname, NULL);
387387
g_free (gsettingskeyname);
388388
}
389-
} while (gelektra_keyset_next (ks) != NULL);
389+
pos++;
390+
}
390391
g_variant_unref (variant);
391392
}
392393

0 commit comments

Comments
 (0)