summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Lillqvist <tml@novell.com>2005-07-14 19:05:29 +0000
committerTor Lillqvist <tml@src.gnome.org>2005-07-14 19:05:29 +0000
commit58e89ebd95c60c7ecad267a9a1ae3da31ae33c6b (patch)
tree857e9873a5ef61ac74720622b5304def2dcf56e0
parent636cff35f55978dd106f69cf929bec59c69927c9 (diff)
downloadgtk+-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--ChangeLog6
-rw-r--r--ChangeLog.pre-2-106
-rw-r--r--ChangeLog.pre-2-86
-rw-r--r--gtk/gtkfilesystemwin32.c46
4 files changed, 48 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index a808b32d52..cb190dc92e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)