diff options
Diffstat (limited to 'hardinfo2/shell.c')
-rw-r--r-- | hardinfo2/shell.c | 58 |
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); |