From 0b50919e2374fa272581da16d3817108b624aae3 Mon Sep 17 00:00:00 2001 From: DarkWyrm Date: Wed, 9 Jun 2010 14:37:00 +0000 Subject: [PATCH] Make FileTypes edit resources on resource files and not just applications git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37071 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/preferences/filetypes/FileTypes.cpp | 20 +++++++++++++++++++- src/preferences/filetypes/FileTypes.h | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/preferences/filetypes/FileTypes.cpp b/src/preferences/filetypes/FileTypes.cpp index b9f6eb36e0..23f2da9a70 100644 --- a/src/preferences/filetypes/FileTypes.cpp +++ b/src/preferences/filetypes/FileTypes.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -228,7 +229,7 @@ FileTypes::RefsReceived(BMessage *message) continue; } - if (!is_application(file)) { + if (!is_application(file) && !is_resource(file)) { if (entry.GetRef(&ref) == B_OK) message->ReplaceRef("refs", index - 1, &ref); continue; @@ -453,6 +454,23 @@ is_application(BFile& file) } +bool +is_resource(BFile& file) +{ + BResources resources(&file); + if (resources.InitCheck() != B_OK) + return false; + + BNodeInfo nodeInfo(&file); + char type[B_MIME_TYPE_LENGTH]; + if (nodeInfo.GetType(type) != B_OK + || strcasecmp(type, B_RESOURCE_MIME_TYPE)) + return false; + + return true; +} + + void error_alert(const char* message, status_t status, alert_type type) { diff --git a/src/preferences/filetypes/FileTypes.h b/src/preferences/filetypes/FileTypes.h index c7268340c8..f0204d3de8 100644 --- a/src/preferences/filetypes/FileTypes.h +++ b/src/preferences/filetypes/FileTypes.h @@ -30,6 +30,7 @@ static const uint32 kMsgSettingsChanged = 'SeCh'; // exported functions extern bool is_application(BFile& file); +extern bool is_resource(BFile& file); extern void error_alert(const char* message, status_t status = B_OK, alert_type type = B_WARNING_ALERT);