SF.net SVN: geany:[5329] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Tue Oct 26 16:02:30 UTC 2010
Revision: 5329
http://geany.svn.sourceforge.net/geany/?rev=5329&view=rev
Author: ntrel
Date: 2010-10-26 16:02:30 +0000 (Tue, 26 Oct 2010)
Log Message:
-----------
Add filetype mimetype field (patch by Colomban Wendling, thanks).
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/filetypes.c
trunk/src/filetypes.h
trunk/src/ui_utils.c
trunk/src/ui_utils.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2010-10-26 15:33:16 UTC (rev 5328)
+++ trunk/ChangeLog 2010-10-26 16:02:30 UTC (rev 5329)
@@ -9,6 +9,8 @@
* src/filetypes.c:
Sort filetypes_by_title last instead of on insertion to prevent
exponential time.
+ * src/ui_utils.h, src/filetypes.c, src/filetypes.h, src/ui_utils.c:
+ Add filetype mimetype field (patch by Colomban Wendling, thanks).
2010-10-25 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/src/filetypes.c
===================================================================
--- trunk/src/filetypes.c 2010-10-26 15:33:16 UTC (rev 5328)
+++ trunk/src/filetypes.c 2010-10-26 16:02:30 UTC (rev 5329)
@@ -95,6 +95,7 @@
ft = filetypes[GEANY_FILETYPES_NONE];
ft->name = g_strdup(_("None"));
ft->title = g_strdup(_("None"));
+ ft->mime_type = g_strdup("text/plain");
ft->group = GEANY_FILETYPE_GROUP_NONE;
#define C
@@ -102,6 +103,7 @@
ft->lang = 0;
ft->name = g_strdup("C");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-csrc");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define CPP
@@ -109,6 +111,7 @@
ft->lang = 1;
ft->name = g_strdup("C++");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-c++src");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define CS
@@ -116,6 +119,7 @@
ft->lang = 25;
ft->name = g_strdup("C#");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-csharp");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define VALA
@@ -123,6 +127,7 @@
ft->lang = 33;
ft->name = g_strdup("Vala");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-vala");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define D
@@ -130,6 +135,7 @@
ft->lang = 17;
ft->name = g_strdup("D");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-dsrc");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define JAVA
@@ -137,6 +143,7 @@
ft->lang = 2;
ft->name = g_strdup("Java");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-java");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define PAS /* to avoid warnings when building under Windows, the symbol PASCAL is there defined */
@@ -144,6 +151,7 @@
ft->lang = 4;
ft->name = g_strdup("Pascal");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-pascal");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define ASM
@@ -151,6 +159,7 @@
ft->lang = 9;
ft->name = g_strdup("ASM");
ft->title = g_strdup_printf(_("%s source file"), "Assembler");
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define BASIC
@@ -158,6 +167,7 @@
ft->lang = 26;
ft->name = g_strdup("FreeBasic");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define FORTRAN
@@ -165,6 +175,7 @@
ft->lang = 18;
ft->name = g_strdup("Fortran");
ft->title = g_strdup_printf(_("%s source file"), "Fortran (F90)");
+ ft->mime_type = g_strdup("text/x-fortran");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define F77
@@ -172,6 +183,7 @@
ft->lang = 30;
ft->name = g_strdup("F77");
ft->title = g_strdup_printf(_("%s source file"), "Fortran (F77)");
+ ft->mime_type = g_strdup("text/x-fortran");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define GLSL
@@ -179,12 +191,14 @@
ft->lang = 31;
ft->name = g_strdup("GLSL");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define CAML
ft = filetypes[GEANY_FILETYPES_CAML];
ft->name = g_strdup("CAML");
ft->title = g_strdup_printf(_("%s source file"), "(O)Caml");
+ ft->mime_type = g_strdup("text/x-ocaml");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define PERL
@@ -192,6 +206,7 @@
ft->lang = 5;
ft->name = g_strdup("Perl");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("application/x-perl");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define PHP
@@ -199,6 +214,7 @@
ft->lang = 6;
ft->name = g_strdup("PHP");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("application/x-php");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define JAVASCRIPT
@@ -206,6 +222,7 @@
ft->lang = 23;
ft->name = g_strdup("Javascript");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("application/javascript");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define PYTHON
@@ -213,6 +230,7 @@
ft->lang = 7;
ft->name = g_strdup("Python");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-python");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define RUBY
@@ -220,6 +238,7 @@
ft->lang = 14;
ft->name = g_strdup("Ruby");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("application/x-ruby");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define TCL
@@ -227,6 +246,7 @@
ft->lang = 15;
ft->name = g_strdup("Tcl");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-tcl");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define LUA
@@ -234,6 +254,7 @@
ft->lang = 22;
ft->name = g_strdup("Lua");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-lua");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define FERITE
@@ -241,6 +262,7 @@
ft->lang = 19;
ft->name = g_strdup("Ferite");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define HASKELL
@@ -248,6 +270,7 @@
ft->lang = 24;
ft->name = g_strdup("Haskell");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-haskell");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define MARKDOWN
@@ -255,6 +278,7 @@
ft->lang = 36;
ft->name = g_strdup("Markdown");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define TXT2TAGS
@@ -262,6 +286,7 @@
ft->lang = 37;
ft->name = g_strdup("Txt2tags");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-txt2tags");
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define ABC
@@ -269,6 +294,7 @@
ft->lang = 38;
ft->name = g_strdup("Abc");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define SH
@@ -276,6 +302,7 @@
ft->lang = 16;
ft->name = g_strdup("Sh");
ft->title = g_strdup(_("Shell script file"));
+ ft->mime_type = g_strdup("application/x-shellscript");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define MAKE
@@ -283,12 +310,14 @@
ft->lang = 3;
ft->name = g_strdup("Make");
ft->title = g_strdup(_("Makefile"));
+ ft->mime_type = g_strdup("text/x-makefile");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define XML
ft = filetypes[GEANY_FILETYPES_XML];
ft->name = g_strdup("XML");
ft->title = g_strdup(_("XML document"));
+ ft->mime_type = g_strdup("application/xml");
ft->group = GEANY_FILETYPE_GROUP_MARKUP;
#define DOCBOOK
@@ -296,6 +325,7 @@
ft->lang = 12;
ft->name = g_strdup("Docbook");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("application/docbook+xml");
ft->group = GEANY_FILETYPE_GROUP_MARKUP;
#define HTML
@@ -303,6 +333,7 @@
ft->lang = 29;
ft->name = g_strdup("HTML");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/html");
ft->group = GEANY_FILETYPE_GROUP_MARKUP;
#define CSS
@@ -310,6 +341,7 @@
ft->lang = 13;
ft->name = g_strdup("CSS");
ft->title = g_strdup(_("Cascading StyleSheet"));
+ ft->mime_type = g_strdup("text/css");
ft->group = GEANY_FILETYPE_GROUP_MARKUP; /* not really markup but fit quite well to HTML */
#define SQL
@@ -317,6 +349,7 @@
ft->lang = 11;
ft->name = g_strdup("SQL");
ft->title = g_strdup(_("SQL Dump file"));
+ ft->mime_type = g_strdup("text/x-sql");
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define LATEX
@@ -324,6 +357,7 @@
ft->lang = 8;
ft->name = g_strdup("LaTeX");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-tex");
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define VHDL
@@ -331,6 +365,7 @@
ft->lang = 21;
ft->name = g_strdup("VHDL");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-vhdl");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define VERILOG
@@ -338,6 +373,7 @@
ft->lang = 39;
ft->name = g_strdup("Verilog");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define DIFF
@@ -345,18 +381,21 @@
ft->lang = 20;
ft->name = g_strdup("Diff");
filetype_make_title(ft, TITLE_FILE);
+ ft->mime_type = g_strdup("text/x-patch");
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define LISP
ft = filetypes[GEANY_FILETYPES_LISP];
ft->name = g_strdup("Lisp");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define ERLANG
ft = filetypes[GEANY_FILETYPES_ERLANG];
ft->name = g_strdup("Erlang");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-erlang");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define CONF
@@ -364,12 +403,14 @@
ft->lang = 10;
ft->name = g_strdup("Conf");
ft->title = g_strdup(_("Config file"));
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define PO
ft = filetypes[GEANY_FILETYPES_PO];
ft->name = g_strdup("Po");
ft->title = g_strdup(_("Gettext translation file"));
+ ft->mime_type = g_strdup("text/x-gettext-translation");
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define HAXE
@@ -377,6 +418,7 @@
ft->lang = 27;
ft->name = g_strdup("Haxe");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define ACTIONSCRIPT
@@ -384,6 +426,7 @@
ft->lang = 34;
ft->name = g_strdup("ActionScript");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("application/ecmascript");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define R
@@ -391,6 +434,7 @@
ft->lang = 40;
ft->name = g_strdup("R");
ft->title = g_strdup_printf(_("%s script file"), "R");
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define REST
@@ -398,6 +442,7 @@
ft->lang = 28;
ft->name = g_strdup("reStructuredText");
filetype_make_title(ft, TITLE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define MATLAB
@@ -405,18 +450,21 @@
ft->lang = 32;
ft->name = g_strdup("Matlab/Octave");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-matlab");
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
#define YAML
ft = filetypes[GEANY_FILETYPES_YAML];
ft->name = g_strdup("YAML");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define CMAKE
ft = filetypes[GEANY_FILETYPES_CMAKE];
ft->name = g_strdup("CMake");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-cmake");
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define NSIS
@@ -424,18 +472,21 @@
ft->lang = 35;
ft->name = g_strdup("NSIS");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_MISC;
#define ADA
ft = filetypes[GEANY_FILETYPES_ADA];
ft->name = g_strdup("Ada");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/x-adasrc");
ft->group = GEANY_FILETYPE_GROUP_COMPILED;
#define FORTH
ft = filetypes[GEANY_FILETYPES_FORTH];
ft->name = g_strdup("Forth");
filetype_make_title(ft, TITLE_SOURCE_FILE);
+ ft->mime_type = g_strdup("text/plain"); /* FIXME */
ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
}
@@ -481,6 +532,9 @@
/* list will be sorted later */
filetypes_by_title = g_slist_prepend(filetypes_by_title, ft);
+
+ if (ft->mime_type)
+ ft->icon = ui_get_mime_icon(ft->mime_type, GTK_ICON_SIZE_MENU);
}
@@ -962,6 +1016,7 @@
g_free(ft->name);
g_free(ft->title);
g_free(ft->extension);
+ g_free(ft->mime_type);
g_free(ft->comment_open);
g_free(ft->comment_close);
g_free(ft->context_action_cmd);
@@ -969,6 +1024,8 @@
g_free(ft->ftdefcmds);
g_free(ft->execcmds);
set_error_regex(ft, NULL);
+ if (ft->icon)
+ g_object_unref(ft->icon);
g_strfreev(ft->pattern);
g_free(ft->priv);
Modified: trunk/src/filetypes.h
===================================================================
--- trunk/src/filetypes.h 2010-10-26 15:33:16 UTC (rev 5328)
+++ trunk/src/filetypes.h 2010-10-26 16:02:30 UTC (rev 5329)
@@ -129,6 +129,8 @@
GeanyFiletypeGroupID group;
gchar *error_regex_string;
GeanyFiletype *lexer_filetype;
+ gchar *mime_type;
+ GdkPixbuf *icon;
struct GeanyFiletypePrivate *priv; /* must be last, append fields before this item */
#ifdef GEANY_PRIVATE
Modified: trunk/src/ui_utils.c
===================================================================
--- trunk/src/ui_utils.c 2010-10-26 15:33:16 UTC (rev 5328)
+++ trunk/src/ui_utils.c 2010-10-26 16:02:30 UTC (rev 5329)
@@ -2453,3 +2453,48 @@
g_signal_stop_emission_by_name(editable, "insert-text");
}
+
+/* gets the icon that applies to a particular MIME type */
+GdkPixbuf *ui_get_mime_icon(const gchar *mime_type, GtkIconSize size)
+{
+ GdkPixbuf *icon = NULL;
+#if defined(HAVE_GIO) && GLIB_CHECK_VERSION(2, 18, 0)
+ gchar *ctype;
+ GIcon *gicon;
+ GtkIconInfo *info;
+ GtkIconTheme *theme;
+ gint real_size;
+
+ g_return_val_if_fail(gtk_icon_size_lookup(size, &real_size, NULL), NULL);
+ gtk_icon_size_lookup(size, &real_size, NULL);
+
+ theme = gtk_icon_theme_get_default();
+ ctype = g_content_type_from_mime_type(mime_type);
+ gicon = g_content_type_get_icon(ctype);
+ info = gtk_icon_theme_lookup_by_gicon(theme, gicon, real_size, 0);
+ g_object_unref(gicon);
+ g_free(ctype);
+
+ if (info)
+ {
+ icon = gtk_icon_info_load_icon(info, NULL);
+ gtk_icon_info_free(info);
+ }
+#else
+ const gchar *stock_id = GTK_STOCK_FILE;
+ GtkIconSet *icon_set;
+
+ if (strstr(mime_type, "directory"))
+ stock_id = GTK_STOCK_DIRECTORY;
+
+ icon_set = gtk_icon_factory_lookup_default(stock_id);
+ if (icon_set)
+ {
+ icon = gtk_icon_set_render_icon(icon_set, gtk_widget_get_default_style(),
+ gtk_widget_get_default_direction(),
+ GTK_STATE_NORMAL, size, NULL, NULL);
+ }
+#endif
+ return icon;
+}
+
Modified: trunk/src/ui_utils.h
===================================================================
--- trunk/src/ui_utils.h 2010-10-26 15:33:16 UTC (rev 5328)
+++ trunk/src/ui_utils.h 2010-10-26 16:02:30 UTC (rev 5329)
@@ -321,4 +321,6 @@
gint ui_get_gtk_settings_integer(const gchar *property_name, gint default_value);
+GdkPixbuf *ui_get_mime_icon(const gchar *mime_type, GtkIconSize size);
+
#endif
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