- return NULL; /* nothing in the list.. */
-
- for (it = g_list_last(keylist); it != NULL; it = it->prev) {
- p = ret;
- ret = g_new0(KeyBindingTree, 1);
- if (p == NULL) {
- GList *it;
-
- /* this is the first built node, the bottom node of the tree */
- ret->keylist = g_list_copy(keylist); /* shallow copy */
- for (it = ret->keylist; it != NULL; it = it->next) /* deep copy */
- it->data = g_strdup(it->data);
- }
- ret->first_child = p;
- if (!translate_key(it->data, &ret->state, &ret->key)) {
- tree_destroy(ret);
- return NULL;
- }
+ return NULL; /* nothing in the list.. */
+
+ for (it = g_list_last(keylist); it; it = g_list_previous(it)) {
+ GList *kit;
+
+ p = ret;
+ ret = g_new0(KeyBindingTree, 1);
+
+ for (kit = it; kit != NULL; kit = g_list_previous(kit))
+ ret->keylist = g_list_prepend(ret->keylist,
+ g_strdup(kit->data)); /* deep copy */
+ ret->first_child = p;
+ if (p != NULL) p->parent = ret;
+ if (!translate_key(it->data, &ret->state, &ret->key)) {
+ tree_destroy(ret);
+ return NULL;
+ }