mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 14:43:02 +00:00
[SHELL32] Improve Start-Run Dialog Box Features (#3797) CORE-17351 CORE-16898
Improve performance of Start-Run Dialog Box Options
This will fix:
CORE-17351 'RunDlg fails calling URL without http'
and
CORE-16898 'RunCommand "iexplore" fails to open Wine IE'
Both regressed by 0.4.10-dev-419-g bfcbda227f
This commit is contained in:
parent
76ce08dcec
commit
33c7c91b36
1 changed files with 29 additions and 2 deletions
|
@ -586,6 +586,7 @@ static INT_PTR CALLBACK RunDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARA
|
||||||
INT ic;
|
INT ic;
|
||||||
WCHAR *psz, *pszExpanded, *parent = NULL;
|
WCHAR *psz, *pszExpanded, *parent = NULL;
|
||||||
DWORD cchExpand;
|
DWORD cchExpand;
|
||||||
|
SHELLEXECUTEINFOW sei;
|
||||||
NMRUNFILEDLGW nmrfd;
|
NMRUNFILEDLGW nmrfd;
|
||||||
|
|
||||||
ic = GetWindowTextLengthW(htxt);
|
ic = GetWindowTextLengthW(htxt);
|
||||||
|
@ -595,6 +596,9 @@ static INT_PTR CALLBACK RunDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARA
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZeroMemory(&sei, sizeof(sei));
|
||||||
|
sei.cbSize = sizeof(sei);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allocate a new MRU entry, we need to add two characters
|
* Allocate a new MRU entry, we need to add two characters
|
||||||
* for the terminating "\\1" part, then the NULL character.
|
* for the terminating "\\1" part, then the NULL character.
|
||||||
|
@ -607,6 +611,9 @@ static INT_PTR CALLBACK RunDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARA
|
||||||
}
|
}
|
||||||
|
|
||||||
GetWindowTextW(htxt, psz, ic + 1);
|
GetWindowTextW(htxt, psz, ic + 1);
|
||||||
|
sei.hwnd = hwnd;
|
||||||
|
sei.nShow = SW_SHOWNORMAL;
|
||||||
|
sei.lpFile = psz;
|
||||||
StrTrimW(psz, L" \t");
|
StrTrimW(psz, L" \t");
|
||||||
|
|
||||||
if (wcschr(psz, L'%') != NULL)
|
if (wcschr(psz, L'%') != NULL)
|
||||||
|
@ -635,11 +642,20 @@ static INT_PTR CALLBACK RunDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARA
|
||||||
*/
|
*/
|
||||||
LPCWSTR pszStartDir;
|
LPCWSTR pszStartDir;
|
||||||
if (prfdp->lpstrDirectory)
|
if (prfdp->lpstrDirectory)
|
||||||
|
{
|
||||||
|
sei.lpDirectory = prfdp->lpstrDirectory;
|
||||||
pszStartDir = prfdp->lpstrDirectory;
|
pszStartDir = prfdp->lpstrDirectory;
|
||||||
|
}
|
||||||
else if (prfdp->uFlags & RFF_CALCDIRECTORY)
|
else if (prfdp->uFlags & RFF_CALCDIRECTORY)
|
||||||
|
{
|
||||||
|
sei.lpDirectory = parent = RunDlg_GetParentDir(sei.lpFile);
|
||||||
pszStartDir = parent = RunDlg_GetParentDir(pszExpanded);
|
pszStartDir = parent = RunDlg_GetParentDir(pszExpanded);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
sei.lpDirectory = NULL;
|
||||||
pszStartDir = NULL;
|
pszStartDir = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Hide the dialog for now on, we will show it up in case of retry */
|
/* Hide the dialog for now on, we will show it up in case of retry */
|
||||||
ShowWindow(hwnd, SW_HIDE);
|
ShowWindow(hwnd, SW_HIDE);
|
||||||
|
@ -669,10 +685,21 @@ static INT_PTR CALLBACK RunDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARA
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RF_OK:
|
case RF_OK:
|
||||||
|
/* We use SECL_NO_UI because we don't want to see
|
||||||
|
* errors here, but we will try again below and
|
||||||
|
* there we will output our errors. */
|
||||||
if (SUCCEEDED(ShellExecCmdLine(hwnd, pszExpanded, pszStartDir, SW_SHOWNORMAL, NULL,
|
if (SUCCEEDED(ShellExecCmdLine(hwnd, pszExpanded, pszStartDir, SW_SHOWNORMAL, NULL,
|
||||||
SECL_ALLOW_NONEXE)))
|
SECL_ALLOW_NONEXE | SECL_NO_UI)))
|
||||||
{
|
{
|
||||||
/* Call again GetWindowText in case the contents of the edit box has changed? */
|
/* Call GetWindowText again in case the contents of the edit box have changed. */
|
||||||
|
GetWindowTextW(htxt, psz, ic + 1);
|
||||||
|
FillList(htxt, psz, ic + 2 + 1, FALSE);
|
||||||
|
EndDialog(hwnd, IDOK);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (SUCCEEDED(ShellExecuteExW(&sei)))
|
||||||
|
{
|
||||||
|
/* Call GetWindowText again in case the contents of the edit box have changed. */
|
||||||
GetWindowTextW(htxt, psz, ic + 1);
|
GetWindowTextW(htxt, psz, ic + 1);
|
||||||
FillList(htxt, psz, ic + 2 + 1, FALSE);
|
FillList(htxt, psz, ic + 2 + 1, FALSE);
|
||||||
EndDialog(hwnd, IDOK);
|
EndDialog(hwnd, IDOK);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue