diff --git a/src/mimehandler.c b/src/mimehandler.c index 06a4bbb..c08d900 100644 --- a/src/mimehandler.c +++ b/src/mimehandler.c @@ -194,12 +194,14 @@ static int _can_execute_access_path(String const * path, /* mimehandler_can_open */ +static int _can_open_application(MimeHandler * handler); + int mimehandler_can_open(MimeHandler * handler) { switch(mimehandler_get_type(handler)) { case MIMEHANDLER_TYPE_APPLICATION: - return mimehandler_can_execute(handler); + return _can_open_application(handler); case MIMEHANDLER_TYPE_DIRECTORY: /* let errors be handled by the API user */ return 1; @@ -211,6 +213,28 @@ int mimehandler_can_open(MimeHandler * handler) return 0; } +static int _can_open_application(MimeHandler * handler) +{ + String const * program; + String const * p; + + if(mimehandler_can_execute(handler) == 0) + return 0; + if((program = mimehandler_get_program(handler)) == NULL) + /* XXX should not fail */ + return 0; + for(p = string_find(program, "%"); p != NULL; p = string_find(p, "%")) + switch(*(++p)) + { + case 'f': + case 'F': + case 'u': + case 'U': + return 1; + } + return 0; +} + /* mimehandler_get_categories */ String const ** mimehandler_get_categories(MimeHandler * handler)