aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/shell.h6
-rw-r--r--modules/computer.c13
-rw-r--r--modules/devices.c6
-rw-r--r--shell/shell.c922
4 files changed, 523 insertions, 424 deletions
diff --git a/includes/shell.h b/includes/shell.h
index c68d2115..c6570088 100644
--- a/includes/shell.h
+++ b/includes/shell.h
@@ -84,7 +84,7 @@ struct _Shell {
GtkWidget *hbox, *vpaned;
ShellTree *tree;
- ShellInfoTree *info_tree, *moreinfo_tree;
+ ShellInfoTree *info_tree;
ShellModule *selected_module;
ShellModuleEntry *selected;
ShellNote *note;
@@ -106,11 +106,9 @@ struct _Shell {
};
struct _DetailView {
- GtkWidget *header;
GtkWidget *scroll;
GtkWidget *view;
-
- GSList *items;
+ GtkWidget *detail_box;
};
struct _ShellTree {
diff --git a/modules/computer.c b/modules/computer.c
index 80d8ba2b..f8adfc38 100644
--- a/modules/computer.c
+++ b/modules/computer.c
@@ -328,7 +328,7 @@ gchar *callback_dev(void)
{
return g_strdup_printf(
"[$ShellParam$]\n"
- "ViewType=0\n"
+ "ViewType=5\n"
"ColumnTitle$TextValue=%s\n" /* Program */
"ColumnTitle$Value=%s\n" /* Version */
"ShowColumnHeaders=true\n"
@@ -512,8 +512,10 @@ gchar *callback_summary(void)
{
struct Info *info = info_new();
+ info_set_view_type(info, SHELL_VIEW_DETAIL);
+
info_add_group(info, _("Computer"),
- info_field_printf(_("Processor"), "%s",
+ info_field(_("Processor"),
module_call_method("devices::getProcessorName")),
info_field_update(_("Memory"), 1000),
info_field_printf(_("Machine Type"), "%s",
@@ -547,6 +549,8 @@ gchar *callback_os(void)
struct Info *info = info_new();
struct InfoField distro = info_field(_("Distribution"), computer->os->distro);
+ info_set_view_type(info, SHELL_VIEW_DETAIL);
+
if (computer->os->distrocode) {
distro = info_field_with_icon(distro,
idle_free(g_strdup_printf("distros/%s.png",
@@ -581,6 +585,8 @@ gchar *callback_security(void)
{
struct Info *info = info_new();
+ info_set_view_type(info, SHELL_VIEW_DETAIL);
+
info_add_group(info, _("HardInfo"),
info_field(_("HardInfo running as"), (getuid() == 0) ? _("Superuser") : _("User")),
info_field_last());
@@ -692,6 +698,9 @@ gchar *callback_display(void)
wl_info *wl = computer->display->wl;
struct Info *info = info_new();
+
+ info_set_view_type(info, SHELL_VIEW_DETAIL);
+
info_add_group(info, _("Session"),
info_field(_("Type"), THISORUNK(computer->display->session_type)),
info_field_last());
diff --git a/modules/devices.c b/modules/devices.c
index ca31f803..f4a716a1 100644
--- a/modules/devices.c
+++ b/modules/devices.c
@@ -627,7 +627,10 @@ gchar *callback_processors()
gchar *callback_dmi()
{
- return g_strdup(dmi_info);
+ return g_strdup_printf("%s"
+ "[$ShellParam$]\n"
+ "ViewType=5\n",
+ dmi_info);
}
gchar *callback_dmi_mem()
@@ -646,6 +649,7 @@ gchar *callback_battery()
{
return g_strdup_printf("%s\n"
"[$ShellParam$]\n"
+ "ViewType=5\n"
"ReloadInterval=4000\n", battery_list);
}
diff --git a/shell/shell.c b/shell/shell.c
index 4a7fe493..d31a3b39 100644
--- a/shell/shell.c
+++ b/shell/shell.c
@@ -35,13 +35,21 @@
#include "callbacks.h"
+struct UpdateTableItem {
+ union {
+ GtkWidget *widget;
+ GtkTreeIter *iter;
+ };
+ gboolean is_iter;
+};
+
/*
* Internal Prototypes ********************************************************
*/
-static void create_window();
+static void create_window(void);
static ShellTree *tree_new(void);
-static ShellInfoTree *info_tree_new(gboolean extra);
+static ShellInfoTree *info_tree_new(void);
static void module_selected(gpointer data);
static void module_selected_show_info(ShellModuleEntry * entry,
@@ -90,7 +98,6 @@ void shell_clear_tree_models(Shell *shell)
{
gtk_tree_store_clear(GTK_TREE_STORE(shell->tree->model));
gtk_tree_store_clear(GTK_TREE_STORE(shell->info_tree->model));
- gtk_tree_store_clear(GTK_TREE_STORE(shell->moreinfo_tree->model));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info_tree->view), FALSE);
}
@@ -662,9 +669,17 @@ void shell_add_modules_to_gui(gpointer _shell_module, gpointer _shell_tree)
}
}
-static void __tree_iter_destroy(gpointer data)
+static void destroy_update_tbl_value(gpointer data)
{
- gtk_tree_iter_free((GtkTreeIter *) data);
+ struct UpdateTableItem *item = data;
+
+ if (item->is_iter) {
+ gtk_tree_iter_free(item->iter);
+ } else {
+ g_object_unref(item->widget);
+ }
+
+ g_free(item);
}
DetailView *detail_view_new(void)
@@ -674,22 +689,18 @@ DetailView *detail_view_new(void)
detail_view = g_new0(DetailView, 1);
detail_view->scroll = gtk_scrolled_window_new(NULL, NULL);
#if GTK_CHECK_VERSION(3, 0, 0)
- detail_view->view = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
+ detail_view->view = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
#else
- detail_view->view = gtk_vbox_new(FALSE, 5);
+ detail_view->view = gtk_vbox_new(FALSE, 0);
#endif
- detail_view->items = NULL;
- gtk_container_set_border_width(GTK_CONTAINER(detail_view->view), 6);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(detail_view->scroll),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
#if GTK_CHECK_VERSION(3, 0, 0)
- gtk_container_add(GTK_CONTAINER(detail_view->scroll),
- detail_view->view);
+ gtk_container_add(GTK_CONTAINER(detail_view->scroll), detail_view->view);
#else
- gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(detail_view->scroll),
- detail_view->view);
+ gtk_scrolled_window_add_with_viewport(
+ GTK_SCROLLED_WINDOW(detail_view->scroll), detail_view->view);
#endif
gtk_widget_show_all(detail_view->scroll);
@@ -725,13 +736,12 @@ void shell_init(GSList * modules)
shell_action_set_property("ReportBugAction", "is-important", TRUE);
shell->tree = tree_new();
- shell->info_tree = info_tree_new(FALSE);
- shell->moreinfo_tree = info_tree_new(TRUE);
+ shell->info_tree = info_tree_new();
shell->loadgraph = load_graph_new(75);
shell->detail_view = detail_view_new();
update_tbl = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, __tree_iter_destroy);
+ g_free, destroy_update_tbl_value);
gtk_box_pack_start(GTK_BOX(shell->hbox), shell->tree->scroll,
FALSE, FALSE, 0);
@@ -739,8 +749,6 @@ void shell_init(GSList * modules)
SHELL_PACK_RESIZE, SHELL_PACK_SHRINK);
gtk_notebook_append_page(GTK_NOTEBOOK(shell->notebook),
- shell->moreinfo_tree->scroll, NULL);
- gtk_notebook_append_page(GTK_NOTEBOOK(shell->notebook),
load_graph_get_framed(shell->loadgraph),
NULL);
gtk_notebook_append_page(GTK_NOTEBOOK(shell->notebook),
@@ -784,48 +792,54 @@ void shell_init(GSList * modules)
static gboolean update_field(gpointer data)
{
ShellFieldUpdate *fu;
- GtkTreeIter *iter;
+ struct UpdateTableItem *item;
- fu = (ShellFieldUpdate *) data;
+ fu = (ShellFieldUpdate *)data;
g_return_val_if_fail(fu != NULL, FALSE);
DEBUG("update_field [%s]", fu->field_name);
- iter = g_hash_table_lookup(update_tbl, fu->field_name);
- if (!iter) {
+ item = g_hash_table_lookup(update_tbl, fu->field_name);
+ if (!item) {
return FALSE;
}
/* if the entry is still selected, update it */
- if (iter && fu->entry->selected && fu->entry->fieldfunc) {
- GtkTreeStore *store = GTK_TREE_STORE(shell->info_tree->model);
- gchar *value = fu->entry->fieldfunc(fu->field_name);
-
- /*
- * this function is also used to feed the load graph when ViewType
- * is SHELL_VIEW_LOAD_GRAPH
- */
- if (shell->view_type == SHELL_VIEW_LOAD_GRAPH &&
- gtk_tree_selection_iter_is_selected(shell->info_tree->selection,
- iter)) {
- load_graph_update(shell->loadgraph, atof(value));
- }
+ if (fu->entry->selected && fu->entry->fieldfunc) {
+ gchar *value = fu->entry->fieldfunc(fu->field_name);
+
+ if (item->is_iter) {
+ /*
+ * this function is also used to feed the load graph when ViewType
+ * is SHELL_VIEW_LOAD_GRAPH
+ */
+ if (shell->view_type == SHELL_VIEW_LOAD_GRAPH &&
+ gtk_tree_selection_iter_is_selected(shell->info_tree->selection,
+ item->iter)) {
+ load_graph_update(shell->loadgraph, atof(value));
+ }
- gtk_tree_store_set(store, iter, INFO_TREE_COL_VALUE, value, -1);
+ GtkTreeStore *store = GTK_TREE_STORE(shell->info_tree->model);
+ gtk_tree_store_set(store, item->iter, INFO_TREE_COL_VALUE, value, -1);
+ } else {
+ GList *children = gtk_container_get_children(GTK_CONTAINER(item->widget));
+ gtk_label_set_markup(GTK_LABEL(children->next->data), value);
+ g_list_free(children);
+ }
- g_free(value);
- return TRUE;
+ g_free(value);
+ return TRUE;
}
if (update_sfusrc) {
- GSList *sfu;
+ GSList *sfu;
- for (sfu = update_sfusrc; sfu; sfu = sfu->next) {
- g_free(sfu->data);
- }
+ for (sfu = update_sfusrc; sfu; sfu = sfu->next) {
+ g_free(sfu->data);
+ }
- g_slist_free(update_sfusrc);
- update_sfusrc = NULL;
+ g_slist_free(update_sfusrc);
+ update_sfusrc = NULL;
}
/* otherwise, cleanup and destroy the timeout */
@@ -835,77 +849,79 @@ static gboolean update_field(gpointer data)
return FALSE;
}
-#define RANGE_SET_VALUE(tree,scrollbar,value) \
- do { \
- GtkRange CONCAT(*range, __LINE__) = GTK_RANGE(GTK_SCROLLED_WINDOW(shell->tree->scroll)->scrollbar); \
- gtk_range_set_value(CONCAT(range, __LINE__), value); \
- gtk_adjustment_value_changed(GTK_ADJUSTMENT(gtk_range_get_adjustment(CONCAT(range, __LINE__)))); \
- } while (0)
-#define RANGE_GET_VALUE(tree,scrollbar) \
- gtk_range_get_value(GTK_RANGE \
- (GTK_SCROLLED_WINDOW(shell->tree->scroll)-> \
- scrollbar))
+#define RANGE_SET_VALUE(tree, scrollbar, value) \
+ do { \
+ GtkRange CONCAT(*range, __LINE__) = \
+ GTK_RANGE(GTK_SCROLLED_WINDOW(shell->tree->scroll)->scrollbar); \
+ gtk_range_set_value(CONCAT(range, __LINE__), value); \
+ gtk_adjustment_value_changed(GTK_ADJUSTMENT( \
+ gtk_range_get_adjustment(CONCAT(range, __LINE__)))); \
+ } while (0)
+#define RANGE_GET_VALUE(tree, scrollbar) \
+ gtk_range_get_value( \
+ GTK_RANGE(GTK_SCROLLED_WINDOW(shell->tree->scroll)->scrollbar))
static gboolean reload_section(gpointer data)
{
- ShellModuleEntry *entry = (ShellModuleEntry *) data;
+ ShellModuleEntry *entry = (ShellModuleEntry *)data;
#if GTK_CHECK_VERSION(2, 14, 0)
GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(shell->window));
#endif
/* if the entry is still selected, update it */
if (entry->selected) {
- GtkTreePath *path = NULL;
- GtkTreeIter iter;
- double pos_info_scroll, pos_more_scroll;
+ GtkTreePath *path = NULL;
+ GtkTreeIter iter;
+ double pos_info_scroll;
+ double pos_detail_scroll;
- /* save current position */
+ /* save current position */
#if GTK_CHECK_VERSION(3, 0, 0)
- /* TODO:GTK3 */
+ /* TODO:GTK3 */
#else
- pos_info_scroll = RANGE_GET_VALUE(info_tree, vscrollbar);
- pos_more_scroll = RANGE_GET_VALUE(moreinfo_tree, vscrollbar);
+ pos_info_scroll = RANGE_GET_VALUE(info_tree, vscrollbar);
+ pos_detail_scroll = RANGE_GET_VALUE(detail_view, vscrollbar);
#endif
- /* avoid drawing the window while we reload */
+ /* avoid drawing the window while we reload */
#if GTK_CHECK_VERSION(2, 14, 0)
- gdk_window_freeze_updates(gdk_window);
+ gdk_window_freeze_updates(gdk_window);
#else
- gdk_window_freeze_updates(shell->window->window);
+ gdk_window_freeze_updates(shell->window->window);
#endif
- /* gets the current selected path */
- if (gtk_tree_selection_get_selected
- (shell->info_tree->selection, &shell->info_tree->model, &iter)) {
- path = gtk_tree_model_get_path(shell->info_tree->model, &iter);
+ /* gets the current selected path */
+ if (gtk_tree_selection_get_selected(shell->info_tree->selection,
+ &shell->info_tree->model, &iter)) {
+ path = gtk_tree_model_get_path(shell->info_tree->model, &iter);
}
- /* update the information, clear the treeview and populate it again */
- module_entry_reload(entry);
- info_selected_show_extra(NULL); /* clears the more info store */
- module_selected_show_info(entry, TRUE);
-
- /* if there was a selection, reselect it */
- if (path) {
- gtk_tree_selection_select_path(shell->info_tree->selection, path);
- gtk_tree_view_set_cursor(GTK_TREE_VIEW(shell->info_tree->view), path, NULL,
- FALSE);
- gtk_tree_path_free(path);
+ /* update the information, clear the treeview and populate it again */
+ module_entry_reload(entry);
+ info_selected_show_extra(NULL); /* clears the more info store */
+ module_selected_show_info(entry, TRUE);
+
+ /* if there was a selection, reselect it */
+ if (path) {
+ gtk_tree_selection_select_path(shell->info_tree->selection, path);
+ gtk_tree_view_set_cursor(GTK_TREE_VIEW(shell->info_tree->view),
+ path, NULL, FALSE);
+ gtk_tree_path_free(path);
} else {
/* restore position */
#if GTK_CHECK_VERSION(3, 0, 0)
- /* TODO:GTK3 */
+ /* TODO:GTK3 */
#else
RANGE_SET_VALUE(info_tree, vscrollbar, pos_info_scroll);
- RANGE_SET_VALUE(moreinfo_tree, vscrollbar, pos_more_scroll);
+ RANGE_SET_VALUE(detail_view, vscrollbar, pos_detail_scroll);
#endif
}
- /* make the window drawable again */
+ /* make the window drawable again */
#if GTK_CHECK_VERSION(2, 14, 0)
- gdk_window_thaw_updates(gdk_window);
+ gdk_window_thaw_updates(gdk_window);
#else
- gdk_window_thaw_updates(shell->window->window);
+ gdk_window_thaw_updates(shell->window->window);
#endif
}
@@ -1009,8 +1025,7 @@ static void set_view_type(ShellViewType viewtype, gboolean reload)
break;
case SHELL_VIEW_DUAL:
gtk_widget_show(shell->info_tree->scroll);
- gtk_widget_show(shell->moreinfo_tree->scroll);
- gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 0);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 1);
gtk_widget_show(shell->notebook);
if (type_changed) {
@@ -1027,7 +1042,7 @@ static void set_view_type(ShellViewType viewtype, gboolean reload)
break;
case SHELL_VIEW_LOAD_GRAPH:
gtk_widget_show(shell->info_tree->scroll);
- gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 1);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 0);
gtk_widget_show(shell->notebook);
load_graph_clear(shell->loadgraph);
@@ -1047,9 +1062,8 @@ static void set_view_type(ShellViewType viewtype, gboolean reload)
break;
case SHELL_VIEW_PROGRESS_DUAL:
gtk_widget_show(shell->notebook);
- gtk_widget_show(shell->moreinfo_tree->scroll);
- gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 0);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 1);
/* fallthrough */
case SHELL_VIEW_PROGRESS:
gtk_widget_show(shell->info_tree->scroll);
@@ -1063,152 +1077,161 @@ static void set_view_type(ShellViewType viewtype, gboolean reload)
gtk_widget_hide(shell->notebook);
break;
case SHELL_VIEW_DETAIL:
- gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 2);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(shell->notebook), 1);
gtk_widget_show(shell->notebook);
gtk_widget_hide(shell->info_tree->scroll);
- gtk_widget_hide(shell->moreinfo_tree->scroll);
}
}
-static void
-group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry,
- const gchar * group, gchar ** keys, gboolean reload)
+static void group_handle_special(GKeyFile *key_file,
+ ShellModuleEntry *entry,
+ const gchar *group,
+ gchar **keys)
{
- if (g_str_equal(group, "$ShellParam$")) {
- gboolean headers_visible = FALSE;
- gint i;
-
- for (i = 0; keys[i]; i++) {
- gchar *key = keys[i];
-
- if (g_str_has_prefix(key, "UpdateInterval")) {
- ShellFieldUpdate *fu = g_new0(ShellFieldUpdate, 1);
- ShellFieldUpdateSource *sfutbl;
- gint ms;
-
- ms = g_key_file_get_integer(key_file, group, key, NULL);
-
- fu->field_name = g_strdup(g_utf8_strchr(key, -1, '$') + 1);
- fu->entry = entry;
-
- sfutbl = g_new0(ShellFieldUpdateSource, 1);
- sfutbl->source_id = g_timeout_add(ms, update_field, fu);
- sfutbl->sfu = fu;
-
- update_sfusrc = g_slist_prepend(update_sfusrc, sfutbl);
- } else if (g_str_equal(key, "NormalizePercentage")) {
- shell->normalize_percentage = g_key_file_get_boolean(key_file, group, key, NULL);
- } else if (g_str_equal(key, "LoadGraphSuffix")) {
- gchar *suffix =
- g_key_file_get_value(key_file, group, key, NULL);
- load_graph_set_data_suffix(shell->loadgraph, suffix);
- g_free(suffix);
- } else if (g_str_equal(key, "ReloadInterval")) {
- gint ms;
-
- ms = g_key_file_get_integer(key_file, group, key, NULL);
-
- g_timeout_add(ms, reload_section, entry);
- } else if (g_str_equal(key, "RescanInterval")) {
- gint ms;
-
- ms = g_key_file_get_integer(key_file, group, key, NULL);
-
- g_timeout_add(ms, rescan_section, entry);
- } else if (g_str_equal(key, "ShowColumnHeaders")) {
- headers_visible = g_key_file_get_boolean(key_file, group, key, NULL);
- } else if (g_str_has_prefix(key, "ColumnTitle")) {
- GtkTreeViewColumn *column = NULL;
- gchar *value, *title = g_utf8_strchr(key, -1, '$') + 1;
-
- value = g_key_file_get_value(key_file, group, key, NULL);
-
- if (g_str_equal(title, "Extra1")) {
- column = shell->info_tree->col_extra1;
- } else if (g_str_equal(title, "Extra2")) {
- column = shell->info_tree->col_extra2;
- } else if (g_str_equal(title, "Value")) {
- column = shell->info_tree->col_value;
- } else if (g_str_equal(title, "TextValue")) {
- column = shell->info_tree->col_textvalue;
- } else if (g_str_equal(title, "Progress")) {
- column = shell->info_tree->col_progress;
- }
+ if (!g_str_equal(group, "$ShellParam$")) {
+ g_warning("Unknown parameter group: ``%s''", group);
+ return;
+ }
- if (column) {
- gtk_tree_view_column_set_title(column, value);
- gtk_tree_view_column_set_visible(column, TRUE);
- }
+ gboolean headers_visible = FALSE;
+ gint i;
- g_free(value);
- } else if (g_str_equal(key, "OrderType")) {
- shell->_order_type = g_key_file_get_integer(key_file,
- group,
- key, NULL);
- } else if (g_str_equal(key, "ViewType")) {
- set_view_type(g_key_file_get_integer(key_file, group,
- key, NULL), reload);
- } else if (g_str_has_prefix(key, "Icon$")) {
- GtkTreeIter *iter;
- const gchar *first_dollar = g_utf8_strchr(key, -1, '$');
-
- iter = g_hash_table_lookup(update_tbl, first_dollar);
- if (!iter && first_dollar) {
- const gchar *second_dollar = g_utf8_strchr(first_dollar + 1, -1, '$');
- if (second_dollar) {
- char *copy = strndupa(first_dollar, second_dollar - first_dollar + 1);
- iter = g_hash_table_lookup(update_tbl, copy);
- }
+ for (i = 0; keys[i]; i++) {
+ gchar *key = keys[i];
+
+ if (g_str_has_prefix(key, "UpdateInterval")) {
+ ShellFieldUpdate *fu = g_new0(ShellFieldUpdate, 1);
+ ShellFieldUpdateSource *sfutbl;
+ gint ms;
+
+ ms = g_key_file_get_integer(key_file, group, key, NULL);
+
+ fu->field_name = g_strdup(g_utf8_strchr(key, -1, '$') + 1);
+ fu->entry = entry;
+
+ sfutbl = g_new0(ShellFieldUpdateSource, 1);
+ sfutbl->source_id = g_timeout_add(ms, update_field, fu);
+ sfutbl->sfu = fu;
+
+ update_sfusrc = g_slist_prepend(update_sfusrc, sfutbl);
+ } else if (g_str_equal(key, "NormalizePercentage")) {
+ shell->normalize_percentage =
+ g_key_file_get_boolean(key_file, group, key, NULL);
+ } else if (g_str_equal(key, "LoadGraphSuffix")) {
+ gchar *suffix = g_key_file_get_value(key_file, group, key, NULL);
+ load_graph_set_data_suffix(shell->loadgraph, suffix);
+ g_free(suffix);
+ } else if (g_str_equal(key, "ReloadInterval")) {
+ gint ms;
+
+ ms = g_key_file_get_integer(key_file, group, key, NULL);
+
+ g_timeout_add(ms, reload_section, entry);
+ } else if (g_str_equal(key, "RescanInterval")) {
+ gint ms;
+
+ ms = g_key_file_get_integer(key_file, group, key, NULL);
+
+ g_timeout_add(ms, rescan_section, entry);
+ } else if (g_str_equal(key, "ShowColumnHeaders")) {
+ headers_visible =
+ g_key_file_get_boolean(key_file, group, key, NULL);
+ } else if (g_str_has_prefix(key, "ColumnTitle")) {
+ GtkTreeViewColumn *column = NULL;
+ gchar *value, *title = g_utf8_strchr(key, -1, '$') + 1;
+
+ value = g_key_file_get_value(key_file, group, key, NULL);
+
+ if (g_str_equal(title, "Extra1")) {
+ column = shell->info_tree->col_extra1;
+ } else if (g_str_equal(title, "Extra2")) {
+ column = shell->info_tree->col_extra2;
+ } else if (g_str_equal(title, "Value")) {
+ column = shell->info_tree->col_value;
+ } else if (g_str_equal(title, "TextValue")) {
+ column = shell->info_tree->col_textvalue;
+ } else if (g_str_equal(title, "Progress")) {
+ column = shell->info_tree->col_progress;
+ }
+
+ if (column) {
+ gtk_tree_view_column_set_title(column, value);
+ gtk_tree_view_column_set_visible(column, TRUE);
+ }
+
+ g_free(value);
+ } else if (g_str_equal(key, "OrderType")) {
+ shell->_order_type =
+ g_key_file_get_integer(key_file, group, key, NULL);
+ } else if (g_str_has_prefix(key, "Icon$")) {
+ struct UpdateTableItem *item;
+ const gchar *first_dollar = g_utf8_strchr(key, -1, '$');
+
+ item = g_hash_table_lookup(update_tbl, first_dollar);
+ if (!item && first_dollar) {
+ const gchar *second_dollar =
+ g_utf8_strchr(first_dollar + 1, -1, '$');
+ if (second_dollar) {
+ char *copy = strndupa(first_dollar,
+ second_dollar - first_dollar + 1);
+ item = g_hash_table_lookup(update_tbl, copy);
}
+ }
- if (iter) {
- gchar *file =
- g_key_file_get_value(key_file, group, key, NULL);
- gtk_tree_store_set(GTK_TREE_STORE(shell->info_tree->model),
- iter, INFO_TREE_COL_PBUF,
- icon_cache_get_pixbuf_at_size(file,
- 22,
- 22),
- -1);
- g_free(file);
- }
- } else if (g_str_equal(key, "Zebra")) {
+ if (item) {
+ gchar *file = g_key_file_get_value(key_file, group, key, NULL);
+ GdkPixbuf *pixbuf = icon_cache_get_pixbuf_at_size(file, 22, 22);
+
+ g_free(file);
+
+ if (item->is_iter) {
+ gtk_tree_store_set(
+ GTK_TREE_STORE(shell->info_tree->model), item->iter,
+ INFO_TREE_COL_PBUF, pixbuf, -1);
+ } else {
+ GList *children = gtk_container_get_children(GTK_CONTAINER(item->widget));
+ gtk_image_set_from_pixbuf(GTK_IMAGE(children->data), pixbuf);
+ gtk_widget_show(GTK_WIDGET(children->data));
+ g_list_free(children);
+ }
+ }
+ } else if (g_str_equal(key, "Zebra")) {
#if GTK_CHECK_VERSION(3, 0, 0)
#else
- gtk_tree_view_set_rules_hint(GTK_TREE_VIEW
- (shell->info_tree->view),
- g_key_file_get_boolean
- (key_file, group, key, NULL));
+ gtk_tree_view_set_rules_hint(
+ GTK_TREE_VIEW(shell->info_tree->view),
+ g_key_file_get_boolean(key_file, group, key, NULL));
#endif
- }
- }
-
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info_tree->view), headers_visible);
- } else {
- g_warning("Unknown parameter group: ``%s''", group);
+ }
}
+
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info_tree->view),
+ headers_visible);
}
-static void group_handle_normal(GKeyFile* key_file, ShellModuleEntry* entry,
- const gchar* group, gchar** keys, gsize ngroups)
+static void group_handle_normal(GKeyFile *key_file,
+ ShellModuleEntry *entry,
+ const gchar *group,
+ gchar **keys,
+ gsize ngroups)
{
GtkTreeIter parent;
- GtkTreeStore* store = GTK_TREE_STORE(shell->info_tree->model);
- gchar* tmp = g_strdup(group);
+ GtkTreeStore *store = GTK_TREE_STORE(shell->info_tree->model);
gint i;
if (ngroups > 1) {
gtk_tree_store_append(store, &parent, NULL);
+ gchar *tmp = g_strdup(group);
strend(tmp, '#');
gtk_tree_store_set(store, &parent, INFO_TREE_COL_NAME, tmp, -1);
g_free(tmp);
}
for (i = 0; keys[i]; i++) {
- gchar* key = keys[i];
- gchar* value;
+ gchar *key = keys[i];
+ gchar *value;
GtkTreeIter child;
value = g_key_file_get_value(key_file, group, key, NULL);
@@ -1217,7 +1240,8 @@ static void 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 {
@@ -1226,47 +1250,55 @@ static void group_handle_normal(GKeyFile* key_file, ShellModuleEntry* entry,
/* FIXME: use g_key_file_get_string_list? */
if (g_utf8_strchr(value, -1, '|')) {
- gchar** columns = g_strsplit(value, "|", 0);
+ gchar **columns = g_strsplit(value, "|", 0);
- gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE, columns[0], -1);
+ 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);
+ 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);
+ 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);
+ gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE, value,
+ -1);
}
strend(key, '#');
if (key_is_flagged(key)) {
- const gchar* name = key_get_name(key);
- gchar* flags = g_strdup(key);
+ const gchar *name = key_get_name(key);
+ gchar *flags = g_strdup(key);
*(strchr(flags + 1, '$') + 1) = 0;
gtk_tree_store_set(store, &child, INFO_TREE_COL_NAME, name,
- INFO_TREE_COL_DATA, flags, -1);
+ INFO_TREE_COL_DATA, flags, -1);
g_free(flags);
} else {
gtk_tree_store_set(store, &child, INFO_TREE_COL_NAME, key,
- INFO_TREE_COL_DATA, NULL, -1);
+ INFO_TREE_COL_DATA, NULL, -1);
}
+ struct UpdateTableItem *item = g_new0(struct UpdateTableItem, 1);
+ item->is_iter = TRUE;
+ item->iter = gtk_tree_iter_copy(&child);
+
const gchar *first_dollar = g_utf8_strchr(key, -1, '$');
if (first_dollar) {
- const gchar *second_dollar = g_utf8_strchr(first_dollar + 1, -1, '$');
- gchar *key_copy = g_strndup(first_dollar, second_dollar - first_dollar + 1);
+ const gchar *second_dollar =
+ g_utf8_strchr(first_dollar + 1, -1, '$');
+ gchar *key_copy =
+ g_strndup(first_dollar, second_dollar - first_dollar + 1);
- g_hash_table_insert(update_tbl, key_copy, gtk_tree_iter_copy(&child));
+ g_hash_table_insert(update_tbl, key_copy, item);
} else {
- g_hash_table_insert(update_tbl, g_strdup(key), gtk_tree_iter_copy(&child));
+ g_hash_table_insert(update_tbl, g_strdup(key), item);
}
}
@@ -1274,36 +1306,6 @@ static void group_handle_normal(GKeyFile* key_file, ShellModuleEntry* entry,
}
}
-static void
-moreinfo_handle_normal(GKeyFile * key_file, gchar * group, gchar ** keys)
-{
- GtkTreeIter parent;
- GtkTreeStore *store = GTK_TREE_STORE(shell->moreinfo_tree->model);
- gint i;
-
- gtk_tree_store_append(store, &parent, NULL);
- gtk_tree_store_set(store, &parent, INFO_TREE_COL_NAME, group, -1);
-
- for (i = 0; keys[i]; i++) {
- gchar *key = keys[i];
- GtkTreeIter child;
- gchar *value;
-
- value = g_key_file_get_value(key_file, group, key, NULL);
-
- if (g_utf8_validate(key, -1, NULL)
- && g_utf8_validate(value, -1, NULL)) {
- strend(key, '#');
-
- gtk_tree_store_append(store, &child, &parent);
- gtk_tree_store_set(store, &child, INFO_TREE_COL_VALUE,
- value, INFO_TREE_COL_NAME, key, -1);
- }
-
- g_free(value);
- }
-}
-
static void update_progress()
{
GtkTreeModel *model = shell->info_tree->model;
@@ -1425,19 +1427,20 @@ select_first_item(gpointer data)
return FALSE;
}
-static gboolean
-select_marked_or_first_item(gpointer data)
+static gboolean select_marked_or_first_item(gpointer data)
{
GtkTreeIter first, it;
gboolean found_selection = FALSE;
gchar *datacol;
- if ( gtk_tree_model_get_iter_first(shell->info_tree->model, &first) ) {
+ if (gtk_tree_model_get_iter_first(shell->info_tree->model, &first)) {
it = first;
- while ( gtk_tree_model_iter_next(shell->info_tree->model, &it) ) {
- gtk_tree_model_get(shell->info_tree->model, &it, INFO_TREE_COL_DATA, &datacol, -1);
+ while (gtk_tree_model_iter_next(shell->info_tree->model, &it)) {
+ gtk_tree_model_get(shell->info_tree->model, &it, INFO_TREE_COL_DATA,
+ &datacol, -1);
if (key_is_highlighted(datacol)) {
- gtk_tree_selection_select_iter(shell->info_tree->selection, &it);
+ gtk_tree_selection_select_iter(shell->info_tree->selection,
+ &it);
found_selection = TRUE;
}
g_free(datacol);
@@ -1449,12 +1452,10 @@ select_marked_or_first_item(gpointer data)
return FALSE;
}
-static void
-module_selected_show_info_list(GKeyFile *key_file,
- ShellModuleEntry *entry,
- gchar **groups,
- gsize ngroups,
- gboolean reload)
+static void module_selected_show_info_list(GKeyFile *key_file,
+ ShellModuleEntry *entry,
+ gchar **groups,
+ gsize ngroups)
{
GtkTreeStore *store = GTK_TREE_STORE(shell->info_tree->model);
gint i;
@@ -1464,36 +1465,151 @@ module_selected_show_info_list(GKeyFile *key_file,
g_object_ref(shell->info_tree->model);
gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info_tree->view), NULL);
- for (i = 0; groups[i]; i++) {
- if (groups[i][0] == '$')
- ngroups--;
- }
-
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info_tree->view), FALSE);
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info_tree->view),
+ FALSE);
for (i = 0; groups[i]; i++) {
- gchar **keys = g_key_file_get_keys(key_file, groups[i], NULL, NULL);
+ gchar **keys = g_key_file_get_keys(key_file, groups[i], NULL, NULL);
- if (groups[i][0] == '$') {
- group_handle_special(key_file, entry, groups[i], keys, reload);
- } else {
- group_handle_normal(key_file, entry, groups[i], keys, ngroups);
- }
+ if (groups[i][0] == '$') {
+ group_handle_special(key_file, entry, groups[i], keys);
+ } else {
+ group_handle_normal(key_file, entry, groups[i], keys, ngroups);
+ }
- g_strfreev(keys);
+ g_strfreev(keys);
}
- /* */
g_object_unref(shell->info_tree->model);
- gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info_tree->view), shell->info_tree->model);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info_tree->view),
+ shell->info_tree->model);
gtk_tree_view_expand_all(GTK_TREE_VIEW(shell->info_tree->view));
+ gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(shell->info_tree->view),
+ ngroups > 1);
+}
- if (ngroups == 1) {
- gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(shell->info_tree->view),
- FALSE);
- } else {
- gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(shell->info_tree->view),
- TRUE);
+static void
+destroy_widget(GtkWidget *widget, gpointer user_data)
+{
+ gtk_widget_destroy(widget);
+}
+
+static void detail_view_clear(DetailView *detail_view)
+{
+ gtk_container_forall(GTK_CONTAINER(shell->detail_view->view),
+ destroy_widget, NULL);
+ RANGE_SET_VALUE(detail_view, vscrollbar, 0.0);
+ RANGE_SET_VALUE(detail_view, hscrollbar, 0.0);
+}
+
+static void module_selected_show_info_detail(GKeyFile *key_file,
+ ShellModuleEntry *entry,
+ gchar **groups)
+{
+ gint i;
+
+ detail_view_clear(shell->detail_view);
+
+ for (i = 0; groups[i]; i++) {
+ gsize nkeys;
+ gchar **keys = g_key_file_get_keys(key_file, groups[i], &nkeys, NULL);
+
+ if (entry && groups[i][0] == '$') {
+ group_handle_special(key_file, entry, groups[i], keys);
+ } else {
+ gchar *tmp = g_strdup_printf("<b>%s</b>", groups[i]);
+ GtkWidget *label = gtk_label_new(tmp);
+ gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+ GtkWidget *frame = gtk_frame_new(NULL);
+ gtk_frame_set_label_widget(GTK_FRAME(frame), label);
+ gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE);
+ g_free(tmp);
+
+ gtk_container_set_border_width(GTK_CONTAINER(frame), 4);
+ gtk_box_pack_start(GTK_BOX(shell->detail_view->view), frame, FALSE,
+ FALSE, 0);
+
+ GtkWidget *table = gtk_table_new(nkeys, 2, FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_container_add(GTK_CONTAINER(frame), table);
+
+ gint j;
+ for (j = 0; keys[j]; j++) {
+ gchar *key;
+ gchar *key_markup;
+ gchar *value =
+ g_key_file_get_value(key_file, groups[i], keys[j], NULL);
+
+ if (entry && entry->fieldfunc && value && g_str_equal(value, "...")) {
+ g_free(value);
+ value = entry->fieldfunc(keys[j]);
+ }
+
+ if (key_is_flagged(keys[j])) {
+ key = g_strdup(key_get_name(keys[j]));
+ } else {
+ key = g_strdup(keys[j]);
+ }
+ strend(key, '#');
+
+ key_markup =
+ g_strdup_printf("<span color=\"#666\">%s</span>", key);
+
+ GtkWidget *key_label = gtk_label_new(key_markup);
+ gtk_label_set_use_markup(GTK_LABEL(key_label), TRUE);
+ gtk_misc_set_alignment(GTK_MISC(key_label), 1.0f, 0.5f);
+
+ GtkWidget *value_label = gtk_label_new(value);
+ gtk_label_set_use_markup(GTK_LABEL(value_label), TRUE);
+ gtk_label_set_selectable(GTK_LABEL(value_label), TRUE);
+#if !GTK_CHECK_VERSION(3, 0, 0)
+ gtk_label_set_line_wrap(GTK_LABEL(value_label), TRUE);
+#endif
+ gtk_misc_set_alignment(GTK_MISC(value_label), 0.0f, 0.5f);
+
+ GtkWidget *value_icon = gtk_image_new();
+
+ GtkWidget *value_box = gtk_hbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(value_box), value_icon, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(value_box), value_label, TRUE, TRUE, 0);
+
+ gtk_widget_show(key_label);
+ gtk_widget_show(value_box);
+ gtk_widget_show(value_label);
+
+ gtk_table_attach(GTK_TABLE(table), key_label, 0, 1, j, j + 1,
+ GTK_FILL, GTK_FILL, 6, 4);
+ gtk_table_attach(GTK_TABLE(table), value_box, 1, 2, j, j + 1,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 4);
+
+ struct UpdateTableItem *item = g_new0(struct UpdateTableItem, 1);
+ item->is_iter = FALSE;
+ item->widget = g_object_ref(value_box);
+
+ const gchar *first_dollar = g_utf8_strchr(keys[j], -1, '$');
+
+ if (first_dollar) {
+ const gchar *second_dollar =
+ g_utf8_strchr(first_dollar + 1, -1, '$');
+ gchar *key_copy =
+ g_strndup(first_dollar, second_dollar - first_dollar + 1);
+
+ g_hash_table_insert(update_tbl, key_copy, item);
+ } else {
+ g_hash_table_insert(update_tbl, g_strdup(key), item);
+ }
+
+ g_free(value);
+ g_free(key);
+ g_free(key_markup);
+ }
+
+ gtk_widget_show(table);
+ gtk_widget_show(label);
+ gtk_widget_show(frame);
+ }
+
+ g_strfreev(keys);
}
}
@@ -1522,7 +1638,16 @@ module_selected_show_info(ShellModuleEntry *entry, gboolean reload)
gchar **groups = g_key_file_get_groups(key_file, &ngroups);
- module_selected_show_info_list(key_file, entry, groups, ngroups, reload);
+ for (i = 0; groups[i]; i++) {
+ if (groups[i][0] == '$')
+ ngroups--;
+ }
+
+ if (shell->view_type == SHELL_VIEW_DETAIL) {
+ module_selected_show_info_detail(key_file, entry, groups);
+ } else {
+ module_selected_show_info_list(key_file, entry, groups, ngroups);
+ }
g_strfreev(groups);
g_key_file_free(key_file);
@@ -1550,38 +1675,21 @@ module_selected_show_info(ShellModuleEntry *entry, gboolean reload)
static void info_selected_show_extra(const gchar *tag)
{
- GtkTreeStore *store;
-
- store = GTK_TREE_STORE(shell->moreinfo_tree->model);
- gtk_tree_store_clear(store);
-
- if (!shell->selected->morefunc)
- return;
-
- if (tag) {
- GKeyFile *key_file = g_key_file_new();
- gchar *key_data = shell->selected->morefunc((gchar *)tag);
- gchar **groups;
- gint i;
-
- g_key_file_load_from_data(key_file, key_data, strlen(key_data), 0,
- NULL);
- groups = g_key_file_get_groups(key_file, NULL);
+ if (!tag || !shell->selected->morefunc)
+ return;
- for (i = 0; groups[i]; i++) {
- gchar *group = groups[i];
- gchar **keys =
- g_key_file_get_keys(key_file, group, NULL, NULL);
+ GKeyFile *key_file = g_key_file_new();
+ gchar *key_data = shell->selected->morefunc((gchar *)tag);
+ gchar **groups;
- moreinfo_handle_normal(key_file, group, keys);
- }
+ g_key_file_load_from_data(key_file, key_data, strlen(key_data), 0, NULL);
+ groups = g_key_file_get_groups(key_file, NULL);
- gtk_tree_view_expand_all(GTK_TREE_VIEW(shell->moreinfo_tree->view));
+ module_selected_show_info_detail(key_file, NULL, groups);
- g_strfreev(groups);
- g_key_file_free(key_file);
- g_free(key_data);
- }
+ g_strfreev(groups);
+ g_key_file_free(key_file);
+ g_free(key_data);
}
static gchar *detail_view_clear_value(gchar *value)
@@ -1635,81 +1743,64 @@ static gchar *detail_view_clear_value(gchar *value)
}
static void detail_view_add_item(DetailView *detail_view,
- gchar *icon,
- gchar *name,
- gchar *value)
+ gchar *icon,
+ gchar *name,
+ gchar *value)
{
- GtkWidget *frame;
- GtkWidget *frame_label_box;
- GtkWidget *frame_image;
- GtkWidget *frame_label;
- GtkWidget *content;
- GtkWidget *alignment;
- gchar *temp;
+ GtkWidget *frame;
+ GtkWidget *frame_label_box;
+ GtkWidget *frame_image;
+ GtkWidget *frame_label;
+ GtkWidget *content;
+ GtkWidget *alignment;
+ gchar *temp;
- temp = detail_view_clear_value(value);
+ temp = detail_view_clear_value(value);
- /* creates the frame */
- frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(frame),
- GTK_SHADOW_NONE);
+ /* creates the frame */
+ frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE);
#if GTK_CHECK_VERSION(3, 0, 0)
- frame_label_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+ frame_label_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
#else
- frame_label_box = gtk_hbox_new(FALSE, 5);
+ frame_label_box = gtk_hbox_new(FALSE, 5);
#endif
- frame_image = icon_cache_get_image(icon);
- frame_label = gtk_label_new(name);
- gtk_label_set_use_markup(GTK_LABEL(frame_label), TRUE);
- gtk_box_pack_start(GTK_BOX(frame_label_box), frame_image, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(frame_label_box), frame_label, FALSE, FALSE, 0);
-
- content = gtk_label_new(temp);
- /* TODO:GTK3 gtk_alignment_new(), etc is deprecated from 3.14 */
+ frame_image = icon_cache_get_image(icon);
+ frame_label = gtk_label_new(name);
+ gtk_label_set_use_markup(GTK_LABEL(frame_label), TRUE);
+ gtk_box_pack_start(GTK_BOX(frame_label_box), frame_image, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(frame_label_box), frame_label, FALSE, FALSE, 0);
+
+ content = gtk_label_new(temp);
+ /* TODO:GTK3 gtk_alignment_new(), etc is deprecated from 3.14 */
#if GTK_CHECK_VERSION(3, 0, 0)
- GtkWidget *frame_box;
- frame_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
- gtk_widget_set_margin_start(GTK_WIDGET(frame_box), 48);
- gtk_box_pack_start(GTK_BOX(frame_box), content, FALSE, FALSE, 0);
- gtk_container_add(GTK_CONTAINER(frame), frame_box);
+ GtkWidget *frame_box;
+ frame_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+ gtk_widget_set_margin_start(GTK_WIDGET(frame_box), 48);
+ gtk_box_pack_start(GTK_BOX(frame_box), content, FALSE, FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(frame), frame_box);
#else
- alignment = gtk_alignment_new(0.5, 0.5, 1, 1);
- gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 48, 0);
- gtk_widget_show(alignment);
- gtk_container_add(GTK_CONTAINER(frame), alignment);
- gtk_misc_set_alignment(GTK_MISC(content), 0.0, 0.5);
- gtk_container_add(GTK_CONTAINER(alignment), content);
+ alignment = gtk_alignment_new(0.5, 0.5, 1, 1);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 48, 0);
+ gtk_widget_show(alignment);
+ gtk_container_add(GTK_CONTAINER(frame), alignment);
+ gtk_misc_set_alignment(GTK_MISC(content), 0.0, 0.5);
+ gtk_container_add(GTK_CONTAINER(alignment), content);
#endif
- gtk_widget_show_all(frame);
- gtk_widget_show_all(frame_label_box);
+ gtk_widget_show_all(frame);
+ gtk_widget_show_all(frame_label_box);
- gtk_frame_set_label_widget(GTK_FRAME(frame), frame_label_box);
+ gtk_frame_set_label_widget(GTK_FRAME(frame), frame_label_box);
- /* pack the item on the detail_view screen */
- gtk_box_pack_start(GTK_BOX(shell->detail_view->view), frame, FALSE, FALSE, 4);
+ /* pack the item on the detail_view screen */
+ gtk_box_pack_start(GTK_BOX(shell->detail_view->view), frame, FALSE, FALSE,
+ 4);
- /* add the item to the list of detail_view items */
- detail_view->items = g_slist_prepend(detail_view->items, frame);
-
- g_free(temp);
+ g_free(temp);
}
-static void detail_view_clear(DetailView *detail_view)
-{
- GSList *item;
-
- for (item = detail_view->items; item; item = item->next) {
- gtk_widget_destroy(GTK_WIDGET(item->data));
- }
-
- g_slist_free(detail_view->items);
- detail_view->items = NULL;
-
- if (detail_view->header) gtk_widget_destroy(detail_view->header);
- detail_view->header = NULL;
-}
static void detail_view_create_header(DetailView *detail_view,
gchar *title)
{
@@ -1727,8 +1818,6 @@ static void detail_view_create_header(DetailView *detail_view,
gtk_box_pack_start(GTK_BOX(shell->detail_view->view), header, FALSE, FALSE, 4);
- detail_view->header = header;
-
g_free(temp);
}
@@ -1793,76 +1882,78 @@ static void module_selected(gpointer data)
ShellModuleEntry *entry;
static ShellModuleEntry *current = NULL;
static gboolean updating = FALSE;
- GtkScrollbar *hscrollbar, *vscrollbar;
+ GtkScrollbar *hscrollbar, *vscrollbar;
- /* Gets the currently selected item on the left-side TreeView; if there is no
- selection, silently return */
+ /* Gets the currently selected item on the left-side TreeView; if there is
+ no selection, silently return */
if (!gtk_tree_selection_get_selected(shelltree->selection, &model, &iter)) {
- return;
+ return;
}
- /* Mark the currently selected module as "unselected"; this is used to kill the
- update timeout. */
+ /* Mark the currently selected module as "unselected"; this is used to kill
+ the update timeout. */
if (current) {
- current->selected = FALSE;
+ current->selected = FALSE;
}
if (updating) {
- return;
+ return;
} else {
- updating = TRUE;
+ updating = TRUE;
}
if (!gtk_tree_model_iter_parent(model, &parent, &iter)) {
memcpy(&parent, &iter, sizeof(iter));
}
- gtk_tree_model_get(model, &parent, TREE_COL_MODULE, &shell->selected_module, -1);
+ gtk_tree_model_get(model, &parent, TREE_COL_MODULE, &shell->selected_module,
+ -1);
/* Get the current selection and shows its related info */
gtk_tree_model_get(model, &iter, TREE_COL_MODULE_ENTRY, &entry, -1);
if (entry && !entry->selected) {
- gchar *title;
+ gchar *title;
- shell_status_set_enabled(TRUE);
- shell_status_update(_("Updating..."));
+ shell_status_set_enabled(TRUE);
+ shell_status_update(_("Updating..."));
- entry->selected = TRUE;
- shell->selected = entry;
- module_selected_show_info(entry, FALSE);
+ entry->selected = TRUE;
+ shell->selected = entry;
+ module_selected_show_info(entry, FALSE);
- info_selected_show_extra(NULL); /* clears the more info store */
- gtk_tree_view_columns_autosize(GTK_TREE_VIEW(shell->info_tree->view));
+ info_selected_show_extra(NULL); /* clears the more info store */
+ gtk_tree_view_columns_autosize(GTK_TREE_VIEW(shell->info_tree->view));
- /* urgh. why don't GTK do this when the model is cleared? */
+ /* urgh. why don't GTK do this when the model is cleared? */
#if GTK_CHECK_VERSION(3, 0, 0)
- /* TODO:GTK3 */
+ /* TODO:GTK3 */
#else
RANGE_SET_VALUE(info_tree, vscrollbar, 0.0);
RANGE_SET_VALUE(info_tree, hscrollbar, 0.0);
- RANGE_SET_VALUE(moreinfo_tree, vscrollbar, 0.0);
- RANGE_SET_VALUE(moreinfo_tree, hscrollbar, 0.0);
+ RANGE_SET_VALUE(detail_view, vscrollbar, 0.0);
+ RANGE_SET_VALUE(detail_view, hscrollbar, 0.0);
#endif
- title = g_strdup_printf("%s - %s", shell->selected_module->name, entry->name);
- shell_set_title(shell, title);
- g_free(title);
+ title = g_strdup_printf("%s - %s", shell->selected_module->name,
+ entry->name);
+ shell_set_title(shell, title);
+ g_free(title);
- shell_action_set_enabled("RefreshAction", TRUE);
- shell_action_set_enabled("CopyAction", TRUE);
+ shell_action_set_enabled("RefreshAction", TRUE);
+ shell_action_set_enabled("CopyAction", TRUE);
- shell_status_update(_("Done."));
- shell_status_set_enabled(FALSE);
+ shell_status_update(_("Done."));
+ shell_status_set_enabled(FALSE);
} else {
- shell_set_title(shell, NULL);
- shell_action_set_enabled("RefreshAction", FALSE);
- shell_action_set_enabled("CopyAction", FALSE);
+ shell_set_title(shell, NULL);
+ shell_action_set_enabled("RefreshAction", FALSE);
+ shell_action_set_enabled("CopyAction", FALSE);
- gtk_tree_store_clear(GTK_TREE_STORE(shell->info_tree->model));
- set_view_type(SHELL_VIEW_NORMAL, FALSE);
+ gtk_tree_store_clear(GTK_TREE_STORE(shell->info_tree->model));
+ set_view_type(SHELL_VIEW_NORMAL, FALSE);
if (shell->selected_module->summaryfunc) {
- shell_show_detail_view();
+ shell_show_detail_view();
}
}
@@ -1889,11 +1980,10 @@ static void info_selected(GtkTreeSelection * ts, gpointer data)
gtk_tree_model_get(model, &parent, INFO_TREE_COL_DATA, &datacol, -1);
mi_tag = key_mi_tag(datacol);
info_selected_show_extra(mi_tag);
- gtk_tree_view_columns_autosize(GTK_TREE_VIEW(shell->moreinfo_tree->view));
g_free(mi_tag);
}
-static ShellInfoTree *info_tree_new(gboolean extra)
+static ShellInfoTree *info_tree_new(void)
{
ShellInfoTree *info;
GtkWidget *treeview, *scroll;
@@ -1980,9 +2070,7 @@ static ShellInfoTree *info_tree_new(gboolean extra)
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
- if (!extra)
- g_signal_connect(G_OBJECT(sel), "changed",
- (GCallback) info_selected, info);
+ g_signal_connect(G_OBJECT(sel), "changed", (GCallback)info_selected, info);
gtk_container_add(GTK_CONTAINER(scroll), treeview);