From 4a7d4da2beed2fea2b374d563b1f513ea4153288 Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Wed, 25 Apr 2007 15:01:14 +0000 Subject: [PATCH] Separate filetype menu item creation from filetypes_init_types() so it can be called without initializing GTK (for non-GUI commands). git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@1478 ea778897-0a13-0410-b9d1-a72fbfd435f5 --- ChangeLog | 7 +++ src/filetypes.c | 155 +++++++++--------------------------------------- src/filetypes.h | 6 +- src/main.c | 32 +++++----- 4 files changed, 57 insertions(+), 143 deletions(-) diff --git a/ChangeLog b/ChangeLog index ed488e37..52f34b6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-04-25 Nick Treleaven + + * src/filetypes.c, src/filetypes.h, src/main.c: + Separate filetype menu item creation from filetypes_init_types() so + it can be called without initializing GTK (for non-GUI commands). + + 2007-04-24 Nick Treleaven * src/search.c: diff --git a/src/filetypes.c b/src/filetypes.c index 1a706581..0206aab8 100644 --- a/src/filetypes.c +++ b/src/filetypes.c @@ -74,11 +74,10 @@ enum }; -static void filetypes_create_menu_item(GtkWidget *menu, gchar *label, filetype *ftype); -static void filetypes_init_build_programs(filetype *ftype); - static GtkWidget *radio_items[GEANY_MAX_FILE_TYPES]; +static void filetypes_create_menu_item(GtkWidget *menu, const gchar *label, filetype *ftype); + // If uid is valid, return corresponding filetype, otherwise NULL. filetype *filetypes_get_from_uid(gint uid) @@ -119,17 +118,21 @@ filetype *filetypes_get_from_uid(gint uid) } -/* inits the filetype array and fill it with the known filetypes - * and create the filetype menu*/ +/* Create the filetype array and fill it with the known filetypes. */ void filetypes_init_types() { - GtkWidget *filetype_menu = lookup_widget(app->window, "set_filetype1_menu"); + filetype_id ft_id; + + for (ft_id = 0; ft_id < GEANY_MAX_FILE_TYPES; ft_id++) + { + filetypes[ft_id] = g_new0(filetype, 1); + filetypes[ft_id]->programs = g_new0(struct build_programs, 1); + filetypes[ft_id]->actions = g_new0(struct build_actions, 1); + } #define C // these macros are only to ease navigation - filetypes[GEANY_FILETYPES_C] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_C]->id = GEANY_FILETYPES_C; filetypes[GEANY_FILETYPES_C]->uid = FILETYPE_UID_C; - filetypes[GEANY_FILETYPES_C]->item = NULL; filetypes[GEANY_FILETYPES_C]->lang = 0; filetypes[GEANY_FILETYPES_C]->name = g_strdup("C"); filetypes[GEANY_FILETYPES_C]->has_tags = TRUE; @@ -139,14 +142,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_C]->comment_open = g_strdup("/*"); filetypes[GEANY_FILETYPES_C]->comment_close = g_strdup("*/"); filetypes[GEANY_FILETYPES_C]->style_func_ptr = styleset_c; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_C]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_C]->title, filetypes[GEANY_FILETYPES_C]); #define CPP - filetypes[GEANY_FILETYPES_CPP] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_CPP]->id = GEANY_FILETYPES_CPP; filetypes[GEANY_FILETYPES_CPP]->uid = FILETYPE_UID_CPP; - filetypes[GEANY_FILETYPES_CPP]->item = NULL; filetypes[GEANY_FILETYPES_CPP]->lang = 1; filetypes[GEANY_FILETYPES_CPP]->name = g_strdup("C++"); filetypes[GEANY_FILETYPES_CPP]->has_tags = TRUE; @@ -157,14 +156,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_CPP]->style_func_ptr = styleset_cpp; filetypes[GEANY_FILETYPES_CPP]->comment_open = g_strdup("//"); filetypes[GEANY_FILETYPES_CPP]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_CPP]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_CPP]->title, filetypes[GEANY_FILETYPES_CPP]); #define D - filetypes[GEANY_FILETYPES_D] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_D]->id = GEANY_FILETYPES_D; filetypes[GEANY_FILETYPES_D]->uid = FILETYPE_UID_D; - filetypes[GEANY_FILETYPES_D]->item = NULL; filetypes[GEANY_FILETYPES_D]->lang = 17; filetypes[GEANY_FILETYPES_D]->name = g_strdup("D"); filetypes[GEANY_FILETYPES_D]->has_tags = TRUE; @@ -174,15 +169,11 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_D]->comment_open = g_strdup("//"); filetypes[GEANY_FILETYPES_D]->comment_close = NULL; filetypes[GEANY_FILETYPES_D]->style_func_ptr = styleset_d; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_D]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_D]->title, filetypes[GEANY_FILETYPES_D]); #define JAVA - filetypes[GEANY_FILETYPES_JAVA] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_JAVA]->id = GEANY_FILETYPES_JAVA; filetypes[GEANY_FILETYPES_JAVA]->name = g_strdup("Java"); filetypes[GEANY_FILETYPES_JAVA]->uid = FILETYPE_UID_JAVA; - filetypes[GEANY_FILETYPES_JAVA]->item = NULL; filetypes[GEANY_FILETYPES_JAVA]->lang = 2; filetypes[GEANY_FILETYPES_JAVA]->has_tags = TRUE; filetypes[GEANY_FILETYPES_JAVA]->title = g_strdup(_("Java source file")); @@ -191,14 +182,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_JAVA]->comment_open = g_strdup("/*"); filetypes[GEANY_FILETYPES_JAVA]->comment_close = g_strdup("*/"); filetypes[GEANY_FILETYPES_JAVA]->style_func_ptr = styleset_java; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_JAVA]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_JAVA]->title, filetypes[GEANY_FILETYPES_JAVA]); #define PAS // to avoid warnings when building under Windows, the symbol PASCAL is there defined - filetypes[GEANY_FILETYPES_PASCAL] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_PASCAL]->id = GEANY_FILETYPES_PASCAL; filetypes[GEANY_FILETYPES_PASCAL]->uid = FILETYPE_UID_PASCAL; - filetypes[GEANY_FILETYPES_PASCAL]->item = NULL; filetypes[GEANY_FILETYPES_PASCAL]->lang = 4; filetypes[GEANY_FILETYPES_PASCAL]->name = g_strdup("Pascal"); filetypes[GEANY_FILETYPES_PASCAL]->has_tags = TRUE; @@ -209,14 +196,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_PASCAL]->style_func_ptr = styleset_pascal; filetypes[GEANY_FILETYPES_PASCAL]->comment_open = g_strdup("{"); filetypes[GEANY_FILETYPES_PASCAL]->comment_close = g_strdup("}"); - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_PASCAL]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_PASCAL]->title, filetypes[GEANY_FILETYPES_PASCAL]); #define ASM - filetypes[GEANY_FILETYPES_ASM] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_ASM]->id = GEANY_FILETYPES_ASM; filetypes[GEANY_FILETYPES_ASM]->uid = FILETYPE_UID_ASM; - filetypes[GEANY_FILETYPES_ASM]->item = NULL; filetypes[GEANY_FILETYPES_ASM]->lang = 9; filetypes[GEANY_FILETYPES_ASM]->name = g_strdup("ASM"); filetypes[GEANY_FILETYPES_ASM]->has_tags = TRUE; @@ -226,14 +209,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_ASM]->style_func_ptr = styleset_asm; filetypes[GEANY_FILETYPES_ASM]->comment_open = g_strdup(";"); filetypes[GEANY_FILETYPES_ASM]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_ASM]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_ASM]->title, filetypes[GEANY_FILETYPES_ASM]); #define FORTRAN - filetypes[GEANY_FILETYPES_FORTRAN] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_FORTRAN]->id = GEANY_FILETYPES_FORTRAN; filetypes[GEANY_FILETYPES_FORTRAN]->uid = FILETYPE_UID_FORTRAN; - filetypes[GEANY_FILETYPES_FORTRAN]->item = NULL; filetypes[GEANY_FILETYPES_FORTRAN]->lang = 18; filetypes[GEANY_FILETYPES_FORTRAN]->name = g_strdup("Fortran"); filetypes[GEANY_FILETYPES_FORTRAN]->has_tags = TRUE; @@ -244,14 +223,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_FORTRAN]->style_func_ptr = styleset_fortran; filetypes[GEANY_FILETYPES_FORTRAN]->comment_open = g_strdup("c"); filetypes[GEANY_FILETYPES_FORTRAN]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_FORTRAN]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_FORTRAN]->title, filetypes[GEANY_FILETYPES_FORTRAN]); #define CAML - filetypes[GEANY_FILETYPES_CAML] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_CAML]->id = GEANY_FILETYPES_CAML; filetypes[GEANY_FILETYPES_CAML]->uid = FILETYPE_UID_CAML; - filetypes[GEANY_FILETYPES_CAML]->item = NULL; filetypes[GEANY_FILETYPES_CAML]->lang = -2; filetypes[GEANY_FILETYPES_CAML]->name = g_strdup("CAML"); filetypes[GEANY_FILETYPES_CAML]->has_tags = FALSE; @@ -261,14 +236,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_CAML]->style_func_ptr = styleset_caml; filetypes[GEANY_FILETYPES_CAML]->comment_open = g_strdup("(*"); filetypes[GEANY_FILETYPES_CAML]->comment_close = g_strdup("*)"); - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_CAML]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_CAML]->title, filetypes[GEANY_FILETYPES_CAML]); #define PERL - filetypes[GEANY_FILETYPES_PERL] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_PERL]->id = GEANY_FILETYPES_PERL; filetypes[GEANY_FILETYPES_PERL]->uid = FILETYPE_UID_PERL; - filetypes[GEANY_FILETYPES_PERL]->item = NULL; filetypes[GEANY_FILETYPES_PERL]->lang = 5; filetypes[GEANY_FILETYPES_PERL]->name = g_strdup("Perl"); filetypes[GEANY_FILETYPES_PERL]->has_tags = TRUE; @@ -279,14 +250,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_PERL]->comment_open = g_strdup("#"); filetypes[GEANY_FILETYPES_PERL]->comment_close = NULL; filetypes[GEANY_FILETYPES_PERL]->style_func_ptr = styleset_perl; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_PERL]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_PERL]->title, filetypes[GEANY_FILETYPES_PERL]); #define PHP - filetypes[GEANY_FILETYPES_PHP] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_PHP]->id = GEANY_FILETYPES_PHP; filetypes[GEANY_FILETYPES_PHP]->uid = FILETYPE_UID_PHP; - filetypes[GEANY_FILETYPES_PHP]->item = NULL; filetypes[GEANY_FILETYPES_PHP]->lang = 6; filetypes[GEANY_FILETYPES_PHP]->name = g_strdup("PHP"); filetypes[GEANY_FILETYPES_PHP]->has_tags = TRUE; @@ -297,14 +264,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_PHP]->style_func_ptr = styleset_php; filetypes[GEANY_FILETYPES_PHP]->comment_open = g_strdup("//"); filetypes[GEANY_FILETYPES_PHP]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_PHP]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_PHP]->title, filetypes[GEANY_FILETYPES_PHP]); #define JAVASCRIPT - filetypes[GEANY_FILETYPES_JS] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_JS]->id = GEANY_FILETYPES_JS; filetypes[GEANY_FILETYPES_JS]->uid = FILETYPE_UID_JS; - filetypes[GEANY_FILETYPES_JS]->item = NULL; filetypes[GEANY_FILETYPES_JS]->lang = 23; filetypes[GEANY_FILETYPES_JS]->name = g_strdup("Javascript"); filetypes[GEANY_FILETYPES_JS]->has_tags = TRUE; @@ -314,14 +277,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_JS]->style_func_ptr = styleset_js; filetypes[GEANY_FILETYPES_JS]->comment_open = g_strdup("//"); filetypes[GEANY_FILETYPES_JS]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_JS]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_JS]->title, filetypes[GEANY_FILETYPES_JS]); #define PYTHON - filetypes[GEANY_FILETYPES_PYTHON] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_PYTHON]->id = GEANY_FILETYPES_PYTHON; filetypes[GEANY_FILETYPES_PYTHON]->uid = FILETYPE_UID_PYTHON; - filetypes[GEANY_FILETYPES_PYTHON]->item = NULL; filetypes[GEANY_FILETYPES_PYTHON]->lang = 7; filetypes[GEANY_FILETYPES_PYTHON]->name = g_strdup("Python"); filetypes[GEANY_FILETYPES_PYTHON]->has_tags = TRUE; @@ -331,14 +290,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_PYTHON]->style_func_ptr = styleset_python; filetypes[GEANY_FILETYPES_PYTHON]->comment_open = g_strdup("#"); filetypes[GEANY_FILETYPES_PYTHON]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_PYTHON]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_PYTHON]->title, filetypes[GEANY_FILETYPES_PYTHON]); #define RUBY - filetypes[GEANY_FILETYPES_RUBY] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_RUBY]->id = GEANY_FILETYPES_RUBY; filetypes[GEANY_FILETYPES_RUBY]->uid = FILETYPE_UID_RUBY; - filetypes[GEANY_FILETYPES_RUBY]->item = NULL; filetypes[GEANY_FILETYPES_RUBY]->lang = 14; filetypes[GEANY_FILETYPES_RUBY]->name = g_strdup("Ruby"); filetypes[GEANY_FILETYPES_RUBY]->has_tags = TRUE; @@ -348,14 +303,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_RUBY]->style_func_ptr = styleset_ruby; filetypes[GEANY_FILETYPES_RUBY]->comment_open = g_strdup("#"); filetypes[GEANY_FILETYPES_RUBY]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_RUBY]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_RUBY]->title, filetypes[GEANY_FILETYPES_RUBY]); #define TCL - filetypes[GEANY_FILETYPES_TCL] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_TCL]->id = GEANY_FILETYPES_TCL; filetypes[GEANY_FILETYPES_TCL]->uid = FILETYPE_UID_TCL; - filetypes[GEANY_FILETYPES_TCL]->item = NULL; filetypes[GEANY_FILETYPES_TCL]->lang = 15; filetypes[GEANY_FILETYPES_TCL]->name = g_strdup("Tcl"); filetypes[GEANY_FILETYPES_TCL]->has_tags = TRUE; @@ -365,14 +316,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_TCL]->style_func_ptr = styleset_tcl; filetypes[GEANY_FILETYPES_TCL]->comment_open = g_strdup("#"); filetypes[GEANY_FILETYPES_TCL]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_TCL]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_TCL]->title, filetypes[GEANY_FILETYPES_TCL]); #define LUA - filetypes[GEANY_FILETYPES_LUA] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_LUA]->id = GEANY_FILETYPES_LUA; filetypes[GEANY_FILETYPES_LUA]->uid = FILETYPE_UID_LUA; - filetypes[GEANY_FILETYPES_LUA]->item = NULL; filetypes[GEANY_FILETYPES_LUA]->lang = 22; filetypes[GEANY_FILETYPES_LUA]->name = g_strdup("Lua"); filetypes[GEANY_FILETYPES_LUA]->has_tags = TRUE; @@ -382,14 +329,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_LUA]->style_func_ptr = styleset_lua; filetypes[GEANY_FILETYPES_LUA]->comment_open = g_strdup("--"); filetypes[GEANY_FILETYPES_LUA]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_LUA]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_LUA]->title, filetypes[GEANY_FILETYPES_LUA]); #define FERITE - filetypes[GEANY_FILETYPES_FERITE] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_FERITE]->id = GEANY_FILETYPES_FERITE; filetypes[GEANY_FILETYPES_FERITE]->uid = FILETYPE_UID_FERITE; - filetypes[GEANY_FILETYPES_FERITE]->item = NULL; filetypes[GEANY_FILETYPES_FERITE]->lang = 19; filetypes[GEANY_FILETYPES_FERITE]->name = g_strdup("Ferite"); filetypes[GEANY_FILETYPES_FERITE]->has_tags = TRUE; @@ -399,14 +342,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_FERITE]->style_func_ptr = styleset_ferite; filetypes[GEANY_FILETYPES_FERITE]->comment_open = g_strdup("/*"); filetypes[GEANY_FILETYPES_FERITE]->comment_close = g_strdup("*/"); - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_FERITE]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_FERITE]->title, filetypes[GEANY_FILETYPES_FERITE]); #define SH - filetypes[GEANY_FILETYPES_SH] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_SH]->id = GEANY_FILETYPES_SH; filetypes[GEANY_FILETYPES_SH]->uid = FILETYPE_UID_SH; - filetypes[GEANY_FILETYPES_SH]->item = NULL; filetypes[GEANY_FILETYPES_SH]->lang = 16; filetypes[GEANY_FILETYPES_SH]->name = g_strdup("Sh"); filetypes[GEANY_FILETYPES_SH]->has_tags = TRUE; @@ -417,14 +356,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_SH]->style_func_ptr = styleset_sh; filetypes[GEANY_FILETYPES_SH]->comment_open = g_strdup("#"); filetypes[GEANY_FILETYPES_SH]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_SH]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_SH]->title, filetypes[GEANY_FILETYPES_SH]); #define MAKE - filetypes[GEANY_FILETYPES_MAKE] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_MAKE]->id = GEANY_FILETYPES_MAKE; filetypes[GEANY_FILETYPES_MAKE]->uid = FILETYPE_UID_MAKE; - filetypes[GEANY_FILETYPES_MAKE]->item = NULL; filetypes[GEANY_FILETYPES_MAKE]->lang = 3; filetypes[GEANY_FILETYPES_MAKE]->name = g_strdup("Make"); filetypes[GEANY_FILETYPES_MAKE]->has_tags = TRUE; @@ -435,14 +370,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_MAKE]->style_func_ptr = styleset_makefile; filetypes[GEANY_FILETYPES_MAKE]->comment_open = g_strdup("#"); filetypes[GEANY_FILETYPES_MAKE]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_MAKE]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_MAKE]->title, filetypes[GEANY_FILETYPES_MAKE]); #define XML - filetypes[GEANY_FILETYPES_XML] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_XML]->id = GEANY_FILETYPES_XML; filetypes[GEANY_FILETYPES_XML]->uid = FILETYPE_UID_XML; - filetypes[GEANY_FILETYPES_XML]->item = NULL; filetypes[GEANY_FILETYPES_XML]->lang = -2; filetypes[GEANY_FILETYPES_XML]->name = g_strdup("XML"); filetypes[GEANY_FILETYPES_XML]->has_tags = FALSE; @@ -453,14 +384,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_XML]->style_func_ptr = styleset_xml; filetypes[GEANY_FILETYPES_XML]->comment_open = g_strdup(""); - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_XML]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_XML]->title, filetypes[GEANY_FILETYPES_XML]); #define DOCBOOK - filetypes[GEANY_FILETYPES_DOCBOOK] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_DOCBOOK]->id = GEANY_FILETYPES_DOCBOOK; filetypes[GEANY_FILETYPES_DOCBOOK]->uid = FILETYPE_UID_DOCBOOK; - filetypes[GEANY_FILETYPES_DOCBOOK]->item = NULL; filetypes[GEANY_FILETYPES_DOCBOOK]->lang = 12; filetypes[GEANY_FILETYPES_DOCBOOK]->name = g_strdup("Docbook"); filetypes[GEANY_FILETYPES_DOCBOOK]->has_tags = TRUE; @@ -470,14 +397,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_DOCBOOK]->style_func_ptr = styleset_docbook; filetypes[GEANY_FILETYPES_DOCBOOK]->comment_open = g_strdup(""); - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_DOCBOOK]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_DOCBOOK]->title, filetypes[GEANY_FILETYPES_DOCBOOK]); #define HTML - filetypes[GEANY_FILETYPES_HTML] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_HTML]->id = GEANY_FILETYPES_HTML; filetypes[GEANY_FILETYPES_HTML]->uid = FILETYPE_UID_HTML; - filetypes[GEANY_FILETYPES_HTML]->item = NULL; filetypes[GEANY_FILETYPES_HTML]->lang = -2; filetypes[GEANY_FILETYPES_HTML]->name = g_strdup("HTML"); filetypes[GEANY_FILETYPES_HTML]->has_tags = FALSE; @@ -488,14 +411,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_HTML]->style_func_ptr = styleset_html; filetypes[GEANY_FILETYPES_HTML]->comment_open = g_strdup(""); - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_HTML]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_HTML]->title, filetypes[GEANY_FILETYPES_HTML]); #define CSS - filetypes[GEANY_FILETYPES_CSS] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_CSS]->id = GEANY_FILETYPES_CSS; filetypes[GEANY_FILETYPES_CSS]->uid = FILETYPE_UID_CSS; - filetypes[GEANY_FILETYPES_CSS]->item = NULL; filetypes[GEANY_FILETYPES_CSS]->lang = 13; filetypes[GEANY_FILETYPES_CSS]->name = g_strdup("CSS"); filetypes[GEANY_FILETYPES_CSS]->has_tags = TRUE; @@ -505,14 +424,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_CSS]->style_func_ptr = styleset_css; filetypes[GEANY_FILETYPES_CSS]->comment_open = g_strdup("/*"); filetypes[GEANY_FILETYPES_CSS]->comment_close = g_strdup("*/"); - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_CSS]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_CSS]->title, filetypes[GEANY_FILETYPES_CSS]); #define SQL - filetypes[GEANY_FILETYPES_SQL] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_SQL]->id = GEANY_FILETYPES_SQL; filetypes[GEANY_FILETYPES_SQL]->uid = FILETYPE_UID_SQL; - filetypes[GEANY_FILETYPES_SQL]->item = NULL; filetypes[GEANY_FILETYPES_SQL]->lang = 11; filetypes[GEANY_FILETYPES_SQL]->name = g_strdup("SQL"); filetypes[GEANY_FILETYPES_SQL]->has_tags = TRUE; @@ -522,14 +437,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_SQL]->style_func_ptr = styleset_sql; filetypes[GEANY_FILETYPES_SQL]->comment_open = g_strdup("/*"); filetypes[GEANY_FILETYPES_SQL]->comment_close = g_strdup("*/"); - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_SQL]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_SQL]->title, filetypes[GEANY_FILETYPES_SQL]); #define LATEX - filetypes[GEANY_FILETYPES_LATEX] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_LATEX]->id = GEANY_FILETYPES_LATEX; filetypes[GEANY_FILETYPES_LATEX]->uid = FILETYPE_UID_LATEX; - filetypes[GEANY_FILETYPES_LATEX]->item = NULL; filetypes[GEANY_FILETYPES_LATEX]->lang = 8; filetypes[GEANY_FILETYPES_LATEX]->name = g_strdup("LaTeX"); filetypes[GEANY_FILETYPES_LATEX]->has_tags = TRUE; @@ -539,14 +450,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_LATEX]->style_func_ptr = styleset_latex; filetypes[GEANY_FILETYPES_LATEX]->comment_open = g_strdup("%"); filetypes[GEANY_FILETYPES_LATEX]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_LATEX]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_LATEX]->title, filetypes[GEANY_FILETYPES_LATEX]); #define OMS - filetypes[GEANY_FILETYPES_OMS] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_OMS]->id = GEANY_FILETYPES_OMS; filetypes[GEANY_FILETYPES_OMS]->uid = FILETYPE_UID_OMS; - filetypes[GEANY_FILETYPES_OMS]->item = NULL; filetypes[GEANY_FILETYPES_OMS]->lang = -2; filetypes[GEANY_FILETYPES_OMS]->name = g_strdup("O-Matrix"); filetypes[GEANY_FILETYPES_OMS]->has_tags = FALSE; @@ -556,14 +463,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_OMS]->style_func_ptr = styleset_oms; filetypes[GEANY_FILETYPES_OMS]->comment_open = g_strdup("#"); filetypes[GEANY_FILETYPES_OMS]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_OMS]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_OMS]->title, filetypes[GEANY_FILETYPES_OMS]); #define VHDL - filetypes[GEANY_FILETYPES_VHDL] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_VHDL]->id = GEANY_FILETYPES_VHDL; filetypes[GEANY_FILETYPES_VHDL]->uid = FILETYPE_UID_VHDL; - filetypes[GEANY_FILETYPES_VHDL]->item = NULL; filetypes[GEANY_FILETYPES_VHDL]->lang = 21; filetypes[GEANY_FILETYPES_VHDL]->name = g_strdup("VHDL"); filetypes[GEANY_FILETYPES_VHDL]->has_tags = TRUE; @@ -573,14 +476,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_VHDL]->style_func_ptr = styleset_vhdl; filetypes[GEANY_FILETYPES_VHDL]->comment_open = g_strdup("--"); filetypes[GEANY_FILETYPES_VHDL]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_VHDL]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_VHDL]->title, filetypes[GEANY_FILETYPES_VHDL]); #define DIFF - filetypes[GEANY_FILETYPES_DIFF] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_DIFF]->id = GEANY_FILETYPES_DIFF; filetypes[GEANY_FILETYPES_DIFF]->uid = FILETYPE_UID_DIFF; - filetypes[GEANY_FILETYPES_DIFF]->item = NULL; filetypes[GEANY_FILETYPES_DIFF]->lang = 20; filetypes[GEANY_FILETYPES_DIFF]->name = g_strdup("Diff"); filetypes[GEANY_FILETYPES_DIFF]->has_tags = TRUE; @@ -590,14 +489,10 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_DIFF]->style_func_ptr = styleset_diff; filetypes[GEANY_FILETYPES_DIFF]->comment_open = g_strdup("#"); filetypes[GEANY_FILETYPES_DIFF]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_DIFF]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_DIFF]->title, filetypes[GEANY_FILETYPES_DIFF]); #define CONF - filetypes[GEANY_FILETYPES_CONF] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_CONF]->id = GEANY_FILETYPES_CONF; filetypes[GEANY_FILETYPES_CONF]->uid = FILETYPE_UID_CONF; - filetypes[GEANY_FILETYPES_CONF]->item = NULL; filetypes[GEANY_FILETYPES_CONF]->lang = 10; filetypes[GEANY_FILETYPES_CONF]->name = g_strdup("Conf"); filetypes[GEANY_FILETYPES_CONF]->has_tags = TRUE; @@ -608,15 +503,11 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_CONF]->style_func_ptr = styleset_conf; filetypes[GEANY_FILETYPES_CONF]->comment_open = g_strdup("#"); filetypes[GEANY_FILETYPES_CONF]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_CONF]); - filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_CONF]->title, filetypes[GEANY_FILETYPES_CONF]); #define ALL - filetypes[GEANY_FILETYPES_ALL] = g_new0(filetype, 1); filetypes[GEANY_FILETYPES_ALL]->id = GEANY_FILETYPES_ALL; filetypes[GEANY_FILETYPES_ALL]->name = g_strdup("None"); filetypes[GEANY_FILETYPES_ALL]->uid = FILETYPE_UID_ALL; - filetypes[GEANY_FILETYPES_ALL]->item = NULL; filetypes[GEANY_FILETYPES_ALL]->lang = -2; filetypes[GEANY_FILETYPES_ALL]->has_tags = FALSE; filetypes[GEANY_FILETYPES_ALL]->title = g_strdup(_("All files")); @@ -625,17 +516,26 @@ void filetypes_init_types() filetypes[GEANY_FILETYPES_ALL]->style_func_ptr = styleset_none; filetypes[GEANY_FILETYPES_ALL]->comment_open = NULL; filetypes[GEANY_FILETYPES_ALL]->comment_close = NULL; - filetypes_init_build_programs(filetypes[GEANY_FILETYPES_ALL]); - filetypes_create_menu_item(filetype_menu, _("None"), filetypes[GEANY_FILETYPES_ALL]); } -/* convenience function - NULLs and zeros struct members */ -static void filetypes_init_build_programs(filetype *ftype) +/* Calls filetypes_init_types() and creates the filetype menu. */ +void filetypes_init() { - ftype->programs = g_new0(struct build_programs, 1); + filetype_id ft_id; + GtkWidget *filetype_menu = lookup_widget(app->window, "set_filetype1_menu"); - ftype->actions = g_new0(struct build_actions, 1); + filetypes_init_types(); + + // Append all filetypes to the filetype menu + for (ft_id = 0; ft_id < GEANY_MAX_FILE_TYPES; ft_id++) + { + filetype *ft = filetypes[ft_id]; + const gchar *title = (ft_id == GEANY_FILETYPES_ALL) ? _("None") : ft->title; + + ft->item = NULL; + filetypes_create_menu_item(filetype_menu, title, ft); + } } @@ -753,10 +653,11 @@ on_filetype_change (GtkMenuItem *menuitem, } -static void filetypes_create_menu_item(GtkWidget *menu, gchar *label, filetype *ftype) +static void filetypes_create_menu_item(GtkWidget *menu, const gchar *label, filetype *ftype) { static GSList *group = NULL; GtkWidget *tmp; + tmp = gtk_radio_menu_item_new_with_label(group, label); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(tmp)); radio_items[ftype->id] = tmp; diff --git a/src/filetypes.h b/src/filetypes.h index 076c6e0c..b1bde880 100644 --- a/src/filetypes.h +++ b/src/filetypes.h @@ -115,8 +115,10 @@ filetype *filetypes[GEANY_MAX_FILE_TYPES]; // If uid is valid, return corresponding filetype, otherwise NULL. filetype *filetypes_get_from_uid(gint uid); -/* inits the filetype array and fill it with the known filetypes - * and create the filetype menu*/ +/* Calls filetypes_init_types() and creates the filetype menu. */ +void filetypes_init(); + +/* Create the filetype array and fill it with the known filetypes. */ void filetypes_init_types(); /* Detect the filetype for document idx, checking for a shebang, then filename extension. */ diff --git a/src/main.c b/src/main.c index 62bed232..8b6daa3a 100644 --- a/src/main.c +++ b/src/main.c @@ -441,12 +441,6 @@ static void parse_command_line_options(gint *argc, gchar ***argv) exit(0); } - if (generate_tags) - { - gboolean ret = symbols_generate_global_tags(*argc, *argv); - - exit(ret); - } app->debug_mode = debug_mode; #ifdef GEANY_DEBUG @@ -461,6 +455,23 @@ static void parse_command_line_options(gint *argc, gchar ***argv) else app->configdir = g_strconcat(GEANY_HOME_DIR, G_DIR_SEPARATOR_S, ".", PACKAGE, NULL); +#ifdef GEANY_DEBUG + if (generate_datafiles) + { + filetypes_init_types(); + configuration_generate_data_files(); // currently only filetype_extensions.conf + exit(0); + } +#endif + if (generate_tags) + { + gboolean ret; + + ret = symbols_generate_global_tags(*argc, *argv); + exit(ret); + } + + #ifdef HAVE_SOCKET socket_info.ignore_socket = ignore_socket; #endif @@ -639,14 +650,7 @@ gint main(gint argc, gchar **argv) keybindings_init(); tools_create_insert_custom_command_menu_items(); notebook_init(); - filetypes_init_types(); -#ifdef GEANY_DEBUG - if (generate_datafiles) - { - configuration_generate_data_files(); - exit(0); - } -#endif + filetypes_init(); templates_init(); document_init_doclist(); configuration_read_filetype_extensions();