aboutsummaryrefslogtreecommitdiff
path: root/hardinfo2/shell.c
diff options
context:
space:
mode:
Diffstat (limited to 'hardinfo2/shell.c')
-rw-r--r--hardinfo2/shell.c58
1 files changed, 42 insertions, 16 deletions
diff --git a/hardinfo2/shell.c b/hardinfo2/shell.c
index 7487bf13..23ba2ad7 100644
--- a/hardinfo2/shell.c
+++ b/hardinfo2/shell.c
@@ -724,9 +724,6 @@ static void set_view_type(ShellViewType viewtype)
gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view),
shell->info->model);
- /* reset to the default header values */
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), FALSE);
-
/* reset to the default view columns */
gtk_tree_view_column_set_visible(shell->info->col_extra1, FALSE);
gtk_tree_view_column_set_visible(shell->info->col_extra2, FALSE);
@@ -779,6 +776,7 @@ group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry,
gchar * group, gchar ** keys)
{
if (g_str_equal(group, "$ShellParam$")) {
+ gboolean headers_visible = FALSE;
gint i;
for (i = 0; keys[i]; i++) {
@@ -817,11 +815,7 @@ group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry,
g_timeout_add(ms, rescan_section, entry);
} else if (g_str_equal(key, "ShowColumnHeaders")) {
- gboolean show;
-
- show = g_key_file_get_boolean(key_file, group, key, NULL);
-
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), show);
+ headers_visible = g_key_file_get_boolean(key_file, group, key, NULL);
} else if (g_str_has_prefix(key, "ColumnTitle")) {
GtkTreeViewColumn *column;
gchar *value, *title = strchr(key, '$') + 1;
@@ -874,6 +868,8 @@ group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry,
(key_file, group, key, NULL));
}
}
+
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), headers_visible);
} else {
g_warning("Unknown parameter group: ``%s''", group);
}
@@ -907,16 +903,28 @@ group_handle_normal(GKeyFile * key_file, ShellModuleEntry * entry,
value = entry->fieldfunc(key);
}
- if ((key && value) &&
- g_utf8_validate(key, -1, NULL)
- && g_utf8_validate(value, -1, NULL)) {
+ 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);
}
- gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE, value,
- -1);
+
+ if (strchr(value, '|')) {
+ 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);
+ } else {
+ gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE, value, -1);
+ }
strend(key, '#');
@@ -1062,12 +1070,19 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
GKeyFile *key_file = g_key_file_new();
GtkTreeStore *store;
gchar *key_data, **groups;
+ gboolean has_shell_param = FALSE;
gint i;
gsize ngroups;
module_entry_scan(entry);
key_data = module_entry_function(entry);
+ /* */
+ gdk_window_freeze_updates(shell->info->view->window);
+
+ g_object_ref(shell->info->model);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view), NULL);
+
/* reset the view type to normal */
set_view_type(SHELL_VIEW_NORMAL);
@@ -1094,6 +1109,7 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
}
store = GTK_TREE_STORE(shell->info->model);
+
gtk_tree_store_clear(store);
g_key_file_load_from_data(key_file, key_data, strlen(key_data), 0,
@@ -1110,21 +1126,31 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)
if (*group == '$') {
group_handle_special(key_file, entry, group, keys);
+ has_shell_param = TRUE;
} else {
group_handle_normal(key_file, entry, group, keys, ngroups);
}
g_strfreev(keys);
}
-
+
+ /* */
+ if (!has_shell_param) {
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info->view), FALSE);
+ }
+
+ /* */
+ g_object_unref(shell->info->model);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info->view), shell->info->model);
gtk_tree_view_expand_all(GTK_TREE_VIEW(shell->info->view));
+ gdk_window_thaw_updates(shell->info->view->window);
+ shell_set_note_from_entry(entry);
+
if (shell->view_type == SHELL_VIEW_PROGRESS) {
update_progress();
}
- shell_set_note_from_entry(entry);
-
g_strfreev(groups);
g_key_file_free(key_file);
g_free(key_data);