Mercurial > audlegacy
diff src/audacious/ui_preferences.c @ 3437:3092a8b3fe34 trunk
Big plugin system changes (part 1 of who knows, it's still a big mess):
- remove plugin_matrix, replacing it with a mowgli.dictionary of all loaded plugins pointing back to their handles
- input_is_enabled() craq -> gboolean plugin::enabled (this craq was pointed out by ccr)
- consolidate a lot of crap in ui_preferences.c (a LOT more to come)
- introduce probably countless loads of bugs and SIGSEGVs.
- you WILL need to recompile plugins after this, and some which do not use C99-style struct initialisers will likely fail to build.
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Fri, 07 Sep 2007 03:20:28 -0500 |
parents | 8e9f1b1a2d84 |
children | 93584d1b3e7e |
line wrap: on
line diff
--- a/src/audacious/ui_preferences.c Fri Sep 07 02:02:53 2007 -0500 +++ b/src/audacious/ui_preferences.c Fri Sep 07 03:20:28 2007 -0500 @@ -213,15 +213,14 @@ GtkTreeModel *model = GTK_TREE_MODEL(data); GtkTreeIter iter; GtkTreePath *path = gtk_tree_path_new_from_string(path_str); - gboolean fixed; gint pluginnr; gchar *filename, *basename; + Plugin *plugin; /*GList *diplist, *tmplist; */ /* get toggled iter */ gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, - PLUGIN_VIEW_COL_ACTIVE, &fixed, PLUGIN_VIEW_COL_ID, &pluginnr, PLUGIN_VIEW_COL_FILENAME, &filename, -1); @@ -229,18 +228,19 @@ basename = g_path_get_basename(filename); g_free(filename); + /* get our plugin */ + plugin = plugin_get_plugin(basename); + /* do something with the value */ - fixed ^= 1; - - g_hash_table_replace(plugin_matrix, basename, GINT_TO_POINTER(fixed)); - /* g_hash_table_foreach(pluginmatrix, (GHFunc) disp_matrix, NULL); */ + plugin->enabled ^= 1; /* set new value */ gtk_list_store_set(GTK_LIST_STORE(model), &iter, - PLUGIN_VIEW_COL_ACTIVE, fixed, -1); + PLUGIN_VIEW_COL_ACTIVE, plugin->enabled, -1); /* clean up */ gtk_tree_path_free(path); + g_free(basename); } @@ -370,10 +370,10 @@ G_CALLBACK(on_output_plugin_cbox_changed), NULL); } - static void -on_input_plugin_view_realize(GtkTreeView * treeview, - gpointer data) +on_plugin_view_realize(GtkTreeView * treeview, + GCallback callback, + gpointer data) { GtkListStore *store; GtkTreeIter iter; @@ -383,10 +383,9 @@ GList *ilist; gchar *description[2]; - InputPlugin *ip; gint id = 0; - gboolean enabled; + GList *list = (GList *) data; store = gtk_list_store_new(PLUGIN_VIEW_N_COLS, G_TYPE_BOOLEAN, G_TYPE_STRING, @@ -401,7 +400,7 @@ renderer = gtk_cell_renderer_toggle_new(); g_signal_connect(renderer, "toggled", - G_CALLBACK(input_plugin_toggle), store); + G_CALLBACK(callback), store); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_set_attributes(column, renderer, "active", PLUGIN_VIEW_COL_ACTIVE, NULL); @@ -435,194 +434,16 @@ gtk_tree_view_append_column(treeview, column); - for (ilist = get_input_list(); ilist; ilist = g_list_next(ilist)) { - ip = INPUT_PLUGIN(ilist->data); - - description[0] = g_strdup(ip->description); - description[1] = g_strdup(ip->filename); - - enabled = input_is_enabled(description[1]); + MOWGLI_ITER_FOREACH(ilist, list) + { + Plugin *plugin = PLUGIN(ilist->data); + + description[0] = g_strdup(plugin->description); + description[1] = g_strdup(plugin->filename); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, - PLUGIN_VIEW_COL_ACTIVE, enabled, - PLUGIN_VIEW_COL_DESC, description[0], - PLUGIN_VIEW_COL_FILENAME, description[1], - PLUGIN_VIEW_COL_ID, id++, -1); - - g_free(description[1]); - g_free(description[0]); - } - - gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store)); -} - - -static void -on_general_plugin_view_realize(GtkTreeView * treeview, - gpointer data) -{ - GtkListStore *store; - GtkTreeIter iter; - - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - - GList *ilist /*, *diplist */ ; - gchar *description[2]; - GeneralPlugin *gp; - gint id = 0; - - gboolean enabled; - - store = gtk_list_store_new(PLUGIN_VIEW_N_COLS, - G_TYPE_BOOLEAN, G_TYPE_STRING, - G_TYPE_STRING, G_TYPE_INT); - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Enabled")); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_spacing(column, 4); - gtk_tree_view_column_set_resizable(column, FALSE); - gtk_tree_view_column_set_fixed_width(column, 50); - - renderer = gtk_cell_renderer_toggle_new(); - g_signal_connect(renderer, "toggled", - G_CALLBACK(general_plugin_toggle), store); - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_set_attributes(column, renderer, "active", - PLUGIN_VIEW_COL_ACTIVE, NULL); - - gtk_tree_view_append_column(treeview, column); - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Description")); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); - gtk_tree_view_column_set_spacing(column, 4); - gtk_tree_view_column_set_resizable(column, TRUE); - - - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(column, renderer, FALSE); - gtk_tree_view_column_set_attributes(column, renderer, - "text", PLUGIN_VIEW_COL_DESC, NULL); - - gtk_tree_view_append_column(treeview, column); - - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Filename")); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); - gtk_tree_view_column_set_spacing(column, 4); - gtk_tree_view_column_set_resizable(column, TRUE); - - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_set_attributes(column, renderer, "text", - PLUGIN_VIEW_COL_FILENAME, NULL); - - gtk_tree_view_append_column(treeview, column); - - for (ilist = get_general_list(); ilist; ilist = g_list_next(ilist)) { - gp = GENERAL_PLUGIN(ilist->data); - - description[0] = g_strdup(gp->description); - description[1] = g_strdup(gp->filename); - - enabled = general_enabled(id); - - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, - PLUGIN_VIEW_COL_ACTIVE, enabled, - PLUGIN_VIEW_COL_DESC, description[0], - PLUGIN_VIEW_COL_FILENAME, description[1], - PLUGIN_VIEW_COL_ID, id++, -1); - - g_free(description[1]); - g_free(description[0]); - } - - gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store)); -} - - -static void -on_vis_plugin_view_realize(GtkTreeView * treeview, - gpointer data) -{ - GtkListStore *store; - GtkTreeIter iter; - - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - - GList *vlist; - gchar *description[2]; - VisPlugin *vp; - gint id = 0; - - gboolean enabled; - - - store = gtk_list_store_new(PLUGIN_VIEW_N_COLS, - G_TYPE_BOOLEAN, G_TYPE_STRING, - G_TYPE_STRING, G_TYPE_INT); - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Enabled")); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_spacing(column, 4); - gtk_tree_view_column_set_resizable(column, FALSE); - gtk_tree_view_column_set_fixed_width(column, 50); - - renderer = gtk_cell_renderer_toggle_new(); - g_signal_connect(renderer, "toggled", - G_CALLBACK(vis_plugin_toggle), store); - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_set_attributes(column, renderer, "active", - PLUGIN_VIEW_COL_ACTIVE, NULL); - - gtk_tree_view_append_column(treeview, column); - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Description")); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); - gtk_tree_view_column_set_spacing(column, 4); - gtk_tree_view_column_set_resizable(column, TRUE); - - - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(column, renderer, FALSE); - gtk_tree_view_column_set_attributes(column, renderer, - "text", PLUGIN_VIEW_COL_DESC, NULL); - - gtk_tree_view_append_column(treeview, column); - - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Filename")); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); - gtk_tree_view_column_set_spacing(column, 4); - gtk_tree_view_column_set_resizable(column, TRUE); - - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_set_attributes(column, renderer, "text", - PLUGIN_VIEW_COL_FILENAME, NULL); - - gtk_tree_view_append_column(treeview, column); - - for (vlist = get_vis_list(); vlist; vlist = g_list_next(vlist)) { - vp = VIS_PLUGIN(vlist->data); - - description[0] = g_strdup(vp->description); - description[1] = g_strdup(vp->filename); - - enabled = vis_enabled(id); - - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, - PLUGIN_VIEW_COL_ACTIVE, enabled, + PLUGIN_VIEW_COL_ACTIVE, plugin->enabled, PLUGIN_VIEW_COL_DESC, description[0], PLUGIN_VIEW_COL_FILENAME, description[1], PLUGIN_VIEW_COL_ID, id++, -1); @@ -635,99 +456,39 @@ } static void -editable_insert_text(GtkEditable * editable, - const gchar * text, - gint * pos) +on_input_plugin_view_realize(GtkTreeView * treeview, + gpointer data) { - gtk_editable_insert_text(editable, text, strlen(text), pos); + on_plugin_view_realize(treeview, G_CALLBACK(input_plugin_toggle), ip_data.input_list); } - static void on_effect_plugin_view_realize(GtkTreeView * treeview, gpointer data) { - GtkListStore *store; - GtkTreeIter iter; - - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - - GList *elist; - gchar *description[2]; - gint id = 0; - - gboolean enabled; - - - store = gtk_list_store_new(PLUGIN_VIEW_N_COLS, - G_TYPE_BOOLEAN, G_TYPE_STRING, - G_TYPE_STRING, G_TYPE_INT); - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Enabled")); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_spacing(column, 4); - gtk_tree_view_column_set_resizable(column, FALSE); - gtk_tree_view_column_set_fixed_width(column, 50); - - renderer = gtk_cell_renderer_toggle_new(); - g_signal_connect(renderer, "toggled", - G_CALLBACK(effect_plugin_toggle), store); - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_set_attributes(column, renderer, "active", - PLUGIN_VIEW_COL_ACTIVE, NULL); - - gtk_tree_view_append_column(treeview, column); - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Description")); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); - gtk_tree_view_column_set_spacing(column, 4); - gtk_tree_view_column_set_resizable(column, TRUE); - - - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(column, renderer, FALSE); - gtk_tree_view_column_set_attributes(column, renderer, - "text", PLUGIN_VIEW_COL_DESC, NULL); - - gtk_tree_view_append_column(treeview, column); - - - column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, _("Filename")); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE); - gtk_tree_view_column_set_spacing(column, 4); - gtk_tree_view_column_set_resizable(column, TRUE); - - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_set_attributes(column, renderer, "text", - PLUGIN_VIEW_COL_FILENAME, NULL); - - gtk_tree_view_append_column(treeview, column); - - for (elist = get_effect_list(); elist; elist = g_list_next(elist)) { - EffectPlugin *ep = EFFECT_PLUGIN(elist->data); - - description[0] = g_strdup(ep->description); - description[1] = g_strdup(ep->filename); - - enabled = effect_enabled(id); - - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, - PLUGIN_VIEW_COL_ACTIVE, enabled, - PLUGIN_VIEW_COL_DESC, description[0], - PLUGIN_VIEW_COL_FILENAME, description[1], - PLUGIN_VIEW_COL_ID, id++, -1); - - g_free(description[1]); - g_free(description[0]); - } - - gtk_tree_view_set_model(treeview, GTK_TREE_MODEL(store)); + on_plugin_view_realize(treeview, G_CALLBACK(effect_plugin_toggle), ep_data.effect_list); +} + +static void +on_general_plugin_view_realize(GtkTreeView * treeview, + gpointer data) +{ + on_plugin_view_realize(treeview, G_CALLBACK(general_plugin_toggle), gp_data.general_list); +} + +static void +on_vis_plugin_view_realize(GtkTreeView * treeview, + gpointer data) +{ + on_plugin_view_realize(treeview, G_CALLBACK(vis_plugin_toggle), vp_data.vis_list); +} + +static void +editable_insert_text(GtkEditable * editable, + const gchar * text, + gint * pos) +{ + gtk_editable_insert_text(editable, text, strlen(text), pos); } static void