diff options
author | Burt P <pburt0@gmail.com> | 2019-07-21 12:45:56 -0500 |
---|---|---|
committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2019-08-10 16:46:31 -0700 |
commit | 9c478d2a23fac7a2b0d7aa41981571d27631134e (patch) | |
tree | bb69cf49e9d6bfebe180f0b2f1798c764a266fa1 /shell/shell.c | |
parent | ff8078c66110e8ea36240c47bc1f069b44d3ab99 (diff) |
shell/info: allow newlines in values
Also fixed a FIXME: use g_key_file_get_string_list().
Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'shell/shell.c')
-rw-r--r-- | shell/shell.c | 106 |
1 files changed, 52 insertions, 54 deletions
diff --git a/shell/shell.c b/shell/shell.c index 31836d62..106f6722 100644 --- a/shell/shell.c +++ b/shell/shell.c @@ -1271,70 +1271,68 @@ static void group_handle_normal(GKeyFile *key_file, g_free(tmp); } + g_key_file_set_list_separator(key_file, '|'); + for (i = 0; keys[i]; i++) { gchar *key = keys[i]; - gchar *value; + gchar **values; + gsize vcount = 0; GtkTreeIter child; - value = g_key_file_get_value(key_file, group, key, NULL); - if (entry->fieldfunc && value && g_str_equal(value, "...")) { - g_free(value); - value = entry->fieldfunc(key); - } - - if ((key && value) && g_utf8_validate(key, -1, NULL) && - g_utf8_validate(value, -1, NULL)) { - if (ngroups == 1) { - gtk_tree_store_append(store, &child, NULL); - } else { - gtk_tree_store_append(store, &child, &parent); - } - - /* FIXME: use g_key_file_get_string_list? */ - if (g_utf8_strchr(value, -1, '|')) { - gchar **columns = g_strsplit(value, "|", 0); - - gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE, - columns[0], -1); - if (columns[1]) { - gtk_tree_store_set(store, &child, INFO_TREE_COL_EXTRA1, - columns[1], -1); - if (columns[2]) { - gtk_tree_store_set(store, &child, INFO_TREE_COL_EXTRA2, - columns[2], -1); - } - } - - g_strfreev(columns); + values = g_key_file_get_string_list(key_file, group, key, &vcount, NULL); + if (!vcount) { + /* Check for empty value */ + values = g_new0(gchar*, 2); + values[0] = g_key_file_get_string(key_file, group, key, NULL); + if (values[0]) { + vcount = 1; } else { - gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE, value, - -1); + g_strfreev(values); + continue; } + } - strend(key, '#'); - - struct UpdateTableItem *item = g_new0(struct UpdateTableItem, 1); - item->is_iter = TRUE; - item->iter = gtk_tree_iter_copy(&child); - gchar *flags, *tag, *name; - key_get_components(key, &flags, &tag, &name, NULL, NULL, TRUE); + if (entry->fieldfunc && values[0] && g_str_equal(values[0], "...")) { + g_free(values[0]); + values[0] = entry->fieldfunc(key); + } - if (flags) { - gtk_tree_store_set(store, &child, INFO_TREE_COL_NAME, name, - INFO_TREE_COL_DATA, flags, -1); - g_hash_table_insert(update_tbl, tag, item); - g_free(name); - } else { - gtk_tree_store_set(store, &child, INFO_TREE_COL_NAME, key, - INFO_TREE_COL_DATA, NULL, -1); - g_hash_table_insert(update_tbl, name, item); - g_free(tag); - } - g_free(flags); + if (ngroups == 1) { + gtk_tree_store_append(store, &child, NULL); + } else { + gtk_tree_store_append(store, &child, &parent); + } + if (vcount > 0) + gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE, + values[0], -1); + if (vcount > 1) + gtk_tree_store_set(store, &child, INFO_TREE_COL_EXTRA1, + values[1], -1); + if (vcount > 2) + gtk_tree_store_set(store, &child, INFO_TREE_COL_EXTRA2, + values[2], -1); + + struct UpdateTableItem *item = g_new0(struct UpdateTableItem, 1); + item->is_iter = TRUE; + item->iter = gtk_tree_iter_copy(&child); + gchar *flags, *tag, *name; + key_get_components(key, &flags, &tag, &name, NULL, NULL, TRUE); + + if (flags) { + gtk_tree_store_set(store, &child, INFO_TREE_COL_NAME, name, + INFO_TREE_COL_DATA, flags, -1); + g_hash_table_insert(update_tbl, tag, item); + g_free(name); + } else { + gtk_tree_store_set(store, &child, INFO_TREE_COL_NAME, key, + INFO_TREE_COL_DATA, NULL, -1); + g_hash_table_insert(update_tbl, name, item); + g_free(tag); } + g_free(flags); - g_free(value); + g_strfreev(values); } } @@ -1564,7 +1562,7 @@ static void module_selected_show_info_detail(GKeyFile *key_file, gchar *name, *label, *tag; key_get_components(keys[j], NULL, &tag, &name, &label, NULL, TRUE); - value = g_key_file_get_value(key_file, groups[i], keys[j], NULL); + value = g_key_file_get_string(key_file, groups[i], keys[j], NULL); if (entry && entry->fieldfunc && value && g_str_equal(value, "...")) { g_free(value); |