[SHELL32]

- Formatting. No code changes.

svn path=/trunk/; revision=54845
This commit is contained in:
Rafal Harabien 2012-01-05 18:34:35 +00:00
parent 898071bb08
commit 61e7814932
4 changed files with 725 additions and 776 deletions

View file

@ -259,16 +259,15 @@ static LRESULT WINAPI Control_WndProc(HWND hWnd, UINT wMsg,
case WM_CREATE: case WM_CREATE:
Control_WndProc_Create(hWnd, (CREATESTRUCTW*)lParam2); Control_WndProc_Create(hWnd, (CREATESTRUCTW*)lParam2);
return 0; return 0;
case WM_DESTROY: case WM_DESTROY:
{ {
CPlApplet* applet = panel->first; CPlApplet *applet = panel->first;
while (applet) while (applet)
applet = Control_UnloadApplet(applet); applet = Control_UnloadApplet(applet);
PostQuitMessage(0); PostQuitMessage(0);
}; break; break;
}
case WM_PAINT: case WM_PAINT:
return Control_WndProc_Paint(panel, lParam1); return Control_WndProc_Paint(panel, lParam1);
case WM_LBUTTONUP: case WM_LBUTTONUP:
@ -324,27 +323,26 @@ static void Control_DoInterface(CPanel* panel, HWND hWnd, HINSTANCE hInst)
} }
} }
static void Control_DoWindow(CPanel* panel, HWND hWnd, HINSTANCE hInst) static void Control_DoWindow(CPanel *panel, HWND hWnd, HINSTANCE hInst)
{ {
HANDLE h; HANDLE hFind;
WIN32_FIND_DATAW fd; WIN32_FIND_DATAW wfd;
WCHAR buffer[MAX_PATH]; WCHAR wszPath[MAX_PATH];
static const WCHAR wszAllCpl[] = {'*','.','c','p','l',0}; WCHAR *Ptr = wszPath;
WCHAR *p;
GetSystemDirectoryW( buffer, MAX_PATH ); Ptr += GetSystemDirectoryW(wszPath, MAX_PATH);
p = buffer + wcslen(buffer); *Ptr++ = '\\';
*p++ = '\\'; wcscpy(Ptr, L"*.cpl");
wcscpy(p, wszAllCpl);
if ((h = FindFirstFileW(buffer, &fd)) != INVALID_HANDLE_VALUE) hFind = FindFirstFileW(wszPath, &wfd);
if (hFind != INVALID_HANDLE_VALUE)
{ {
do do
{ {
wcscpy(p, fd.cFileName); wcscpy(Ptr, wfd.cFileName);
Control_LoadApplet(hWnd, buffer, panel); Control_LoadApplet(hWnd, wszPath, panel);
} while (FindNextFileW(h, &fd)); } while (FindNextFileW(hFind, &wfd));
FindClose(h); FindClose(hFind);
} }
Control_DoInterface(panel, hWnd, hInst); Control_DoInterface(panel, hWnd, hInst);

View file

@ -36,7 +36,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
class CControlPanelEnum : class CControlPanelEnum :
public IEnumIDListImpl public IEnumIDListImpl
{ {
private:
public: public:
CControlPanelEnum(); CControlPanelEnum();
~CControlPanelEnum(); ~CControlPanelEnum();

View file

@ -77,14 +77,12 @@ GetKeyDescription(LPWSTR szKeyName, LPWSTR szResult)
DWORD dwDesc, dwError; DWORD dwDesc, dwError;
WCHAR szDesc[100]; WCHAR szDesc[100];
static const WCHAR szFriendlyTypeName[] = { '\\','F','r','i','e','n','d','l','y','T','y','p','e','N','a','m','e',0 };
TRACE("GetKeyDescription: keyname %s\n", debugstr_w(szKeyName)); TRACE("GetKeyDescription: keyname %s\n", debugstr_w(szKeyName));
if (RegOpenKeyExW(HKEY_CLASSES_ROOT,szKeyName,0, KEY_READ | KEY_QUERY_VALUE,&hKey) != ERROR_SUCCESS) if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szKeyName, 0, KEY_READ | KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
return FALSE; return FALSE;
if (RegLoadMUIStringW(hKey,szFriendlyTypeName,szResult,MAX_PATH,&dwDesc,0,NULL) == ERROR_SUCCESS) if (RegLoadMUIStringW(hKey, L"\\FriendlyTypeName", szResult, MAX_PATH, &dwDesc, 0, NULL) == ERROR_SUCCESS)
{ {
TRACE("result %s\n", debugstr_w(szResult)); TRACE("result %s\n", debugstr_w(szResult));
RegCloseKey(hKey); RegCloseKey(hKey);
@ -92,7 +90,7 @@ GetKeyDescription(LPWSTR szKeyName, LPWSTR szResult)
} }
/* fetch default value */ /* fetch default value */
dwDesc = sizeof(szDesc); dwDesc = sizeof(szDesc);
dwError = RegGetValueW(hKey,NULL,NULL, RRF_RT_REG_SZ,NULL,szDesc,&dwDesc); dwError = RegGetValueW(hKey, NULL, NULL, RRF_RT_REG_SZ, NULL, szDesc, &dwDesc);
if(dwError == ERROR_SUCCESS) if(dwError == ERROR_SUCCESS)
{ {
if (wcsncmp(szKeyName, szDesc, dwDesc / sizeof(WCHAR))) if (wcsncmp(szKeyName, szDesc, dwDesc / sizeof(WCHAR)))
@ -124,66 +122,58 @@ GetKeyDescription(LPWSTR szKeyName, LPWSTR szResult)
CNewMenu::SHELLNEW_ITEM *CNewMenu::LoadItem(LPWSTR szKeyName) CNewMenu::SHELLNEW_ITEM *CNewMenu::LoadItem(LPWSTR szKeyName)
{ {
HKEY hKey; HKEY hKey;
DWORD dwIndex; DWORD dwIndex = 0;
WCHAR szName[MAX_PATH]; WCHAR szName[MAX_PATH];
WCHAR szCommand[MAX_PATH]; WCHAR szCommand[MAX_PATH];
WCHAR szDesc[MAX_PATH] = {0}; WCHAR szDesc[MAX_PATH] = L"";
WCHAR szIcon[MAX_PATH] = {0}; WCHAR szIcon[MAX_PATH] = L"";
DWORD dwName, dwCommand; DWORD dwName, dwCommand;
LONG result; LONG result;
SHELLNEW_ITEM *pNewItem; SHELLNEW_ITEM *pNewItem = NULL;
static const WCHAR szShellNew[] = { '\\','S','h','e','l','l','N','e','w',0 };
static const WCHAR szCmd[] = { 'C','o','m','m','a','n','d',0 };
static const WCHAR szData[] = { 'D','a','t','a',0 };
static const WCHAR szFileName[] = { 'F','i','l','e','N','a','m','e', 0 };
static const WCHAR szNullFile[] = { 'N','u','l','l','F','i','l','e', 0 };
wcscpy(szName, szKeyName); wcscpy(szName, szKeyName);
GetKeyDescription(szKeyName, szDesc); GetKeyDescription(szKeyName, szDesc);
wcscat(szName, szShellNew); wcscat(szName, L"\\ShellNew");
result = RegOpenKeyExW(HKEY_CLASSES_ROOT,szName,0,KEY_READ,&hKey); result = RegOpenKeyExW(HKEY_CLASSES_ROOT, szName, 0, KEY_READ, &hKey);
//TRACE("LoadItem dwName %d keyname %s szName %s szDesc %s szIcon %s\n", dwName, debugstr_w(szKeyName), debugstr_w(szName), debugstr_w(szDesc), debugstr_w(szIcon)); TRACE("LoadItem dwName %d keyname %s szName %s szDesc %s szIcon %s\n", dwName, debugstr_w(szKeyName), debugstr_w(szName), debugstr_w(szDesc), debugstr_w(szIcon));
if (result != ERROR_SUCCESS) if (result != ERROR_SUCCESS)
{ {
TRACE("Failed to open key\n");
return NULL; return NULL;
} }
dwIndex = 0;
pNewItem = NULL;
do do
{ {
dwName = MAX_PATH; dwName = MAX_PATH;
dwCommand = MAX_PATH; dwCommand = MAX_PATH;
result = RegEnumValueW(hKey,dwIndex,szName,&dwName,NULL,NULL,(LPBYTE)szCommand, &dwCommand); result = RegEnumValueW(hKey, dwIndex, szName, &dwName, NULL, NULL, (LPBYTE)szCommand, &dwCommand);
if (result == ERROR_SUCCESS) if (result == ERROR_SUCCESS)
{ {
SHELLNEW_TYPE type = SHELLNEW_TYPE_INVALID; SHELLNEW_TYPE type = SHELLNEW_TYPE_INVALID;
LPWSTR szTarget = szCommand; LPWSTR szTarget = szCommand;
//TRACE("szName %s szCommand %s\n", debugstr_w(szName), debugstr_w(szCommand));
if (!wcsicmp(szName, szCmd)) TRACE("szName %s szCommand %s\n", debugstr_w(szName), debugstr_w(szCommand));
{
if (!wcsicmp(szName, L"Command"))
type = SHELLNEW_TYPE_COMMAND; type = SHELLNEW_TYPE_COMMAND;
}else if (!wcsicmp(szName, szData)) else if (!wcsicmp(szName, L"Data"))
{
type = SHELLNEW_TYPE_DATA; type = SHELLNEW_TYPE_DATA;
} else if (!wcsicmp(szName, L"FileName"))
else if (!wcsicmp(szName, szFileName))
{
type = SHELLNEW_TYPE_FILENAME; type = SHELLNEW_TYPE_FILENAME;
} else if (!wcsicmp(szName, L"NullFile"))
else if (!wcsicmp(szName, szNullFile))
{ {
type = SHELLNEW_TYPE_NULLFILE; type = SHELLNEW_TYPE_NULLFILE;
szTarget = NULL; szTarget = NULL;
} }
if (type != SHELLNEW_TYPE_INVALID) if (type != SHELLNEW_TYPE_INVALID)
{ {
pNewItem = (SHELLNEW_ITEM *)HeapAlloc(GetProcessHeap(), 0, sizeof(SHELLNEW_ITEM)); pNewItem = (SHELLNEW_ITEM *)HeapAlloc(GetProcessHeap(), 0, sizeof(SHELLNEW_ITEM));
if (!pNewItem)
break;
pNewItem->Type = type; pNewItem->Type = type;
if (szTarget) if (szTarget)
pNewItem->szTarget = _wcsdup(szTarget); pNewItem->szTarget = _wcsdup(szTarget);
@ -198,12 +188,11 @@ CNewMenu::SHELLNEW_ITEM *CNewMenu::LoadItem(LPWSTR szKeyName)
} }
} }
dwIndex++; dwIndex++;
}while(result != ERROR_NO_MORE_ITEMS); } while(result != ERROR_NO_MORE_ITEMS);
RegCloseKey(hKey); RegCloseKey(hKey);
return pNewItem; return pNewItem;
} }
BOOL BOOL
CNewMenu::LoadShellNewItems() CNewMenu::LoadShellNewItems()
{ {
@ -212,25 +201,23 @@ CNewMenu::LoadShellNewItems()
LONG result; LONG result;
SHELLNEW_ITEM *pNewItem; SHELLNEW_ITEM *pNewItem;
SHELLNEW_ITEM *pCurItem = NULL; SHELLNEW_ITEM *pCurItem = NULL;
static WCHAR szLnk[] = { '.','l','n','k',0 };
/* insert do new folder action */ /* insert do new folder action */
if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, szNew, sizeof(szNew) / sizeof(WCHAR))) if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, szNew, sizeof(szNew) / sizeof(WCHAR)))
szNew[0] = 0; szNew[0] = 0;
szNew[MAX_PATH-1] = 0;
UnloadShellItems(); UnloadShellItems();
dwIndex = 0; dwIndex = 0;
do do
{ {
result = RegEnumKeyW(HKEY_CLASSES_ROOT,dwIndex,szName,MAX_PATH); result = RegEnumKeyW(HKEY_CLASSES_ROOT, dwIndex, szName, MAX_PATH);
if (result == ERROR_SUCCESS) if (result == ERROR_SUCCESS)
{ {
pNewItem = LoadItem(szName); pNewItem = LoadItem(szName);
if (pNewItem) if (pNewItem)
{ {
if (!wcsicmp(pNewItem->szExt, szLnk)) if (!wcsicmp(pNewItem->szExt, L".lnk"))
{ {
if (s_SnHead) if (s_SnHead)
{ {
@ -257,7 +244,7 @@ CNewMenu::LoadShellNewItems()
} }
} }
dwIndex++; dwIndex++;
}while(result != ERROR_NO_MORE_ITEMS); } while(result != ERROR_NO_MORE_ITEMS);
if (s_SnHead == NULL) if (s_SnHead == NULL)
return FALSE; return FALSE;
@ -333,7 +320,7 @@ CNewMenu::InsertShellNewItems(HMENU hMenu, UINT idFirst, UINT idMenu)
pCurItem = pCurItem->Next; pCurItem = pCurItem->Next;
i++; i++;
} }
return (i+2); return (i + 2);
} }
HRESULT HRESULT
@ -355,9 +342,6 @@ CNewMenu::DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi, IShellView *psv)
CComPtr<IShellFolder> parentFolder; CComPtr<IShellFolder> parentFolder;
HRESULT hResult; HRESULT hResult;
static const WCHAR szP1[] = { '%', '1', 0 };
static const WCHAR szFormat[] = {'%','s',' ','(','%','d',')','%','s',0 };
i = 1; i = 1;
target = LOWORD(lpcmi->lpVerb); target = LOWORD(lpcmi->lpVerb);
@ -413,7 +397,7 @@ CNewMenu::DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi, IShellView *psv)
break; break;
} }
ptr = wcsstr(szBuffer, szP1); ptr = wcsstr(szBuffer, L"%1");
if (ptr) if (ptr)
{ {
ptr[1] = 's'; ptr[1] = 's';
@ -430,7 +414,7 @@ CNewMenu::DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi, IShellView *psv)
szCmd = _wcsdup(ptr); szCmd = _wcsdup(ptr);
if (!szCmd) if (!szCmd)
break; break;
if (CreateProcessW(NULL, szCmd, NULL, NULL,FALSE,0,NULL,NULL,&sInfo, &pi)) if (CreateProcessW(NULL, szCmd, NULL, NULL, FALSE, 0, NULL, NULL, &sInfo, &pi))
{ {
CloseHandle( pi.hProcess ); CloseHandle( pi.hProcess );
CloseHandle( pi.hThread ); CloseHandle( pi.hThread );
@ -458,16 +442,16 @@ CNewMenu::DoShellNewCmd(LPCMINVOKECOMMANDINFO lpcmi, IShellView *psv)
dwError = GetLastError(); dwError = GetLastError();
TRACE("FileName %s szBuffer %s i %u error %x\n", debugstr_w(szBuffer), debugstr_w(szPath), i, dwError); TRACE("FileName %s szBuffer %s i %u error %x\n", debugstr_w(szBuffer), debugstr_w(szPath), i, dwError);
swprintf(szBuffer, szFormat, szPath, i, pCurItem->szExt); swprintf(szBuffer, L"%s (%d)%s", szPath, i, pCurItem->szExt);
i++; i++;
}while(hFile == INVALID_HANDLE_VALUE && dwError == ERROR_FILE_EXISTS); } while(hFile == INVALID_HANDLE_VALUE && dwError == ERROR_FILE_EXISTS);
if (hFile == INVALID_HANDLE_VALUE) if (hFile == INVALID_HANDLE_VALUE)
return E_FAIL; return E_FAIL;
if (pCurItem->Type == SHELLNEW_TYPE_DATA) if (pCurItem->Type == SHELLNEW_TYPE_DATA)
{ {
i = WideCharToMultiByte(CP_ACP, 0, pCurItem->szTarget, -1, (LPSTR)szTemp, MAX_PATH*2, NULL, NULL); i = WideCharToMultiByte(CP_ACP, 0, pCurItem->szTarget, -1, (LPSTR)szTemp, MAX_PATH * 2, NULL, NULL);
if (i) if (i)
{ {
WriteFile(hFile, (LPCVOID)szTemp, i, &dwWritten, NULL); WriteFile(hFile, (LPCVOID)szTemp, i, &dwWritten, NULL);
@ -570,7 +554,7 @@ CNewMenu::DoDrawItem(HWND hWnd, DRAWITEMSTRUCT * drawItem)
void CNewMenu::DoNewFolder( void CNewMenu::DoNewFolder(
IShellView *psv) IShellView *psv)
{ {
ISFHelper * psfhlp; ISFHelper *psfhlp;
WCHAR wszName[MAX_PATH]; WCHAR wszName[MAX_PATH];
CComPtr<IFolderView> folderView; CComPtr<IFolderView> folderView;
CComPtr<IShellFolder> parentFolder; CComPtr<IShellFolder> parentFolder;
@ -600,8 +584,8 @@ void CNewMenu::DoNewFolder(
psv->Refresh(); psv->Refresh();
/* if we are in a shellview do labeledit */ /* if we are in a shellview do labeledit */
psv->SelectItem( psv->SelectItem(
pidl,(SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE pidl, (SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE
|SVSI_FOCUSED|SVSI_SELECT)); | SVSI_FOCUSED | SVSI_SELECT));
psv->Refresh(); psv->Refresh();
} }
SHFree(pidl); SHFree(pidl);
@ -642,11 +626,8 @@ CNewMenu::QueryContextMenu(HMENU hmenu,
TRACE("%p %p %u %u %u %u\n", this, TRACE("%p %p %u %u %u %u\n", this,
hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags ); hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags );
if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, szBuffer, 200)) if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, szBuffer, _countof(szBuffer)))
{
szBuffer[0] = 0; szBuffer[0] = 0;
}
szBuffer[199] = 0;
hSubMenu = CreateMenu(); hSubMenu = CreateMenu();
memset( &mii, 0, sizeof(mii) ); memset( &mii, 0, sizeof(mii) );
@ -655,21 +636,20 @@ CNewMenu::QueryContextMenu(HMENU hmenu,
mii.fType = MFT_STRING; mii.fType = MFT_STRING;
mii.wID = idCmdFirst + id++; mii.wID = idCmdFirst + id++;
mii.dwTypeData = szBuffer; mii.dwTypeData = szBuffer;
mii.cch = wcslen( mii.dwTypeData ); mii.cch = wcslen(mii.dwTypeData);
mii.fState = MFS_ENABLED; mii.fState = MFS_ENABLED;
if (hSubMenu) if (hSubMenu)
{ {
id += InsertShellNewItems( hSubMenu, idCmdFirst, 0); id += InsertShellNewItems(hSubMenu, idCmdFirst, 0);
mii.fMask |= MIIM_SUBMENU; mii.fMask |= MIIM_SUBMENU;
mii.hSubMenu = hSubMenu; mii.hSubMenu = hSubMenu;
} }
if (!InsertMenuItemW(hmenu, indexMenu, TRUE, &mii))
if (!InsertMenuItemW( hmenu, indexMenu, TRUE, &mii ))
return E_FAIL; return E_FAIL;
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id ); return MAKE_HRESULT(SEVERITY_SUCCESS, 0, id);
} }
HRESULT HRESULT
@ -680,7 +660,7 @@ CNewMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
LPSHELLVIEW lpSV = NULL; LPSHELLVIEW lpSV = NULL;
HRESULT hr; HRESULT hr;
if((lpSB = (LPSHELLBROWSER)SendMessageA(lpici->hwnd, CWM_GETISHELLBROWSER,0,0))) if((lpSB = (LPSHELLBROWSER)SendMessageA(lpici->hwnd, CWM_GETISHELLBROWSER, 0, 0)))
{ {
lpSB->QueryActiveShellView(&lpSV); lpSB->QueryActiveShellView(&lpSV);
} }
@ -721,11 +701,10 @@ CNewMenu::HandleMenuMsg(UINT uMsg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam) LPARAM lParam)
{ {
DRAWITEMSTRUCT * lpids = (DRAWITEMSTRUCT*) lParam; DRAWITEMSTRUCT *lpids = (DRAWITEMSTRUCT*) lParam;
MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) lParam; MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) lParam;
TRACE("INewItem_IContextMenu_fnHandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",this, uMsg, wParam, lParam); TRACE("INewItem_IContextMenu_fnHandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n", this, uMsg, wParam, lParam);
switch(uMsg) switch(uMsg)
{ {

File diff suppressed because it is too large Load diff