SF.net SVN: geany:[3672] branches/reorder-filetypes
ntrel at users.sourceforge.net
ntrel at xxxxx
Tue Mar 31 14:32:06 UTC 2009
Revision: 3672
http://geany.svn.sourceforge.net/geany/?rev=3672&view=rev
Author: ntrel
Date: 2009-03-31 14:32:03 +0000 (Tue, 31 Mar 2009)
Log Message:
-----------
Fix sorting filetype template menu items.
Add foreach_slist() macro.
Make sorted_filetypes list public, and include None filetype first.
Rename filetypes_foreach_sorted() to filetypes_foreach_named() to
show it doesn't include the None filetype.
Modified Paths:
--------------
branches/reorder-filetypes/ChangeLog
branches/reorder-filetypes/src/dialogs.c
branches/reorder-filetypes/src/filetypes.c
branches/reorder-filetypes/src/filetypes.h
branches/reorder-filetypes/src/templates.c
branches/reorder-filetypes/src/utils.h
Modified: branches/reorder-filetypes/ChangeLog
===================================================================
--- branches/reorder-filetypes/ChangeLog 2009-03-30 18:46:37 UTC (rev 3671)
+++ branches/reorder-filetypes/ChangeLog 2009-03-31 14:32:03 UTC (rev 3672)
@@ -1,3 +1,14 @@
+2009-03-31 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/templates.c, src/utils.h, src/dialogs.c, src/filetypes.c,
+ src/filetypes.h:
+ Fix sorting filetype template menu items.
+ Add foreach_slist() macro.
+ Make sorted_filetypes list public, and include None filetype first.
+ Rename filetypes_foreach_sorted() to filetypes_foreach_named() to
+ show it doesn't include the None filetype.
+
+
2009-03-27 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* src/dialogs.c, src/filetypes.c, src/filetypes.h:
Modified: branches/reorder-filetypes/src/dialogs.c
===================================================================
--- branches/reorder-filetypes/src/dialogs.c 2009-03-30 18:46:37 UTC (rev 3671)
+++ branches/reorder-filetypes/src/dialogs.c 2009-03-31 14:32:03 UTC (rev 3672)
@@ -237,7 +237,7 @@
/* now create meta filter "All Source" */
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(ui_widgets.open_filesel),
filetypes_create_file_filter_all_source());
- filetypes_foreach_sorted(add_opendlg_filetype, filetype_combo);
+ filetypes_foreach_named(add_opendlg_filetype, filetype_combo);
gtk_combo_box_set_active(GTK_COMBO_BOX(filetype_combo), 0);
/* fill encoding combo box */
Modified: branches/reorder-filetypes/src/filetypes.c
===================================================================
--- branches/reorder-filetypes/src/filetypes.c 2009-03-30 18:46:37 UTC (rev 3671)
+++ branches/reorder-filetypes/src/filetypes.c 2009-03-31 14:32:03 UTC (rev 3672)
@@ -67,11 +67,11 @@
GPtrArray *filetypes_array = NULL; /* Dynamic array of filetype pointers */
-GHashTable *filetypes_hash = NULL; /* Hash of filetype pointers based on name keys */
+static GHashTable *filetypes_hash = NULL; /* Hash of filetype pointers based on name keys */
-/* List of filetype pointers sorted by name, without ft[GEANY_FILETYPES_NONE], as this
+/* List of filetype pointers sorted by name, with ft[GEANY_FILETYPES_NONE] first, as this
* is usually treated specially. */
-static GSList *sorted_filetypes = NULL;
+GSList *sorted_filetypes = NULL;
static void create_radio_menu_item(GtkWidget *menu, GeanyFiletype *ftype);
@@ -596,6 +596,11 @@
{
const GeanyFiletype *ft1 = pft1, *ft2 = pft2;
+ if (ft1->id == GEANY_FILETYPES_NONE)
+ return -1;
+ if (ft2->id == GEANY_FILETYPES_NONE)
+ return 1;
+
return utils_str_casecmp(ft1->title, ft2->title);
}
@@ -611,8 +616,7 @@
g_ptr_array_add(filetypes_array, ft);
g_hash_table_insert(filetypes_hash, ft->name, ft);
- if (ft->id != GEANY_FILETYPES_NONE)
- sorted_filetypes = g_slist_insert_sorted(sorted_filetypes, ft, cmp_filetype);
+ sorted_filetypes = g_slist_insert_sorted(sorted_filetypes, ft, cmp_filetype);
}
@@ -661,7 +665,7 @@
}
-static GtkWidget *group_menus[GEANY_FILETYPE_GROUP_COUNT];
+static GtkWidget *group_menus[GEANY_FILETYPE_GROUP_COUNT] = {NULL};
static void create_sub_menu(GtkWidget *parent, gsize group_id, const gchar *title)
{
@@ -694,7 +698,7 @@
create_sub_menu(filetype_menu, GEANY_FILETYPE_GROUP_MISC, _("M_iscellaneous Languages"));
/* Append all filetypes to the filetype menu */
- filetypes_foreach_sorted(add_ft_menu_item, NULL);
+ filetypes_foreach_named(add_ft_menu_item, NULL);
create_radio_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_NONE]);
}
@@ -1476,11 +1480,15 @@
/* Does not include ft[GEANY_FILETYPES_NONE], as this is usually treated specially. */
-void filetypes_foreach_sorted(GFunc callback, gpointer user_data)
+void filetypes_foreach_named(GFunc callback, gpointer user_data)
{
- GSList *item;
+ GSList *node;
+ GeanyFiletype *ft;
- for (item = sorted_filetypes; item != NULL; item = g_slist_next(item))
- callback(item->data, user_data);
+ foreach_slist(ft, node, sorted_filetypes)
+ {
+ if (ft->id != GEANY_FILETYPES_NONE)
+ callback(ft, user_data);
+ }
}
Modified: branches/reorder-filetypes/src/filetypes.h
===================================================================
--- branches/reorder-filetypes/src/filetypes.h 2009-03-30 18:46:37 UTC (rev 3671)
+++ branches/reorder-filetypes/src/filetypes.h 2009-03-31 14:32:03 UTC (rev 3672)
@@ -144,10 +144,12 @@
* Example: filetypes[GEANY_FILETYPES_C]->name = ...; */
#define filetypes ((GeanyFiletype **)filetypes_array->pdata)
+extern GSList *sorted_filetypes;
+
GeanyFiletype *filetypes_lookup_by_name(const gchar *name);
-void filetypes_foreach_sorted(GFunc callback, gpointer user_data);
+void filetypes_foreach_named(GFunc callback, gpointer user_data);
GeanyFiletype *filetypes_find(GCompareFunc predicate, gpointer user_data);
Modified: branches/reorder-filetypes/src/templates.c
===================================================================
--- branches/reorder-filetypes/src/templates.c 2009-03-30 18:46:37 UTC (rev 3671)
+++ branches/reorder-filetypes/src/templates.c 2009-03-31 14:32:03 UTC (rev 3672)
@@ -362,12 +362,13 @@
/* template items for the new file menu */
static void create_new_menu_items(void)
{
- filetype_id ft_id;
+ GeanyFiletype *ft;
+ GSList *node;
- for (ft_id = 0; ft_id < GEANY_MAX_BUILT_IN_FILETYPES; ft_id++)
+ foreach_slist(ft, node, sorted_filetypes)
{
+ filetype_id ft_id = ft->id;
GtkWidget *tmp_menu, *tmp_button;
- GeanyFiletype *ft = filetypes[ft_id];
const gchar *label = ft->title;
if (ft_templates[ft_id] == NULL)
Modified: branches/reorder-filetypes/src/utils.h
===================================================================
--- branches/reorder-filetypes/src/utils.h 2009-03-30 18:46:37 UTC (rev 3671)
+++ branches/reorder-filetypes/src/utils.h 2009-03-31 14:32:03 UTC (rev 3672)
@@ -57,7 +57,12 @@
for (ptr = ptr_array->pdata, item = *ptr; \
ptr < &ptr_array->pdata[ptr_array->len]; ++ptr, item = *ptr)
+/* @param node should be a (GSList*), needed for implementation. */
+#define foreach_slist(data_ptr, node, list) \
+ for (node = list, data_ptr = node ? node->data : NULL; node != NULL; \
+ node = g_slist_next(node), data_ptr = node ? node->data : NULL)
+
void utils_open_browser(const gchar *uri);
gint utils_get_line_endings(const gchar* buffer, glong size);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list