From 00f0f539a7518373a2d723d6a82e0e9246fe9f4e Mon Sep 17 00:00:00 2001 From: Sebastian Gasiorek Date: Sun, 11 Dec 2005 15:18:39 +0000 Subject: [PATCH] find applet by name (fixes bug #1063) svn path=/trunk/; revision=20065 --- reactos/lib/shell32/control.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/reactos/lib/shell32/control.c b/reactos/lib/shell32/control.c index 63c541fae3f..bbec1ce5c10 100644 --- a/reactos/lib/shell32/control.c +++ b/reactos/lib/shell32/control.c @@ -352,6 +352,7 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) unsigned sp = 0; LPWSTR extraPmts = NULL; int quoted = 0; + BOOL spSet = FALSE; buffer = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(wszCmd) + 1) * sizeof(*wszCmd)); if (!buffer) return; @@ -366,8 +367,10 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) if (beg) { if (*beg == '@') { sp = atoiW(beg + 1); + spSet = TRUE; } else if (*beg == '\0') { sp = 0; + spSet = TRUE; } else { extraPmts = beg; } @@ -381,6 +384,9 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) while ((ptr = StrChrW(buffer, '"'))) memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR)); + while ((ptr = StrChrW(extraPmts, '"'))) + memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR)); + TRACE("cmd %s, extra %s, sp %d\n", debugstr_w(buffer), debugstr_w(extraPmts), sp); Control_LoadApplet(hWnd, buffer, panel); @@ -393,6 +399,13 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) WARN("Out of bounds (%u >= %u), setting to 0\n", sp, applet->count); sp = 0; } + + if ((extraPmts)&&(!spSet)) + { + while ((lstrcmpiW(extraPmts, applet->info[sp].szName)) && (sp < applet->count)) + sp++; + } + if (applet->info[sp].dwSize) { if (!applet->proc(applet->hWnd, CPL_STARTWPARMSA, sp, (LPARAM)extraPmts)) applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].lData); -- 2.17.1