[PATCH v4 1/2] winemenubuilder: Skip desktop integration for certain associations
Alex Henrie
alexhenrie24 at gmail.com
Mon Jul 6 23:19:37 CDT 2020
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=41275
Signed-off-by: Alex Henrie <alexhenrie24 at 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..183d401b49 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\FileOpenNoIntegration\.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\FileOpenNoIntegration\.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\FileOpenNoIntegration\.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\FileOpenNoIntegration\.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\FileOpenNoIntegration\.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\FileOpenNoIntegration\.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..2c36a598c2 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\FileOpenNoIntegration\.htm,"winebrowser",,"""%11%\winebrowser.exe"" -nohome"
+HKCU,Software\Wine\FileOpenNoIntegration\.html,"winebrowser",,"""%11%\winebrowser.exe"" -nohome"
+HKCU,Software\Wine\FileOpenNoIntegration\.ini,"notepad",,"%11%\notepad.exe %1"
+HKCU,Software\Wine\FileOpenNoIntegration\.pdf,"winebrowser",,"""%11%\winebrowser.exe"" -nohome"
+HKCU,Software\Wine\FileOpenNoIntegration\.rtf,"wordpad",,"""%16422%\Windows NT\Accessories\wordpad.exe"" %1"
+HKCU,Software\Wine\FileOpenNoIntegration\.txt,"notepad",,"%11%\notepad.exe %1"
+HKCU,Software\Wine\FileOpenNoIntegration\.url,"ieframe",,"rundll32.exe ieframe.dll,OpenURL %l"
+HKCU,Software\Wine\FileOpenNoIntegration\.wri,"wordpad",,"""%16422%\Windows NT\Accessories\wordpad.exe"" %1"
+HKCU,Software\Wine\FileOpenNoIntegration\.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..55a8864a90 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 FileOpenNoIntegrationW[] = {
+ 'S','o','f','t','w','a','r','e','\\',
+ 'W','i','n','e','\\',
+ 'F','i','l','e','O','p','e','n','N','o','I','n','t','e','g','r','a','t','i','o','n','\\',0
+ };
+ WCHAR key_path[MAX_PATH];
+ HKEY key;
+ WCHAR program_name[MAX_PATH], *command_to_exclude;
+ DWORD len = ARRAY_SIZE(program_name);
+ DWORD i = 0;
+
+ if (ARRAY_SIZE(FileOpenNoIntegrationW) + lstrlenW(extension) > ARRAY_SIZE(key_path))
+ return FALSE;
+
+ lstrcpyW(key_path, FileOpenNoIntegrationW);
+ lstrcatW(key_path, extension);
+
+ if (RegOpenKeyExW(HKEY_CURRENT_USER, key_path, 0, KEY_QUERY_VALUE, &key) != ERROR_SUCCESS)
+ return FALSE;
+
+ while (RegEnumValueW(key, i, program_name, &len, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+ {
+ command_to_exclude = reg_get_valW(HKEY_CURRENT_USER, key_path, program_name);
+ if (strcmpW(command, command_to_exclude) == 0)
+ {
+ RegCloseKey(key);
+ return TRUE;
+ }
+ len = ARRAY_SIZE(program_name);
+ i++;
+ }
+
+ RegCloseKey(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);
--
2.27.0
More information about the wine-devel
mailing list