Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=41275 Signed-off-by: Alex Henrie alexhenrie24@gmail.com --- dlls/mshtml/mshtml.inf | 6 +++ loader/wine.inf.in | 10 +++++ programs/winemenubuilder/winemenubuilder.c | 52 +++++++++++++++++++--- 3 files changed, 63 insertions(+), 5 deletions(-)
diff --git a/dlls/mshtml/mshtml.inf b/dlls/mshtml/mshtml.inf index 4a650b444f..956e7d2bf1 100644 --- a/dlls/mshtml/mshtml.inf +++ b/dlls/mshtml/mshtml.inf @@ -111,6 +111,7 @@ HKCR,"giffile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"giffile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"giffile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"giffile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,9" +HKCU,Software\Wine\FileOpenExclusions.gif,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome"
;; GZIP HKCR,"MIME\Database\Content Type\application/x-gzip","Extension",,".gz" @@ -158,6 +159,7 @@ HKCR,"jpegfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"jpegfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"jpegfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,8" +HKCU,Software\Wine\FileOpenExclusions.jpe,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome"
;; JPEG HKCR,"MIME\Database\Content Type\image/jpeg","CLSID",,"%CLSID_HTMLDocument%" @@ -173,6 +175,7 @@ HKCR,"jpegfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"jpegfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"jpegfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,8" +HKCU,Software\Wine\FileOpenExclusions.jpeg,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome"
;; JPG HKCR,".jpg",,2,"jpegfile" @@ -184,6 +187,7 @@ HKCR,"jpegfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"jpegfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"jpegfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,8" +HKCU,Software\Wine\FileOpenExclusions.jpg,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome"
;; MHTML HKCR,"MIME\Database\Content Type\message/rfc822","CLSID",,"%CLSID_MHTMLDocument%" @@ -221,6 +225,7 @@ HKCR,"pjpegfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"pjpegfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"pjpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"pjpegfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,8" +HKCU,Software\Wine\FileOpenExclusions.jfif,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome"
;; PNG HKCR,"MIME\Database\Content Type\image/png","Extension",,".png" @@ -234,6 +239,7 @@ HKCR,"pngfile\shell\open\ddeexec",,,"""file:%%1"",,-1,,,,," HKCR,"pngfile\shell\open\ddeexec\Application",,,"IExplore" HKCR,"pngfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL" ;; HKCR,"pngfile\DefaultIcon",,,"%16422%\Internet Explorer\iexplore.exe,9" +HKCU,Software\Wine\FileOpenExclusions.png,"iexplore",,"""%16422%\Internet Explorer\iexplore.exe"" -nohome"
;; PS HKCR,"MIME\Database\Content Type\application/postscript","Extension",,".ps" diff --git a/loader/wine.inf.in b/loader/wine.inf.in index de0dd4e455..62178f581d 100644 --- a/loader/wine.inf.in +++ b/loader/wine.inf.in @@ -501,6 +501,16 @@ HKCR,MIME\Database\Charset\us-ascii,"AliasForCharset",,iso-8859-1 HKCR,MIME\Database\Charset\visual,"AliasForCharset",,iso-8859-8 HKCR,MIME\Database\Charset\Windows-1254,"AliasForCharset",,iso-8859-9
+HKCU,Software\Wine\FileOpenExclusions.htm,"winebrowser",,"""%11%\winebrowser.exe"" -nohome" +HKCU,Software\Wine\FileOpenExclusions.html,"winebrowser",,"""%11%\winebrowser.exe"" -nohome" +HKCU,Software\Wine\FileOpenExclusions.ini,"notepad",,"%11%\notepad.exe %1" +HKCU,Software\Wine\FileOpenExclusions.pdf,"winebrowser",,"""%11%\winebrowser.exe"" -nohome" +HKCU,Software\Wine\FileOpenExclusions.rtf,"wordpad",,"""%16422%\Windows NT\Accessories\wordpad.exe"" %1" +HKCU,Software\Wine\FileOpenExclusions.txt,"notepad",,"%11%\notepad.exe %1" +HKCU,Software\Wine\FileOpenExclusions.url,"ieframe",,"rundll32.exe ieframe.dll,OpenURL %l" +HKCU,Software\Wine\FileOpenExclusions.wri,"wordpad",,"""%16422%\Windows NT\Accessories\wordpad.exe"" %1" +HKCU,Software\Wine\FileOpenExclusions.xml,"winebrowser",,"""%11%\winebrowser.exe"" -nohome" + [ContentIndex] HKLM,System\CurrentControlSet\Control\ContentIndex\Language\Neutral,"WBreakerClass",,"{369647e0-17b0-11ce-9950-00aa004bbb1f}" HKLM,System\CurrentControlSet\Control\ContentIndex\Language\Neutral,"StemmerClass",,"" diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c index ee53619bb9..ff7b51d4c9 100644 --- a/programs/winemenubuilder/winemenubuilder.c +++ b/programs/winemenubuilder/winemenubuilder.c @@ -2484,6 +2484,44 @@ static BOOL is_extension_banned(LPCWSTR extension) return FALSE; }
+static BOOL on_exclude_list(const WCHAR *extension, const WCHAR *command) +{ + static const WCHAR FileOpenExclusionsW[] = { + 'S','o','f','t','w','a','r','e','\', + 'W','i','n','e','\', + 'F','i','l','e','O','p','e','n','E','x','c','l','u','s','i','o','n','s','\',0 + }; + WCHAR naughty_list_key_path[MAX_PATH]; + HKEY naughty_list_key; + WCHAR program_name[MAX_PATH], *naughty_command; + DWORD len = ARRAY_SIZE(program_name); + DWORD i = 0; + + if (ARRAY_SIZE(FileOpenExclusionsW) + lstrlenW(extension) > ARRAY_SIZE(naughty_list_key_path)) + return FALSE; + + lstrcpyW(naughty_list_key_path, FileOpenExclusionsW); + lstrcatW(naughty_list_key_path, extension); + + if (RegOpenKeyExW(HKEY_CURRENT_USER, naughty_list_key_path, 0, KEY_QUERY_VALUE, &naughty_list_key) != ERROR_SUCCESS) + return FALSE; + + while (RegEnumValueW(naughty_list_key, i, program_name, &len, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) + { + naughty_command = reg_get_valW(HKEY_CURRENT_USER, naughty_list_key_path, program_name); + if (strcmpW(command, naughty_command) == 0) + { + RegCloseKey(naughty_list_key); + return TRUE; + } + len = ARRAY_SIZE(program_name); + i++; + } + + RegCloseKey(naughty_list_key); + return FALSE; +} + static const char* get_special_mime_type(LPCWSTR extension) { static const WCHAR lnkW[] = {'.','l','n','k',0}; @@ -2582,6 +2620,15 @@ static BOOL generate_associations(const char *xdg_data_home, const char *package char *progIdA = NULL; char *mimeProgId = NULL;
+ commandW = assoc_query(ASSOCSTR_COMMAND, extensionW, openW); + if (commandW == NULL) + /* no command => no application is associated */ + goto end; + + if (on_exclude_list(extensionW, commandW)) + /* command is on the exclude list => desktop integration is not desirable */ + goto end; + extensionA = wchars_to_utf8_chars(strlwrW(extensionW)); if (extensionA == NULL) { @@ -2650,11 +2697,6 @@ static BOOL generate_associations(const char *xdg_data_home, const char *package } }
- commandW = assoc_query(ASSOCSTR_COMMAND, extensionW, openW); - if (commandW == NULL) - /* no command => no application is associated */ - goto end; - executableW = assoc_query(ASSOCSTR_EXECUTABLE, extensionW, openW); if (executableW) openWithIconA = extract_icon(executableW, 0, NULL, FALSE);