diff options
author | Tor Lillqvist <tml@novell.com> | 2005-07-14 19:05:29 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 2005-07-14 19:05:29 +0000 |
commit | 58e89ebd95c60c7ecad267a9a1ae3da31ae33c6b (patch) | |
tree | 857e9873a5ef61ac74720622b5304def2dcf56e0 | |
parent | 636cff35f55978dd106f69cf929bec59c69927c9 (diff) | |
download | gtk+-58e89ebd95c60c7ecad267a9a1ae3da31ae33c6b.tar.gz |
Implement getting the MIME type of a file. Look it up in the Registry. Bug
2005-07-14 Tor Lillqvist <tml@novell.com>
* gtk/gtkfilesystemwin32.c (filename_get_info): Implement getting
the MIME type of a file. Look it up in the Registry. Bug reported
by Hans Oesterholt.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 6 | ||||
-rw-r--r-- | gtk/gtkfilesystemwin32.c | 46 |
4 files changed, 48 insertions, 16 deletions
@@ -1,3 +1,9 @@ +2005-07-14 Tor Lillqvist <tml@novell.com> + + * gtk/gtkfilesystemwin32.c (filename_get_info): Implement getting + the MIME type of a file. Look it up in the Registry. Bug reported + by Hans Oesterholt. + 2005-07-13 Matthias Clasen <mclasen@redhat.com> * gtk/gtkicontheme.c (load_themes): Don't keep the caches diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index a808b32d52..cb190dc92e 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2005-07-14 Tor Lillqvist <tml@novell.com> + + * gtk/gtkfilesystemwin32.c (filename_get_info): Implement getting + the MIME type of a file. Look it up in the Registry. Bug reported + by Hans Oesterholt. + 2005-07-13 Matthias Clasen <mclasen@redhat.com> * gtk/gtkicontheme.c (load_themes): Don't keep the caches diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index a808b32d52..cb190dc92e 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +2005-07-14 Tor Lillqvist <tml@novell.com> + + * gtk/gtkfilesystemwin32.c (filename_get_info): Implement getting + the MIME type of a file. Look it up in the Registry. Bug reported + by Hans Oesterholt. + 2005-07-13 Matthias Clasen <mclasen@redhat.com> * gtk/gtkicontheme.c (load_themes): Don't keep the caches diff --git a/gtk/gtkfilesystemwin32.c b/gtk/gtkfilesystemwin32.c index 6d29ea4edb..15198c0e5c 100644 --- a/gtk/gtkfilesystemwin32.c +++ b/gtk/gtkfilesystemwin32.c @@ -1613,23 +1613,37 @@ filename_get_info (const gchar *filename, } #endif - if ((types & GTK_FILE_INFO_MIME_TYPE) -#if 0 /* it's dead in gtkfilesystemunix.c, too */ - || ((types & GTK_FILE_INFO_ICON) && icon_type == GTK_FILE_ICON_REGULAR) -#endif - ) + if (types & GTK_FILE_INFO_MIME_TYPE) { -#if 0 - const char *mime_type = xdg_mime_get_mime_type_for_file (filename); - gtk_file_info_set_mime_type (info, mime_type); - - if ((types & GTK_FILE_INFO_ICON) && icon_type == GTK_FILE_ICON_REGULAR && - (statbuf.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) && - (strcmp (mime_type, XDG_MIME_TYPE_UNKNOWN) == 0 || - strcmp (mime_type, "application/x-executable") == 0 || - strcmp (mime_type, "application/x-shellscript") == 0)) - gtk_file_info_set_icon_type (info, GTK_FILE_ICON_EXECUTABLE); -#endif + if (g_file_test (filename, G_FILE_TEST_IS_EXECUTABLE)) + gtk_file_info_set_mime_type (info, "application/x-executable"); + else + { + const char *extension = strrchr (filename, '.'); + HKEY key = NULL; + DWORD type, nbytes = 0; + char *value; + + if (extension != NULL && + extension[1] != '\0' && + RegOpenKeyEx (HKEY_CLASSES_ROOT, extension, 0, + KEY_QUERY_VALUE, &key) == ERROR_SUCCESS && + RegQueryValueEx (key, "Content Type", 0, + &type, NULL, &nbytes) == ERROR_SUCCESS && + type == REG_SZ && + (value = g_try_malloc (nbytes + 1)) && + RegQueryValueEx (key, "Content Type", 0, + &type, value, &nbytes) == ERROR_SUCCESS) + { + value[nbytes] = '\0'; + gtk_file_info_set_mime_type (info, value); + g_free (value); + } + else + gtk_file_info_set_mime_type (info, "application/octet-stream"); + if (key != NULL) + RegCloseKey (key); + } } if (types & GTK_FILE_INFO_MODIFICATION_TIME) |