diff options
| author | Leandro Pereira <leandro@hardinfo.org> | 2019-07-01 21:15:19 -0700 | 
|---|---|---|
| committer | Leandro Pereira <leandro@hardinfo.org> | 2019-07-04 22:01:04 -0700 | 
| commit | e6ba6effee2aaa6713421a011aa2d8e624113c6e (patch) | |
| tree | 9114b5b2f9d479d9f23c40bbc3f39bc987e5f40f /shell | |
| parent | 1cc404f49961300f4b4e5ecbab655ea18b0bb301 (diff) | |
Refactor module_selected_show_info()
This is still *very* messy, but...
The idea here is to change the ViewType as early as possible, because
a new ViewType that isn't related to the treeviews will be introduced.
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/shell.c | 107 | 
1 files changed, 53 insertions, 54 deletions
| diff --git a/shell/shell.c b/shell/shell.c index 42a7bedf..4a7fe493 100644 --- a/shell/shell.c +++ b/shell/shell.c @@ -1073,7 +1073,7 @@ static void set_view_type(ShellViewType viewtype, gboolean reload)  static void  group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry, -		     gchar * group, gchar ** keys, gboolean reload) +		     const gchar * group, gchar ** keys, gboolean reload)  {      if (g_str_equal(group, "$ShellParam$")) {          gboolean headers_visible = FALSE; @@ -1191,7 +1191,7 @@ group_handle_special(GKeyFile * key_file, ShellModuleEntry * entry,  }  static void group_handle_normal(GKeyFile* key_file, ShellModuleEntry* entry, -    gchar* group, gchar** keys, gsize ngroups) +    const gchar* group, gchar** keys, gsize ngroups)  {      GtkTreeIter parent;      GtkTreeStore* store = GTK_TREE_STORE(shell->info_tree->model); @@ -1450,60 +1450,34 @@ select_marked_or_first_item(gpointer data)  }  static void -module_selected_show_info(ShellModuleEntry * entry, gboolean reload) +module_selected_show_info_list(GKeyFile *key_file, +                               ShellModuleEntry *entry, +                               gchar **groups, +                               gsize ngroups, +                               gboolean reload)  { -    GKeyFile *key_file = g_key_file_new(); -    GtkTreeStore *store; -    gchar *key_data, **groups; +    GtkTreeStore *store = GTK_TREE_STORE(shell->info_tree->model);      gint i; -    gsize ngroups; -#if GTK_CHECK_VERSION(2, 14, 0) -    GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(shell->info_tree->view)); -#endif - -    module_entry_scan(entry); -    key_data = module_entry_function(entry); -    /* */ -#if GTK_CHECK_VERSION(2, 14, 0) -	gdk_window_freeze_updates(gdk_window); -#else -    gdk_window_freeze_updates(shell->info_tree->view->window); -#endif +    gtk_tree_store_clear(store);      g_object_ref(shell->info_tree->model);      gtk_tree_view_set_model(GTK_TREE_VIEW(shell->info_tree->view), NULL); -    if (!reload) { -        /* recreate the iter hash table */ -        h_hash_table_remove_all(update_tbl); -    } - -    shell_clear_field_updates(); - -    store = GTK_TREE_STORE(shell->info_tree->model); - -    gtk_tree_store_clear(store); - -    g_key_file_load_from_data(key_file, key_data, strlen(key_data), 0, -			      NULL); -    groups = g_key_file_get_groups(key_file, &ngroups); - -    for (i = 0; groups[i]; i++) +    for (i = 0; groups[i]; i++) {  	if (groups[i][0] == '$')  	    ngroups--; +    } -    set_view_type(SHELL_VIEW_NORMAL, reload);      gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(shell->info_tree->view), FALSE);      for (i = 0; groups[i]; i++) { -	gchar *group = groups[i]; -	gchar **keys = g_key_file_get_keys(key_file, group, NULL, NULL); +	gchar **keys = g_key_file_get_keys(key_file, groups[i], NULL, NULL); -	if (*group == '$') { -	    group_handle_special(key_file, entry, group, keys, reload); +	if (groups[i][0] == '$') { +	    group_handle_special(key_file, entry, groups[i], keys, reload);  	} else { -	    group_handle_normal(key_file, entry, group, keys, ngroups); +	    group_handle_normal(key_file, entry, groups[i], keys, ngroups);  	}  	g_strfreev(keys); @@ -1514,18 +1488,6 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)      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)); -#if GTK_CHECK_VERSION(2, 14, 0) -	gdk_window_thaw_updates(gdk_window); -#else -    gdk_window_thaw_updates(shell->info_tree->view->window); -#endif -    shell_set_note_from_entry(entry); - -    if (shell->view_type == SHELL_VIEW_PROGRESS || shell->view_type == SHELL_VIEW_PROGRESS_DUAL) { -	update_progress(); -    } - -#if GTK_CHECK_VERSION(2,12,0)      if (ngroups == 1) {          gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(shell->info_tree->view),                                           FALSE); @@ -1533,12 +1495,46 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)          gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(shell->info_tree->view),                                           TRUE);      } -#endif +} + +static void +module_selected_show_info(ShellModuleEntry *entry, gboolean reload) +{ +    GdkWindow *gdk_window = gtk_widget_get_window(GTK_WIDGET(shell->info_tree->view)); +    gsize ngroups; +    gint i; + +    gdk_window_freeze_updates(gdk_window); + +    module_entry_scan(entry); +    if (!reload) { +        /* recreate the iter hash table */ +        h_hash_table_remove_all(update_tbl); +    } +    shell_clear_field_updates(); + +    GKeyFile *key_file = g_key_file_new(); +    gchar *key_data = module_entry_function(entry); + +    g_key_file_load_from_data(key_file, key_data, strlen(key_data), 0, NULL); +    set_view_type(g_key_file_get_integer(key_file, "$ShellParam$", +                                         "ViewType", NULL), reload); + +    gchar **groups = g_key_file_get_groups(key_file, &ngroups); + +    module_selected_show_info_list(key_file, entry, groups, ngroups, reload);      g_strfreev(groups);      g_key_file_free(key_file);      g_free(key_data); +    switch (shell->view_type) { +    case SHELL_VIEW_PROGRESS_DUAL: +    case SHELL_VIEW_PROGRESS: +        update_progress(); +        break; +    } +      if (!reload) {          switch (shell->view_type) {          case SHELL_VIEW_DUAL: @@ -1547,6 +1543,9 @@ module_selected_show_info(ShellModuleEntry * entry, gboolean reload)              g_idle_add(select_marked_or_first_item, NULL);          }      } +    shell_set_note_from_entry(entry); + +    gdk_window_thaw_updates(gdk_window);  }  static void info_selected_show_extra(const gchar *tag) | 
