* FIXME:
* - many memory leaks
* - many flags unimplemented
+ * - implement new dialog style "make new folder" button
+ * - implement editbox
+ * - implement new dialog style resizing
*/
#include <stdlib.h>
#include "wine/debug.h"
#include "undocshell.h"
-#include "shlguid.h"
#include "pidl.h"
#include "shell32_main.h"
#include "shellapi.h"
BIF_BROWSEFORCOMPUTER | \
BIF_RETURNFSANCESTORS | \
BIF_RETURNONLYFSDIRS | \
+ BIF_NONEWFOLDERBUTTON | \
+ BIF_NEWDIALOGSTYLE | \
BIF_BROWSEINCLUDEFILES)
static void FillTreeView(browse_info*, LPSHELLFOLDER,
IShellFolder_Release(lpsfParent);
}
-static int GetIcon(LPITEMIDLIST lpi, UINT uFlags)
+static int GetIcon(LPCITEMIDLIST lpi, UINT uFlags)
{
SHFILEINFOW sfi;
SHGetFileInfoW((LPCWSTR)lpi, 0 ,&sfi, sizeof(SHFILEINFOW), uFlags);
tvi.cChildren= pEnumIL ? 1 : 0;
tvi.mask |= TVIF_CHILDREN;
- lptvid = (LPTV_ITEMDATA)SHAlloc( sizeof(TV_ITEMDATA) );
+ lptvid = SHAlloc( sizeof(TV_ITEMDATA) );
if (!lptvid)
return NULL;
info->hWnd = hWnd;
SetPropW( hWnd, szBrowseFolderInfo, info );
+ if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)
+ FIXME("flags BIF_NEWDIALOGSTYLE partially implemented\n");
if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS)
FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS);
else
ShowWindow( GetDlgItem(hWnd, IDD_TITLE), SW_HIDE );
- if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT))
+ if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT)
+ || (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE))
ShowWindow( GetDlgItem(hWnd, IDD_STATUS), SW_HIDE );
+ /* Hide "Make New Folder" Button? */
+ if ((lpBrowseInfo->ulFlags & BIF_NONEWFOLDERBUTTON)
+ || !(lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE))
+ ShowWindow( GetDlgItem(hWnd, IDD_MAKENEWFOLDER), SW_HIDE );
+
+ /* Hide the editbox? */
+ if (!(lpBrowseInfo->ulFlags & BIF_EDITBOX))
+ {
+ ShowWindow( GetDlgItem(hWnd, IDD_FOLDER), SW_HIDE );
+ ShowWindow( GetDlgItem(hWnd, IDD_FOLDERTEXT), SW_HIDE );
+ }
+
info->hwndTreeView = GetDlgItem( hWnd, IDD_TREEVIEW );
if (info->hwndTreeView)
+ {
InitializeTreeView( info );
+
+ /* Resize the treeview if there's not editbox */
+ if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)
+ && !(lpBrowseInfo->ulFlags & BIF_EDITBOX))
+ {
+ RECT rc;
+ GetClientRect(info->hwndTreeView, &rc);
+ SetWindowPos(info->hwndTreeView, HWND_TOP, 0, 0,
+ rc.right, rc.bottom + 40, SWP_NOMOVE);
+ }
+ }
else
ERR("treeview control missing!\n");
switch (id)
{
case IDOK:
- info->pidlRet = ILClone(info->pidlRet); /* The original pidl will be free'd. */
+ /* The original pidl is owned by the treeview and will be free'd. */
+ info->pidlRet = ILClone(info->pidlRet);
+ if (info->pidlRet == NULL) /* A null pidl would mean a cancel */
+ info->pidlRet = _ILCreateDesktop();
pdump( info->pidlRet );
if (lpBrowseInfo->pszDisplayName)
SHGetPathFromIDListW( info->pidlRet, lpBrowseInfo->pszDisplayName );
case IDCANCEL:
EndDialog( info->hWnd, 0 );
return TRUE;
+
+ case IDD_MAKENEWFOLDER:
+ FIXME("make new folder not implemented\n");
+ return TRUE;
}
return FALSE;
}
{
browse_info *info;
- TRACE("hwnd=%p msg=%04x 0x%08x 0x%08lx\n", hWnd, msg, wParam, lParam );
+ TRACE("hwnd=%p msg=%04x 0x%08lx 0x%08lx\n", hWnd, msg, wParam, lParam );
if (msg == WM_INITDIALOG)
return BrsFolder_OnCreate( hWnd, (browse_info*) lParam );
static const WCHAR swBrowseTemplateName[] = {
'S','H','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0};
+static const WCHAR swNewBrowseTemplateName[] = {
+ 'S','H','N','E','W','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0};
/*************************************************************************
* SHBrowseForFolderA [SHELL32.@]
browse_info info;
DWORD r;
HRESULT hr;
+ const WCHAR * templateName;
info.hWnd = 0;
info.pidlRet = NULL;
info.hwndTreeView = NULL;
hr = OleInitialize(NULL);
- r = DialogBoxParamW( shell32_hInstance, swBrowseTemplateName, lpbi->hwndOwner,
+
+ if (lpbi->ulFlags & BIF_NEWDIALOGSTYLE)
+ templateName = swNewBrowseTemplateName;
+ else
+ templateName = swBrowseTemplateName;
+ r = DialogBoxParamW( shell32_hInstance, templateName, lpbi->hwndOwner,
BrsFolderDlgProc, (LPARAM)&info );
if (SUCCEEDED(hr))
OleUninitialize();
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
return TRUE;
}
+static const WCHAR swShell[] = {'s','h','e','l','l','\\',0};
+static const WCHAR swOpen[] = {'o','p','e','n',0};
+static const WCHAR swCommand[] = {'\\','c','o','m','m','a','n','d',0};
+
+BOOL HCR_GetDefaultVerbW( HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len )
+{
+ WCHAR sTemp[MAX_PATH];
+ LONG size;
+ HKEY hkey;
+
+ TRACE("%p %s %p\n", hkeyClass, debugstr_w(szVerb), szDest);
+
+ if (szVerb)
+ {
+ lstrcpynW(szDest, szVerb, len);
+ return TRUE;
+ }
+
+ size=len;
+ *szDest='\0';
+ if (!RegQueryValueW(hkeyClass, swShell, szDest, &size) && *szDest)
+ {
+ /* The MSDN says to first try the default verb */
+ lstrcpyW(sTemp, swShell);
+ lstrcatW(sTemp, szDest);
+ lstrcatW(sTemp, swCommand);
+ if (!RegOpenKeyExW(hkeyClass, sTemp, 0, 0, &hkey))
+ {
+ RegCloseKey(hkey);
+ TRACE("default verb=%s\n", debugstr_w(szDest));
+ return TRUE;
+ }
+ }
+
+ /* then fallback to 'open' */
+ lstrcpyW(sTemp, swShell);
+ lstrcatW(sTemp, swOpen);
+ lstrcatW(sTemp, swCommand);
+ if (!RegOpenKeyExW(hkeyClass, sTemp, 0, 0, &hkey))
+ {
+ RegCloseKey(hkey);
+ lstrcpynW(szDest, swOpen, len);
+ TRACE("default verb=open\n");
+ return TRUE;
+ }
+
+ /* and then just use the first verb on Windows >= 2000 */
+ if (!RegEnumKeyW(hkeyClass, 0, szDest, len) && *szDest)
+ {
+ TRACE("default verb=first verb=%s\n", debugstr_w(szDest));
+ return TRUE;
+ }
+
+ TRACE("no default verb!\n");
+ return FALSE;
+}
BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len )
{
- static const WCHAR swShell[] = {'s','h','e','l','l','\\',0};
- static const WCHAR swCommand[] = {'\\','c','o','m','m','a','n','d',0};
- BOOL ret = FALSE;
+ WCHAR sTempVerb[MAX_PATH];
+ BOOL ret;
TRACE("%p %s %s %p\n", hkeyClass, debugstr_w(szClass), debugstr_w(szVerb), szDest);
if (szClass)
RegOpenKeyExW(HKEY_CLASSES_ROOT, szClass, 0, 0x02000000, &hkeyClass);
-
- if (hkeyClass)
- {
- WCHAR sTemp[MAX_PATH];
- lstrcpyW(sTemp, swShell);
- lstrcatW(sTemp, szVerb);
- lstrcatW(sTemp, swCommand);
-
- ret = (ERROR_SUCCESS == SHGetValueW(hkeyClass, sTemp, NULL, NULL, szDest, &len));
-
- if (szClass)
- RegCloseKey(hkeyClass);
- }
+ if (!hkeyClass)
+ return FALSE;
+ ret = FALSE;
+
+ if (HCR_GetDefaultVerbW(hkeyClass, szVerb, sTempVerb, sizeof(sTempVerb)))
+ {
+ WCHAR sTemp[MAX_PATH];
+ lstrcpyW(sTemp, swShell);
+ lstrcatW(sTemp, sTempVerb);
+ lstrcatW(sTemp, swCommand);
+ ret = (ERROR_SUCCESS == SHGetValueW(hkeyClass, sTemp, NULL, NULL, szDest, &len));
+ }
+ if (szClass)
+ RegCloseKey(hkeyClass);
TRACE("-- %s\n", debugstr_w(szDest) );
return ret;
static BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey)
{
char xriid[50];
- sprintf( xriid, "CLSID\\{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+ sprintf( xriid, "CLSID\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
riid->Data1, riid->Data2, riid->Data3,
riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7] );
return !RegOpenKeyExA(HKEY_CLASSES_ROOT, xriid, 0, KEY_READ, hkey);
}
-static BOOL HCR_RegGetDefaultIconW(HKEY hkey, LPWSTR szDest, DWORD len, LPDWORD dwNr)
+static BOOL HCR_RegGetDefaultIconW(HKEY hkey, LPWSTR szDest, DWORD len, int* picon_idx)
{
- DWORD dwType;
- WCHAR sTemp[MAX_PATH];
- WCHAR sNum[5];
+ DWORD dwType;
+ WCHAR sTemp[MAX_PATH];
+ WCHAR sNum[5];
- if (!RegQueryValueExW(hkey, NULL, 0, &dwType, (LPBYTE)szDest, &len))
- {
+ if (!RegQueryValueExW(hkey, NULL, 0, &dwType, (LPBYTE)szDest, &len))
+ {
if (dwType == REG_EXPAND_SZ)
- {
- ExpandEnvironmentStringsW(szDest, sTemp, MAX_PATH);
- lstrcpynW(szDest, sTemp, len);
- }
- if (ParseFieldW (szDest, 2, sNum, 5))
- *dwNr = atoiW(sNum);
+ {
+ ExpandEnvironmentStringsW(szDest, sTemp, MAX_PATH);
+ lstrcpynW(szDest, sTemp, len);
+ }
+ if (ParseFieldW (szDest, 2, sNum, 5))
+ *picon_idx = atoiW(sNum);
else
- *dwNr=0; /* sometimes the icon number is missing */
- ParseFieldW (szDest, 1, szDest, len);
+ *picon_idx=0; /* sometimes the icon number is missing */
+ ParseFieldW (szDest, 1, szDest, len);
PathUnquoteSpacesW(szDest);
- return TRUE;
- }
- return FALSE;
+ return TRUE;
+ }
+ return FALSE;
}
-static BOOL HCR_RegGetDefaultIconA(HKEY hkey, LPSTR szDest, DWORD len, LPDWORD dwNr)
+static BOOL HCR_RegGetDefaultIconA(HKEY hkey, LPSTR szDest, DWORD len, int* picon_idx)
{
DWORD dwType;
char sTemp[MAX_PATH];
lstrcpynA(szDest, sTemp, len);
}
if (ParseFieldA (szDest, 2, sNum, 5))
- *dwNr=atoi(sNum);
+ *picon_idx=atoi(sNum);
else
- *dwNr=0; /* sometimes the icon number is missing */
+ *picon_idx=0; /* sometimes the icon number is missing */
ParseFieldA (szDest, 1, szDest, len);
PathUnquoteSpacesA(szDest);
return TRUE;
return FALSE;
}
-BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, LPDWORD dwNr)
+BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, int* picon_idx)
{
static const WCHAR swDefaultIcon[] = {'\\','D','e','f','a','u','l','t','I','c','o','n',0};
HKEY hkey;
if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, sTemp, 0, 0x02000000, &hkey))
{
- ret = HCR_RegGetDefaultIconW(hkey, szDest, len, dwNr);
+ ret = HCR_RegGetDefaultIconW(hkey, szDest, len, picon_idx);
RegCloseKey(hkey);
}
if(ret)
- TRACE("-- %s %li\n", debugstr_w(szDest), *dwNr );
+ TRACE("-- %s %i\n", debugstr_w(szDest), *picon_idx);
else
TRACE("-- not found\n");
return ret;
}
-BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, LPDWORD dwNr)
+BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, int* picon_idx)
{
HKEY hkey;
char sTemp[MAX_PATH];
if (!RegOpenKeyExA(HKEY_CLASSES_ROOT, sTemp, 0, 0x02000000, &hkey))
{
- ret = HCR_RegGetDefaultIconA(hkey, szDest, len, dwNr);
+ ret = HCR_RegGetDefaultIconA(hkey, szDest, len, picon_idx);
RegCloseKey(hkey);
}
- TRACE("-- %s %li\n", szDest, *dwNr );
+ TRACE("-- %s %i\n", szDest, *picon_idx);
return ret;
}
-BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, LPDWORD dwNr)
+BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, int* picon_idx)
{
HKEY hkey;
BOOL ret = FALSE;
if (HCR_RegOpenClassIDKey(riid, &hkey))
{
- ret = HCR_RegGetDefaultIconW(hkey, szDest, len, dwNr);
+ ret = HCR_RegGetDefaultIconW(hkey, szDest, len, picon_idx);
RegCloseKey(hkey);
}
- TRACE("-- %s %li\n", debugstr_w(szDest), *dwNr );
+ TRACE("-- %s %i\n", debugstr_w(szDest), *picon_idx);
return ret;
}
szDest[0] = 0;
if (HCR_RegOpenClassIDKey(riid, &hkey))
{
- if (!RegQueryValueExW(hkey, swEmpty, 0, NULL, (LPBYTE)szDest, &len))
- {
+ static const WCHAR wszLocalizedString[] =
+ { 'L','o','c','a','l','i','z','e','d','S','t','r','i','n','g', 0 };
+ if (!RegLoadMUIStringW(hkey, wszLocalizedString, szDest, len, NULL, 0, NULL) ||
+ !RegQueryValueExW(hkey, swEmpty, 0, NULL, (LPBYTE)szDest, &len))
+ {
ret = TRUE;
}
RegCloseKey(hkey);
szDest[0] = 0;
if (HCR_RegOpenClassIDKey(riid, &hkey))
{
- if (!RegQueryValueExA(hkey,"",0,NULL,(LPBYTE)szDest,&len))
- {
+ if (!RegLoadMUIStringA(hkey,"LocalizedString",szDest,len,NULL,0,NULL) ||
+ !RegQueryValueExA(hkey,"",0,NULL,(LPBYTE)szDest,&len))
+ {
ret = TRUE;
}
RegCloseKey(hkey);
}
}
- TRACE("-- *pdwAttributes == 0x%08lx\n", *pdwAttributes);
+ TRACE("-- *pdwAttributes == 0x%08x\n", *pdwAttributes);
return TRUE;
}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* NOTES:
*
HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{
UINT i;
- int rootsize = 0,size = 0;
- char szRootPath[MAX_PATH];
- char szFileName[MAX_PATH];
+ int rootlen = 0,size = 0;
+ WCHAR wszRootPath[MAX_PATH];
+ WCHAR wszFileName[MAX_PATH];
HGLOBAL hGlobal;
DROPFILES *pDropFiles;
int offset;
/* get the size needed */
size = sizeof(DROPFILES);
- SHGetPathFromIDListA(pidlRoot, szRootPath);
- PathAddBackslashA(szRootPath);
- rootsize = strlen(szRootPath);
+ SHGetPathFromIDListW(pidlRoot, wszRootPath);
+ PathAddBackslashW(wszRootPath);
+ rootlen = strlenW(wszRootPath);
for (i=0; i<cidl;i++)
{
- _ILSimpleGetText(apidl[i], szFileName, MAX_PATH);
- size += rootsize + strlen(szFileName) + 1;
+ _ILSimpleGetTextW(apidl[i], wszFileName, MAX_PATH);
+ size += (rootlen + strlenW(wszFileName) + 1) * sizeof(WCHAR);
}
- size++;
+ size += sizeof(WCHAR);
/* Fill the structure */
hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size);
if(!hGlobal) return hGlobal;
pDropFiles = (DROPFILES *)GlobalLock(hGlobal);
- pDropFiles->pFiles = sizeof(DROPFILES);
- pDropFiles->fWide = FALSE;
+ offset = (sizeof(DROPFILES) + sizeof(WCHAR) - 1) / sizeof(WCHAR);
+ pDropFiles->pFiles = offset * sizeof(WCHAR);
+ pDropFiles->fWide = TRUE;
- offset = pDropFiles->pFiles;
- strcpy(szFileName, szRootPath);
+ strcpyW(wszFileName, wszRootPath);
for (i=0; i<cidl;i++)
{
- _ILSimpleGetText(apidl[i], szFileName + rootsize, MAX_PATH - rootsize);
- size = strlen(szFileName) + 1;
- strcpy(((char*)pDropFiles)+offset, szFileName);
- offset += size;
+ _ILSimpleGetTextW(apidl[i], wszFileName + rootlen, MAX_PATH - rootlen);
+ strcpyW(((WCHAR*)pDropFiles)+offset, wszFileName);
+ offset += strlenW(wszFileName) + 1;
}
- ((char*)pDropFiles)[offset] = 0;
+ ((WCHAR*)pDropFiles)[offset] = 0;
GlobalUnlock(hGlobal);
return hGlobal;
DWORD * pdwFlag;
HGLOBAL hGlobal;
- TRACE("(0x%08lx)\n", dwFlags);
+ TRACE("(0x%08x)\n", dwFlags);
hGlobal = GlobalAlloc(GHND|GMEM_SHARE, sizeof(DWORD));
if(!hGlobal) return hGlobal;
GlobalUnlock(hGlobal);
return hGlobal;
}
-
-/**************************************************************************
- * IsDataInClipboard
- *
- * checks if there is something in the clipboard we can use
- */
-BOOL IsDataInClipboard (HWND hwnd)
-{
- BOOL ret = FALSE;
-
- if (OpenClipboard(hwnd))
- {
- if (GetOpenClipboardWindow())
- {
- ret = IsClipboardFormatAvailable(CF_TEXT);
- }
- CloseClipboard();
- }
- return ret;
-}
unsigned sp = 0;
LPWSTR extraPmts = NULL;
int quoted = 0;
- BOOL spSet = FALSE;
buffer = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(wszCmd) + 1) * sizeof(*wszCmd));
if (!buffer) return;
if (beg) {
if (*beg == '@') {
sp = atoiW(beg + 1);
- spSet = TRUE;
} else if (*beg == '\0') {
sp = 0;
- spSet = TRUE;
} else {
extraPmts = beg;
}
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);
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);
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_SHELL_CPANEL_H
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
- * version 2.1 of the License, or(at your option) any later version.
+ * version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
* IShellFolder [ControlPanel] implementation
*/
-static shvheader ControlPanelSFHeader[] = {
+static const shvheader ControlPanelSFHeader[] = {
{IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15},/*FIXME*/
{IDS_SHV_COLUMN9, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 200},/*FIXME*/
};
ICPanelImpl *This = (ICPanelImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
ICPanelImpl *This = (ICPanelImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount + 1);
if (!refCount) {
TRACE("-- destroying IShellFolder(%p)\n", This);
- if (This->pidlRoot)
- SHFree(This->pidlRoot);
+ SHFree(This->pidlRoot);
LocalFree((HLOCAL) This);
}
return refCount;
if (pchEaten)
*pchEaten = 0;
- TRACE("(%p)->(-- ret=0x%08lx)\n", This, hr);
+ TRACE("(%p)->(-- ret=0x%08x)\n", This, hr);
return hr;
}
WIN32_FIND_DATAA wfd;
HANDLE hFile;
- TRACE("(%p)->(flags=0x%08lx)\n", iface, dwFlags);
+ TRACE("(%p)->(flags=0x%08x)\n", iface, dwFlags);
- /* enumerate control panel folders folders */
+ /* enumerate control panel folders */
if (dwFlags & SHCONTF_FOLDERS)
SHELL_RegisterCPanelFolders(iface, HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ControlPanel\\NameSpace");
{
ICPanelImpl *This = (ICPanelImpl *)iface;
- TRACE("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
+ TRACE("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
*ppEnumIDList = IEnumIDList_Constructor();
if (*ppEnumIDList)
HRESULT hr = S_OK;
- TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08lx))\n",
+ TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
This, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
if (!rgfInOut)
/* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
*rgfInOut &= ~SFGAO_VALIDATE;
- TRACE("-- result=0x%08lx\n", *rgfInOut);
+ TRACE("-- result=0x%08x\n", *rgfInOut);
return hr;
}
*ppvOut = pObj;
}
- TRACE("(%p)->hr=0x%08lx\n", This, hr);
+ TRACE("(%p)->hr=0x%08x\n", This, hr);
return hr;
}
{
ICPanelImpl *This = (ICPanelImpl *)iface;
- CHAR szPath[MAX_PATH*2];
+ CHAR szPath[MAX_PATH];
+ WCHAR wszPath[MAX_PATH+1]; /* +1 for potential backslash */
PIDLCPanelStruct* pcpanel;
*szPath = '\0';
- TRACE("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet);
+ TRACE("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet);
pdump(pidl);
if (!pidl || !strRet)
if (!(dwFlags & SHGDN_FORPARSING))
FIXME("retrieve display name from control panel app\n");
}
- /* take names of special folders only if its only this folder */
+ /* take names of special folders only if it's only this folder */
else if (_ILIsSpecialFolder(pidl)) {
BOOL bSimplePidl = _ILIsPidlSimple(pidl);
if (bSimplePidl) {
- _ILSimpleGetText(pidl, szPath, MAX_PATH); /* append my own path */
+ _ILSimpleGetTextW(pidl, wszPath, MAX_PATH); /* append my own path */
} else {
FIXME("special pidl\n");
}
if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl) { /* go deeper if needed */
int len = 0;
- PathAddBackslashA(szPath); /*FIXME*/
- len = lstrlenA(szPath);
+ PathAddBackslashW(wszPath);
+ len = lstrlenW(wszPath);
if (!SUCCEEDED
- (SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags | SHGDN_INFOLDER, szPath + len, MAX_PATH - len)))
+ (SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags | SHGDN_INFOLDER, wszPath + len, MAX_PATH + 1 - len)))
return E_OUTOFMEMORY;
+ if (!WideCharToMultiByte(CP_ACP, 0, wszPath, -1, szPath, MAX_PATH, NULL, NULL))
+ wszPath[0] = '\0';
}
}
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
{
ICPanelImpl *This = (ICPanelImpl *)iface;
- FIXME("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", This, hwndOwner, pidl, debugstr_w(lpName), dwFlags, pPidlOut);
+ FIXME("(%p)->(%p,pidl=%p,%s,%u,%p)\n", This, hwndOwner, pidl, debugstr_w(lpName), dwFlags, pPidlOut);
return E_FAIL;
}
{
ICPanelImpl *This = impl_from_IPersistFolder2(iface);
- TRACE("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef(_IUnknown_(This));
}
{
ICPanelImpl *This = impl_from_IPersistFolder2(iface);
- TRACE("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_Release(_IUnknown_(This));
}
ICPanel_PersistFolder2_GetCurFolder
};
-HRESULT CPanel_GetIconLocationW(LPITEMIDLIST pidl,
+HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST pidl,
LPWSTR szIconFile, UINT cchMax, int* piIndex)
{
PIDLCPanelStruct* pcpanel = _ILGetCPanelPointer(pidl);
{
ICPanelImpl *This = impl_from_IShellExecuteHookW(iface);
- TRACE("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_QueryInterface(This->pUnkOuter, riid, ppvObject);
}
{
ICPanelImpl *This = impl_from_IShellExecuteHookW(iface);
- TRACE("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef(This->pUnkOuter);
}
{
ICPanelImpl *This = impl_from_IShellExecuteHookA(iface);
- TRACE("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_QueryInterface(This->pUnkOuter, riid, ppvObject);
}
{
ICPanelImpl *This = impl_from_IShellExecuteHookA(iface);
- TRACE("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef(This->pUnkOuter);
}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <string.h>
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(%lu)\n", This, refCount + 1);
+ TRACE("(%p)->(%u)\n", This, refCount + 1);
if (!refCount)
{
TRACE(" destroying IEnumFORMATETC(%p)\n",This);
- if (This->pFmt)
- {
- SHFree (This->pFmt);
- }
+ SHFree (This->pFmt);
HeapFree(GetProcessHeap(),0,This);
return 0;
}
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
UINT i;
- TRACE("(%p)->(%lu,%p)\n", This, celt, rgelt);
+ TRACE("(%p)->(%u,%p)\n", This, celt, rgelt);
if(!This->pFmt)return S_FALSE;
if(!rgelt) return E_INVALIDARG;
static HRESULT WINAPI IEnumFORMATETC_fnSkip(LPENUMFORMATETC iface, ULONG celt)
{
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
- TRACE("(%p)->(num=%lu)\n", This, celt);
+ TRACE("(%p)->(num=%u)\n", This, celt);
if((This->posFmt + celt) >= This->countFmt) return S_FALSE;
This->posFmt += celt;
IDataObjectImpl *This = (IDataObjectImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
IDataObjectImpl *This = (IDataObjectImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(%lu)\n", This, refCount + 1);
+ TRACE("(%p)->(%u)\n", This, refCount + 1);
if (!refCount)
{
IDataObjectImpl *This = (IDataObjectImpl *)iface;
UINT i;
- TRACE("(%p)->(fmt=0x%08x tym=0x%08lx)\n", This, pformatetc->cfFormat, pformatetc->tymed);
+ TRACE("(%p)->(fmt=0x%08x tym=0x%08x)\n", This, pformatetc->cfFormat, pformatetc->tymed);
if(!(DVASPECT_CONTENT & pformatetc->dwAspect))
return DV_E_DVASPECT;
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
typedef BOOL (*LPFNOFN) (OPENFILENAMEA *) ;
WINE_DEFAULT_DEBUG_CHANNEL(shell);
-INT_PTR CALLBACK RunDlgProc (HWND, UINT, WPARAM, LPARAM) ;
-void FillList (HWND, char *) ;
+static INT_PTR CALLBACK RunDlgProc (HWND, UINT, WPARAM, LPARAM) ;
+static void FillList (HWND, char *) ;
/*************************************************************************
DWORD nMaxFile,
LPDWORD lpdwIconIndex)
{
- FIXME("(%p,%s,%08lx,%p):stub.\n",
+ FIXME("(%p,%s,%08x,%p):stub.\n",
hwndOwner, lpstrFile, nMaxFile,lpdwIconIndex);
return 0xffffffff;
}
}
/* Dialog procedure for RunFileDlg */
-INT_PTR CALLBACK RunDlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+static INT_PTR CALLBACK RunDlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int ic ;
char *psz, szMsg[256] ;
psz = HeapAlloc( GetProcessHeap(), 0, (ic + 2) );
GetWindowTextA (htxt, psz, ic + 1) ;
- if (ShellExecuteA(NULL, NULL, psz, NULL, NULL, SW_SHOWNORMAL) < (HINSTANCE)33)
+ if (ShellExecuteA(NULL, "open", psz, NULL, NULL, SW_SHOWNORMAL) < (HINSTANCE)33)
{
char *pszSysMsg = NULL ;
FormatMessageA (
HeapFree(GetProcessHeap(), 0, psz);
SendMessageA (htxt, CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ;
- SetFocus(htxt);
return TRUE ;
}
FillList (htxt, psz) ;
return TRUE ;
}
- if(ofnProc (&ofn))
- {
- SetFocus (GetDlgItem (hwnd, IDOK)) ;
- SetWindowTextA (GetDlgItem (hwnd, 12298), szFName) ;
- SendMessageA (GetDlgItem (hwnd, 12298), CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ;
- SetFocus (GetDlgItem (hwnd, IDOK)) ;
- }
- else
- {
- SetFocus(GetDlgItem(hwnd, 12288));
- }
+ ofnProc (&ofn) ;
+
+ SetFocus (GetDlgItem (hwnd, IDOK)) ;
+ SetWindowTextA (GetDlgItem (hwnd, 12298), szFName) ;
+ SendMessageA (GetDlgItem (hwnd, 12298), CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ;
+ SetFocus (GetDlgItem (hwnd, IDOK)) ;
FreeLibrary (hComdlg) ;
+
return TRUE ;
}
}
}
/* This grabs the MRU list from the registry and fills the combo for the "Run" dialog above */
-void FillList (HWND hCb, char *pszLatest)
+static void FillList (HWND hCb, char *pszLatest)
{
HKEY hkey ;
/* char szDbgMsg[256] = "" ; */
if (ERROR_SUCCESS != RegCreateKeyExA (
HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU",
- 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL))
+ 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL))
MessageBoxA (hCb, "Unable to open registry key !", "Nix", MB_OK) ;
RegQueryValueExA (hkey, "MRUList", NULL, NULL, NULL, &icList) ;
return 0;
}
-/*************************************************************************
- * LogoffWindowsDialog [SHELL32.54]
- */
-
-int WINAPI LogoffWindowsDialog(DWORD uFlags)
-{
- ERR("LogoffWindowsDialog is UNIMPLEMENTED\n");
- ExitWindowsEx(EWX_LOGOFF, 0);
- return 0;
-}
/*************************************************************************
* RestartDialog [SHELL32.59]
#define ExtendedIntegerMultiply RtlExtendedIntegerMultiply\r
#define ConvertUlongToLargeInteger RtlConvertUlongToLargeInteger\r
#define LargeIntegerSubtract RtlLargeIntegerSubtract\r
+#define MAX_PROPERTY_SHEET_PAGE 32\r
#include <string.h>\r
#include <stdarg.h>\r
#include <stdio.h>\r
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include "objbase.h"
#include "undocshell.h"
#include "shlguid.h"
-#include "winreg.h"
#include "wine/debug.h"
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount + 1);
if (!refCount)
{
LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags)
{
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
- DWORD dwNr;
+ int icon_idx;
WCHAR wszPath[MAX_PATH];
WCHAR wszCLSIDValue[CHARS_IN_GUID];
static const WCHAR shellClassInfo[] = { '.','S','h','e','l','l','C','l','a','s','s','I','n','f','o',0 };
}
else if (SHELL32_GetCustomFolderAttribute(This->pidl, shellClassInfo, clsid,
wszCLSIDValue, CHARS_IN_GUID) &&
- HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &dwNr))
+ HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx))
{
- *piIndex = dwNr;
+ *piIndex = icon_idx;
}
else if (SHELL32_GetCustomFolderAttribute(This->pidl, shellClassInfo, clsid2,
wszCLSIDValue, CHARS_IN_GUID) &&
- HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &dwNr))
+ HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx))
{
- *piIndex = dwNr;
+ *piIndex = icon_idx;
}
else
{
static const WCHAR folder[] = { 'F','o','l','d','e','r',0 };
- if (!HCR_GetDefaultIconW(folder, szIconFile, cchMax, &dwNr))
+ if (!HCR_GetDefaultIconW(folder, szIconFile, cchMax, &icon_idx))
{
lstrcpynW(szIconFile, swShell32Name, cchMax);
- dwNr = IDI_SHELL_FOLDER;
+ icon_idx = -IDI_SHELL_FOLDER;
}
- *piIndex = -((uFlags & GIL_OPENICON) ? dwNr + 1 : dwNr);
+
+ if (uFlags & GIL_OPENICON)
+ *piIndex = icon_idx<0? icon_idx-1: icon_idx+1;
+ else
+ *piIndex = icon_idx;
}
+
return S_OK;
}
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
char sTemp[MAX_PATH];
- DWORD dwNr;
+ int icon_idx;
GUID const * riid;
LPITEMIDLIST pSimplePidl = ILFindLastID(This->pidl);
riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7]);
- if (HCR_GetDefaultIconW(xriid, szIconFile, cchMax, &dwNr))
+ if (HCR_GetDefaultIconW(xriid, szIconFile, cchMax, &icon_idx))
{
- *piIndex = dwNr;
+ *piIndex = icon_idx;
}
else
{
*piIndex = -IDI_SHELL_MY_DOCUMENTS;
else if(IsEqualGUID(riid, &CLSID_NetworkPlaces))
*piIndex = -IDI_SHELL_MY_NETWORK_PLACES;
+ else if(IsEqualGUID(riid, &CLSID_UnixFolder) ||
+ IsEqualGUID(riid, &CLSID_UnixDosFolder))
+ *piIndex = -IDI_SHELL_DRIVE;
else
*piIndex = -IDI_SHELL_FOLDER;
}
}
else
{
- if (HCR_GetDefaultIconW(drive, szIconFile, cchMax, &dwNr))
+ if (HCR_GetDefaultIconW(drive, szIconFile, cchMax, &icon_idx))
{
- *piIndex = dwNr;
+ *piIndex = icon_idx;
}
else
{
else if (_ILGetExtension(pSimplePidl, sTemp, MAX_PATH))
{
if (HCR_MapTypeToValueA(sTemp, sTemp, MAX_PATH, TRUE)
- && HCR_GetDefaultIconA(sTemp, sTemp, MAX_PATH, &dwNr))
+ && HCR_GetDefaultIconA(sTemp, sTemp, MAX_PATH, &icon_idx))
{
if (!lstrcmpA("%1", sTemp)) /* icon is in the file */
{
else
{
MultiByteToWideChar(CP_ACP, 0, sTemp, -1, szIconFile, cchMax);
- *piIndex = dwNr;
+ *piIndex = icon_idx;
}
found = TRUE;
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#define COBJMACROS
+#define NONAMELESSUNION
+#define YDEBUG
+
#include "config.h"
#include "wine/port.h"
-#define YDEBUG
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include "shell32_main.h"
#include "shresdef.h"
#include "undocshell.h"
-#include <prsht.h>
+#include "prsht.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
+#define MAX_PROPERTY_SHEET_PAGE 32
+
typedef struct _LANGANDCODEPAGE_
{
WORD lang;
WORD code;
} LANGANDCODEPAGE, *LPLANGANDCODEPAGE;
+/*************************************************************************
+ *
+ * SH_CreatePropertySheetPage [Internal]
+ *
+ * creates a property sheet page from an resource name
+ *
+ */
+HPROPSHEETPAGE
+SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM lParam)
+{
+ HRSRC hRes;
+ LPVOID lpsztemplate;
+ PROPSHEETPAGEW ppage;
+
+ if (resname == NULL)
+ return (HPROPSHEETPAGE)0;
+
+ hRes = FindResourceA(shell32_hInstance, resname, (LPSTR)RT_DIALOG);
+
+ if (hRes == NULL)
+ {
+ ERR("failed to find resource name\n");
+ return (HPROPSHEETPAGE)0;
+ }
+ lpsztemplate = LoadResource(shell32_hInstance, hRes);
+ if (lpsztemplate == NULL)
+ return (HPROPSHEETPAGE)0;
+
+ memset(&ppage, 0x0, sizeof(PROPSHEETPAGEW));
+ ppage.dwSize = sizeof(PROPSHEETPAGEW);
+ ppage.dwFlags = PSP_DLGINDIRECT;
+ ppage.u.pResource = lpsztemplate;
+ ppage.pfnDlgProc = dlgproc;
+ ppage.lParam = lParam;
+ return CreatePropertySheetPageW(&ppage);
+}
+
+
+
+
+
+
+
/*************************************************************************
*
* SH_FileGeneralFileType [Internal]
pinfo.dwSize = sizeof(PROPSHEETHEADERW);
pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE;
pinfo.nPages = num_pages;
- pinfo.phpage = hppages;
+ pinfo.u3.phpage = hppages;
pinfo.pszCaption = wFileName;
return (PropertySheetW(&pinfo) != -1);
}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* NOTES
* a pidl == NULL means desktop and is legal
#include "winnls.h"
#include "undocshell.h"
#include "shell32_main.h"
-#include "shellapi.h"
#include "shlwapi.h"
#include "pidl.h"
BOOL ret = FALSE;
WCHAR wPath[MAX_PATH];
- TRACE("%p %p %p %ld\n", psf, pidl, path, type);
+ TRACE("%p %p %p %d\n", psf, pidl, path, type);
if (!pidl || !path)
return FALSE;
STRRET strret;
DWORD flag;
- TRACE("%p %p %p %ld\n", psf, pidl, path, type);
+ TRACE("%p %p %p %d\n", psf, pidl, path, type);
if (!pidl || !path)
return FALSE;
flag = SHGDN_INFOLDER;
break;
default:
- FIXME("Unknown type parameter = %lx\n", type);
+ FIXME("Unknown type parameter = %x\n", type);
flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
break;
}
ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
if (SUCCEEDED(ret))
{
- ret = StrRetToStrNW(path, MAX_PATH, &strret, pidl);
+ if(!StrRetToStrNW(path, MAX_PATH, &strret, pidl))
+ ret = E_FAIL;
}
}
else
ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
if (SUCCEEDED(ret))
{
- ret = StrRetToStrNW(path, MAX_PATH, &strret, pidllast);
+ if(!StrRetToStrNW(path, MAX_PATH, &strret, pidllast))
+ ret = E_FAIL;
}
IShellFolder_Release(psfParent);
}
BOOL WINAPI ILGetDisplayNameEx(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
{
- TRACE_(shell)("%p %p %p %ld\n", psf, pidl, path, type);
+ TRACE_(shell)("%p %p %p %d\n", psf, pidl, path, type);
if (SHELL_OsIsUnicode())
return ILGetDisplayNameExW(psf, pidl, path, type);
TRACE_(shell)("%p %p\n", pStream , ppPidl);
- if (*ppPidl)
- {
- SHFree(*ppPidl);
- *ppPidl = NULL;
- }
+ SHFree(*ppPidl);
+ *ppPidl = NULL;
IStream_AddRef (pStream);
{
WCHAR lpszDisplayName[MAX_PATH];
- TRACE_(shell)("%s %p 0x%08lx\n", path, ppidl, attributes ? *attributes : 0);
+ TRACE_(shell)("%s %p 0x%08x\n", path, ppidl, attributes ? *attributes : 0);
if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH))
lpszDisplayName[MAX_PATH-1] = 0;
DWORD pchEaten;
HRESULT ret = E_FAIL;
- TRACE_(shell)("%s %p 0x%08lx\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
+ TRACE_(shell)("%s %p 0x%08x\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
if (SUCCEEDED (SHGetDesktopFolder(&sf)))
{
LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, DWORD nFolder, BOOL fCreate)
{
LPITEMIDLIST ppidl;
- TRACE_(shell)("(hwnd=%p,csidl=0x%lx,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
+ TRACE_(shell)("(hwnd=%p,csidl=0x%x,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
if (fCreate)
nFolder |= CSIDL_FLAG_CREATE;
if (_ILIsDesktop(pidl))
{
idlRet = ILClone(item);
- if (pidl)
- SHFree (pidl);
+ SHFree (pidl);
return idlRet;
}
void WINAPI ILFree(LPITEMIDLIST pidl)
{
TRACE("(pidl=%p)\n",pidl);
- if (pidl)
- SHFree(pidl);
+ SHFree(pidl);
}
/*************************************************************************
{
TRACE("%p\n", pidl);
- if (pidl)
- Free(pidl);
+ Free(pidl);
}
/*************************************************************************
LPBC pBC = NULL;
HRESULT ret;
- TRACE("%s %p %d (%p)->%p (%p)->0x%lx\n", debugstr_w(path), lpFindFile, bBindCtx,
+ TRACE("%s %p %d (%p)->%p (%p)->0x%x\n", debugstr_w(path), lpFindFile, bBindCtx,
ppidl, ppidl ? *ppidl : NULL,
prgfInOut, prgfInOut ? *prgfInOut : 0);
if (!SUCCEEDED(ret) && ppidl)
*ppidl = NULL;
- TRACE("%s %p 0x%lx\n", debugstr_w(path), ppidl ? *ppidl : NULL, prgfInOut ? *prgfInOut : 0);
+ TRACE("%s %p 0x%x\n", debugstr_w(path), ppidl ? *ppidl : NULL, prgfInOut ? *prgfInOut : 0);
return ret;
}
BOOL bSuccess;
bSuccess = SHGetPathFromIDListW(pidl, wszPath);
- if (bSuccess)
- WideCharToMultiByte(CP_ACP, 0, wszPath, -1, pszPath, MAX_PATH, NULL, NULL);
+ WideCharToMultiByte(CP_ACP, 0, wszPath, -1, pszPath, MAX_PATH, NULL, NULL);
return bSuccess;
}
DWORD dwAttributes;
STRRET strret;
- TRACE_(shell)("(pidl=%p,%p)\n", pidl, debugstr_w(pszPath));
+ TRACE_(shell)("(pidl=%p,%p)\n", pidl, pszPath);
pdump(pidl);
+ *pszPath = '\0';
if (!pidl)
return FALSE;
hr = StrRetToBufW(&strret, pidlLast, pszPath, MAX_PATH);
- TRACE_(shell)("-- %s, 0x%08lx\n",debugstr_w(pszPath), hr);
+ TRACE_(shell)("-- %s, 0x%08x\n",debugstr_w(pszPath), hr);
return SUCCEEDED(hr);
}
if (SUCCEEDED(hr) && ppidlLast)
*ppidlLast = ILFindLastID(pidl);
- TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08lx\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
+ TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
return hr;
}
return pidlOut;
}
-LPITEMIDLIST _ILCreateDesktop()
+LPITEMIDLIST _ILCreateDesktop(void)
{
LPITEMIDLIST ret;
return ret;
}
-LPITEMIDLIST _ILCreateMyComputer()
+LPITEMIDLIST _ILCreateMyComputer(void)
{
TRACE("()\n");
return _ILCreateGuid(PT_GUID, &CLSID_MyComputer);
}
-LPITEMIDLIST _ILCreateIExplore()
+LPITEMIDLIST _ILCreateMyDocuments(void)
+{
+ TRACE("()\n");
+ return _ILCreateGuid(PT_GUID, &CLSID_MyDocuments);
+}
+
+LPITEMIDLIST _ILCreateIExplore(void)
{
TRACE("()\n");
return _ILCreateGuid(PT_GUID, &CLSID_Internet);
}
-LPITEMIDLIST _ILCreateControlPanel()
+LPITEMIDLIST _ILCreateControlPanel(void)
{
LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
return ret;
}
-LPITEMIDLIST _ILCreatePrinters()
+LPITEMIDLIST _ILCreatePrinters(void)
{
LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
return ret;
}
-LPITEMIDLIST _ILCreateNetwork()
+LPITEMIDLIST _ILCreateNetwork(void)
{
TRACE("()\n");
return _ILCreateGuid(PT_GUID, &CLSID_NetworkPlaces);
}
-LPITEMIDLIST _ILCreateBitBucket()
+LPITEMIDLIST _ILCreateBitBucket(void)
{
TRACE("()\n");
return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin);
return _ILCreateGuid(PT_GUID, &iid);
}
-LPITEMIDLIST _ILCreateFromFindDataW( WIN32_FIND_DATAW *wfd )
-{
- /* FIXME: should make unicode PIDLs */
- WIN32_FIND_DATAA fda;
-
- memset( &fda, 0, sizeof fda );
- fda.dwFileAttributes = wfd->dwFileAttributes;
- fda.ftCreationTime = wfd->ftCreationTime;
- fda.ftLastAccessTime = wfd->ftLastAccessTime;
- fda.ftLastWriteTime = wfd->ftLastWriteTime;
- fda.nFileSizeHigh = wfd->nFileSizeHigh;
- fda.nFileSizeLow = wfd->nFileSizeLow;
- fda.dwReserved0 = wfd->dwReserved0;
- fda.dwReserved1 = wfd->dwReserved1;
- WideCharToMultiByte( CP_ACP, 0, wfd->cFileName, -1,
- fda.cFileName, MAX_PATH, NULL, NULL );
- return _ILCreateFromFindDataA( &fda );
-}
-
-LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA * stffile )
+LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
{
char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
- char * pbuff = buff;
- size_t len, len1;
+ DWORD len, len1, wlen, alen;
LPITEMIDLIST pidl;
PIDLTYPE type;
- if (!stffile)
+ if (!wfd)
return NULL;
- TRACE("(%s, %s)\n",stffile->cAlternateFileName, stffile->cFileName);
+ TRACE("(%s, %s)\n",debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName));
/* prepare buffer with both names */
- len = strlen (stffile->cFileName) + 1;
- memcpy (pbuff, stffile->cFileName, len);
- pbuff += len;
-
- len1 = strlen (stffile->cAlternateFileName)+1;
- memcpy (pbuff, stffile->cAlternateFileName, len1);
+ len = WideCharToMultiByte(CP_ACP,0,wfd->cFileName,-1,buff,MAX_PATH,NULL,NULL);
+ len1 = WideCharToMultiByte(CP_ACP,0,wfd->cAlternateFileName,-1, buff+len, sizeof(buff)-len, NULL, NULL);
+ alen = len + len1;
- type = (stffile->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
+ type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
- /*
- * FileStruct already has one byte for the first name, so use len - 1 in
- * size calculation
- */
- pidl = _ILAlloc(type, sizeof(FileStruct) + (len - 1) + len1);
+ wlen = lstrlenW(wfd->cFileName) + 1;
+ pidl = _ILAlloc(type, FIELD_OFFSET(FileStruct, szNames[alen + (alen & 1)]) +
+ FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD));
if (pidl)
{
- LPPIDLDATA pData;
- LPSTR pszDest;
-
- /* set attributes */
- pData = _ILGetDataPointer(pidl);
- if (pData)
- {
- pData->type = type;
- FileTimeToDosDateTime( &(stffile->ftLastWriteTime),
- &pData->u.file.uFileDate, &pData->u.file.uFileTime);
- pData->u.file.dwFileSize = stffile->nFileSizeLow;
- pData->u.file.uFileAttribs = (WORD)stffile->dwFileAttributes;
- }
- pszDest = _ILGetTextPointer(pidl);
- if (pszDest)
- {
- memcpy(pszDest, buff, len + len1);
- TRACE("-- create Value: %s\n",debugstr_a(pszDest));
- }
+ LPPIDLDATA pData = _ILGetDataPointer(pidl);
+ FileStruct *fs = &pData->u.file;
+ FileStructW *fsw;
+ WORD *pOffsetW;
+
+ FileTimeToDosDateTime( &wfd->ftLastWriteTime, &fs->uFileDate, &fs->uFileTime);
+ fs->dwFileSize = wfd->nFileSizeLow;
+ fs->uFileAttribs = wfd->dwFileAttributes;
+ memcpy(fs->szNames, buff, alen);
+
+ fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
+ fsw->cbLen = FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD);
+ FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
+ FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
+ memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
+
+ pOffsetW = (WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
+ *pOffsetW = (LPBYTE)fsw - (LPBYTE)pidl;
+ TRACE("-- Set Value: %s\n",debugstr_w(fsw->wszName));
}
return pidl;
-}
-HRESULT _ILCreateFromPathA(LPCSTR szPath, LPITEMIDLIST* ppidl)
-{
- HANDLE hFile;
- WIN32_FIND_DATAA stffile;
-
- if (!ppidl)
- return E_INVALIDARG;
-
- hFile = FindFirstFileA(szPath, &stffile);
- if (hFile == INVALID_HANDLE_VALUE)
- return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
-
- FindClose(hFile);
-
- *ppidl = _ILCreateFromFindDataA(&stffile);
-
- return *ppidl ? S_OK : E_OUTOFMEMORY;
}
HRESULT _ILCreateFromPathW(LPCWSTR szPath, LPITEMIDLIST* ppidl)
* ### 2. section testing pidls ###
*
**************************************************************************
+ * _ILIsUnicode()
* _ILIsDesktop()
* _ILIsMyComputer()
* _ILIsSpecialFolder()
* _ILIsValue()
* _ILIsPidlSimple()
*/
+BOOL _ILIsUnicode(LPCITEMIDLIST pidl)
+{
+ LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
+
+ TRACE("(%p)\n",pidl);
+
+ return (pidl && lpPData && PT_VALUEW == lpPData->type);
+}
+
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
{
TRACE("(%p)\n",pidl);
{
DWORD dwReturn=0;
LPSTR szSrc;
+ LPWSTR szSrcW;
GUID const * riid;
char szTemp[MAX_PATH];
dwReturn = strlen(szSrc);
}
+ else if (( szSrcW = _ILGetTextPointerW(pidl) ))
+ {
+ /* unicode filesystem */
+ WideCharToMultiByte(CP_ACP,0,szSrcW, -1, szTemp, MAX_PATH, NULL, NULL);
+
+ if (szOut)
+ lstrcpynA(szOut, szTemp, uOutSize);
+
+ dwReturn = strlen (szTemp);
+ }
else if (( riid = _ILGetGUIDPointer(pidl) ))
{
/* special folder */
ERR("-- no text\n");
}
- TRACE("-- (%p=%s 0x%08lx)\n",szOut,debugstr_a(szOut),dwReturn);
+ TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_a(szOut),dwReturn);
return dwReturn;
}
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
{
DWORD dwReturn;
- char szTemp[MAX_PATH];
FileStructW *pFileStructW = _ILGetFileStructW(pidl);
TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
lstrcpynW(szOut, pFileStructW->wszName, uOutSize);
dwReturn = lstrlenW(pFileStructW->wszName);
} else {
- dwReturn = _ILSimpleGetText(pidl, szTemp, MAX_PATH);
+ GUID const * riid;
+ WCHAR szTemp[MAX_PATH];
+ LPSTR szSrc;
+ LPWSTR szSrcW;
+ dwReturn=0;
- if (!MultiByteToWideChar(CP_ACP, 0, szTemp, -1, szOut, uOutSize))
+ if (!pidl)
+ return 0;
+
+ if (szOut)
*szOut = 0;
+
+ if (_ILIsDesktop(pidl))
+ {
+ /* desktop */
+ if (HCR_GetClassNameW(&CLSID_ShellDesktop, szTemp, MAX_PATH))
+ {
+ if (szOut)
+ lstrcpynW(szOut, szTemp, uOutSize);
+
+ dwReturn = lstrlenW (szTemp);
+ }
+ }
+ else if (( szSrcW = _ILGetTextPointerW(pidl) ))
+ {
+ /* unicode filesystem */
+ if (szOut)
+ lstrcpynW(szOut, szSrcW, uOutSize);
+
+ dwReturn = lstrlenW(szSrcW);
+ }
+ else if (( szSrc = _ILGetTextPointer(pidl) ))
+ {
+ /* filesystem */
+ MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, MAX_PATH);
+
+ if (szOut)
+ lstrcpynW(szOut, szTemp, uOutSize);
+
+ dwReturn = lstrlenW (szTemp);
+ }
+ else if (( riid = _ILGetGUIDPointer(pidl) ))
+ {
+ /* special folder */
+ if ( HCR_GetClassNameW(riid, szTemp, MAX_PATH) )
+ {
+ if (szOut)
+ lstrcpynW(szOut, szTemp, uOutSize);
+
+ dwReturn = lstrlenW (szTemp);
+ }
+ }
+ else
+ {
+ ERR("-- no text\n");
+ }
}
- TRACE("-- (%p=%s 0x%08lx)\n",szOut,debugstr_w(szOut),dwReturn);
+ TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_w(szOut),dwReturn);
return dwReturn;
}
return NULL;
}
+/**************************************************************************
+ * _ILGetTextPointerW()
+ * gets a pointer to the unicode long filename string stored in the pidl
+ */
+LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl)
+{
+ /* TRACE(pidl,"(pidl%p)\n", pidl);*/
+
+ LPPIDLDATA pdata = _ILGetDataPointer(pidl);
+
+ if (!pdata)
+ return NULL;
+
+ switch (pdata->type)
+ {
+ case PT_GUID:
+ case PT_SHELLEXT:
+ case PT_YAGUID:
+ return NULL;
+
+ case PT_DRIVE:
+ case PT_DRIVE1:
+ case PT_DRIVE2:
+ case PT_DRIVE3:
+ /*return (LPSTR)&(pdata->u.drive.szDriveName);*/
+ return NULL;
+
+ case PT_FOLDER:
+ case PT_FOLDER1:
+ case PT_VALUE:
+ case PT_IESPECIAL1:
+ case PT_IESPECIAL2:
+ /*return (LPSTR)&(pdata->u.file.szNames);*/
+ return NULL;
+
+ case PT_WORKGRP:
+ case PT_COMP:
+ case PT_NETWORK:
+ case PT_NETPROVIDER:
+ case PT_SHARE:
+ /*return (LPSTR)&(pdata->u.network.szNames);*/
+ return NULL;
+
+ case PT_VALUEW:
+ return (LPWSTR)&(pdata->u.file.szNames);
+ }
+ return NULL;
+}
+
+
/**************************************************************************
* _ILGetTextPointer()
* gets a pointer to the long filename string stored in the pidl
if (!(_ILIsValue(pidl) || _ILIsFolder(pidl)))
return NULL;
- cbOffset = *(WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
+ cbOffset = *(const WORD *)((const BYTE *)pidl + pidl->mkid.cb - sizeof(WORD));
pFileStructW = (FileStructW*)((LPBYTE)pidl + cbOffset);
/* Currently I don't see a fool prove way to figure out if a pidl is for sure of WinXP
case PT_VALUE:
dwSize = pdata->u.file.dwFileSize;
if (pOut)
- StrFormatByteSizeA(dwSize, pOut, uOutSize);
+ StrFormatKBSizeA(dwSize, pOut, uOutSize);
return dwSize;
}
if (pOut)
*
* copies an aPidl struct
*/
-LPITEMIDLIST* _ILCopyaPidl(LPCITEMIDLIST * apidlsrc, UINT cidl)
+LPITEMIDLIST* _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl)
{
UINT i;
LPITEMIDLIST *apidldest;
*
* creates aPidl from CIDA
*/
-LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, LPIDA cida)
+LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida)
{
UINT i;
LPITEMIDLIST *dst;
return NULL;
if (pidl)
- *pidl = ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[0]]));
+ *pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]]));
for (i = 0; i < cida->cidl; i++)
- dst[i] = ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[i + 1]]));
+ dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]]));
return dst;
}
/*
* testing simple pidls
*/
+BOOL _ILIsUnicode (LPCITEMIDLIST pidl);
BOOL _ILIsDesktop (LPCITEMIDLIST pidl);
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl);
BOOL _ILIsDrive (LPCITEMIDLIST pidl);
/* Commonly used PIDLs representing file system objects. */
LPITEMIDLIST _ILCreateDesktop (void);
-LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA *stffile);
-LPITEMIDLIST _ILCreateFromFindDataW(WIN32_FIND_DATAW *stffile);
-HRESULT _ILCreateFromPathA (LPCSTR szPath, LPITEMIDLIST* ppidl);
+LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile);
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST* ppidl);
/* Other helpers */
*/
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST);
LPSTR _ILGetTextPointer (LPCITEMIDLIST);
+LPWSTR _ILGetTextPointerW (LPCITEMIDLIST);
LPSTR _ILGetSTextPointer (LPCITEMIDLIST);
IID *_ILGetGUIDPointer (LPCITEMIDLIST pidl);
FileStructW *_ILGetFileStructW (LPCITEMIDLIST pidl);
* aPidl helper
*/
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl);
-LPITEMIDLIST * _ILCopyaPidl(LPCITEMIDLIST * apidlsrc, UINT cidl);
-LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, LPIDA cida);
+LPITEMIDLIST * _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl);
+LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida);
BOOL WINAPI ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type);
BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type);
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdarg.h>
#include "winerror.h"
#include "ole2.h"
+#include "shldisp.h"
#include "shlguid.h"
#include "shell32_main.h"
+#include "shresdef.h"
+#include "initguid.h"
#include "shfldr.h"
#include "wine/debug.h"
{
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
+ UINT idName; /* can be 0 to omit */
LPCSTR ips; /* can be NULL to omit */
LPCSTR ips32; /* can be NULL to omit */
LPCSTR ips32_tmodel; /* can be NULL to omit */
DWORD dwCallForAttributes;
LPCSTR clsid_str; /* can be NULL to omit */
LPCSTR progid; /* can be NULL to omit */
+ UINT idDefaultIcon; /* can be 0 to omit */
};
/* flags for regsvr_coclass.flags */
static WCHAR const mcdm_keyname[21] = {
'M', 'a', 'y', 'C', 'h', 'a', 'n', 'g', 'e', 'D', 'e', 'f',
'a', 'u', 'l', 't', 'M', 'e', 'n', 'u', 0 };
+static WCHAR const defaulticon_keyname[] = {
+ 'D','e','f','a','u','l','t','I','c','o','n',0};
static char const tmodel_valuename[] = "ThreadingModel";
static char const wfparsing_valuename[] = "WantsFORPARSING";
static char const attributes_valuename[] = "Attributes";
static char const cfattributes_valuename[] = "CallForAttributes";
+static char const localized_valuename[] = "LocalizedString";
/***********************************************************************
* static helper functions
WCHAR const *value);
static LONG register_key_defvalueA(HKEY base, WCHAR const *name,
char const *value);
-static LONG recursive_delete_key(HKEY key);
-static LONG recursive_delete_keyA(HKEY base, char const *name);
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name);
/***********************************************************************
* register_interfaces
}
if (list->base_iid) {
- register_key_guid(iid_key, base_ifa_keyname, list->base_iid);
+ res = register_key_guid(iid_key, base_ifa_keyname, list->base_iid);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
}
if (list->ps_clsid) {
- register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid);
+ res = register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
if (list->ps_clsid32) {
- register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32);
+ res = register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
WCHAR buf[39];
StringFromGUID2(list->iid, buf, 39);
- res = recursive_delete_keyW(interface_key, buf);
+ res = RegDeleteTreeW(interface_key, buf);
+ if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
}
RegCloseKey(interface_key);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
+ if (list->idName) {
+ char buffer[64];
+ sprintf(buffer, "@shell32.dll,-%u", list->idName);
+ res = RegSetValueExA(clsid_key, localized_valuename, 0, REG_SZ,
+ (CONST BYTE*)(buffer), strlen(buffer)+1);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+ }
+
+ if (list->idDefaultIcon) {
+ HKEY icon_key;
+ char buffer[64];
+
+ res = RegCreateKeyExW(clsid_key, defaulticon_keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &icon_key, NULL);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+
+ sprintf(buffer, "shell32.dll,-%u", list->idDefaultIcon);
+ res = RegSetValueExA(icon_key, NULL, 0, REG_SZ,
+ (CONST BYTE*)(buffer), strlen(buffer)+1);
+ RegCloseKey(icon_key);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+ }
+
if (list->ips) {
res = register_key_defvalueA(clsid_key, ips_keyname, list->ips);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
&shellfolder_key, NULL);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
if (list->flags & SHELLFOLDER_WANTSFORPARSING)
- res = RegSetValueExA(shellfolder_key, wfparsing_valuename, 0, REG_SZ, (LPBYTE)"", 1);
+ res = RegSetValueExA(shellfolder_key, wfparsing_valuename, 0, REG_SZ, (const BYTE *)"", 1);
if (list->flags & SHELLFOLDER_ATTRIBUTES)
res = RegSetValueExA(shellfolder_key, attributes_valuename, 0, REG_DWORD,
- (LPBYTE)&list->dwAttributes, sizeof(DWORD));
+ (const BYTE *)&list->dwAttributes, sizeof(DWORD));
if (list->flags & SHELLFOLDER_CALLFORATTRIBUTES)
res = RegSetValueExA(shellfolder_key, cfattributes_valuename, 0, REG_DWORD,
- (LPBYTE)&list->dwCallForAttributes, sizeof(DWORD));
+ (const BYTE *)&list->dwCallForAttributes, sizeof(DWORD));
RegCloseKey(shellfolder_key);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
WCHAR buf[39];
StringFromGUID2(list->clsid, buf, 39);
- res = recursive_delete_keyW(coclass_key, buf);
+ res = RegDeleteTreeW(coclass_key, buf);
+ if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
if (res != ERROR_SUCCESS) goto error_close_coclass_key;
if (list->progid) {
- res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->progid);
+ res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->progid);
+ if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
if (res != ERROR_SUCCESS) goto error_close_coclass_key;
}
}
if (pwszKey && ERROR_SUCCESS ==
RegCreateKeyExW(HKEY_LOCAL_MACHINE, pwszKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL))
{
- RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)list->value, sizeof(WCHAR)*(lstrlenW(list->value)+1));
+ RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE *)list->value, sizeof(WCHAR)*(lstrlenW(list->value)+1));
RegCloseKey(hKey);
}
return res;
}
-/***********************************************************************
- * recursive_delete_key
- */
-static LONG recursive_delete_key(HKEY key)
-{
- LONG res;
- WCHAR subkey_name[MAX_PATH];
- DWORD cName;
- HKEY subkey;
-
- for (;;) {
- cName = sizeof(subkey_name) / sizeof(WCHAR);
- res = RegEnumKeyExW(key, 0, subkey_name, &cName,
- NULL, NULL, NULL, NULL);
- if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) {
- res = ERROR_SUCCESS; /* presumably we're done enumerating */
- break;
- }
- res = RegOpenKeyExW(key, subkey_name, 0,
- KEY_READ | KEY_WRITE, &subkey);
- if (res == ERROR_FILE_NOT_FOUND) continue;
- if (res != ERROR_SUCCESS) break;
-
- res = recursive_delete_key(subkey);
- RegCloseKey(subkey);
- if (res != ERROR_SUCCESS) break;
- }
-
- if (res == ERROR_SUCCESS) res = RegDeleteKeyW(key, 0);
- return res;
-}
-
-/***********************************************************************
- * recursive_delete_keyA
- */
-static LONG recursive_delete_keyA(HKEY base, char const *name)
-{
- LONG res;
- HKEY key;
-
- res = RegOpenKeyExA(base, name, 0, KEY_READ | KEY_WRITE, &key);
- if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
- if (res != ERROR_SUCCESS) return res;
- res = recursive_delete_key(key);
- RegCloseKey(key);
- return res;
-}
-
-/***********************************************************************
- * recursive_delete_keyW
- */
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
-{
- LONG res;
- HKEY key;
-
- res = RegOpenKeyExW(base, name, 0, KEY_READ | KEY_WRITE, &key);
- if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
- if (res != ERROR_SUCCESS) return res;
- res = recursive_delete_key(key);
- RegCloseKey(key);
- return res;
-}
-
/***********************************************************************
* coclass list
*/
static struct regsvr_coclass const coclass_list[] = {
{ &CLSID_Desktop,
"Desktop",
+ IDS_DESKTOP,
NULL,
"shell32.dll",
"Apartment"
},
{ &CLSID_DragDropHelper,
"Shell Drag and Drop Helper",
+ 0,
NULL,
"shell32.dll",
"Apartment"
},
{ &CLSID_MyComputer,
"My Computer",
+ IDS_MYCOMPUTER,
+ NULL,
+ "shell32.dll",
+ "Apartment"
+ },
+ { &CLSID_NetworkPlaces,
+ "My Network Places",
+ 0,
NULL,
"shell32.dll",
"Apartment"
},
{ &CLSID_Shortcut,
"Shortcut",
+ 0,
NULL,
"shell32.dll",
"Apartment",
},
{ &CLSID_AutoComplete,
"AutoComplete",
+ 0,
+ NULL,
+ "shell32.dll",
+ "Apartment",
+ },
+ { &CLSID_UnixFolder,
+ "/",
+ 0,
+ NULL,
+ "shell32.dll",
+ "Apartment",
+ SHELLFOLDER_WANTSFORPARSING
+ },
+ { &CLSID_UnixDosFolder,
+ "/",
+ 0,
NULL,
"shell32.dll",
"Apartment",
+ SHELLFOLDER_WANTSFORPARSING|SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES,
+ SFGAO_FILESYSANCESTOR|SFGAO_FOLDER|SFGAO_HASSUBFOLDER,
+ SFGAO_FILESYSTEM
},
{ &CLSID_FolderShortcut,
"Foldershortcut",
+ 0,
NULL,
"shell32.dll",
"Apartment",
},
{ &CLSID_MyDocuments,
"My Documents",
+ IDS_PERSONAL,
NULL,
"shell32.dll",
"Apartment",
SFGAO_FILESYSANCESTOR|SFGAO_FOLDER|SFGAO_HASSUBFOLDER,
SFGAO_FILESYSTEM
},
+ { &CLSID_RecycleBin,
+ "Trash",
+ IDS_RECYCLEBIN_FOLDER_NAME,
+ NULL,
+ "shell32.dll",
+ "Apartment",
+ SHELLFOLDER_ATTRIBUTES,
+ SFGAO_FOLDER|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET,
+ 0,
+ NULL,
+ NULL,
+ IDI_SHELL_FULL_RECYCLE_BIN
+ },
+ { &CLSID_ShellFSFolder,
+ "Shell File System Folder",
+ 0,
+ NULL,
+ "shell32.dll",
+ "Apartment"
+ },
+ { &CLSID_ShellFolderViewOC,
+ "Microsoft Shell Folder View Router",
+ 0,
+ NULL,
+ "shell32.dll",
+ "Apartment"
+ },
{ NULL } /* list terminator */
};
static const WCHAR wszDesktop[] = { 'D','e','s','k','t','o','p',0 };
static const WCHAR wszSlash[] = { '/', 0 };
static const WCHAR wszMyDocuments[] = { 'M','y',' ','D','o','c','u','m','e','n','t','s', 0 };
+static const WCHAR wszRecycleBin[] = { 'T','r','a','s','h', 0 };
static struct regsvr_namespace const namespace_extensions_list[] = {
#if 0
+ {
+ &CLSID_UnixDosFolder,
+ wszDesktop,
+ wszSlash
+ },
{
&CLSID_MyDocuments,
wszDesktop,
wszMyDocuments
},
+ {
+ &CLSID_RecycleBin,
+ wszDesktop,
+ wszRecycleBin
+ },
#endif
{ NULL }
};
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include "windef.h"
#include "winbase.h"
-#include "winerror.h"
#include "winreg.h"
#include "wownt32.h"
-#include "dlgs.h"
#include "shellapi.h"
#include "winuser.h"
#include "wingdi.h"
#include "shlobj.h"
#include "shlwapi.h"
-#include "ddeml.h"
#include "wine/winbase16.h"
-#include "wine/winuser16.h"
#include "shell32_main.h"
#include "wine/debug.h"
/* memory block with filenames follows */
} DROPFILESTRUCT16, *LPDROPFILESTRUCT16;
-static const char* lpstrMsgWndCreated = "OTHERWINDOWCREATED";
-static const char* lpstrMsgWndDestroyed = "OTHERWINDOWDESTROYED";
-static const char* lpstrMsgShellActivate = "ACTIVATESHELLWINDOW";
+static const char lpstrMsgWndCreated[] = "OTHERWINDOWCREATED";
+static const char lpstrMsgWndDestroyed[] = "OTHERWINDOWDESTROYED";
+static const char lpstrMsgShellActivate[] = "ACTIVATESHELLWINDOW";
static HWND SHELL_hWnd = 0;
static HHOOK SHELL_hHook = 0;
}
i = strlen(lpDrop);
- i++;
if (!lpszFile ) goto end; /* needed buffer size */
- i = (wLength > i) ? i : wLength;
- lstrcpynA (lpszFile, lpDrop, i);
+ lstrcpynA (lpszFile, lpDrop, wLength);
end:
GlobalUnlock16(hDrop);
return i;
/**********************************************************************/
-SEGPTR WINAPI FindEnvironmentString16(LPSTR str)
+SEGPTR WINAPI FindEnvironmentString16(LPCSTR str)
{ SEGPTR spEnv;
LPSTR lpEnv,lpString;
TRACE("\n");
*/
static LRESULT WINAPI SHELL_HookProc(INT code, WPARAM wParam, LPARAM lParam)
{
- TRACE("%i, %x, %08lx\n", code, wParam, lParam );
+ TRACE("%i, %lx, %08lx\n", code, wParam, lParam );
if (SHELL_hWnd)
{
/*************************************************************************
* SHELL_Execute16 [Internal]
*/
-static UINT SHELL_Execute16(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
+static UINT_PTR SHELL_Execute16(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out)
{
UINT ret;
SHELL_execute( &seiW, SHELL_Execute16 );
- if (wVerb) SHFree(wVerb);
- if (wFile) SHFree(wFile);
- if (wParameters) SHFree(wParameters);
- if (wDirectory) SHFree(wDirectory);
+ SHFree(wVerb);
+ SHFree(wFile);
+ SHFree(wParameters);
+ SHFree(wDirectory);
return HINSTANCE_16(seiW.hInstApp);
}
<include base="ReactOS">include/reactos/wine</include>
<define name="__USE_W32API" />
<define name="_WIN32_IE">0x600</define>
- <define name="_WIN32_WINNT">0x501</define>
- <define name="WINVER">0x501</define>
+ <define name="_WIN32_WINNT">0x600</define>
+ <define name="WINVER">0x600</define>
<define name="_SHELL32_" />
<define name="COM_NO_WINDOWS_H" />
<library>wine</library>
# This list was updated to dll version 4.72
2 stdcall -noname SHChangeNotifyRegister(long long long long long ptr)
+ 3 stdcall SHDefExtractIconA(str long long ptr ptr long)
4 stdcall -noname SHChangeNotifyDeregister(long)
5 stdcall -noname SHChangeNotifyUpdateEntryList(long long long long)
+ 6 stdcall SHDefExtractIconW(wstr long long ptr ptr long)
9 stub -noname PifMgr_OpenProperties
10 stub -noname PifMgr_GetProperties
11 stub -noname PifMgr_SetProperties
48 stdcall -noname PathSetDlgItemPath(long long ptr) PathSetDlgItemPathAW
49 stdcall -noname PathQualify(ptr) PathQualifyAW
50 stdcall -noname PathStripToRoot(ptr) PathStripToRootAW
- 51 stdcall -noname PathResolve(str long long) PathResolveAW
+ 51 stdcall PathResolve(str long long) PathResolveAW
52 stdcall -noname PathGetArgs(str) PathGetArgsAW
53 stdcall DoEnvironmentSubst(long long) DoEnvironmentSubstAW
- 54 stdcall -noname LogoffWindowsDialog(ptr)
55 stdcall -noname PathQuoteSpaces(ptr) PathQuoteSpacesAW
56 stdcall -noname PathUnquoteSpaces(str) PathUnquoteSpacesAW
57 stdcall -noname PathGetDriveNumber(str) PathGetDriveNumberAW
62 stdcall -noname PickIconDlg(long long long long)
63 stdcall -noname GetFileNameFromBrowse(long long long long str str str)
64 stdcall -noname DriveType(long)
- 65 stub -noname InvalidateDriveType
+ 65 stdcall -noname InvalidateDriveType(long)
66 stdcall -noname IsNetDrive(long)
67 stdcall -noname Shell_MergeMenus(long long long long long long)
68 stdcall -noname SHGetSetSettings(ptr long long)
125 stdcall -noname FileMenu_AddFilesForPidl(long long long ptr long long ptr)
126 stdcall -noname SHOutOfMemoryMessageBox(long long long)
127 stdcall -noname SHWinHelp(long long long long)
+ 128 stdcall -noname SHDllGetClassObject(ptr ptr ptr) DllGetClassObject
129 stdcall -noname DAD_AutoScroll(long ptr ptr)
130 stdcall -noname DAD_DragEnter(long)
131 stdcall -noname DAD_DragEnterEx(long double)
145 stdcall -noname PathFindOnPath(ptr ptr) PathFindOnPathAW
146 stdcall -noname RLBuildListOfPaths()
147 stdcall -noname SHCLSIDFromString(long long) SHCLSIDFromStringAW
+ 148 stdcall -noname SHMapIDListToImageListIndexAsync(ptr ptr ptr long ptr ptr ptr ptr ptr)
149 stdcall -noname SHFind_InitMenuPopup(long long long long)
151 stdcall -noname SHLoadOLE(long)
179 stdcall -noname SHGetNewLinkInfoA(str str ptr long long)
180 stdcall -noname SHGetNewLinkInfoW(wstr wstr ptr long long)
181 stdcall -noname RegisterShellHook(long long)
- 182 varargs -noname ShellMessageBoxW(long long long str long)
- 183 varargs -noname ShellMessageBoxA(long long long str long)
+ 182 varargs -noname ShellMessageBoxW(long long wstr wstr long)
+ 183 varargs -noname ShellMessageBoxA(long long str str long)
184 stdcall -noname ArrangeWindows(long long long long long)
185 stub SHHandleDiskFull
186 stdcall -noname ILGetDisplayNameEx(ptr ptr ptr long)
505 stdcall SHRegCloseKey (long)
506 stdcall SHRegOpenKeyA (long str long)
507 stdcall SHRegOpenKeyW (long wstr long)
- 508 stub SHRegQueryValueA
+ 508 stdcall SHRegQueryValueA(long str ptr ptr)
509 stdcall SHRegQueryValueExA(long str ptr ptr ptr ptr)
510 stdcall SHRegQueryValueW (long long long long)
511 stdcall SHRegQueryValueExW (long wstr ptr ptr ptr ptr)
@ stub InternalExtractIconListA
@ stub InternalExtractIconListW
@ stub OCInstall
-@ stub OpenAs_RunDLL
-@ stub OpenAs_RunDLLA
-@ stub OpenAs_RunDLLW
+@ stdcall OpenAs_RunDLL(long long str long) OpenAs_RunDLLA
+@ stdcall OpenAs_RunDLLA(long long str long)
+@ stdcall OpenAs_RunDLLW(long long wstr long)
@ stub PrintersGetCommand_RunDLL
@ stub PrintersGetCommand_RunDLLA
@ stub PrintersGetCommand_RunDLLW
@ stdcall SHCreateDirectoryExA(long str ptr)
@ stdcall SHCreateDirectoryExW(long wstr ptr)
@ stub SHCreateProcessAsUserW
-@ stdcall SHDefExtractIconA(str long long ptr ptr long)
-@ stdcall SHDefExtractIconW(wstr long long ptr ptr long)
@ stdcall SHEmptyRecycleBinA(long str long)
@ stdcall SHEmptyRecycleBinW(long wstr long)
@ stub SHExtractIconsW
@ stdcall SHHelpShortcuts_RunDLLW(long long long long)
@ stub SHInvokePrinterCommandA
@ stub SHInvokePrinterCommandW
-@ stub SHIsFileAvailableOffline
+@ stdcall SHIsFileAvailableOffline(wstr ptr)
@ stdcall SHLoadInProc(long)
-@ stub SHLoadNonloadedIconOverlayIdentifiers
-@ stub SHPathPrepareForWriteA
-@ stub SHPathPrepareForWriteW
+@ stdcall SHLoadNonloadedIconOverlayIdentifiers()
+@ stdcall SHPathPrepareForWriteA(long ptr str long)
+@ stdcall SHPathPrepareForWriteW(long ptr wstr long)
@ stdcall SHQueryRecycleBinA(str ptr)
@ stdcall SHQueryRecycleBinW(wstr ptr)
+@ stdcall SHSetLocalizedName(wstr wstr long)
@ stub SHUpdateRecycleBinIcon
@ stdcall SheChangeDirA(str)
@ stub SheChangeDirExA
/*
* Copyright 1998 Juergen Schmied
* Copyright 2004 Henning Gerhardt
- * Copyright 2007 Daniel Reimer
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW
END
+/*
+ shellview background menu
+*/
MENU_002 MENU DISCARDABLE
BEGIN
POPUP ""
END
END
+/*
+ shellview item menu
+*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
POPUP ""
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
-CAPTION "Nach Verzeichnis durchsuchen"
+CAPTION "Verzeichnis auswählen"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
4, 40, 180, 120
}
+SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Meldung"
+FONT 8, "MS Shell Dlg"
+{
+ DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "Ja zu &allen", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "&Nein", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "Abbrechen", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ ICON "", IDD_ICON, 10, 10, 16, 16
+ LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
+}
+
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Informationen über %s"
PUSHBUTTON "Abbrechen", 14008, 140, 170, 60, 15, WS_TABSTOP
}
+
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
IDS_SHV_COLUMN9 "Kommentar"
IDS_SHV_COLUMN10 "Besitzer"
IDS_SHV_COLUMN11 "Gruppe"
+ IDS_SHV_COLUMN_DELFROM "Ursprung"
+ IDS_SHV_COLUMN_DELDATE "Gelöscht am"
/* special folders */
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "Arbeitsplatz"
+ IDS_RECYCLEBIN_FOLDER_NAME "Müll"
/* context menus */
IDS_VIEW_LARGE "&Große Symbole"
IDS_CREATEFOLDER_DENIED "Es konnte kein neues Verzeichnis erstellt werden: Zugriff verweigert."
IDS_CREATEFOLDER_CAPTION "Es trat ein Fehler beim Erstellen eines neuen Verzeichnisses auf"
- IDS_DELETEITEM_CAPTION "Bestätigung: Datei löschen"
+ IDS_DELETEITEM_CAPTION "Bestätigung: Objekt löschen"
IDS_DELETEFOLDER_CAPTION "Bestätigung: Verzeichnis löschen"
- IDS_DELETEITEM_TEXT "Sind Sie sich sicher, dass Sie die Datei '%1' löschen möchten ?"
- IDS_DELETEMULTIPLE_TEXT "Sind Sie sich sicher, dass Sie diese %1 Dateien löschen möchten ?"
- IDS_OVERWRITEFILE_TEXT "Möchten Sie, dass die Datei '%1' überschrieben wird ?"
+ IDS_DELETEITEM_TEXT "Sind Sie sich sicher, dass Sie '%1' löschen möchten?"
+ IDS_DELETEMULTIPLE_TEXT "Sind Sie sich sicher, dass Sie diese %1 Objekte löschen möchten?"
+ IDS_DELETESELECTED_TEXT "Sind Sie sich sicher, dass Sie die ausgewählten Objekte löschen möchten?"
+ IDS_TRASHITEM_TEXT "Sind Sie sich sicher, dass Sie '%1' in Müll verschieben möchten?"
+ IDS_TRASHFOLDER_TEXT "Sind Sie sich sicher, dass Sie '%1' und seinen Inhalt in den Müll verschieben möchten?"
+ IDS_TRASHMULTIPLE_TEXT "Sind Sie sich sicher, dass Sie diese %1 Dateien in den Müll verschieben möchten?"
+ IDS_CANTTRASH_TEXT "Das Objekt '%1' kann nicht in den Müll verschoben werden. Möchten Sie es stattdessen löschen?"
+ IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Bestätigung: Datei überschreiben"
+ IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
+ "If the files in the destination folder have the same names as files in the\n"\
+ "selected folder they will be replaced. Do you still want to move or copy\n"\
+ "the folder?"
/* message box strings */
IDS_RESTART_TITLE "Neu starten"
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Startmenü"
- IDS_MYMUSIC "Eigene Dateien\\Meine Musik"
- IDS_MYVIDEO "Eigene Dateien\\Meine Videos"
+ IDS_MYMUSIC "Meine Musik"
+ IDS_MYVIDEO "Meine Videos"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "Netzwerkumgebung"
IDS_TEMPLATES "Vorlagen"
IDS_COOKIES "Cookies"
IDS_HISTORY "Lokale Einstellungen\\Verlauf"
IDS_PROGRAM_FILES "Programme"
- IDS_MYPICTURES "Eigene Dateien\\Eigene Bilder"
+ IDS_MYPICTURES "Eigene Bilder"
IDS_PROGRAM_FILES_COMMON "Programme\\Gemeinsame Dateien"
IDS_COMMON_DOCUMENTS "Dokumente"
IDS_ADMINTOOLS "Startmenü\\Programme\\Verwaltung"
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
4, 40, 180, 120
}
+SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
+CAPTION "Browse for Folder"
+FONT 8, "MS Shell Dlg"
+{
+ LTEXT "", IDD_TITLE, 10, 8, 198, 24
+ LTEXT "", IDD_STATUS, 10, 25, 198, 12
+ LTEXT "Folder:", IDD_FOLDER, 10, 156, 40, 12
+ CONTROL "", IDD_TREEVIEW, "SysTreeView32",
+ TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
+ WS_BORDER | WS_TABSTOP,
+ 12, 38, 194, 105
+ EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 70, 14, WS_GROUP | WS_TABSTOP
+ DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP
+}
+
+SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Message"
+FONT 8, "MS Shell Dlg"
+{
+ DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ ICON "", IDD_ICON, 10, 10, 16, 16
+ LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
+}
+
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "About %s"
PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
PUSHBUTTON "Cancel", 14008, 140, 170, 60, 15, WS_TABSTOP
}
+
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
IDS_SHV_COLUMN9 "Comments"
IDS_SHV_COLUMN10 "Owner"
IDS_SHV_COLUMN11 "Group"
+ IDS_SHV_COLUMN_DELFROM "Original location"
+ IDS_SHV_COLUMN_DELDATE "Date deleted"
/* special folders */
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
+ IDS_RECYCLEBIN_FOLDER_NAME "Trash"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"
IDS_DELETEFOLDER_CAPTION "Confirm folder deletion"
IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?"
IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?"
- IDS_OVERWRITEFILE_TEXT "OverWrite File %1?"
- IDS_OVERWRITEFILE_CAPTION "Confirm File OverWrite"
+ IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?"
+ IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?"
+ IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?"
+ IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?"
+ IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?"
+ IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
+ IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite"
+ IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
+ "If the files in the destination folder have the same names as files in the\n"\
+ "selected folder they will be replaced. Do you still want to move or copy\n"\
+ "the folder?"
/* message box strings */
IDS_RESTART_TITLE "Restart"
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Start Menu"
- IDS_MYMUSIC "My Documents\\My Music"
- IDS_MYVIDEO "My Documents\\My Video"
+ IDS_MYMUSIC "My Music"
+ IDS_MYVIDEO "My Video"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Templates"
IDS_COOKIES "Cookies"
IDS_HISTORY "Local Settings\\History"
IDS_PROGRAM_FILES "Program Files"
- IDS_MYPICTURES "My Documents\\My Pictures"
+ IDS_MYPICTURES "My Pictures"
IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
IDS_COMMON_DOCUMENTS "Documents"
IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools"
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
- LTEXT "ReactOS is geschreven door:", 98, 8, 55, 137, 10
+ LTEXT "Wine is geschreven door:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
- LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18
- LTEXT "&Open:", 12305, 7, 39, 24, 10
+ LTEXT "Geef de naam van een programma, map, document, of Internet-adres op. Wine zal het vervolgens openen.", 12289, 36, 11, 182, 18
+ LTEXT "&Openen:", 12305, 7, 39, 28, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
- PUSHBUTTON "Cancel", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
- PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
-}
-
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Allgemein"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Extras"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
-}
-
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
+ PUSHBUTTON "Annuleren", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
+ PUSHBUTTON "&Bladeren...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
/*
- * Copyright 2005 Alexander N. Sørnes <alex@thehandofagony.com>
+ * Copyright 2005-2007 Alexander N. Sørnes <alex@thehandofagony.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
+LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL
MENU_001 MENU DISCARDABLE
BEGIN
MENUITEM "&Store ikoner", FCIDM_SHVIEW_BIGICON
- MENUITEM "&Små ikoner", FCIDM_SHVIEW_SMALLICON
+ MENUITEM "&Små ikoner", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW
END
BEGIN
MENUITEM "Etter &navn", 0x30 /* column 0 */
MENUITEM "Etter &type", 0x32 /* column 2 */
- MENUITEM "Etter &størrelse",0x31 /* ... */
+ MENUITEM "Etter &størrelse", 0x31 /* ... */
MENUITEM "Etter &dato", 0x33
MENUITEM SEPARATOR
- MENUITEM "Ordne &automatisk", FCIDM_SHVIEW_AUTOARRANGE
+ MENUITEM "Ordne &automatisk", FCIDM_SHVIEW_AUTOARRANGE
END
MENUITEM "Still opp ikoner", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM SEPARATOR
MENUITEM "Oppdater", FCIDM_SHVIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "Lim inn", FCIDM_SHVIEW_INSERT
- MENUITEM "Lim inn som snarvei", FCIDM_SHVIEW_INSERTLINK
+ MENUITEM "Lim inn som snarvei", FCIDM_SHVIEW_INSERTLINK
MENUITEM SEPARATOR
POPUP "Ny"
BEGIN
MENUITEM SEPARATOR
MENUITEM "&Opprett snarvei", FCIDM_SHVIEW_CREATELINK
MENUITEM "&Slett", FCIDM_SHVIEW_DELETE
- MENUITEM "&Gi nytt navn", FCIDM_SHVIEW_RENAME
+ MENUITEM "&Gi nytt navn", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
MENUITEM "Egenska&per", FCIDM_SHVIEW_PROPERTIES
END
4, 40, 180, 120
}
+SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Meldings"
+FONT 8, "MS Shell Dlg"
+{
+ DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "Ja til &alt", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "&Nei", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "&Avbry&t", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ ICON "", IDD_ICON, 10, 10, 16, 16
+ LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
+}
+
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Om %s"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
- LTEXT "ReactOS er laget av", 98, 8, 55, 137, 10
+ LTEXT "Wine er laget av", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Avbryt", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
- PUSHBUTTON "&Bla gjennom . . .", 12288, 170, 63, 54, 14, WS_TABSTOP
-}
-
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
+ PUSHBUTTON "&Bla . . .", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Allgemein"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Extras"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
-}
-
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
-}
-
-
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
IDS_SHV_COLUMN9 "Kommentarer"
IDS_SHV_COLUMN10 "Eier"
IDS_SHV_COLUMN11 "Gruppe"
+ IDS_SHV_COLUMN_DELFROM "Opprinnelig plassering"
+ IDS_SHV_COLUMN_DELDATE "Dato slettet"
/* special folders */
IDS_DESKTOP "Skrivebord"
IDS_MYCOMPUTER "Min datamaskin"
+ IDS_RECYCLEBIN_FOLDER_NAME "Papirkurv"
/* context menus */
IDS_VIEW_LARGE "&Store ikoner"
IDS_OPEN "Åpne"
IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet."
- IDS_CREATEFOLDER_CAPTION "Feil ved oppretting av ny mappe"
+ IDS_CREATEFOLDER_CAPTION "Klarte ikke opprette ny mappe"
IDS_DELETEITEM_CAPTION "Bekreft filsletting"
IDS_DELETEFOLDER_CAPTION "Bekreft sletting av mappe"
- IDS_DELETEITEM_TEXT "Virkelig slette '%1'?"
+ IDS_DELETEITEM_TEXT "Virkelig slette «%1»?"
IDS_DELETEMULTIPLE_TEXT "Virkelig slette disse %1 elementene?"
- IDS_OVERWRITEFILE_TEXT "Overskrive filen '%1'?"
+ IDS_DELETESELECTED_TEXT "Virkelig slette valgte element(er)??"
+ IDS_TRASHITEM_TEXT "Virkelig legge «%1» i papirkurven?"
+ IDS_TRASHFOLDER_TEXT "Virkelig legge «%1» og alt innholdet i papirkurven?"
+ IDS_TRASHMULTIPLE_TEXT "Virkelig legge disse %1 valgte elementene i papirkurven?"
+ IDS_CANTTRASH_TEXT "Elementet «%1» kan ikke legges i papirkurven. Vil du slette det i stedet?"
+ IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Bekreft overskriving av fil"
+ IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
+ "If the files in the destination folder have the same names as files in the\n"\
+ "selected folder they will be replaced. Do you still want to move or copy\n"\
+ "the folder?"
/* message box strings */
IDS_RESTART_TITLE "Starte på nytt"
- IDS_RESTART_PROMPT "Vil du starte på nytt?"
+ IDS_RESTART_PROMPT "Vil du simulere en omstart av Windows?"
IDS_SHUTDOWN_TITLE "Avslutt"
- IDS_SHUTDOWN_PROMPT "Vil du slå av maskinen?"
+ IDS_SHUTDOWN_PROMPT "Vil du avslutte Wine-økten?"
/* shell folder path default values */
IDS_PROGRAMS "Start-meny\\Programmer"
IDS_FAVORITES "Favoritter"
IDS_STARTUP "Start-meny\\Programmer\\Oppstart"
IDS_RECENT "Siste"
- IDS_SENDTO "Send til"
+ IDS_SENDTO "SendTo"
IDS_STARTMENU "Start-meny"
- IDS_MYMUSIC "Mine dokumenter\\Min musikk"
- IDS_MYVIDEO "Mine dokumenter\\Mine videoklipp"
+ IDS_MYMUSIC "Min musikk"
+ IDS_MYVIDEO "Mine videoklipp"
IDS_DESKTOPDIRECTORY "Skrivebord"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Maler"
- IDS_APPDATA "Applikasjon Data"
+ IDS_APPDATA "Programdata"
IDS_PRINTHOOD "Skrivere"
- IDS_LOCAL_APPDATA "Lokale innstillinger\\Applikasjon Data"
- IDS_INTERNET_CACHE "Lokale innstillinger\\Midlertidig Internett Filer"
- IDS_COOKIES "Informasjonskapsler"
- IDS_HISTORY "Lokale innstillinger\\Historie"
- IDS_PROGRAM_FILES "Program Filer"
- IDS_MYPICTURES "Mine dokumenter\\Mine bilder"
+ IDS_LOCAL_APPDATA "Lokale innstillinger\\Programdata"
+ IDS_INTERNET_CACHE "Lokale innstillinger\\Temporary Internet Files"
+ IDS_COOKIES "Cookies"
+ IDS_HISTORY "Lokale innstillinger\\Logg"
+ IDS_PROGRAM_FILES "Programfiler"
+ IDS_MYPICTURES "Mine bilder"
IDS_PROGRAM_FILES_COMMON "Programfiler\\Fellesfiler"
IDS_COMMON_DOCUMENTS "Dokumenter"
IDS_ADMINTOOLS "Start-meny\\Programmer\\Administrative verktøy"
IDS_COMMON_MUSIC "Dokumenter\\Min musikk"
IDS_COMMON_PICTURES "Dokumenter\\Mine bilder"
IDS_COMMON_VIDEO "Dokumenter\\Mine videoklipp"
- IDS_CDBURN_AREA "Lokale innstillinger\\Applikasjon Data\\Microsoft\\CD Brenning"
- IDS_DRIVE_FIXED "Lokal Disk"
- IDS_DRIVE_CDROM "CDROM"
- IDS_DRIVE_NETWORK "Network Disk"
+ IDS_CDBURN_AREA "Lokale innstillinger\\Programdata\\Microsoft\\CD Burning"
}
/*
* Copyright 1998 Juergen Schmied
* Copyright 2004 Piotr Caban
- * Made normal by Artek Wi\9cniewski aart3k@gmail.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
MENU_001 MENU DISCARDABLE
BEGIN
- MENUITEM "&Du¿e ikony", FCIDM_SHVIEW_BIGICON
- MENUITEM "&Ma³e ikony", FCIDM_SHVIEW_SMALLICON
- MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
- MENUITEM "&Szczegó³y", FCIDM_SHVIEW_REPORTVIEW
+ MENUITEM "&Du¿e Ikony", FCIDM_SHVIEW_BIGICON
+ MENUITEM "&Ma³e Ikony", FCIDM_SHVIEW_SMALLICON
+ MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
+ MENUITEM "&Szczegó³y", FCIDM_SHVIEW_REPORTVIEW
END
/*
BEGIN
POPUP "&Widok"
BEGIN
- MENUITEM "&Du¿e ikony", FCIDM_SHVIEW_BIGICON
- MENUITEM "&Ma³e ikony", FCIDM_SHVIEW_SMALLICON
+ MENUITEM "&Du¿e Ikony", FCIDM_SHVIEW_BIGICON
+ MENUITEM "&Ma³e Ikony", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Szczegó³y", FCIDM_SHVIEW_REPORTVIEW
END
END
MENUITEM "&Wyrównaj ikony", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM SEPARATOR
- MENUITEM "&Od\9cwie¿", FCIDM_SHVIEW_REFRESH
+ MENUITEM "&Od\9cwierz", FCIDM_SHVIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "W&klej", FCIDM_SHVIEW_INSERT
MENUITEM "Wklej s&krót", FCIDM_SHVIEW_INSERTLINK
BEGIN
POPUP ""
BEGIN
- MENUITEM "&Eksploruj", FCIDM_SHVIEW_EXPLORE
+ MENUITEM "&Eksploruj", FCIDM_SHVIEW_EXPLORE
MENUITEM "&Otwórz", FCIDM_SHVIEW_OPEN
MENUITEM SEPARATOR
MENUITEM "&Wytnij", FCIDM_SHVIEW_CUT
MENUITEM "&Kopiuj", FCIDM_SHVIEW_COPY
MENUITEM SEPARATOR
- MENUITEM "Utwórz &skrót", FCIDM_SHVIEW_CREATELINK
+ MENUITEM "Utwórz &Skrót", FCIDM_SHVIEW_CREATELINK
MENUITEM "&Usuñ", FCIDM_SHVIEW_DELETE
- MENUITEM "&Zmieñ nazwê", FCIDM_SHVIEW_RENAME
+ MENUITEM "&Zmieñ nazwê", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
MENUITEM "W³&a\9cciwo\9cci", FCIDM_SHVIEW_PROPERTIES
END
4, 40, 180, 120
}
+SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Komunikat"
+FONT 8, "MS Shell Dlg"
+{
+ DEFPUSHBUTTON "&Tak", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "Tak na &wszystkie", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "&Anuluj", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
+ ICON "", IDD_ICON, 10, 10, 16, 16
+ LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
+}
+
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "O %s"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
- LTEXT "ReactOS zawdziêcza swe istnienie nastêpuj¹cym osobom:", 98, 8, 55, 137, 10
+ LTEXT "Mo¿esz korzystaæ z Wine'a dziêki:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
- LTEXT "Wpisz nazwê programu, katalogu lub dokumentu, a ReactOS otworzy go dla Ciebie.", 12289, 36, 11, 182, 18
+ LTEXT "Wpisz nazwê programu, katalogu, dokumentu, a Wine otworzy go dla ciebie.", 12289, 36, 11, 182, 18
LTEXT "&Otwórz:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Przegl¹daj...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Allgemein"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Extras"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
-}
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
-}
-
-
-/*
- special folders
-*/
STRINGTABLE DISCARDABLE
{
+ /* columns in the shellview */
+ IDS_SHV_COLUMN1 "Plik"
+ IDS_SHV_COLUMN2 "Wielko\9cæ"
+ IDS_SHV_COLUMN3 "Typ"
+ IDS_SHV_COLUMN4 "Modyfikacja"
+ IDS_SHV_COLUMN5 "Atrybuty"
+ IDS_SHV_COLUMN6 "Wielko\9cæ"
+ IDS_SHV_COLUMN7 "Dostêpna wielko\9cæ"
+ IDS_SHV_COLUMN8 "Nazwa"
+ IDS_SHV_COLUMN9 "Komentarz"
+ IDS_SHV_COLUMN10 "W³a\9cciciel"
+ IDS_SHV_COLUMN11 "Grupa"
+ IDS_SHV_COLUMN_DELFROM "Lokacja oryginalna"
+ IDS_SHV_COLUMN_DELDATE "Data usuniêcia"
+
+ /* special folders */
IDS_DESKTOP "Pulpit"
IDS_MYCOMPUTER "Mój komputer"
-}
+ IDS_RECYCLEBIN_FOLDER_NAME "Kosz"
-/*
- context menus
-*/
-STRINGTABLE DISCARDABLE
-{
- IDS_VIEW_LARGE "&Du¿e ikony"
- IDS_VIEW_SMALL "&Ma³e ikony"
+ /* context menus */
+ IDS_VIEW_LARGE "&Du¿e Ikony"
+ IDS_VIEW_SMALL "&Ma³e Ikony"
IDS_VIEW_LIST "&Lista"
IDS_VIEW_DETAILS "&Szczegó³y"
IDS_SELECT "Zaznacz"
IDS_OPEN "Otwórz"
-}
-STRINGTABLE DISCARDABLE
-{
- IDS_CREATEFOLDER_DENIED "Nie mo¿na utworzyæ nowego katalogu: Brak dostêpu."
- IDS_CREATEFOLDER_CAPTION "B³¹d przy tworzeniu nowego katalogu"
- IDS_DELETEITEM_CAPTION "Potwierd\9f usuniêcie pliku"
+ IDS_CREATEFOLDER_DENIED "Nie mogê utworzyæ nowego katalogu: Brak dostêpu."
+ IDS_CREATEFOLDER_CAPTION "B³¹d przy tworzeniu nowego katalogu."
+ IDS_DELETEITEM_CAPTION "Potwierd\9f usuniêcia pliku"
IDS_DELETEFOLDER_CAPTION "Potwierd\9f usuniêcie katalogu"
IDS_DELETEITEM_TEXT "Czy jeste\9c pewien, ¿e chcesz usun¹æ '%1'?"
- IDS_DELETEMULTIPLE_TEXT "Czy jeste\9c pewien, ¿e chcesz usun¹æ %1 plików?"
- IDS_OVERWRITEFILE_TEXT "Zast¹piæ plik %1?"
+ IDS_DELETEMULTIPLE_TEXT "Czy jeste\9c pewien, ¿e chcesz usun¹æ te %1 pliki?"
+ IDS_DELETESELECTED_TEXT "Czy jeste\9c pewien, ¿e chcesz usun¹æ wybrane elementy?"
+ IDS_TRASHITEM_TEXT "Czy jeste\9c pewien, ¿e chcesz umie\9cciæ plik '%1' w Koszu?"
+ IDS_TRASHFOLDER_TEXT "Czy jeste\9c pewien, ¿e chcesz umie\9cciæ folder '%1' i ca³¹ jego zawarto\9cæ w koszu"
+ IDS_TRASHMULTIPLE_TEXT "Elementów: %1 - czy na pewno chcesz je umie\9cciæ w Koszu?"
+ IDS_CANTTRASH_TEXT "Nie mogê przenie\9cæ elementu '%1' do Kosza. Czy chcesz go zamiast tego usun¹æ?"
+ IDS_OVERWRITEFILE_TEXT "Ten folder ju¿ zawiera plik o nazwie '%1'.\n\nCzy chcesz go zast¹piæ?"
IDS_OVERWRITEFILE_CAPTION "Potwierd\9f zast¹pienie pliku"
-}
-
-/* columns in the shellview */
-STRINGTABLE
-BEGIN
- IDS_SHV_COLUMN1 "Plik"
- IDS_SHV_COLUMN2 "Wielko\9cæ"
- IDS_SHV_COLUMN3 "Typ"
- IDS_SHV_COLUMN4 "Zmodyfikowano"
- IDS_SHV_COLUMN5 "Atrybuty"
- IDS_SHV_COLUMN6 "Wielko\9cæ"
- IDS_SHV_COLUMN7 "Dostêpna wielko\9cæ"
- IDS_SHV_COLUMN8 "Nazwa"
- IDS_SHV_COLUMN9 "Komentarz"
-END
-
-/* message box strings */
-STRINGTABLE DISCARDABLE
-{
- IDS_RESTART_TITLE "Uruchom ponownie"
- IDS_RESTART_PROMPT "Czy chcesz zasymulowaæ zrestartowanie Windowsa?"
- IDS_SHUTDOWN_TITLE "Wy³¹cz"
- IDS_SHUTDOWN_PROMPT "Czy chcesz wy³¹czyæ sesjê ReactOS'a?"
+ IDS_OVERWRITEFOLDER_TEXT "Ten folder ju¿ zawiera folder o nazwie '%1'.\n\n"\
+ "Je¿eli w docelowym folderze wyst¹pi¹ pliki o takich samych nazwach jak\n"\
+ "w wybranym folderze, to zostan¹ one zast¹pione. Czy chcesz mimo to przenie\9cæ\n"\
+ "lub skopiowaæ folder?"
+
+ /* message box strings */
+ IDS_RESTART_TITLE "Uruchom ponownie"
+ IDS_RESTART_PROMPT "Czy chcesz zasymulowaæ zrestartowanie Windowsa?"
+ IDS_SHUTDOWN_TITLE "Wy³¹cz"
+ IDS_SHUTDOWN_PROMPT "Czy chcesz wy³¹czyæ sesjê Wine'a?"
+
+ /* shell folder path default values */
+ IDS_PROGRAMS "Menu Start\\Programy"
+ IDS_PERSONAL "Moje dokumenty"
+ IDS_FAVORITES "Ulubione"
+ IDS_STARTUP "Menu Start\\Programy\\AutoStart"
+ IDS_RECENT "Recent"
+ IDS_SENDTO "SendTo"
+ IDS_STARTMENU "Menu Start"
+ IDS_MYMUSIC "Moja muzyka"
+ IDS_MYVIDEO "Moje wideo"
+ IDS_DESKTOPDIRECTORY "Pulpit"
+ IDS_NETHOOD "NetHood"
+ IDS_TEMPLATES "Szablony"
+ IDS_APPDATA "Dane aplikacji"
+ IDS_PRINTHOOD "PrintHood"
+ IDS_LOCAL_APPDATA "Ustawienia lokalne\\Dane aplikacji"
+ IDS_INTERNET_CACHE "Ustawienia lokalne\\Temporary Internet Files"
+ IDS_COOKIES "Cookies"
+ IDS_HISTORY "Ustawienia Lokalne\\Historia"
+ IDS_PROGRAM_FILES "Program Files"
+ IDS_MYPICTURES "Moje obrazy"
+ IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
+ IDS_COMMON_DOCUMENTS "Dokumenty"
+ IDS_ADMINTOOLS "Menu Start\\Programy\\Narzêdzia administracyjne"
+ IDS_COMMON_MUSIC "Documenty\\Moja muzyka"
+ IDS_COMMON_PICTURES "Documenty\\Moje obrazy"
+ IDS_COMMON_VIDEO "Documenty\\Moje wideo"
+ IDS_CDBURN_AREA "Ustawienia lokalne\\Dane aplikacji\\Microsoft\\Nagrywanie dysków CD"
}
/*
* Copyright 1998 Juergen Schmied
* Copyright 2003 Marcelo Duarte
+ * Copyright 2006-2007 Américo José Melo
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
MENU_001 MENU DISCARDABLE
BEGIN
MENUITEM "&Detalhes", FCIDM_SHVIEW_REPORTVIEW
END
+
/*
shellview background menu
*/
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
+
MENU_002 MENU DISCARDABLE
BEGIN
POPUP ""
END
END
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
+
+MENU_002 MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ POPUP "&Mostrar"
+ BEGIN
+ MENUITEM "Ícones &grandes", FCIDM_SHVIEW_BIGICON
+ MENUITEM "Ícones &pequenos", FCIDM_SHVIEW_SMALLICON
+ MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
+ MENUITEM "&Detalhes", FCIDM_SHVIEW_REPORTVIEW
+ END
+ MENUITEM SEPARATOR
+ POPUP "O&rganizar ícones"
+ BEGIN
+ MENUITEM "Por &nome", 0x30 /* column 0 */
+ MENUITEM "Por &tipo", 0x32 /* column 2 */
+ MENUITEM "Por ta&manho", 0x31 /* ... */
+ MENUITEM "Por &data", 0x33
+ MENUITEM SEPARATOR
+ MENUITEM "Auto organi&zar", FCIDM_SHVIEW_AUTOARRANGE
+ END
+ MENUITEM "Alin&har ícones", FCIDM_SHVIEW_SNAPTOGRID
+ MENUITEM SEPARATOR
+ MENUITEM "&Actualizar", FCIDM_SHVIEW_REFRESH
+ MENUITEM SEPARATOR
+ MENUITEM "Co&lar", FCIDM_SHVIEW_INSERT
+ MENUITEM "Colar a&talho", FCIDM_SHVIEW_INSERTLINK
+ MENUITEM SEPARATOR
+ POPUP "Novo"
+ BEGIN
+ MENUITEM "&Pasta", FCIDM_SHVIEW_NEWFOLDER
+ MENUITEM "&Atalho", FCIDM_SHVIEW_NEWLINK
+ MENUITEM SEPARATOR
+ END
+ MENUITEM SEPARATOR
+ MENUITEM "Propriedades", FCIDM_SHVIEW_PROPERTIES
+ END
+END
+
+
/*
shellview item menu
*/
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
+
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
POPUP ""
END
END
+
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
+
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Procurar pasta"
4, 40, 180, 120
}
+
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
+
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Sobre %s"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
- LTEXT "ReactOS foi disponibilizado por:", 98, 8, 55, 137, 10
+ LTEXT "Wine foi disponibilizado por:", 98, 8, 55, 137, 10
}
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
+
+SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Acerca do %s"
+FONT 10, "MS Shell Dlg"
+{
+ DEFPUSHBUTTON "OK", IDOK, 153, 133, 50, 12, WS_TABSTOP
+ LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
+ ICON "", 1088, 10, 10, 14, 16
+ LTEXT "", 100, 30, 10, 137, 10
+ LTEXT "", 101, 30, 22, 137, 10
+ LTEXT "Wine disponibilizado por:", 98, 8, 55, 137, 10
+}
+
+
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
+
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
- LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, que o ReactOS irá abrí-lo para você.", 12289, 36, 11, 182, 18
+ LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, que o Wine irá abrí-lo para você.", 12289, 36, 11, 182, 18
LTEXT "&Abrir:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Procurar...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Tools"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
+SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION ""
+FONT 8, "MS Shell Dlg"
{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
+ ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
+ LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, que o Wine irá abrí-lo.", 12289, 36, 11, 182, 18
+ LTEXT "&Abrir:", 12305, 7, 39, 24, 10
+ CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
+ DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Cancelar", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
+ PUSHBUTTON "&Procurar...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
-}
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
STRINGTABLE DISCARDABLE
{
IDS_DELETEFOLDER_CAPTION "Confirmar exclusão de pasta"
IDS_DELETEITEM_TEXT "Você tem certeza que deseja excluir '%1'?"
IDS_DELETEMULTIPLE_TEXT "Você tem certeza que deseja excluir estes %1 itens?"
- IDS_OVERWRITEFILE_TEXT "Sobreescrever arquivo %1?"
+ IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Confirmar sobreescrever arquivo"
+ IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
+ "If the files in the destination folder have the same names as files in the\n"\
+ "selected folder they will be replaced. Do you still want to move or copy\n"\
+ "the folder?"
/* message box strings */
IDS_RESTART_TITLE "Reiniciar"
IDS_RESTART_PROMPT "Você quer simular a reinicialização do Windows?"
IDS_SHUTDOWN_TITLE "Desligar"
- IDS_SHUTDOWN_PROMPT "Você quer finalizar a sessão no ReactOS?"
+ IDS_SHUTDOWN_PROMPT "Você quer finalizar a sessão no Wine?"
/* shell folder path default values */
IDS_PROGRAMS "Menu Iniciar\\Programas"
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Menu Iniciar"
- IDS_MYMUSIC "Meus Documentos\\Minhas Músicas"
- IDS_MYVIDEO "Meus Documentos\\Meus Vídeos"
+ IDS_MYMUSIC "Minhas Músicas"
+ IDS_MYVIDEO "Meus Vídeos"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Templates"
IDS_COOKIES "Cookies"
IDS_HISTORY "Configurações locais\\Histórico"
IDS_PROGRAM_FILES "Arquivos de programas"
- IDS_MYPICTURES "Meus Documentos\\Minhas Imagens"
+ IDS_MYPICTURES "Minhas Imagens"
IDS_PROGRAM_FILES_COMMON "Arquivos de programas\\Arquivos comuns"
IDS_COMMON_DOCUMENTS "Documentos"
IDS_ADMINTOOLS "Menu Iniciar\\Programas\\Ferramentas Administrativas"
IDS_COMMON_PICTURES "Documentos\\Minhas Imagens"
IDS_COMMON_VIDEO "Documentos\\Meus Vídeos"
IDS_CDBURN_AREA "Configurações locais\\Dados de aplicativos\\Microsoft\\CD Burning"
- IDS_DRIVE_FIXED "Lokal Disk"
- IDS_DRIVE_CDROM "CDROM"
- IDS_DRIVE_NETWORK "Network Disk"
+}
+
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
+
+STRINGTABLE DISCARDABLE
+{
+ /* columns in the shellview */
+ IDS_SHV_COLUMN1 "Ficheiro"
+ IDS_SHV_COLUMN2 "Tamanho"
+ IDS_SHV_COLUMN3 "Tipo"
+ IDS_SHV_COLUMN4 "Modificado"
+ IDS_SHV_COLUMN5 "Atributos"
+ IDS_SHV_COLUMN6 "Tamanho"
+ IDS_SHV_COLUMN7 "Disponível"
+ IDS_SHV_COLUMN8 "Nome"
+ IDS_SHV_COLUMN9 "Comentários"
+ IDS_SHV_COLUMN10 "Dono"
+ IDS_SHV_COLUMN11 "Grupo"
+
+ /* special folders */
+ IDS_DESKTOP "Ambiente de trabalho"
+ IDS_MYCOMPUTER "O Meu Computador"
+
+ /* context menus */
+ IDS_VIEW_LARGE "Ícones &grandes"
+ IDS_VIEW_SMALL "Ícones &pequenos"
+ IDS_VIEW_LIST "&Lista"
+ IDS_VIEW_DETAILS "&Detalhes"
+ IDS_SELECT "Seleccionar"
+ IDS_OPEN "Abrir"
+
+ IDS_CREATEFOLDER_DENIED "Não é possível criar nova pasta: Permissão negada."
+ IDS_CREATEFOLDER_CAPTION "Erro durante a criação da nova pasta"
+ IDS_DELETEITEM_CAPTION "Confirmar exclusão do ficheiro"
+ IDS_DELETEFOLDER_CAPTION "Confirmar exclusão da pasta"
+ IDS_DELETEITEM_TEXT "Tem certeza que deseja excluir '%1'?"
+ IDS_DELETEMULTIPLE_TEXT "Tem certeza que deseja excluir estes %1 itens?"
+ IDS_OVERWRITEFILE_TEXT "Substituir ficheiro %1?"
+ IDS_OVERWRITEFILE_CAPTION "Confirmar substituição de ficheiro"
+
+ /* message box strings */
+ IDS_RESTART_TITLE "Reiniciar"
+ IDS_RESTART_PROMPT "Deseja simular a reinicialização do Windows?"
+ IDS_SHUTDOWN_TITLE "Desligar"
+ IDS_SHUTDOWN_PROMPT "Deseja finalizar esta sessão do Wine?"
+
+ /* shell folder path default values */
+ IDS_PROGRAMS "Menu Iniciar\\Programas"
+ IDS_PERSONAL "OS Meus Documentos"
+ IDS_FAVORITES "Favoritos"
+ IDS_STARTUP "Menu Iniciar\\Programas\\Iniciar"
+ IDS_RECENT "Recentes"
+ IDS_SENDTO "Enviar Para"
+ IDS_STARTMENU "Menu Iniciar"
+ IDS_MYMUSIC "As Minhas Músicas"
+ IDS_MYVIDEO "Os Meus Vídeos"
+ IDS_DESKTOPDIRECTORY "Ambiente de Trabalho"
+ IDS_NETHOOD "NetHood"
+ IDS_TEMPLATES "Modelos"
+ IDS_APPDATA "Application Data"
+ IDS_PRINTHOOD "PrintHood"
+ IDS_LOCAL_APPDATA "Definições locais\\Application Data"
+ IDS_INTERNET_CACHE "Definições locais\\Temporary Internet Files"
+ IDS_COOKIES "Cookies"
+ IDS_HISTORY "Definições locais\\Histórico"
+ IDS_PROGRAM_FILES "Programas"
+ IDS_MYPICTURES "As Minhas Imagens"
+ IDS_PROGRAM_FILES_COMMON "Programas\\Ficheiros comuns"
+ IDS_COMMON_DOCUMENTS "Os Meus Documentos"
+ IDS_ADMINTOOLS "Menu Iniciar\\Programas\\Ferramentas Administrativas"
+ IDS_COMMON_MUSIC "Os Meus Documentos\\As Minhas Músicas"
+ IDS_COMMON_PICTURES "Os Meus Documentos\\As Minhas Imagens"
+ IDS_COMMON_VIDEO "Os Meus Documentos\\Os Meus Vídeos"
+ IDS_CDBURN_AREA "Definições locais\\Application Data\\Microsoft\\CD Burning"
}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
MENUITEM "&Ïîäðîáíî", FCIDM_SHVIEW_REPORTVIEW
END
MENUITEM SEPARATOR
- POPUP "Âûñòðîèòü &çíà÷êè"
+ POPUP "Óïîðÿäî÷èòü &çíà÷êè"
BEGIN
MENUITEM "Ïî &èìåíè", 0x30 /* column 0 */
MENUITEM "Ïî &òèïó", 0x32 /* column 2 */
MENUITEM SEPARATOR
POPUP "Ñîçäàòü"
BEGIN
- MENUITEM "&Ïàïêó", FCIDM_SHVIEW_NEWFOLDER
+ MENUITEM "&Ïàïêà", FCIDM_SHVIEW_NEWFOLDER
MENUITEM "&ßðëûê", FCIDM_SHVIEW_NEWLINK
MENUITEM SEPARATOR
END
MENUITEM "&Êîïèðîâàòü", FCIDM_SHVIEW_COPY
MENUITEM SEPARATOR
MENUITEM "Ñîçäàòü &ÿðëûê", FCIDM_SHVIEW_CREATELINK
- MENUITEM "&Óäàëèòü", FCIDM_SHVIEW_DELETE
+ MENUITEM "&Óäàëìòü", FCIDM_SHVIEW_DELETE
MENUITEM "Ïåðåè&ìåíîâàòü", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
MENUITEM "Ñâî&éñòâà", FCIDM_SHVIEW_PROPERTIES
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
-CAPTION "Ïðîâîäíèê"
+CAPTION "Îáçîð"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "Äà", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
- LTEXT "Ðàçðàáîò÷èêè ReactOS:", 98, 8, 55, 137, 10
+ LTEXT "Ðàçðàáîò÷èêè Wine:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
- LTEXT "Ââåäèòå èìÿ ïðîãðàììû, ïàïêè, äîêóìåíòà èëè ðåñóðñ Èíòåðíåòà, è ReactOS îòêðîåò èõ.", 12289, 36, 11, 182, 18
- LTEXT "&Îòêðûòü:", 12305, 7, 39, 32, 10
- CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 42, 37, 179, 100
+ LTEXT "Ââåäèòå èìÿ ïðîãðàììû, ïàïêè, äîêóìåíòà èëè ðåñóðñ Èíòåðíåòà, è Wine îòêðîåò èõ.", 12289, 36, 11, 182, 18
+ LTEXT "&Îòêðûòü:", 12305, 7, 39, 24, 10
+ CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Îòìåíà", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Îá&çîð...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Tools"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
-}
-
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
-}
-
-
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
IDS_SHV_COLUMN1 "Èìÿ"
IDS_SHV_COLUMN2 "Ðàçìåð"
IDS_SHV_COLUMN3 "Òèï"
- IDS_SHV_COLUMN4 "Èçìåíåí"
+ IDS_SHV_COLUMN4 "Èçìåí¸í"
IDS_SHV_COLUMN5 "Àòðèáóòû"
- IDS_SHV_COLUMN6 "Ïîëíûé îáúåì"
+ IDS_SHV_COLUMN6 "Ïîëíûé îáú¸ì"
IDS_SHV_COLUMN7 "Ñâîáîäíî"
IDS_SHV_COLUMN8 "Èìÿ"
IDS_SHV_COLUMN9 "Êîììåíòàðèé"
IDS_SELECT "&Âûáðàòü"
IDS_OPEN "&Îòêðûòü"
- IDS_CREATEFOLDER_DENIED "Íåâîçìîæíî ñîçäàòü ïàïêó - îòêàçàíî â äîñòóïå"
+ IDS_CREATEFOLDER_DENIED "Íåâîçìîæíî ñîçäàòü ïàïêó - íåò ïîëíîìî÷èé."
IDS_CREATEFOLDER_CAPTION "Îøèáêà âî âðåìÿ ñîçäàíèÿ ïàïêè"
IDS_DELETEITEM_CAPTION "Ïîäòâåðæäåíèå óäàëåíèÿ ôàéëà"
IDS_DELETEFOLDER_CAPTION "Ïîäòâåðæäåíèå óäàëåíèÿ ïàïêè"
IDS_DELETEITEM_TEXT "Óäàëèòü '%1'?"
- IDS_DELETEMULTIPLE_TEXT "Óäàëèòü ýòè îáüåêòû %1?"
- IDS_OVERWRITEFILE_TEXT "Çàìåíèòü ôàéë(û) %1?"
+ IDS_DELETEMULTIPLE_TEXT "Óäàëèòü ýòè îáüåêòû (%1?"
+ IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Ïîäòâåðæäåíèå çàìåíû ôàéëà"
+ IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
+ "If the files in the destination folder have the same names as files in the\n"\
+ "selected folder they will be replaced. Do you still want to move or copy\n"\
+ "the folder?"
/* message box strings */
IDS_RESTART_TITLE "Ïåðåçàãðóçèòü"
- IDS_RESTART_PROMPT "Âû äåéñòâèòåëüíî õîòèòå ïåðåçàãðóçèòü ReactOS?"
+ IDS_RESTART_PROMPT "Âû õîòèòå ñèìóëèðîâàòü ïåðåçàïóñê Windows?"
IDS_SHUTDOWN_TITLE "Âûêëþ÷èòü ïèòàíèå"
- IDS_SHUTDOWN_PROMPT "Âû äåéñòâèòåëüíî õîòèòå çàêîí÷èòü ðàáîòó ñ ReactOS?"
+ IDS_SHUTDOWN_PROMPT "Çàêîí÷èòü ðàáîòó ñ Wine?"
/* shell folder path default values */
IDS_PROGRAMS "Ãëàâíîå ìåíþ\\Ïðîãðàììû"
IDS_PERSONAL "Ìîè äîêóìåíòû"
IDS_FAVORITES "Èçáðàííîå"
IDS_STARTUP "Ãëàâíîå ìåíþ\\Ïðîãðàììû\\Àâòîçàãðóçêà"
- IDS_RECENT "Recent"
+ IDS_RECENT "Íåäàâíåå"
IDS_SENDTO "Îòïðàâèòü"
IDS_STARTMENU "Ãëàâíîå ìåíþ"
- IDS_MYMUSIC "Ìîè äîêóìåíòû\\Ìîÿ ìóçûêà"
- IDS_MYVIDEO "Ìîè äîêóìåíòû\\Ìîè ôèëüìû"
+ IDS_MYMUSIC "Ìîÿ ìóçûêà"
+ IDS_MYVIDEO "Ìîè ôèëüìû"
IDS_DESKTOPDIRECTORY "Ðàáî÷èé ñòîë"
- IDS_NETHOOD "NetHood"
+ IDS_NETHOOD "Ñåòåâîå îêðóæåíèå"
IDS_TEMPLATES "Øàáëîíû"
IDS_APPDATA "Application Data"
- IDS_PRINTHOOD "PrintHood"
+ IDS_PRINTHOOD "Ïðèíòåðû"
IDS_LOCAL_APPDATA "Local Settings\\Application Data"
IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "Local Settings\\History"
IDS_PROGRAM_FILES "Program Files"
- IDS_MYPICTURES "Ìîè äîêóìåíòû\\Ìîè ðèñóíêè"
+ IDS_MYPICTURES "Ìîè ðèñóíêè"
IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
IDS_COMMON_DOCUMENTS "Îáùèå äîêóìåíòû"
- IDS_ADMINTOOLS "Ãëàâíîå ìåíþ\\Ïðîãðàììû\\Àäìèíèñòðèðîâàíèå"
+ IDS_ADMINTOOLS "Ãëàâíîå ìåíþ\\Ïðîãðàììû\\Administrative Tools"
IDS_COMMON_MUSIC "Îáùèå äîêóìåíòû\\Ìîÿ ìóçûêà"
IDS_COMMON_PICTURES "Îáùèå äîêóìåíòû\\Ìîè ðèñóíêè"
IDS_COMMON_VIDEO "Îáùèå äîêóìåíòû\\Ìîè ôèëüìû"
IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning"
- IDS_DRIVE_FIXED "Lokal Disk"
- IDS_DRIVE_CDROM "CDROM"
- IDS_DRIVE_NETWORK "Network Disk"
}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
- LTEXT "ReactOS so ustvarili:", 98, 8, 55, 137, 10
+ LTEXT "Wine so ustvarili:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
- LTEXT "Vnesite ime programa, mape, dokumenta ali spletne strani, in ReactOS ga (jo) bo odprl.", 12289, 36, 11, 182, 18
+ LTEXT "Vnesite ime programa, mape, dokumenta ali spletne strani, in Wine ga (jo) bo odprl.", 12289, 36, 11, 182, 18
LTEXT "&Odpri:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "V redu", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Pre&brskaj", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Tools"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
-}
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
-}
-
/* columns in the shellview */
STRINGTABLE LANGUAGE LANG_SLOVENIAN, SUBLANG_NEUTRAL
BEGIN
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
- LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18
+ LTEXT "Type the name of a program, folder, document, or Internet resource, and Wine will open it for you.", 12289, 36, 11, 182, 18
LTEXT "&Open:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Tools"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
-}
-
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
-}
-
/* columns in the shellview */
STRINGTABLE LANGUAGE LANG_SLOVAK, SUBLANG_NEUTRAL
BEGIN
/*
- * Copyright 2005 David Nordenberg
+ * Copyright 1998 Juergen Schmied
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
-
-MENU_001 MENU DISCARDABLE
-BEGIN
- MENUITEM "&Stora ikoner", FCIDM_SHVIEW_BIGICON
- MENUITEM "S&må ikoner", FCIDM_SHVIEW_SMALLICON
- MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
- MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW
-END
-
-/*
- shellview background menu
-*/
-MENU_002 MENU DISCARDABLE
-BEGIN
- POPUP ""
- BEGIN
- POPUP "&Visa"
- BEGIN
- MENUITEM "&Stora ikoner", FCIDM_SHVIEW_BIGICON
- MENUITEM "S&må ikoner", FCIDM_SHVIEW_SMALLICON
- MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
- MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW
- END
- MENUITEM SEPARATOR
- POPUP "Ordna &ikoner efter"
- BEGIN
- MENUITEM "&Namn", 0x30 /* column 0 */
- MENUITEM "&Typ", 0x32 /* column 2 */
- MENUITEM "&Storlek", 0x31 /* ... */
- MENUITEM "&Datum", 0x33
- MENUITEM SEPARATOR
- MENUITEM "&Ordna automatiskt", FCIDM_SHVIEW_AUTOARRANGE
- END
- MENUITEM "Rada upp ikoner", FCIDM_SHVIEW_SNAPTOGRID
- MENUITEM SEPARATOR
- MENUITEM "&Uppdatera", FCIDM_SHVIEW_REFRESH
- MENUITEM SEPARATOR
- MENUITEM "K&listra in", FCIDM_SHVIEW_INSERT
- MENUITEM "Klistra in som genväg", FCIDM_SHVIEW_INSERTLINK
- MENUITEM SEPARATOR
- POPUP "&Ny"
- BEGIN
- MENUITEM "Ny &mapp", FCIDM_SHVIEW_NEWFOLDER
- MENUITEM "Ny &genväg", FCIDM_SHVIEW_NEWLINK
- MENUITEM SEPARATOR
- END
- MENUITEM SEPARATOR
- MENUITEM "&Egenskaper", FCIDM_SHVIEW_PROPERTIES
- END
-END
-
-/*
- shellview item menu
-*/
-MENU_SHV_FILE MENU DISCARDABLE
-BEGIN
- POPUP ""
- BEGIN
- MENUITEM "&Utforska", FCIDM_SHVIEW_EXPLORE
- MENUITEM "&Öppna", FCIDM_SHVIEW_OPEN
- MENUITEM SEPARATOR
- MENUITEM "&Klipp ut", FCIDM_SHVIEW_CUT
- MENUITEM "K&opiera", FCIDM_SHVIEW_COPY
- MENUITEM SEPARATOR
- MENUITEM "Skapa &genväg", FCIDM_SHVIEW_CREATELINK
- MENUITEM "&Ta bort", FCIDM_SHVIEW_DELETE
- MENUITEM "&Byt namn", FCIDM_SHVIEW_RENAME
- MENUITEM SEPARATOR
- MENUITEM "&Egenskaper", FCIDM_SHVIEW_PROPERTIES
- END
-END
-
-SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
-STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
-CAPTION "Bläddra efter mapp"
-FONT 8, "MS Shell Dlg"
-{
- DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
- PUSHBUTTON "Avbryt", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
- LTEXT "", IDD_TITLE, 4, 4, 180, 12
- LTEXT "", IDD_STATUS, 4, 25, 180, 12
- CONTROL "", IDD_TREEVIEW, "SysTreeView32",
- TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
- WS_BORDER | WS_TABSTOP,
- 4, 40, 180, 120
-}
+LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
- LTEXT "ReactOS hade inte varit möjligt utan dessa personer:", 98, 8, 55, 137, 10
+ LTEXT "Wine hade inte varit möjligt utan dessa personer:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
-LTEXT "Skriv namnet på ett program, en mapp eller ett dokument för att öppna det.", 12289, 36, 11, 182, 18
+ LTEXT "Skriv namnet på ett program, en mapp eller ett dokument och wine kommer att öppna det för dig.", 12289, 36, 11, 182, 18
LTEXT "&Öppna:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Avbryt", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Bläddra...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Tools"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
-}
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
-}
-
-/*
- special folders
-*/
-STRINGTABLE DISCARDABLE
-{
- IDS_DESKTOP "Skrivbord"
- IDS_MYCOMPUTER "Den här datorn"
-}
-
-/*
- context menus
-*/
-STRINGTABLE DISCARDABLE
-{
- IDS_VIEW_LARGE "&Stora ikoner"
- IDS_VIEW_SMALL "S&må ikoner"
- IDS_VIEW_LIST "&Lista"
- IDS_VIEW_DETAILS "&Detaljer"
- IDS_SELECT "Välj"
- IDS_OPEN "Öppna"
-}
-
-STRINGTABLE DISCARDABLE
-{
- IDS_CREATEFOLDER_DENIED "Kan inte skapa ny mapp: Åtkomst nekad."
- IDS_CREATEFOLDER_CAPTION "Fel vid försök att skapa ny mapp"
- IDS_DELETEITEM_CAPTION "Bekräfta borttagning av fil"
- IDS_DELETEFOLDER_CAPTION "Bekräfta borttagning av mapp"
- IDS_DELETEITEM_TEXT "Är du säker på att du vill ta bort '%1'?"
- IDS_DELETEMULTIPLE_TEXT "Är du säker på att du vill ta bort de här %1 objekten?"
- IDS_OVERWRITEFILE_TEXT "Skriv över fil %1?"
- IDS_OVERWRITEFILE_CAPTION "Bekräfta filöverskrivning"
-}
-
-/* columns in the shellview */
-STRINGTABLE
-BEGIN
- IDS_SHV_COLUMN1 "Fil"
- IDS_SHV_COLUMN2 "Storlek"
- IDS_SHV_COLUMN3 "Typ"
- IDS_SHV_COLUMN4 "Modifierad"
- IDS_SHV_COLUMN5 "Attribut"
- IDS_SHV_COLUMN6 "Storlek"
- IDS_SHV_COLUMN7 "Storlek tillgänglig"
- IDS_SHV_COLUMN8 "Namn"
- IDS_SHV_COLUMN9 "Kommentarer"
-END
-
-/* message box strings */
-STRINGTABLE DISCARDABLE
-{
- IDS_RESTART_TITLE "Starta om"
- IDS_RESTART_PROMPT "Vill du starta om datorn?"
- IDS_SHUTDOWN_TITLE "Stäng av"
- IDS_SHUTDOWN_PROMPT "Vill du stänga av datorn?"
-}
-
-/* shell folder path default values */
-STRINGTABLE DISCARDABLE
-{
- IDS_PROGRAMS "Start-meny\\Program"
- IDS_PERSONAL "Mina dokument"
- IDS_FAVORITES "Favoriter"
- IDS_STARTUP "Start-meny\\Program\\Autostart"
- IDS_RECENT "Tidigare"
- IDS_SENDTO "Skicka till"
- IDS_STARTMENU "Start-meny"
- IDS_MYMUSIC "Mina dokument\\Min musik"
- IDS_MYVIDEO "Mina dokument\\Mina videoklipp"
- IDS_DESKTOPDIRECTORY "Skrivbord"
- IDS_NETHOOD "Nätverk"
- IDS_TEMPLATES "Mallar"
- IDS_APPDATA "Application Data"
- IDS_PRINTHOOD "Skrivare"
- IDS_LOCAL_APPDATA "Lokala inställningar\\Application Data"
- IDS_INTERNET_CACHE "Temporary Internet Files"
- IDS_COOKIES "Cookies"
- IDS_HISTORY "Tidigare"
- IDS_PROGRAM_FILES "Program"
- IDS_MYPICTURES "Mina dokument\\Mina bilder"
- IDS_PROGRAM_FILES_COMMON "Program\\Delade filer"
- IDS_COMMON_DOCUMENTS "Delade dokument"
- IDS_ADMINTOOLS "Start-meny\\Program\\Administrativa verktyg"
- IDS_COMMON_MUSIC "Delade dokument\\Min musik"
- IDS_COMMON_PICTURES "Delade dokument\\Mina bilder"
- IDS_COMMON_VIDEO "Delade dokument\\Mina videoklipp"
- IDS_CDBURN_AREA "Lokala inställningar\\Application Data\\Microsoft\\CD Burning"
- IDS_DRIVE_FIXED "Local Disk"
- IDS_DRIVE_CDROM "CDROM"
- IDS_DRIVE_NETWORK "Network Disk"
-}
--- /dev/null
+/*
+ * Copyright 2006 Fatih Aþýcý
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+MENU_001 MENU DISCARDABLE
+BEGIN
+ MENUITEM "Bü&yük Simgeler", FCIDM_SHVIEW_BIGICON
+ MENUITEM "Kü&çük Simgeler", FCIDM_SHVIEW_SMALLICON
+ MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW
+ MENUITEM "&Ayrýntýlý", FCIDM_SHVIEW_REPORTVIEW
+END
+
+/*
+ shellview background menu
+*/
+MENU_002 MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ POPUP "&Görünüm"
+ BEGIN
+ MENUITEM "Bü&yük Simgeler", FCIDM_SHVIEW_BIGICON
+ MENUITEM "Kü&çük Simgeler", FCIDM_SHVIEW_SMALLICON
+ MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW
+ MENUITEM "&Ayrýntýlý", FCIDM_SHVIEW_REPORTVIEW
+ END
+ MENUITEM SEPARATOR
+ POPUP "&Simgeleri Düzenle"
+ BEGIN
+ MENUITEM "&Ada Göre", 0x30 /* column 0 */
+ MENUITEM "&Türe Göre", 0x32 /* column 2 */
+ MENUITEM "&Boyuta Göre", 0x31 /* ... */
+ MENUITEM "&Zamana Göre", 0x33
+ MENUITEM SEPARATOR
+ MENUITEM "&Otomatik Düzenle", FCIDM_SHVIEW_AUTOARRANGE
+ END
+ MENUITEM "Izgaraya Uydur", FCIDM_SHVIEW_SNAPTOGRID
+ MENUITEM SEPARATOR
+ MENUITEM "Yenile", FCIDM_SHVIEW_REFRESH
+ MENUITEM SEPARATOR
+ MENUITEM "Yapýþtýr", FCIDM_SHVIEW_INSERT
+ MENUITEM "Kýsayol Yapýþtýr", FCIDM_SHVIEW_INSERTLINK
+ MENUITEM SEPARATOR
+ POPUP "Yeni"
+ BEGIN
+ MENUITEM "Yeni &Dizin", FCIDM_SHVIEW_NEWFOLDER
+ MENUITEM "Yeni &Kýsayol", FCIDM_SHVIEW_NEWLINK
+ MENUITEM SEPARATOR
+ END
+ MENUITEM SEPARATOR
+ MENUITEM "Özellikler", FCIDM_SHVIEW_PROPERTIES
+ END
+END
+
+/*
+ shellview item menu
+*/
+MENU_SHV_FILE MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "A&raþtýr", FCIDM_SHVIEW_EXPLORE
+ MENUITEM "&Aç", FCIDM_SHVIEW_OPEN
+ MENUITEM SEPARATOR
+ MENUITEM "&Kes", FCIDM_SHVIEW_CUT
+ MENUITEM "K&opyala", FCIDM_SHVIEW_COPY
+ MENUITEM SEPARATOR
+ MENUITEM "Kýsayol O&luþtur", FCIDM_SHVIEW_CREATELINK
+ MENUITEM "&Sil", FCIDM_SHVIEW_DELETE
+ MENUITEM "&Yeniden Adlandýr", FCIDM_SHVIEW_RENAME
+ MENUITEM SEPARATOR
+ MENUITEM "&Özellikler", FCIDM_SHVIEW_PROPERTIES
+ END
+END
+
+SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
+CAPTION "Dizine Gözat"
+FONT 8, "MS Shell Dlg"
+{
+ DEFPUSHBUTTON "Tamam", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "Ýptal", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
+ LTEXT "", IDD_TITLE, 4, 4, 180, 12
+ LTEXT "", IDD_STATUS, 4, 25, 180, 12
+ CONTROL "", IDD_TREEVIEW, "SysTreeView32",
+ TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
+ WS_BORDER | WS_TABSTOP,
+ 4, 40, 180, 120
+}
+
+SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "%s Hakkýnda"
+FONT 10, "MS Shell Dlg"
+{
+ DEFPUSHBUTTON "Tamam", IDOK, 153, 133, 50, 12, WS_TABSTOP
+ LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
+ ICON "", 1088, 10, 10, 14, 16
+ LTEXT "", 100, 30, 10, 137, 10
+ LTEXT "", 101, 30, 22, 137, 10
+ LTEXT "Wine'ý size sunan geliþtiriciler:", 98, 8, 55, 137, 10
+}
+
+SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
+STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION ""
+FONT 8, "MS Shell Dlg"
+{
+ ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
+ LTEXT "Herhangi bir program, dizin, belge veya Internet kaynaðý seçin ve Wine sizin için açsýn.", 12289, 36, 11, 182, 18
+ LTEXT "&Aç:", 12305, 7, 39, 24, 10
+ CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
+ DEFPUSHBUTTON "Tamam", IDOK, 62, 63, 50, 14, WS_TABSTOP
+ PUSHBUTTON "Ýptal", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
+ PUSHBUTTON "&Gözat...", 12288, 170, 63, 50, 14, WS_TABSTOP
+}
+
+STRINGTABLE DISCARDABLE
+{
+ /* columns in the shellview */
+ IDS_SHV_COLUMN1 "Dosya"
+ IDS_SHV_COLUMN2 "Boyut"
+ IDS_SHV_COLUMN3 "Tür"
+ IDS_SHV_COLUMN4 "Düzenlenme"
+ IDS_SHV_COLUMN5 "Öznitelikler"
+ IDS_SHV_COLUMN6 "Boyut"
+ IDS_SHV_COLUMN7 "Kullanýlabilir Alan"
+ IDS_SHV_COLUMN8 "Ad"
+ IDS_SHV_COLUMN9 "Açýklamalar"
+ IDS_SHV_COLUMN10 "Sahip"
+ IDS_SHV_COLUMN11 "Grup"
+ IDS_SHV_COLUMN_DELFROM "Özgün konum"
+ IDS_SHV_COLUMN_DELDATE "Silinme tarihi"
+
+ /* special folders */
+ IDS_DESKTOP "Masaüstü"
+ IDS_MYCOMPUTER "Bilgisayarým"
+ IDS_RECYCLEBIN_FOLDER_NAME "Çöp"
+
+ /* context menus */
+ IDS_VIEW_LARGE "Bü&yük Simgeler"
+ IDS_VIEW_SMALL "Kü&çük Simgeler"
+ IDS_VIEW_LIST "&Liste"
+ IDS_VIEW_DETAILS "&Ayrýntýlý"
+ IDS_SELECT "Seç"
+ IDS_OPEN "Aç"
+
+ IDS_CREATEFOLDER_DENIED "Yeni dizin oluþturulamýyor: Eriþim engellendi."
+ IDS_CREATEFOLDER_CAPTION "Dizin oluþturma sýrasýnda hata"
+ IDS_DELETEITEM_CAPTION "Dosya silmeyi onayla"
+ IDS_DELETEFOLDER_CAPTION "Dizin silmeyi onayla"
+ IDS_DELETEITEM_TEXT "'%1' öðesini silmek istediðinizden emin misiniz?"
+ IDS_DELETEMULTIPLE_TEXT "Bu %1 öðeyi silmek istediðinizden emin misiniz?"
+ IDS_DELETESELECTED_TEXT "Seçili öðeleri silmek istediðinizden emin misiniz?"
+ IDS_TRASHITEM_TEXT "'%1' adlý öðeyi çöpe göndermek istediðinizden emin misiniz?"
+ IDS_TRASHFOLDER_TEXT "'%1' adlý öðeyi ve tüm içeriðini çöpe göndermek istediðinizden emin misiniz?"
+ IDS_TRASHMULTIPLE_TEXT "Bu %1 öðeyi çöpe göndermek istediðinizden emin misiniz?"
+ IDS_CANTTRASH_TEXT "'%1' adlý öðe çöpe gönderilemiyor. Tamamen silmek ister misiniz?"
+ IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
+ IDS_OVERWRITEFILE_CAPTION "Dosya Üzerine Yazmayý Onayla"
+ IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
+ "If the files in the destination folder have the same names as files in the\n"\
+ "selected folder they will be replaced. Do you still want to move or copy\n"\
+ "the folder?"
+
+ /* message box strings */
+ IDS_RESTART_TITLE "Yeniden Baþlat"
+ IDS_RESTART_PROMPT "Windows Yeniden Baþlatma taklit edilsin mi?"
+ IDS_SHUTDOWN_TITLE "Oturumu Kapat"
+ IDS_SHUTDOWN_PROMPT "Wine oturumunuzu kapatmak istediðinizden emin misiniz?"
+
+ /* shell folder path default values */
+ IDS_PROGRAMS "Start Menu\\Programlar"
+ IDS_PERSONAL "Belgelerim"
+ IDS_FAVORITES "Sýk Kullanýlanlar"
+ IDS_STARTUP "Start Menu\\Programlar\\Baþlangýç"
+ IDS_RECENT "Recent"
+ IDS_SENDTO "SendTo"
+ IDS_STARTMENU "Start Menu"
+ IDS_MYMUSIC "Belgelerim\\Müziðim"
+ IDS_MYVIDEO "Belgelerim\\Vidyolarým"
+ IDS_DESKTOPDIRECTORY "Desktop"
+ IDS_NETHOOD "NetHood"
+ IDS_TEMPLATES "Templates"
+ IDS_APPDATA "Application Data"
+ IDS_PRINTHOOD "PrintHood"
+ IDS_LOCAL_APPDATA "Local Settings\\Application Data"
+ IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files"
+ IDS_COOKIES "Cookies"
+ IDS_HISTORY "Local Settings\\History"
+ IDS_PROGRAM_FILES "Program Files"
+ IDS_MYPICTURES "Belgelerim\\Resimlerim"
+ IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
+ IDS_COMMON_DOCUMENTS "Belgeler"
+ IDS_ADMINTOOLS "Start Menu\\Programlar\\Yönetimsel Araçlar"
+ IDS_COMMON_MUSIC "Belgeler\\Müziðim"
+ IDS_COMMON_PICTURES "Belgeler\\Resimlerim"
+ IDS_COMMON_VIDEO "Belgeler\\Videolarým"
+ IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning"
+}
/*
* Copyright 2004 Ilya Korniyko
- * 2007 Artem Reznikov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
MENU_001 MENU DISCARDABLE
BEGIN
- MENUITEM "&Âåëèê³ çíà÷êè", FCIDM_SHVIEW_BIGICON
- MENUITEM "&Äð³áí³ çíà÷êè", FCIDM_SHVIEW_SMALLICON
- MENUITEM "Ñïèñ&îê", FCIDM_SHVIEW_LISTVIEW
+ MENUITEM "&Âåëèê³ ²êîíêè", FCIDM_SHVIEW_BIGICON
+ MENUITEM "&Ìàë³ ²êîíêè", FCIDM_SHVIEW_SMALLICON
+ MENUITEM "&Ñïèñîê", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Ïîäðîáèö³", FCIDM_SHVIEW_REPORTVIEW
END
BEGIN
POPUP "&Âèãëÿä"
BEGIN
- MENUITEM "&Âåëèê³ çíà÷êè", FCIDM_SHVIEW_BIGICON
- MENUITEM "&Äð³áí³ çíà÷êè", FCIDM_SHVIEW_SMALLICON
- MENUITEM "Ñïèñ&îê", FCIDM_SHVIEW_LISTVIEW
+ MENUITEM "&Âåëèê³ ²êîíêè", FCIDM_SHVIEW_BIGICON
+ MENUITEM "&Ìàë³ ²êîíêè", FCIDM_SHVIEW_SMALLICON
+ MENUITEM "&Ñïèñîê", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Ïîäðîáèö³", FCIDM_SHVIEW_REPORTVIEW
END
MENUITEM SEPARATOR
- POPUP "&Óïîðÿäêóâàòè çíà÷êè"
+ POPUP "Âïîðÿäêóâàòè &²êîíêè"
BEGIN
- MENUITEM "çà &³ì'ÿì", 0x30 /* column 0 */
- MENUITEM "çà &òèïîì", 0x32 /* column 2 */
- MENUITEM "çà &ðîçì³ðîì", 0x31 /* ... */
- MENUITEM "çà &äàòîþ", 0x33
+ MENUITEM "Çà &Íàçâîþ", 0x30 /* column 0 */
+ MENUITEM "Çà &Òèïîì", 0x32 /* column 2 */
+ MENUITEM "Çà &Ðîçì³ðîì", 0x31 /* ... */
+ MENUITEM "Çà &Äàòîþ", 0x33
MENUITEM SEPARATOR
- MENUITEM "&àâòîìàòè÷íî", FCIDM_SHVIEW_AUTOARRANGE
+ MENUITEM "&Àâòîìàòè÷íî", FCIDM_SHVIEW_AUTOARRANGE
END
- MENUITEM "Âèð³âíÿòè çíà÷êè", FCIDM_SHVIEW_SNAPTOGRID
+ MENUITEM "Âèð³âíÿòè ²êîíêè", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM SEPARATOR
MENUITEM "Îíîâèòè", FCIDM_SHVIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "Âñòàâèòè", FCIDM_SHVIEW_INSERT
- MENUITEM "Âñòàâèòè ÿðëèê", FCIDM_SHVIEW_INSERTLINK
+ MENUITEM "Âñòàâèòè Ïîñèëàííÿ", FCIDM_SHVIEW_INSERTLINK
MENUITEM SEPARATOR
POPUP "Ñòâîðèòè"
BEGIN
- MENUITEM "&Ïàïêó", FCIDM_SHVIEW_NEWFOLDER
- MENUITEM "&ßðëèê", FCIDM_SHVIEW_NEWLINK
+ MENUITEM "Íîâà &Òåêà", FCIDM_SHVIEW_NEWFOLDER
+ MENUITEM "Íîâå &Ïîñèëàííÿ", FCIDM_SHVIEW_NEWLINK
MENUITEM SEPARATOR
END
MENUITEM SEPARATOR
POPUP ""
BEGIN
MENUITEM "&Ïðîâ³äíèê", FCIDM_SHVIEW_EXPLORE
- MENUITEM "Â&³äêðèòè", FCIDM_SHVIEW_OPEN
+ MENUITEM "&³äêðèòè", FCIDM_SHVIEW_OPEN
MENUITEM SEPARATOR
- MENUITEM "&Âèð³çàòè", FCIDM_SHVIEW_CUT
- MENUITEM "&Êîï³þâàòè", FCIDM_SHVIEW_COPY
+ MENUITEM "Âè&ð³çàòè", FCIDM_SHVIEW_CUT
+ MENUITEM "&Êîï³ÿ", FCIDM_SHVIEW_COPY
MENUITEM SEPARATOR
- MENUITEM "Ñòâîðèòè &ÿðëèê", FCIDM_SHVIEW_CREATELINK
- MENUITEM "Â&èäàëèòè", FCIDM_SHVIEW_DELETE
- MENUITEM "Ïåðåé&ìåíóâàòè", FCIDM_SHVIEW_RENAME
+ MENUITEM "&Ñòâîðèòè Ïîñèëàííÿ", FCIDM_SHVIEW_CREATELINK
+ MENUITEM "Âè&äàëèòè", FCIDM_SHVIEW_DELETE
+ MENUITEM "Ïåðå&éìåíóâàòè", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
- MENUITEM "Â&ëàñòèâîñò³", FCIDM_SHVIEW_PROPERTIES
+ MENUITEM "&Âëàñòèâîñò³", FCIDM_SHVIEW_PROPERTIES
END
END
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
-CAPTION "Îãëÿä ïàïîê"
+CAPTION "Îãëÿä äî òåêè"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
- PUSHBUTTON "Ñêàñóâàòè", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
+ PUSHBUTTON "³äì³íà", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
LTEXT "", IDD_TITLE, 4, 4, 180, 12
LTEXT "", IDD_STATUS, 4, 25, 180, 12
CONTROL "", IDD_TREEVIEW, "SysTreeView32",
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
- LTEXT "Ðîçðîáíèêè ReactOS:", 98, 8, 55, 137, 10
+ LTEXT "Ðîçðîáíèêè Wine:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
- LTEXT "Ââåä³òü ³ì'ÿ ïðîãðàìè, ïàïêè, äîêóìåíòà àáî ðåñóðñó ²íòåðíåòó, ³ ReactOS â³äêðèº ¿õ.", 12289, 36, 11, 182, 18
+ LTEXT "Ââåä³òü ³ì'ÿ ïðîãðàìè, òåêè, äîêóìåíòó ÷è ðåñóðñ ²íòåðíåòó, ³ Wine â³äêðèº ¿õ.", 12289, 36, 11, 182, 18
LTEXT "&³äêðèòè:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
- PUSHBUTTON "Ñêàñóâàòè", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
- PUSHBUTTON "Î&ãëÿä...", 12288, 170, 63, 50, 14, WS_TABSTOP
+ PUSHBUTTON "³äì³íà", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
+ PUSHBUTTON "&Îãëÿä...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
+/*
+ special folders
+*/
+STRINGTABLE DISCARDABLE
{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
+ IDS_DESKTOP "Ñò³ëüíèöÿ"
+ IDS_MYCOMPUTER "̳é Êîìï'þòåð"
}
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Tools"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
+/*
+ context menus
+*/
+STRINGTABLE DISCARDABLE
{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
+ IDS_VIEW_LARGE "&Âåëèê³ ²êîíêè"
+ IDS_VIEW_SMALL "&Ìàë³ ²êîíêè"
+ IDS_VIEW_LIST "&Ñïèñîê"
+ IDS_VIEW_DETAILS "&Ïîäðîáèö³"
+ IDS_SELECT "Âè&áðàòè"
+ IDS_OPEN "³&äêðèòè"
}
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
+STRINGTABLE DISCARDABLE
{
+ IDS_CREATEFOLDER_DENIED "Íå âäàëîñÿ ñòâîðèòè íîâó òåêó: ³äìîâà ó äîñòóï³."
+ IDS_CREATEFOLDER_CAPTION "Ïîìèëêà ïðè ñòâîðåíí³ íîâî¿ òåêè"
+ IDS_DELETEITEM_CAPTION "ϳäòâåðäæåííÿ âèëó÷åííÿ ôàéëó"
+ IDS_DELETEFOLDER_CAPTION "ϳäòâåðäæåííÿ âèëó÷åííÿ òåêè"
+ IDS_DELETEITEM_TEXT "Âè âïåâíåí³, ùî õî÷åòå âèëó÷èòè '%1'?"
+ IDS_DELETEMULTIPLE_TEXT "Âè âïåâíåí³, ùî õî÷åòå âèëó÷èòè ö³ %1 åëåìåíòè(³â)?"
+ IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
+ IDS_OVERWRITEFILE_CAPTION "ϳäòâåðäæåííÿ Ïåðåçàïèñó Ôàéëó"
+ IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
+ "If the files in the destination folder have the same names as files in the\n"\
+ "selected folder they will be replaced. Do you still want to move or copy\n"\
+ "the folder?"
}
-STRINGTABLE DISCARDABLE
-{
- /* columns in the shellview */
+/* columns in the shellview */
+STRINGTABLE
+BEGIN
IDS_SHV_COLUMN1 "Ôàéë"
IDS_SHV_COLUMN2 "Ðîçì³ð"
IDS_SHV_COLUMN3 "Òèï"
IDS_SHV_COLUMN5 "Àòðèáóòè"
IDS_SHV_COLUMN6 "Ðîçì³ð"
IDS_SHV_COLUMN7 "³ëüíèé Ðîçì³ð"
- IDS_SHV_COLUMN8 "²ì'ÿ"
- IDS_SHV_COLUMN9 "Ïðèì³òêà"
- IDS_SHV_COLUMN10 "Âëàñíèê"
- IDS_SHV_COLUMN11 "Ãðóïà"
-
- /* special folders */
- IDS_DESKTOP "Ðîáî÷èé ñò³ë"
- IDS_MYCOMPUTER "̳é Êîìï'þòåð"
-
- /* context menus */
- IDS_VIEW_LARGE "&Âåëèê³ çíà÷êè"
- IDS_VIEW_SMALL "&Äð³áí³ çíà÷êè"
- IDS_VIEW_LIST "Ñïèñ&îê"
- IDS_VIEW_DETAILS "&Ïîäðîáèö³"
- IDS_SELECT "Âè&áðàòè"
- IDS_OPEN "³äêðèòè"
-
- IDS_CREATEFOLDER_DENIED "Íå âäàëîñÿ ñòâîðèòè íîâó ïàïêó: ³äìîâà ó äîñòóï³."
- IDS_CREATEFOLDER_CAPTION "Ïîìèëêà ïðè ñòâîðåíí³ íîâî¿ ïàïêè"
- IDS_DELETEITEM_CAPTION "ϳäòâåðäæåííÿ âèëó÷åííÿ ôàéëó"
- IDS_DELETEFOLDER_CAPTION "ϳäòâåðäæåííÿ âèëó÷åííÿ ïàïêè"
- IDS_DELETEITEM_TEXT "Âè âïåâíåí³, ùî õî÷åòå âèëó÷èòè '%1'?"
- IDS_DELETEMULTIPLE_TEXT "Âè âïåâíåí³, ùî õî÷åòå âèëó÷èòè ö³ %1 åëåìåíòè(³â)?"
- IDS_OVERWRITEFILE_TEXT "Ïåðåïèñàòè Ôàéë %1?"
- IDS_OVERWRITEFILE_CAPTION "ϳäòâåðäæåííÿ Ïåðåçàïèñó Ôàéëó"
-
- /* message box strings */
- IDS_RESTART_TITLE "Ïåðåçàâàíòàæèòè"
- IDS_RESTART_PROMPT "Âè ä³éñíî õî÷åòå ïåðåçàâàíòàæèòè ñèñòåìó?"
- IDS_SHUTDOWN_TITLE "Âèìêíóòè"
- IDS_SHUTDOWN_PROMPT "Âè ä³éñíî õî÷åòå âèìêíóòè êîìï'þòåð?"
-
- /* shell folder path default values */
- IDS_PROGRAMS "Start Menu\\Programs"
- IDS_PERSONAL "My Documents"
- IDS_FAVORITES "Favorites"
- IDS_STARTUP "Start Menu\\Programs\\StartUp"
- IDS_RECENT "Recent"
- IDS_SENDTO "SendTo"
- IDS_STARTMENU "Start Menu"
- IDS_MYMUSIC "My Documents\\My Music"
- IDS_MYVIDEO "My Documents\\My Video"
- IDS_DESKTOPDIRECTORY "Desktop"
- IDS_NETHOOD "NetHood"
- IDS_TEMPLATES "Templates"
- IDS_APPDATA "Application Data"
- IDS_PRINTHOOD "PrintHood"
- IDS_LOCAL_APPDATA "Local Settings\\Application Data"
- IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files"
- IDS_COOKIES "Cookies"
- IDS_HISTORY "Local Settings\\History"
- IDS_PROGRAM_FILES "Program Files"
- IDS_MYPICTURES "My Documents\\My Pictures"
- IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
- IDS_COMMON_DOCUMENTS "Documents"
- IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools"
- IDS_COMMON_MUSIC "Documents\\My Music"
- IDS_COMMON_PICTURES "Documents\\My Pictures"
- IDS_COMMON_VIDEO "Documents\\My Video"
- IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning"
- IDS_DRIVE_FIXED "Local Disk"
- IDS_DRIVE_CDROM "CDROM"
- IDS_DRIVE_NETWORK "Network Disk"
-}
+END
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_WALON, SUBLANG_DEFAULT
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
- LTEXT "ReactOS a estu fwait par:", 98, 8, 55, 137, 10
+ LTEXT "Wine a estu fwait par:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
- LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18
+ LTEXT "Type the name of a program, folder, document, or Internet resource, and Wine will open it for you.", 12289, 36, 11, 182, 18
LTEXT "&Open:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Cancel", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Tools"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
-}
-
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
-}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 35, 10, 137, 10
- LTEXT "ReactOS was brought to you by:", 98, 8, 55, 137, 10
+ LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
- LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18
+ LTEXT "Type the name of a program, folder, document, or Internet resource, and Wine will open it for you.", 12289, 36, 11, 182, 18
LTEXT "&Open:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
-
-SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Shortcut"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- LTEXT "Target type:", 14004, 10, 30, 50, 10
- LTEXT "", 14005, 70, 30, 150, 10
- LTEXT "Target location:", 14006, 10, 40, 70, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Target:", 14008, 10, 55, 45, 10
- EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
- LTEXT "&Start in:",14010, 10, 65, 45, 10
- EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
- LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
- EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
- LTEXT "Run:", 14016, 10, 90, 45, 10
- EDITTEXT 14017, 70, 90, 150, 10
- LTEXT "C&omment:", 14018, 10, 100, 45, 10
- EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
- PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
- PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
- PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
-}
-
-SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
- EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
- LTEXT "Type of file:", 14004, 10, 30, 50, 10
- LTEXT "%s File", 14005, 70, 30, 150, 10
- LTEXT "Opens with:", 14006, 10, 40, 50, 10
- LTEXT "", 14007, 70, 40, 150, 10
- LTEXT "Location:", 14008, 10, 55, 45, 10
- LTEXT "", 14009, 70, 55, 200, 10
- LTEXT "Size:",14010, 10, 65, 45, 10
- LTEXT "", 14011, 70, 65, 150, 10
- LTEXT "Created:", 14014, 10, 80, 45, 10
- LTEXT "", 14015, 70, 80, 150, 10
- LTEXT "Modied:", 14016, 10, 90, 45, 10
- LTEXT "", 14017, 70, 90, 150, 10
- LTEXT "Accessed:", 14018, 10, 100, 45, 10
- LTEXT "", 14019, 70, 100, 150, 10
- LTEXT "Attributes:", 14020, 10, 115, 45, 10
- CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
- CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
- CHECKBOX "&Archive", 14023, 180, 115, 45, 10
-}
-
-SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- LTEXT "File version: ", 14000, 10, 10, 45, 10
- LTEXT "", 14001, 70, 10, 150, 10
- LTEXT "Description: ", 14002, 10, 20, 45, 10
- LTEXT "", 14003, 70, 20, 150, 10
- LTEXT "Copyright: ", 14004, 10, 30, 45, 10
- LTEXT "", 14005, 70, 30, 150, 10
- GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
- LTEXT "Item name: ", 14007, 20, 55, 50, 10
- LTEXT "Value: ", 14008, 130, 55, 45, 10
- LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
- EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
-
-}
-DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "General"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
- LTEXT "Type:", -1, 15, 55, 40, 10
- LTEXT "", 14002, 110, 55, 100, 10
-
-
- LTEXT "File system:", -1, 15, 70, 100, 10
- LTEXT "", 14003, 110, 70, 100, 10
-
- CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
- LTEXT "Used space:", -1, 25, 90, 120, 10
- LTEXT "", 14004, 110, 90, 120, 10
- LTEXT "", 14005, 200, 90, 40, 10
-
- CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
- LTEXT "Free space:", -1, 25, 105, 70, 10
- LTEXT "", 14006, 110, 105, 120, 10
- LTEXT "", 14007, 200, 105, 40, 10
-
- LTEXT "Capacity:", -1, 25, 125, 80, 10
- LTEXT "", 14008, 110, 125, 120, 10
- LTEXT "", 14009, 200, 125, 40, 10
-
- CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
-
- LTEXT "Drive %s", 14010, 100, 170, 40, 10
- PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
- CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
- CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
-}
-
-DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Tools"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
- GROUPBOX "Error-checking", -1, 5, 5, 230, 60
- LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
- PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
- GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
- LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
- PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
- GROUPBOX "Backup", -1, 5, 130, 230, 60
- LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
- PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
-}
-
-
-
-DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
-STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Version"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-{
-}
-
/* columns in the shellview */
STRINGTABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
BEGIN
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_SHELL_MAIN_H
/* Classes Root */
BOOL HCR_MapTypeToValueW(LPCWSTR szExtension, LPWSTR szFileType, LONG len, BOOL bPrependDot);
+BOOL HCR_GetDefaultVerbW( HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len );
BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len );
-BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, LPDWORD dwNr);
-BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, LPDWORD dwNr);
+BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, int* picon_idx);
+BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, int* picon_idx);
BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len);
/* ANSI versions of above functions, supposed to go away as soon as they are not used anymore */
BOOL HCR_MapTypeToValueA(LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bPrependDot);
-BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, LPDWORD dwNr);
+BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, int* picon_idx);
BOOL HCR_GetClassNameA(REFIID riid, LPSTR szDest, DWORD len);
BOOL HCR_GetFolderAttributes(LPCITEMIDLIST pidlFolder, LPDWORD dwAttributes);
HRESULT WINAPI UnixDosFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppv);
HRESULT WINAPI FolderShortcut_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppv);
HRESULT WINAPI MyDocuments_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppv);
-extern HRESULT CPanel_GetIconLocationW(LPITEMIDLIST, LPWSTR, UINT, int*);
+HRESULT WINAPI RecycleBin_Constructor(IUnknown * pUnkOuter, REFIID riif, LPVOID *ppv);
+HRESULT WINAPI ShellFSFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppv);
+extern HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST, LPWSTR, UINT, int*);
HRESULT WINAPI CPanel_ExtractIconA(LPITEMIDLIST pidl, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
HRESULT WINAPI CPanel_ExtractIconW(LPITEMIDLIST pidl, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize);
(((kst)&(MK_CONTROL|MK_SHIFT)) ? DROPEFFECT_COPY :\
DROPEFFECT_MOVE))
+
HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderSHELLIDLIST (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderSHELLIDLISTOFFSET (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
#define ASK_DELETE_MULTIPLE_ITEM 3
#define ASK_CREATE_FOLDER 4
#define ASK_OVERWRITE_FILE 5
+#define ASK_DELETE_SELECTED 6
+#define ASK_TRASH_FILE 7
+#define ASK_TRASH_FOLDER 8
+#define ASK_TRASH_MULTIPLE_ITEM 9
+#define ASK_CANT_TRASH_ITEM 10
+#define ASK_OVERWRITE_FOLDER 11
-BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir, BOOL bShowUI);
-BOOL SHELL_DeleteFileA(LPCSTR pszFile, BOOL bShowUI);
-BOOL SHELL_ConfirmDialog(int nKindOfDialog, LPCSTR szDir);
+BOOL SHELL_DeleteDirectoryW(HWND hwnd, LPCWSTR pwszDir, BOOL bShowUI);
+BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir);
/* 16-bit functions */
void WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b);
void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition,
UINT wID, UINT fType, LPCSTR dwTypeData, UINT fState);
-inline static BOOL SHELL_OsIsUnicode(void)
+static inline BOOL SHELL_OsIsUnicode(void)
{
/* if high-bit of version is 0, we are emulating NT */
return !(GetVersion() & 0x80000000);
SHFree(*ptr); \
*ptr = NULL; \
};
-inline static void __SHCloneStrA(char ** target,const char * source)
+static inline void __SHCloneStrA(char ** target,const char * source)
{
- *target = (char*)SHAlloc(strlen(source)+1);
+ *target = SHAlloc(strlen(source)+1);
strcpy(*target, source);
}
-inline static void __SHCloneStrWtoA(char ** target, const WCHAR * source)
+static inline void __SHCloneStrWtoA(char ** target, const WCHAR * source)
{
int len = WideCharToMultiByte(CP_ACP, 0, source, -1, NULL, 0, NULL, NULL);
*target = SHAlloc(len);
WideCharToMultiByte(CP_ACP, 0, source, -1, *target, len, NULL, NULL);
}
-inline static void __SHCloneStrW(WCHAR ** target, const WCHAR * source)
+static inline void __SHCloneStrW(WCHAR ** target, const WCHAR * source)
{
- *target = (WCHAR*)SHAlloc( (strlenW(source)+1) * sizeof(WCHAR) );
- strcpyW(*target, source);
+ *target = SHAlloc( (lstrlenW(source)+1) * sizeof(WCHAR) );
+ lstrcpyW(*target, source);
}
-inline static WCHAR * __SHCloneStrAtoW(WCHAR ** target, const char * source)
+static inline WCHAR * __SHCloneStrAtoW(WCHAR ** target, const char * source)
{
int len = MultiByteToWideChar(CP_ACP, 0, source, -1, NULL, 0);
*target = SHAlloc(len*sizeof(WCHAR));
/* Detect Shell Links */
BOOL SHELL_IsShortcut(LPCITEMIDLIST);
-#define MAX_PROPERTY_SHEET_PAGE 32
INT_PTR CALLBACK SH_FileGeneralDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK SH_FileVersionDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
HPROPSHEETPAGE SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM lParam);
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_SHELLFOLDER_HELP_H
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
/*** ISFHelper methods ***/
- STDMETHOD(GetUniqueName)(THIS_ LPSTR lpName, UINT uLen) PURE;
- STDMETHOD(AddFolder)(THIS_ HWND hwnd, LPCSTR lpName, LPITEMIDLIST * ppidlOut) PURE;
+ STDMETHOD(GetUniqueName)(THIS_ LPWSTR lpName, UINT uLen) PURE;
+ STDMETHOD(AddFolder)(THIS_ HWND hwnd, LPCWSTR lpName, LPITEMIDLIST * ppidlOut) PURE;
STDMETHOD(DeleteItems)(THIS_ UINT cidl, LPCITEMIDLIST * apidl) PURE;
STDMETHOD(CopyItems)(THIS_ IShellFolder * pSFFrom, UINT cidl, LPCITEMIDLIST * apidl) PURE;
};
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* NOTES
- * Nearly complete informations about the binary formats
+ * Nearly complete information about the binary formats
* of .lnk files available at http://www.wotsit.org
*
* You can use winedump to examine the contents of a link file:
#define SHLINK_LOCAL 0
#define SHLINK_REMOTE 1
+#define MAX_PROPERTY_SHEET_PAGE 32
typedef struct _LOCATION_INFO
{
LONG ref;
- /* data structures according to the informations in the link */
+ /* data structures according to the information in the link */
LPITEMIDLIST pPidl;
WORD wHotKey;
SYSTEMTIME time1;
LPWSTR sPathRel;
LPWSTR sProduct;
LPWSTR sComponent;
+ volume_info volume;
LPWSTR sLinkPath;
BOOL bRunAs;
- volume_info volume;
-
BOOL bDirty;
INT iIdOpen; /* id of the "Open" entry in the context menu */
- INT iIdProperties;
+ INT iIdProperties; /* id of the "Properties" entry in the context menu */
IUnknown *site;
} IShellLinkImpl;
return (IShellLinkImpl *)((char*)iface - FIELD_OFFSET(IShellLinkImpl, lpvtblObjectWithSite));
}
-static HRESULT ShellLink_UpdatePath(LPWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath);
+static HRESULT ShellLink_UpdatePath(LPCWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath);
/* strdup on the process heap */
-inline static LPWSTR HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str)
+static inline LPWSTR HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str)
{
INT len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
LPWSTR p = HeapAlloc( heap, flags, len*sizeof (WCHAR) );
return p;
}
-inline static LPWSTR strdupW( LPCWSTR src )
+static inline LPWSTR strdupW( LPCWSTR src )
{
LPWSTR dest;
if (!src) return NULL;
{
ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
{
ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount + 1);
if (refCount)
return refCount;
HeapFree(GetProcessHeap(),0,This->sPath);
HeapFree(GetProcessHeap(),0,This->sLinkPath);
-
if (This->site)
IUnknown_Release( This->site );
HRESULT r;
IStream *stm;
- TRACE("(%p, %s, %lx)\n",This, debugstr_w(pszFileName), dwMode);
+ TRACE("(%p, %s, %x)\n",This, debugstr_w(pszFileName), dwMode);
if( dwMode == 0 )
dwMode = STGM_READ | STGM_SHARE_DENY_WRITE;
IStream_Release( stm );
This->bDirty = FALSE;
}
- TRACE("-- returning hr %08lx\n", r);
+ TRACE("-- returning hr %08x\n", r);
return r;
}
{
static const WCHAR szFormat[] = {
'w','i','n','e','m','e','n','u','b','u','i','l','d','e','r','.','e','x','e',
- ' ','-','r',' ','"','%','s','"',0 };
+ ' ','-','w',' ','"','%','s','"',0 };
LONG len;
LPWSTR buffer;
STARTUPINFOW si;
PROCESS_INFORMATION pi;
+ BOOL ret;
len = sizeof(szFormat) + lstrlenW( szLink ) * sizeof(WCHAR);
buffer = HeapAlloc( GetProcessHeap(), 0, len );
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
- if (!CreateProcessW( NULL, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) return FALSE;
- /* wait for a while to throttle the creation of linker processes */
- if( WAIT_OBJECT_0 != WaitForSingleObject( pi.hProcess, 10000 ) )
- WARN("Timed out waiting for shell linker\n");
+ ret = CreateProcessW( NULL, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
- CloseHandle( pi.hProcess );
- CloseHandle( pi.hThread );
+ HeapFree( GetProcessHeap(), 0, buffer );
- return TRUE;
+ if (ret)
+ {
+ CloseHandle( pi.hProcess );
+ CloseHandle( pi.hThread );
+ }
+
+ return ret;
}
static HRESULT WINAPI IPersistFile_fnSave(IPersistFile* iface, LPCOLESTR pszFileName, BOOL fRemember)
{
count = MultiByteToWideChar( CP_ACP, 0, (LPSTR) temp, len, NULL, 0 );
str = HeapAlloc( GetProcessHeap(), 0, (count+1)*sizeof (WCHAR) );
- if( str )
- MultiByteToWideChar( CP_ACP, 0, (LPSTR) temp, len, str, count );
+ if( !str )
+ {
+ HeapFree( GetProcessHeap(), 0, temp );
+ return E_OUTOFMEMORY;
+ }
+ MultiByteToWideChar( CP_ACP, 0, (LPSTR) temp, len, str, count );
HeapFree( GetProcessHeap(), 0, temp );
}
else
return E_FAIL;
}
- TRACE("Read %ld bytes\n",chunk->size);
+ TRACE("Read %d bytes\n",chunk->size);
*data = (LPVOID) chunk;
return TRUE;
}
-static LPWSTR Stream_LoadPath( LPSTR p, DWORD maxlen )
+static LPWSTR Stream_LoadPath( LPCSTR p, DWORD maxlen )
{
int len = 0, wlen;
LPWSTR path;
return r;
loc = (LOCATION_INFO*) p;
- if (loc->dwTotalSize < sizeof(LOCATION_INFO) - sizeof(DWORD))
+ if (loc->dwTotalSize < sizeof(LOCATION_INFO))
{
HeapFree( GetProcessHeap(), 0, p );
return E_FAIL;
if( n && (n < loc->dwTotalSize) )
*path = Stream_LoadPath( &p[n], loc->dwTotalSize - n );
- TRACE("type %ld serial %08lx name %s path %s\n", volume->type,
+ TRACE("type %d serial %08x name %s path %s\n", volume->type,
volume->serial, debugstr_w(volume->label), debugstr_w(*path));
HeapFree( GetProcessHeap(), 0, p );
if( count != size )
return E_FAIL;
- TRACE("magic %08lx string = %s\n", buffer.dbh.dwSignature, debugstr_w(buffer.szwDarwinID));
+ TRACE("magic %08x string = %s\n", buffer.dbh.dwSignature, debugstr_w(buffer.szwDarwinID));
if( (buffer.dbh.dwSignature&0xffff0000) != 0xa0000000 )
{
- ERR("Unknown magic number %08lx in advertised shortcut\n", buffer.dbh.dwSignature);
+ ERR("Unknown magic number %08x in advertised shortcut\n", buffer.dbh.dwSignature);
return E_FAIL;
}
IStream* stm,
BOOL fClearDirty)
{
- static const WCHAR wOpen[] = {'o','p','e','n',0};
-
LINK_HEADER header;
- WCHAR exePath[MAX_PATH];
ULONG count;
DWORD zero;
HRESULT r;
TRACE("%p %p %x\n", This, stm, fClearDirty);
- *exePath = '\0';
-
- if (This->sPath)
- {
- SHELL_FindExecutable(NULL, This->sPath, wOpen, exePath, MAX_PATH,
- NULL, NULL, NULL, NULL);
- /*
- * windows can create lnk files to executables that do not exist yet
- * so if the executable does not exist the just trust the path they
- * gave us
- */
- if (!*exePath) lstrcpyW(exePath,This->sPath);
- }
-
memset(&header, 0, sizeof(header));
header.dwSize = sizeof(header);
header.fStartup = This->iShowCmd;
}
if( This->sPath )
- Stream_WriteLocationInfo( stm, exePath, &This->volume );
+ Stream_WriteLocationInfo( stm, This->sPath, &This->volume );
if( This->sDescription )
r = Stream_WriteString( stm, This->sDescription );
sl->lpvtblObjectWithSite = &owsvt;
sl->iShowCmd = SW_SHOWNORMAL;
sl->bDirty = FALSE;
- sl->bRunAs = FALSE;
sl->iIdOpen = -1;
sl->site = NULL;
+ sl->bRunAs = FALSE;
TRACE("(%p)->()\n",sl);
* ShellLink_UpdatePath
* update absolute path in sPath using relative path in sPathRel
*/
-static HRESULT ShellLink_UpdatePath(LPWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath)
+static HRESULT ShellLink_UpdatePath(LPCWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath)
{
if (!path || !psPath)
return E_INVALIDARG;
{
IShellLinkImpl *This = (IShellLinkImpl *)iface;
- TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%lu)(%s)\n",
+ TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%u)(%s)\n",
This, pszFile, cchMaxPath, pfd, fFlags, debugstr_w(This->sPath));
if (This->sComponent || This->sProduct)
return NOERROR;
}
-static HRESULT SHELL_PidlGeticonLocationA(IShellFolder* psf, LPITEMIDLIST pidl, LPSTR pszIconPath, int cchIconPath, int* piIcon)
+static HRESULT SHELL_PidlGeticonLocationA(IShellFolder* psf, LPCITEMIDLIST pidl,
+ LPSTR pszIconPath, int cchIconPath, int* piIcon)
{
LPCITEMIDLIST pidlLast;
{
IShellLinkImpl *This = (IShellLinkImpl *)iface;
- TRACE("(%p)->(path=%s %lx)\n",This, pszPathRel, dwReserved);
+ TRACE("(%p)->(path=%s %x)\n",This, pszPathRel, dwReserved);
HeapFree(GetProcessHeap(), 0, This->sPathRel);
This->sPathRel = HEAP_strdupAtoW(GetProcessHeap(), 0, pszPathRel);
{
IShellLinkImpl *This = (IShellLinkImpl *)iface;
- TRACE("(%p)->(hwnd=%p flags=%lx)\n",This, hwnd, fFlags);
+ TRACE("(%p)->(hwnd=%p flags=%x)\n",This, hwnd, fFlags);
return IShellLinkW_Resolve( (IShellLinkW*)&(This->lpvtblw), hwnd, fFlags );
}
{
IShellLinkImpl *This = impl_from_IShellLinkW(iface);
- TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%lu)(%s)\n",
+ TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%u)(%s)\n",
This, pszFile, cchMaxPath, pfd, fFlags, debugstr_w(This->sPath));
if (This->sComponent || This->sProduct)
TRACE("(%p)->(ppidl=%p)\n",This, ppidl);
if (!This->pPidl)
+ {
+ *ppidl = NULL;
return S_FALSE;
+ }
*ppidl = ILClone(This->pPidl);
return S_OK;
}
return S_OK;
}
-static HRESULT SHELL_PidlGeticonLocationW(IShellFolder* psf, LPITEMIDLIST pidl, LPWSTR pszIconPath, int cchIconPath, int* piIcon)
+static HRESULT SHELL_PidlGeticonLocationW(IShellFolder* psf, LPCITEMIDLIST pidl,
+ LPWSTR pszIconPath, int cchIconPath, int* piIcon)
{
LPCITEMIDLIST pidlLast;
{
IShellLinkImpl *This = impl_from_IShellLinkW(iface);
- TRACE("(%p)->(path=%s %lx)\n",This, debugstr_w(pszPathRel), dwReserved);
+ TRACE("(%p)->(path=%s %x)\n",This, debugstr_w(pszPathRel), dwReserved);
HeapFree(GetProcessHeap(), 0, This->sPathRel);
This->sPathRel = HeapAlloc( GetProcessHeap(), 0,
IShellLinkImpl *This = impl_from_IShellLinkW(iface);
- TRACE("(%p)->(hwnd=%p flags=%lx)\n",This, hwnd, fFlags);
+ TRACE("(%p)->(hwnd=%p flags=%x)\n",This, hwnd, fFlags);
/*FIXME: use IResolveShellLink interface */
return S_OK;
}
-static BOOL ShellLink_GetVolumeInfo(LPWSTR path, volume_info *volume)
+static BOOL ShellLink_GetVolumeInfo(LPCWSTR path, volume_info *volume)
{
const int label_sz = sizeof volume->label/sizeof volume->label[0];
WCHAR drive[4] = { path[0], ':', '\\', 0 };
volume->type = GetDriveTypeW(drive);
r = GetVolumeInformationW(drive, volume->label, label_sz,
&volume->serial, NULL, NULL, NULL, 0);
- TRACE("r = %d type %ld serial %08lx name %s\n", r,
+ TRACE("r = %d type %d serial %08x name %s\n", r,
volume->type, volume->serial, debugstr_w(volume->label));
return r;
}
{
IShellLinkImpl *This = impl_from_IShellLinkW(iface);
WCHAR buffer[MAX_PATH];
- LPWSTR fname;
+ LPWSTR fname, unquoted = NULL;
HRESULT hr = S_OK;
+ UINT len;
TRACE("(%p)->(path=%s)\n",This, debugstr_w(pszFile));
+ /* quotes at the ends of the string are stripped */
+ len = lstrlenW(pszFile);
+ if (pszFile[0] == '"' && pszFile[len-1] == '"')
+ {
+ unquoted = strdupW(pszFile);
+ PathUnquoteSpacesW(unquoted);
+ pszFile = unquoted;
+ }
+
+ /* any other quote marks are invalid */
+ if (strchrW(pszFile, '"'))
+ return S_FALSE;
+
HeapFree(GetProcessHeap(), 0, This->sPath);
This->sPath = NULL;
*buffer = '\0';
else if (!GetFullPathNameW(pszFile, MAX_PATH, buffer, &fname))
return E_FAIL;
- else if(!PathFileExistsW(buffer))
- hr = S_FALSE;
+ else if(!PathFileExistsW(buffer) &&
+ !SearchPathW(NULL, pszFile, NULL, MAX_PATH, buffer, NULL))
+ hr = S_FALSE;
This->pPidl = SHSimpleIDListFromPathW(pszFile);
ShellLink_GetVolumeInfo(buffer, &This->volume);
lstrcpyW(This->sPath, buffer);
}
This->bDirty = TRUE;
+ HeapFree(GetProcessHeap(), 0, unquoted);
return hr;
}
LPVOID block = NULL;
HRESULT r = E_FAIL;
- TRACE("%p %08lx %p\n", iface, dwSig, ppDataBlock );
+ TRACE("%p %08x %p\n", iface, dwSig, ppDataBlock );
switch (dwSig)
{
case NT_FE_CONSOLE_PROPS_SIG:
case EXP_SPECIAL_FOLDER_SIG:
case EXP_SZ_ICON_SIG:
- FIXME("valid but unhandled datablock %08lx\n", dwSig);
+ FIXME("valid but unhandled datablock %08x\n", dwSig);
break;
default:
- ERR("unknown datablock %08lx\n", dwSig);
+ ERR("unknown datablock %08x\n", dwSig);
}
*ppDataBlock = block;
return r;
UINT idCmdFirst, UINT idCmdLast, UINT uFlags )
{
IShellLinkImpl *This = impl_from_IContextMenu(iface);
- static const WCHAR szOpen[] = { 'O','p','e','n',0 };
- static const WCHAR szProperties[] = { 'P','r','o','p','e','r','t','i','e','s',0 };
+ static WCHAR szOpen[] = { 'O','p','e','n',0 };
+ static WCHAR szProperties[] = { 'P','r','o','p','e','r','t','i','e','s',0 };
MENUITEMINFOW mii;
int id = 1;
- TRACE("ShellLink_QueryContextMenu %p %p %u %u %u %u\n", This,
+ TRACE("%p %p %u %u %u %u\n", This,
hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags );
if ( !hmenu )
mii.fState = MFS_DEFAULT | MFS_ENABLED;
mii.fType = MFT_STRING;
if (!InsertMenuItemW( hmenu, indexMenu, TRUE, &mii ))
- {
- TRACE("ShellLink_QueryContextMenu failed to insert item open");
return E_FAIL;
- }
This->iIdOpen = 0;
-
mii.fState = MFS_ENABLED;
mii.dwTypeData = (LPWSTR)szProperties;
mii.cch = strlenW( mii.dwTypeData );
}
This->iIdProperties = 1;
id++;
+
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id );
}
static LPWSTR
shelllink_get_msi_component_path( LPWSTR component )
{
- LPWSTR path = NULL;
+ LPWSTR path;
DWORD r, sz = 0;
r = CommandLineFromMsiDescriptor( component, NULL, &sz );
if (r != ERROR_SUCCESS)
- return path;
+ return NULL;
sz++;
path = HeapAlloc( GetProcessHeap(), 0, sz*sizeof(WCHAR) );
return path;
}
-/*************************************************************************
- *
- * SH_CreatePropertySheetPage [Internal]
- *
- * creates a property sheet page from an resource name
- *
- */
-
-HPROPSHEETPAGE
-SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM lParam)
-{
- HRSRC hRes;
- LPVOID lpsztemplate;
- PROPSHEETPAGEW ppage;
-
- if (resname == NULL)
- return (HPROPSHEETPAGE)0;
-
- hRes = FindResourceA(shell32_hInstance, resname, (LPSTR)RT_DIALOG);
-
- if (hRes == NULL)
- {
- ERR("failed to find resource name\n");
- return (HPROPSHEETPAGE)0;
- }
- lpsztemplate = LoadResource(shell32_hInstance, hRes);
- if (lpsztemplate == NULL)
- return (HPROPSHEETPAGE)0;
-
- memset(&ppage, 0x0, sizeof(PROPSHEETPAGE));
- ppage.dwSize = sizeof(PROPSHEETPAGEW);
- ppage.dwFlags = PSP_DLGINDIRECT;
- ppage.u.pResource = lpsztemplate;
- ppage.pfnDlgProc = dlgproc;
- ppage.lParam = lParam;
- return CreatePropertySheetPageW(&ppage);
-}
-
-
INT_PTR CALLBACK ExtendedShortcutProc(
HWND hwndDlg,
UINT uMsg,
LPWSTR path = NULL;
HRESULT r;
- TRACE("ShellLink_InvokeCommand %p %p\n", This, lpici );
+ TRACE("%p %p\n", This, lpici );
if ( lpici->cbSize < sizeof (CMINVOKECOMMANDINFO) )
return E_INVALIDARG;
return S_OK;
}
-
if ( lpici->lpVerb != MAKEINTRESOURCEA(This->iIdOpen) )
{
ERR("Unknown id %d != %d\n", (INT)lpici->lpVerb, This->iIdOpen );
memset( &sei, 0, sizeof sei );
sei.cbSize = sizeof sei;
- sei.fMask = SEE_MASK_UNICODE;
+ sei.fMask = SEE_MASK_UNICODE | SEE_MASK_NOCLOSEPROCESS;
sei.lpFile = path;
sei.nShow = This->iShowCmd;
sei.lpIDList = This->pPidl;
sei.lpParameters = args;
sei.lpVerb = szOpen;
- if ( ShellExecuteExW( &sei ) && (UINT)sei.hInstApp > 32 )
+ if( ShellExecuteExW( &sei ) )
+ {
+ if ( sei.hProcess )
+ {
+ WaitForSingleObject( sei.hProcess, 10000 );
+ CloseHandle( sei.hProcess );
+ }
r = S_OK;
+ }
else
r = E_FAIL;
{
IShellLinkImpl *This = impl_from_IContextMenu(iface);
- FIXME("%p %u %u %p %p %u\n", This,
+ FIXME("%p %lu %u %p %p %u\n", This,
idCmd, uType, pwReserved, pszName, cchMax );
return E_NOTIMPL;
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
extern HRESULT WINAPI IFSFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
-const WCHAR sShell32[12] = {'S','H','E','L','L','3','2','.','D','L','L','\0'};
-const WCHAR sOLE32[10] = {'O','L','E','3','2','.','D','L','L','\0'};
+static const WCHAR sShell32[12] = {'S','H','E','L','L','3','2','.','D','L','L','\0'};
-HINSTANCE hShellOle32 = 0;
/**************************************************************************
* Default ClassFactory types
*/
typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObject);
-IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst);
+static IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst);
/* this table contains all CLSID's of shell32 objects */
-struct {
+static const struct {
REFIID riid;
LPFNCREATEINSTANCE lpfnCI;
} InterfaceTable[] = {
{&CLSID_DragDropHelper, &IDropTargetHelper_Constructor},
{&CLSID_ControlPanel, &IControlPanel_Constructor},
{&CLSID_AutoComplete, &IAutoComplete_Constructor},
+#if 0
+ {&CLSID_UnixFolder, &UnixFolder_Constructor},
+ {&CLSID_UnixDosFolder, &UnixDosFolder_Constructor},
+ {&CLSID_FolderShortcut, &FolderShortcut_Constructor},
+ {&CLSID_MyDocuments, &MyDocuments_Constructor},
+ {&CLSID_RecycleBin, &RecycleBin_Constructor},
+#endif
{NULL,NULL}
};
-/*************************************************************************
- * SHCoCreateInstance [SHELL32.102]
- *
- * NOTES
- * exported by ordinal
- */
/* FIXME: this should be SHLWAPI.24 since we can't yet import by ordinal */
}
-/************************************************************************/
-
+/*************************************************************************
+ * SHCoCreateInstance [SHELL32.102]
+ *
+ * Equivalent to CoCreateInstance. Under Windows 9x this function could sometimes
+ * use the shell32 built-in "mini-COM" without the need to load ole32.dll - see
+ * SHLoadOLE for details.
+ *
+ * Under wine if a "LoadWithoutCOM" value is present or the object resides in
+ * shell32.dll the function will load the object manually without the help of ole32
+ *
+ * NOTES
+ * exported by ordinal
+ *
+ * SEE ALSO
+ * CoCreateInstace, SHLoadOLE
+ */
HRESULT WINAPI SHCoCreateInstance(
LPCWSTR aclsid,
const CLSID *clsid,
{
DWORD hres;
IID iid;
- CLSID * myclsid = (CLSID*)clsid;
+ const CLSID * myclsid = clsid;
WCHAR sKeyName[MAX_PATH];
const WCHAR sCLSID[7] = {'C','L','S','I','D','\\','\0'};
WCHAR sClassID[60];
hres = E_ACCESSDENIED;
goto end;
} else if (! SUCCEEDED(hres = DllGetClassObject(myclsid, &IID_IClassFactory, (LPVOID*)&pcf))) {
- TRACE("GetClassObject failed 0x%08lx\n", hres);
+ TRACE("GetClassObject failed 0x%08x\n", hres);
goto end;
}
end:
if(hres!=S_OK)
{
- ERR("failed (0x%08lx) to create CLSID:%s IID:%s\n",
+ ERR("failed (0x%08x) to create CLSID:%s IID:%s\n",
hres, shdebugstr_guid(myclsid), shdebugstr_guid(refiid));
ERR("class not found in registry\n");
}
}
/*************************************************************************
- * DllGetClassObject [SHELL32.@]
+ * DllGetClassObject [SHELL32.@]
+ * SHDllGetClassObject [SHELL32.128]
*/
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
{
/*************************************************************************
* SHCLSIDFromString [SHELL32.147]
*
+ * Under Windows 9x this was an ANSI version of CLSIDFromString. It also allowed
+ * to avoid dependency on ole32.dll (see SHLoadOLE for details).
+ *
+ * Under Windows NT/2000/XP this is equivalent to CLSIDFromString
+ *
* NOTES
* exported by ordinal
+ *
+ * SEE ALSO
+ * CLSIDFromString, SHLoadOLE
*/
DWORD WINAPI SHCLSIDFromStringA (LPCSTR clsid, CLSID *id)
{
TRACE("(%p(%s) %p)\n", clsid, debugstr_w(clsid), id);
return CLSIDFromString((LPWSTR)clsid, id);
}
-DWORD WINAPI SHCLSIDFromStringAW (LPVOID clsid, CLSID *id)
+DWORD WINAPI SHCLSIDFromStringAW (LPCVOID clsid, CLSID *id)
{
if (SHELL_OsIsUnicode())
return SHCLSIDFromStringW (clsid, id);
return SHCLSIDFromStringA (clsid, id);
}
-/*************************************************************************
- * Shell Memory Allocator
- */
-
-/* set the vtable later */
-static const IMallocVtbl VT_Shell_IMalloc32;
-
-/* this is the static object instance */
-typedef struct {
- const IMallocVtbl *lpVtbl;
- DWORD dummy;
-} _ShellMalloc;
-
-static _ShellMalloc Shell_Malloc = { &VT_Shell_IMalloc32,1};
-
-/* this is the global allocator of shell32 */
-static IMalloc * ShellTaskAllocator = NULL;
-
-/******************************************************************************
- * IShellMalloc_QueryInterface [VTABLE]
- */
-static HRESULT WINAPI IShellMalloc_fnQueryInterface(LPMALLOC iface, REFIID refiid, LPVOID *obj)
-{
- TRACE("(%s,%p)\n",shdebugstr_guid(refiid),obj);
- if (IsEqualIID(refiid, &IID_IUnknown) || IsEqualIID(refiid, &IID_IMalloc)) {
- *obj = (LPMALLOC) &Shell_Malloc;
- return S_OK;
- }
- return E_NOINTERFACE;
-}
-
-/******************************************************************************
- * IShellMalloc_AddRefRelease [VTABLE]
- */
-static ULONG WINAPI IShellMalloc_fnAddRefRelease(LPMALLOC iface)
-{
- return 1;
-}
-
-/******************************************************************************
- * IShellMalloc_Alloc [VTABLE]
- */
-static LPVOID WINAPI IShellMalloc_fnAlloc(LPMALLOC iface, DWORD cb)
-{
- LPVOID addr;
-
- addr = (LPVOID) LocalAlloc(LMEM_ZEROINIT, cb);
- TRACE("(%p,%ld);\n",addr,cb);
- return addr;
-}
-
-/******************************************************************************
- * IShellMalloc_Realloc [VTABLE]
- */
-static LPVOID WINAPI IShellMalloc_fnRealloc(LPMALLOC iface, LPVOID pv, DWORD cb)
-{
- LPVOID addr;
-
- if (pv) {
- if (cb) {
- addr = (LPVOID) LocalReAlloc((HANDLE) pv, cb, LMEM_ZEROINIT | LMEM_MOVEABLE);
- } else {
- LocalFree((HANDLE) pv);
- addr = NULL;
- }
- } else {
- if (cb) {
- addr = (LPVOID) LocalAlloc(LMEM_ZEROINIT, cb);
- } else {
- addr = NULL;
- }
- }
-
- TRACE("(%p->%p,%ld)\n",pv,addr,cb);
- return addr;
-}
-
-/******************************************************************************
- * IShellMalloc_Free [VTABLE]
- */
-static VOID WINAPI IShellMalloc_fnFree(LPMALLOC iface, LPVOID pv)
-{
- TRACE("(%p)\n",pv);
- LocalFree((HANDLE) pv);
-}
-
-/******************************************************************************
- * IShellMalloc_GetSize [VTABLE]
- */
-static DWORD WINAPI IShellMalloc_fnGetSize(LPMALLOC iface, LPVOID pv)
-{
- DWORD cb = (DWORD) LocalSize((HANDLE)pv);
- TRACE("(%p,%ld)\n", pv, cb);
- return cb;
-}
-
-/******************************************************************************
- * IShellMalloc_DidAlloc [VTABLE]
- */
-static INT WINAPI IShellMalloc_fnDidAlloc(LPMALLOC iface, LPVOID pv)
-{
- TRACE("(%p)\n",pv);
- return -1;
-}
-
-/******************************************************************************
- * IShellMalloc_HeapMinimize [VTABLE]
- */
-static VOID WINAPI IShellMalloc_fnHeapMinimize(LPMALLOC iface)
-{
- TRACE("()\n");
-}
-
-static const IMallocVtbl VT_Shell_IMalloc32 =
-{
- IShellMalloc_fnQueryInterface,
- IShellMalloc_fnAddRefRelease,
- IShellMalloc_fnAddRefRelease,
- IShellMalloc_fnAlloc,
- IShellMalloc_fnRealloc,
- IShellMalloc_fnFree,
- IShellMalloc_fnGetSize,
- IShellMalloc_fnDidAlloc,
- IShellMalloc_fnHeapMinimize
-};
-
/*************************************************************************
* SHGetMalloc [SHELL32.@]
*
- * Return the shell IMalloc interface.
+ * Equivalent to CoGetMalloc(MEMCTX_TASK, ...). Under Windows 9x this function
+ * could use the shell32 built-in "mini-COM" without the need to load ole32.dll -
+ * see SHLoadOLE for details.
*
* PARAMS
* lpmal [O] Destination for IMalloc interface.
* Success: S_OK. lpmal contains the shells IMalloc interface.
* Failure. An HRESULT error code.
*
- * NOTES
- * This function will use CoGetMalloc() if OLE32.DLL is already loaded.
- * If not it uses an internal implementation as a fallback.
+ * SEE ALSO
+ * CoGetMalloc, SHLoadOLE
*/
HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal)
{
TRACE("(%p)\n", lpmal);
-
- if (!ShellTaskAllocator)
- {
- HMODULE hOle32 = GetModuleHandleA("OLE32.DLL");
- /* this is very suspect. we should not being using a different
- * allocator from deallocator based on something undeterministic
- * like whether ole32 is loaded. as it happens currently, they
- * both map to the same allocator deep down, but this could
- * change in the future. */
- if(hOle32) {
- CoGetMalloc(MEMCTX_TASK, &ShellTaskAllocator);
- TRACE("got ole32 IMalloc\n");
- }
- if(!ShellTaskAllocator) {
- ShellTaskAllocator = (IMalloc* ) &Shell_Malloc;
- TRACE("use fallback allocator\n");
- }
- }
- *lpmal = ShellTaskAllocator;
- return S_OK;
+ return CoGetMalloc(MEMCTX_TASK, lpmal);
}
/*************************************************************************
* SHAlloc [SHELL32.196]
*
+ * Equivalent to CoTaskMemAlloc. Under Windows 9x this function could use
+ * the shell32 built-in "mini-COM" without the need to load ole32.dll -
+ * see SHLoadOLE for details.
+ *
* NOTES
* exported by ordinal
+ *
+ * SEE ALSO
+ * CoTaskMemAlloc, SHLoadOLE
*/
LPVOID WINAPI SHAlloc(DWORD len)
{
- IMalloc * ppv;
- LPBYTE ret;
+ LPVOID ret;
- if (!ShellTaskAllocator) SHGetMalloc(&ppv);
-
- ret = (LPVOID) IMalloc_Alloc(ShellTaskAllocator, len);
- TRACE("%lu bytes at %p\n",len, ret);
- return (LPVOID)ret;
+ ret = CoTaskMemAlloc(len);
+ TRACE("%u bytes at %p\n",len, ret);
+ return ret;
}
/*************************************************************************
* SHFree [SHELL32.195]
*
+ * Equivalent to CoTaskMemFree. Under Windows 9x this function could use
+ * the shell32 built-in "mini-COM" without the need to load ole32.dll -
+ * see SHLoadOLE for details.
+ *
* NOTES
* exported by ordinal
+ *
+ * SEE ALSO
+ * CoTaskMemFree, SHLoadOLE
*/
void WINAPI SHFree(LPVOID pv)
{
- IMalloc * ppv;
-
TRACE("%p\n",pv);
- if (!ShellTaskAllocator) SHGetMalloc(&ppv);
- IMalloc_Free(ShellTaskAllocator, pv);
+ CoTaskMemFree(pv);
}
/*************************************************************************
* IDefClF_fnConstructor
*/
-IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
+static IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
{
IDefClFImpl* lpclf;
IDefClFImpl *This = (IDefClFImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
IDefClFImpl *This = (IDefClFImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount + 1);
if (!refCount)
{
}
i = strlen(lpDrop);
- i++;
if (!lpszFile ) goto end; /* needed buffer size */
- i = (lLength > i) ? i : lLength;
- lstrcpynA (lpszFile, lpDrop, i);
+ lstrcpynA (lpszFile, lpDrop, lLength);
end:
GlobalUnlock(hDrop);
return i;
}
i = strlenW(lpwDrop);
- i++;
if ( !lpszwFile) goto end; /* needed buffer size */
-
- i = (lLength > i) ? i : lLength;
- lstrcpynW (lpszwFile, lpwDrop, i);
+ lstrcpynW (lpszwFile, lpwDrop, lLength);
end:
GlobalUnlock(hDrop);
return i;
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
LPSTR dst,
DWORD len)
{
- WARN("(%s,0x%08lx,%p,%ld) semi-stub.\n",debugstr_a(src),nField,dst,len);
+ WARN("(%s,0x%08x,%p,%d) semi-stub.\n",debugstr_a(src),nField,dst,len);
if (!src || !src[0] || !dst || !len)
return 0;
*/
DWORD WINAPI ParseFieldW(LPCWSTR src, DWORD nField, LPWSTR dst, DWORD len)
{
- WARN("(%s,0x%08lx,%p,%ld) semi-stub.\n", debugstr_w(src), nField, dst, len);
+ WARN("(%s,0x%08x,%p,%d) semi-stub.\n", debugstr_w(src), nField, dst, len);
if (!src || !src[0] || !dst || !len)
return 0;
OPENFILENAMEA ofn;
BOOL ret;
- TRACE("%p, %s, %ld, %s, %s, %s, %s)\n",
+ TRACE("%p, %s, %d, %s, %s, %s, %s)\n",
hwndOwner, lpstrFile, nMaxFile, lpstrInitialDir, lpstrDefExt,
lpstrFilter, lpstrTitle);
{
if(bSet)
{
- FIXME("%p 0x%08lx TRUE\n", lpss, dwMask);
+ FIXME("%p 0x%08x TRUE\n", lpss, dwMask);
}
else
{
DWORD dwData;
DWORD dwDataSize = sizeof (DWORD);
- TRACE("(%p 0x%08lx)\n",lpsfs,dwMask);
+ TRACE("(%p 0x%08x)\n",lpsfs,dwMask);
if (RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0))
HWND hWnd,
DWORD dwType)
{
- FIXME("(%p,0x%08lx):stub.\n",hWnd, dwType);
+ FIXME("(%p,0x%08x):stub.\n",hWnd, dwType);
return TRUE;
}
* ShellMessageBoxW [SHELL32.182]
*
* See ShellMessageBoxA.
+ *
+ * NOTE:
+ * shlwapi.ShellMessageBoxWrapW is a duplicate of shell32.ShellMessageBoxW
+ * because we can't forward to it in the .spec file since it's exported by
+ * ordinal. If you change the implementation here please update the code in
+ * shlwapi as well.
*/
int WINAPIV ShellMessageBoxW(
HINSTANCE hInstance,
...)
{
WCHAR szText[100],szTitle[100];
- LPCWSTR pszText = szText, pszTitle = szTitle, pszTemp;
+ LPCWSTR pszText = szText, pszTitle = szTitle;
+ LPWSTR pszTemp;
va_list args;
int ret;
...)
{
char szText[100],szTitle[100];
- LPCSTR pszText = szText, pszTitle = szTitle, pszTemp;
+ LPCSTR pszText = szText, pszTitle = szTitle;
+ LPSTR pszTemp;
va_list args;
int ret;
/*************************************************************************
* SHRegisterDragDrop [SHELL32.86]
*
+ * Probably equivalent to RegisterDragDrop but under Windows 9x it could use the
+ * shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
+ * for details
+ *
* NOTES
* exported by ordinal
+ *
+ * SEE ALSO
+ * RegisterDragDrop, SHLoadOLE
*/
HRESULT WINAPI SHRegisterDragDrop(
HWND hWnd,
/*************************************************************************
* SHRevokeDragDrop [SHELL32.87]
*
+ * Probably equivalent to RevokeDragDrop but under Windows 9x it could use the
+ * shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
+ * for details
+ *
* NOTES
* exported by ordinal
+ *
+ * SEE ALSO
+ * RevokeDragDrop, SHLoadOLE
*/
HRESULT WINAPI SHRevokeDragDrop(HWND hWnd)
{
/*************************************************************************
* SHDoDragDrop [SHELL32.88]
*
+ * Probably equivalent to DoDragDrop but under Windows 9x it could use the
+ * shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
+ * for details
+ *
* NOTES
* exported by ordinal
+ *
+ * SEE ALSO
+ * DoDragDrop, SHLoadOLE
*/
HRESULT WINAPI SHDoDragDrop(
HWND hWnd,
DWORD dwOKEffect,
LPDWORD pdwEffect)
{
- FIXME("(%p %p %p 0x%08lx %p):stub.\n",
+ FIXME("(%p %p %p 0x%08x %p):stub.\n",
hWnd, lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
return DoDragDrop(lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
}
WORD cKids,
CONST HWND * lpKids)
{
- FIXME("(%p 0x%08lx %p 0x%04x %p):stub.\n",
+ FIXME("(%p 0x%08x %p 0x%04x %p):stub.\n",
hwndParent, dwReserved, lpRect, cKids, lpKids);
return 0;
}
DWORD WINAPI
SignalFileOpen (DWORD dwParam1)
{
- FIXME("(0x%08lx):stub.\n", dwParam1);
+ FIXME("(0x%08x):stub.\n", dwParam1);
return 0;
}
* RETURNS
* result of the SHQueryValueEx call
*/
-static INT SHADD_get_policy(LPSTR policy, LPDWORD type, LPVOID buffer, LPDWORD len)
+static INT SHADD_get_policy(LPCSTR policy, LPDWORD type, LPVOID buffer, LPDWORD len)
{
HKEY Policy_basekey;
INT ret;
* RETURNS
* position within MRU list that data was added.
*/
-static INT SHADD_create_add_mru_data(HANDLE mruhandle, LPSTR doc_name, LPSTR new_lnk_name,
+static INT SHADD_create_add_mru_data(HANDLE mruhandle, LPCSTR doc_name, LPCSTR new_lnk_name,
LPSTR buffer, INT *len)
{
LPSTR ptr;
if (ret == ERROR_SUCCESS) {
if (!( (type == REG_DWORD) ||
((type == REG_BINARY) && (datalen == 4)) )) {
- ERR("Error policy data for \"NoRecentDocsHistory\" not formatted correctly, type=%ld, len=%ld\n",
+ ERR("Error policy data for \"NoRecentDocsHistory\" not formatted correctly, type=%d, len=%d\n",
type, datalen);
return;
}
- TRACE("policy value for NoRecentDocsHistory = %08lx\n", data[0]);
+ TRACE("policy value for NoRecentDocsHistory = %08x\n", data[0]);
/* now test the actual policy value */
if ( data[0] != 0)
return;
mymru.dwFlags = MRUF_BINARY_LIST | MRUF_DELAYED_SAVE;
mymru.hKey = HCUbasekey;
mymru.lpszSubKey = "RecentDocs";
- mymru.lpfnCompare = &SHADD_compare_mru;
+ mymru.lpfnCompare = (PROC)SHADD_compare_mru;
mruhandle = CreateMRUListA(&mymru);
if (!mruhandle) {
/* MRU failed */
if (!DeleteFileA(old_lnk_name)) {
if ((attr = GetFileAttributesA(old_lnk_name)) == INVALID_FILE_ATTRIBUTES) {
if ((err = GetLastError()) != ERROR_FILE_NOT_FOUND) {
- ERR("Delete for %s failed, err=%d, attr=%08lx\n",
+ ERR("Delete for %s failed, err=%d, attr=%08x\n",
old_lnk_name, err, attr);
}
else {
}
}
else {
- ERR("Delete for %s failed, attr=%08lx\n",
+ ERR("Delete for %s failed, attr=%08x\n",
old_lnk_name, attr);
}
}
(LPVOID *)&pPf);
if(FAILED(hres)) {
/* bombed */
- ERR("failed QueryInterface for IPersistFile %08lx\n", hres);
+ ERR("failed QueryInterface for IPersistFile %08x\n", hres);
goto fail;
}
}
if(FAILED(hres)) {
/* bombed */
- ERR("failed Set{IDList|Path} %08lx\n", hres);
+ ERR("failed Set{IDList|Path} %08x\n", hres);
goto fail;
}
hres = IShellLinkA_SetDescription(psl, desc);
if(FAILED(hres)) {
/* bombed */
- ERR("failed SetDescription %08lx\n", hres);
+ ERR("failed SetDescription %08x\n", hres);
goto fail;
}
hres = IPersistFile_Save(pPf, widelink, TRUE);
if(FAILED(hres)) {
/* bombed */
- ERR("failed IPersistFile::Save %08lx\n", hres);
+ ERR("failed IPersistFile::Save %08x\n", hres);
IPersistFile_Release(pPf);
IShellLinkA_Release(psl);
goto fail;
hres = IPersistFile_SaveCompleted(pPf, widelink);
IPersistFile_Release(pPf);
IShellLinkA_Release(psl);
- TRACE("shortcut %s has been created, result=%08lx\n",
+ TRACE("shortcut %s has been created, result=%08x\n",
new_lnk_filepath, hres);
}
else {
- ERR("CoCreateInstance failed, hres=%08lx\n", hres);
+ ERR("CoCreateInstance failed, hres=%08x\n", hres);
}
}
IShellView * psf;
HRESULT hRes;
- TRACE("sf=%p cb=%p mode=0x%08x parm=%p\n",
- psvcbi->pshf, psvcbi->pfnCallback,
+ TRACE("sf=%p pidl=%p cb=%p mode=0x%08x parm=%p\n",
+ psvcbi->pshf, psvcbi->pidl, psvcbi->pfnCallback,
psvcbi->fvm, psvcbi->psvOuter);
psf = IShellView_Constructor(psvcbi->pshf);
*
*/
HRESULT WINAPI SHWinHelp (DWORD v, DWORD w, DWORD x, DWORD z)
-{ FIXME("0x%08lx 0x%08lx 0x%08lx 0x%08lx stub\n",v,w,x,z);
+{ FIXME("0x%08x 0x%08x 0x%08x 0x%08x stub\n",v,w,x,z);
return 0;
}
/*************************************************************************
*
*/
HRESULT WINAPI SHRunControlPanel (DWORD x, DWORD z)
-{ FIXME("0x%08lx 0x%08lx stub\n",x,z);
+{ FIXME("0x%08x 0x%08x stub\n",x,z);
return 0;
}
* NOTES
* gets the interface pointer of the explorer and a reference
*/
-HRESULT WINAPI SHGetInstanceExplorer (LPUNKNOWN * lpUnknown)
+HRESULT WINAPI SHGetInstanceExplorer (IUnknown **lpUnknown)
{ TRACE("%p\n", lpUnknown);
*lpUnknown = SHELL32_IExplorerInterface;
/*************************************************************************
* SHFreeUnusedLibraries [SHELL32.123]
*
+ * Probably equivalent to CoFreeUnusedLibraries but under Windows 9x it could use
+ * the shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
+ * for details
+ *
* NOTES
- * exported by name
+ * exported by ordinal
+ *
+ * SEE ALSO
+ * CoFreeUnusedLibraries, SHLoadOLE
*/
void WINAPI SHFreeUnusedLibraries (void)
{
FIXME("stub\n");
+ CoFreeUnusedLibraries();
}
/*************************************************************************
* DAD_AutoScroll [SHELL32.129]
*/
BOOL WINAPI DAD_DragEnterEx(HWND hwnd, POINT p)
{
- FIXME("hwnd = %p (%ld,%ld)\n",hwnd,p.x,p.y);
+ FIXME("hwnd = %p (%d,%d)\n",hwnd,p.x,p.y);
return FALSE;
}
/*************************************************************************
*/
BOOL WINAPI DAD_DragMove(POINT p)
{
- FIXME("(%ld,%ld)\n",p.x,p.y);
+ FIXME("(%d,%d)\n",p.x,p.y);
return FALSE;
}
/*************************************************************************
return 0;
}
/*************************************************************************
- * IsUserAnAdmin [SHELL32.680] NT 4.0
- *
- * Checks whether the current user is a member of the Administrators group.
+ * IsUserAdmin [SHELL32.680] NT 4.0
*
- * PARAMS
- * None
- *
- * RETURNS
- * Success: TRUE
- * Failure: FALSE
*/
+
BOOL WINAPI IsUserAnAdmin(VOID)
{
SID_IDENTIFIER_AUTHORITY Authority = {SECURITY_NT_AUTHORITY};
* SetAppStartingCursor [SHELL32.99]
*/
HRESULT WINAPI SetAppStartingCursor(HWND u, DWORD v)
-{ FIXME("hwnd=%p 0x%04lx stub\n",u,v );
+{ FIXME("hwnd=%p 0x%04x stub\n",u,v );
return 0;
}
+
/*************************************************************************
* SHLoadOLE [SHELL32.151]
*
+ * To reduce the memory usage of Windows 95, its shell32 contained an
+ * internal implementation of a part of COM (see e.g. SHGetMalloc, SHCoCreateInstance,
+ * SHRegisterDragDrop etc.) that allowed to use in-process STA objects without
+ * the need to load OLE32.DLL. If OLE32.DLL was already loaded, the SH* function
+ * would just call the Co* functions.
+ *
+ * The SHLoadOLE was called when OLE32.DLL was being loaded to transfer all the
+ * information from the shell32 "mini-COM" to ole32.dll.
+ *
+ * See http://blogs.msdn.com/oldnewthing/archive/2004/07/05/173226.aspx for a
+ * detailed description.
+ *
+ * Under wine ole32.dll is always loaded as it is imported by shlwapi.dll which is
+ * imported by shell32 and no "mini-COM" is used (except for the "LoadWithoutCOM"
+ * hack in SHCoCreateInstance)
*/
HRESULT WINAPI SHLoadOLE(LPARAM lParam)
-{ FIXME("0x%04lx stub\n",lParam);
+{ FIXME("0x%08lx stub\n",lParam);
return S_OK;
}
/*************************************************************************
*
*/
HRESULT WINAPI DriveType(DWORD u)
-{ FIXME("0x%04lx stub\n",u);
+{ FIXME("0x%04x stub\n",u);
+ return 0;
+}
+/*************************************************************************
+ * InvalidateDriveType [SHELL32.65]
+ *
+ */
+int WINAPI InvalidateDriveType(int u)
+{ FIXME("0x%08x stub\n",u);
return 0;
}
/*************************************************************************
DWORD dwFlags,
DWORD dwTimeout)
{
- FIXME("%p 0x%08lx 0x%08lx stub\n", pidl, dwFlags, dwTimeout);
+ FIXME("%p 0x%08x 0x%08x stub\n", pidl, dwFlags, dwTimeout);
return 0;
}
*/
HRESULT WINAPI SHValidateUNC (DWORD x, DWORD y, DWORD z)
{
- FIXME("0x%08lx 0x%08lx 0x%08lx stub\n",x,y,z);
+ FIXME("0x%08x 0x%08x 0x%08x stub\n",x,y,z);
return 0;
}
return 0;
}
+typedef struct _PSXA
+{
+ UINT uiCount;
+ UINT uiAllocated;
+ IShellPropSheetExt *pspsx[1];
+} PSXA, *PPSXA;
+
+typedef struct _PSXA_CALL
+{
+ LPFNADDPROPSHEETPAGE lpfnAddReplaceWith;
+ LPARAM lParam;
+ BOOL bCalled;
+ BOOL bMultiple;
+ UINT uiCount;
+} PSXA_CALL, *PPSXA_CALL;
+
+static BOOL CALLBACK PsxaCall(HPROPSHEETPAGE hpage, LPARAM lParam)
+{
+ PPSXA_CALL Call = (PPSXA_CALL)lParam;
+
+ if (Call != NULL)
+ {
+ if ((Call->bMultiple || !Call->bCalled) &&
+ Call->lpfnAddReplaceWith(hpage, Call->lParam))
+ {
+ Call->bCalled = TRUE;
+ Call->uiCount++;
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
/*************************************************************************
* SHAddFromPropSheetExtArray [SHELL32.167]
*/
UINT WINAPI SHAddFromPropSheetExtArray(HPSXA hpsxa, LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam)
{
- FIXME("(%p,%p,%08lx)stub\n", hpsxa, lpfnAddPage, lParam);
- return 0;
+ PSXA_CALL Call;
+ UINT i;
+ PPSXA psxa = (PPSXA)hpsxa;
+
+ TRACE("(%p,%p,%08lx)\n", hpsxa, lpfnAddPage, lParam);
+
+ if (psxa)
+ {
+ ZeroMemory(&Call, sizeof(Call));
+ Call.lpfnAddReplaceWith = lpfnAddPage;
+ Call.lParam = lParam;
+ Call.bMultiple = TRUE;
+
+ /* Call the AddPage method of all registered IShellPropSheetExt interfaces */
+ for (i = 0; i != psxa->uiCount; i++)
+ {
+ psxa->pspsx[i]->lpVtbl->AddPages(psxa->pspsx[i], PsxaCall, (LPARAM)&Call);
+ }
+
+ return Call.uiCount;
+ }
+
+ return 0;
}
/*************************************************************************
- * SHCreatePropSheetExtArray [SHELL32.168]
+ * SHCreatePropSheetExtArrayEx [SHELL32.194]
*/
-HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface)
+HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj)
{
- FIXME("(%p,%s,%u)stub\n", hKey, debugstr_w(pszSubKey), max_iface);
- return NULL;
+ static const WCHAR szPropSheetSubKey[] = {'s','h','e','l','l','e','x','\\','P','r','o','p','e','r','t','y','S','h','e','e','t','H','a','n','d','l','e','r','s',0};
+ WCHAR szHandler[64];
+ DWORD dwHandlerLen;
+ WCHAR szClsidHandler[39];
+ DWORD dwClsidSize;
+ CLSID clsid;
+ LONG lRet;
+ DWORD dwIndex;
+ IShellExtInit *psxi;
+ IShellPropSheetExt *pspsx;
+ HKEY hkBase, hkPropSheetHandlers;
+ PPSXA psxa = NULL;
+
+ TRACE("(%p,%s,%u)\n", hKey, debugstr_w(pszSubKey), max_iface);
+
+ if (max_iface == 0)
+ return NULL;
+
+ /* Open the registry key */
+ lRet = RegOpenKeyW(hKey, pszSubKey, &hkBase);
+ if (lRet != ERROR_SUCCESS)
+ return NULL;
+
+ lRet = RegOpenKeyExW(hkBase, szPropSheetSubKey, 0, KEY_ENUMERATE_SUB_KEYS, &hkPropSheetHandlers);
+ RegCloseKey(hkBase);
+ if (lRet == ERROR_SUCCESS)
+ {
+ /* Create and initialize the Property Sheet Extensions Array */
+ psxa = (PPSXA)LocalAlloc(LMEM_FIXED, FIELD_OFFSET(PSXA, pspsx[max_iface]));
+ if (psxa)
+ {
+ ZeroMemory(psxa, FIELD_OFFSET(PSXA, pspsx[max_iface]));
+ psxa->uiAllocated = max_iface;
+
+ /* Enumerate all subkeys and attempt to load the shell extensions */
+ dwIndex = 0;
+ do
+ {
+ dwHandlerLen = sizeof(szHandler) / sizeof(szHandler[0]);
+ lRet = RegEnumKeyExW(hkPropSheetHandlers, dwIndex++, szHandler, &dwHandlerLen, NULL, NULL, NULL, NULL);
+ if (lRet != ERROR_SUCCESS)
+ {
+ if (lRet == ERROR_MORE_DATA)
+ continue;
+
+ if (lRet == ERROR_NO_MORE_ITEMS)
+ lRet = ERROR_SUCCESS;
+ break;
+ }
+
+ dwClsidSize = sizeof(szClsidHandler);
+ if (SHGetValueW(hkPropSheetHandlers, szHandler, NULL, NULL, szClsidHandler, &dwClsidSize) == ERROR_SUCCESS)
+ {
+ /* Force a NULL-termination and convert the string */
+ szClsidHandler[(sizeof(szClsidHandler) / sizeof(szClsidHandler[0])) - 1] = 0;
+ if (SUCCEEDED(SHCLSIDFromStringW(szClsidHandler, &clsid)))
+ {
+ /* Attempt to get an IShellPropSheetExt and an IShellExtInit instance.
+ Only if both interfaces are supported it's a real shell extension.
+ Then call IShellExtInit's Initialize method. */
+ if (SUCCEEDED(CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER/* | CLSCTX_NO_CODE_DOWNLOAD */, &IID_IShellPropSheetExt, (LPVOID *)&pspsx)))
+ {
+ if (SUCCEEDED(pspsx->lpVtbl->QueryInterface(pspsx, &IID_IShellExtInit, (PVOID *)&psxi)))
+ {
+ if (SUCCEEDED(psxi->lpVtbl->Initialize(psxi, NULL, pDataObj, hKey)))
+ {
+ /* Add the IShellPropSheetExt instance to the array */
+ psxa->pspsx[psxa->uiCount++] = pspsx;
+ }
+ else
+ {
+ psxi->lpVtbl->Release(psxi);
+ pspsx->lpVtbl->Release(pspsx);
+ }
+ }
+ else
+ pspsx->lpVtbl->Release(pspsx);
+ }
+ }
+ }
+
+ } while (psxa->uiCount != psxa->uiAllocated);
+ }
+ else
+ lRet = ERROR_NOT_ENOUGH_MEMORY;
+
+ RegCloseKey(hkPropSheetHandlers);
+ }
+
+ if (lRet != ERROR_SUCCESS && psxa)
+ {
+ SHDestroyPropSheetExtArray((HPSXA)psxa);
+ psxa = NULL;
+ }
+
+ return (HPSXA)psxa;
}
/*************************************************************************
- * SHCreatePropSheetExtArrayEx [SHELL32.194]
+ * SHCreatePropSheetExtArray [SHELL32.168]
*/
-HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj)
+HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface)
{
- FIXME("(%p,%s,%u,%p)stub\n", hKey, debugstr_w(pszSubKey), max_iface, pDataObj);
- return NULL;
+ return SHCreatePropSheetExtArrayEx(hKey, pszSubKey, max_iface, NULL);
}
+
/*************************************************************************
* SHReplaceFromPropSheetExtArray [SHELL32.170]
*/
UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam)
{
- FIXME("(%p,%u,%p,%08lx)stub\n", hpsxa, uPageID, lpfnReplaceWith, lParam);
- return 0;
+ PSXA_CALL Call;
+ UINT i;
+ PPSXA psxa = (PPSXA)hpsxa;
+
+ TRACE("(%p,%u,%p,%08lx)\n", hpsxa, uPageID, lpfnReplaceWith, lParam);
+
+ if (psxa)
+ {
+ ZeroMemory(&Call, sizeof(Call));
+ Call.lpfnAddReplaceWith = lpfnReplaceWith;
+ Call.lParam = lParam;
+
+ /* Call the ReplacePage method of all registered IShellPropSheetExt interfaces.
+ Each shell extension is only allowed to call the callback once during the callback. */
+ for (i = 0; i != psxa->uiCount; i++)
+ {
+ Call.bCalled = FALSE;
+ psxa->pspsx[i]->lpVtbl->ReplacePage(psxa->pspsx[i], uPageID, PsxaCall, (LPARAM)&Call);
+ }
+
+ return Call.uiCount;
+ }
+
+ return 0;
}
/*************************************************************************
*/
void WINAPI SHDestroyPropSheetExtArray(HPSXA hpsxa)
{
- FIXME("(%p)stub\n", hpsxa);
+ UINT i;
+ PPSXA psxa = (PPSXA)hpsxa;
+
+ TRACE("(%p)\n", hpsxa);
+
+ if (psxa)
+ {
+ for (i = 0; i != psxa->uiCount; i++)
+ {
+ psxa->pspsx[i]->lpVtbl->Release(psxa->pspsx[i]);
+ }
+
+ LocalFree((HLOCAL)psxa);
+ }
}
/*************************************************************************
UINT i;
HWND hwnd = 0; /*FIXME: who should be hwnd of owner? set to desktop */
- TRACE("(%p, %ld, %p, %p)\n", pidlFolder, cpidlFiles, lppidlFiles, ppdataObject);
+ TRACE("(%p, %d, %p, %p)\n", pidlFolder, cpidlFiles, lppidlFiles, ppdataObject);
if (TRACE_ON(pidl))
{
pdump (pidlFolder);
{
IEnumFORMATETC *pef;
HRESULT hRes;
- TRACE("cf=%ld fe=%p pef=%p\n", cFormats, lpFormats, ppenumFormatetc);
+ TRACE("cf=%d fe=%p pef=%p\n", cFormats, lpFormats, ppenumFormatetc);
pef = IEnumFORMATETC_Constructor(cFormats, lpFormats);
if (!pef)
{
HRESULT ret = S_OK;
- FIXME("stub %p 0x%08lx %p\n", lpdw0, lpdw0 ? *lpdw0 : 0, lpdw1);
+ FIXME("stub %p 0x%08x %p\n", lpdw0, lpdw0 ? *lpdw0 : 0, lpdw1);
if (!lpdw0 || *lpdw0 != 0x10)
ret = E_INVALIDARG;
return -1;
}
-
BOOL WINAPI SHObjectProperties(HWND hwnd, DWORD dwType, LPCWSTR szObject, LPCWSTR szPage)
{
- FIXME("%p, 0x%08lx, %s, %s - stub\n", hwnd, dwType, debugstr_w(szObject), debugstr_w(szPage));
-
- MessageBox (NULL, TEXT("SHObjectProperties-WINAPI:\n\nTODO: Add the function code."), TEXT("SHObjectProperties; Dev: frik85"), 0);
-
+ FIXME("%p, 0x%08x, %s, %s - stub\n", hwnd, dwType, debugstr_w(szObject), debugstr_w(szPage));
return TRUE;
}
HRESULT WINAPI SHStartNetConnectionDialog(HWND hwnd, LPCSTR pszRemoteName, DWORD dwType)
{
- FIXME("%p, %s, 0x%08lx - stub\n", hwnd, debugstr_a(pszRemoteName), dwType);
+ FIXME("%p, %s, 0x%08x - stub\n", hwnd, debugstr_a(pszRemoteName), dwType);
return S_OK;
}
HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags)
{
- FIXME("%p, %s, 0x%08lx - stub\n", hwnd, debugstr_a(pszRootPath), dwFlags);
+ FIXME("%p, %s, 0x%08x - stub\n", hwnd, debugstr_a(pszRootPath), dwFlags);
return S_OK;
}
HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags)
{
- FIXME("%p, %s, 0x%08lx - stub\n", hwnd, debugstr_w(pszRootPath), dwFlags);
+ FIXME("%p, %s, 0x%08x - stub\n", hwnd, debugstr_w(pszRootPath), dwFlags);
return S_OK;
}
return S_OK;
}
+
+/*************************************************************************
+ * SHSetLocalizedName (SHELL32.@)
+ */
+HRESULT WINAPI SHSetLocalizedName(LPWSTR pszPath, LPCWSTR pszResModule, int idsRes)
+{
+ FIXME("%p, %s, %d - stub\n", pszPath, debugstr_w(pszResModule), idsRes);
+
+ return S_OK;
+}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* NOTES:
*
*
*/
+#define symlink(A, B)
#include "config.h"
#include "wine/port.h"
+#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <ctype.h>
LPCSTR lpszLongName,
LPCSTR lpszPathName)
{
- FIXME("%p %lu %s %s %s stub\n",
+ FIXME("%p %u %s %s %s stub\n",
lpszBuffer, dwBuffSize, debugstr_a(lpszShortName),
debugstr_a(lpszLongName), debugstr_a(lpszPathName));
return TRUE;
LPCWSTR lpszLongName,
LPCWSTR lpszPathName)
{
- FIXME("%p %lu %s %s %s stub\n",
+ FIXME("%p %u %s %s %s stub\n",
lpszBuffer, dwBuffSize, debugstr_w(lpszShortName),
debugstr_w(lpszLongName), debugstr_w(lpszPathName));
return TRUE;
/*************************************************************************
* PathFindOnPath [SHELL32.145]
*/
-BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs)
+BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID *sOtherDirs)
{
if (SHELL_OsIsUnicode())
return PathFindOnPathW(sFile, (LPCWSTR *)sOtherDirs);
else
{
LPSTR lpszFileA = (LPSTR)lpszFileW;
- LPCSTR lpszPathA = (LPSTR)lpszPathW;
+ LPCSTR lpszPathA = (LPCSTR)lpszPathW;
LPSTR p = lpszFileA;
TRACE("Cleanup %s\n",debugstr_a(lpszFileA));
LPCSTR *alpszPaths,
DWORD dwFlags)
{
- FIXME("(%s,%p,0x%08lx),stub!\n",
+ FIXME("(%s,%p,0x%08x),stub!\n",
lpszPath, *alpszPaths, dwFlags);
return 0;
}
LPCWSTR *alpszPaths,
DWORD dwFlags)
{
- FIXME("(%s,%p,0x%08lx),stub!\n",
+ FIXME("(%s,%p,0x%08x),stub!\n",
debugstr_w(lpszPath), debugstr_w(*alpszPaths), dwFlags);
return 0;
}
DWORD dwBuffSize,
DWORD dwFlags)
{
- FIXME("%s %p 0x%04lx 0x%04lx stub\n",
+ FIXME("%s %p 0x%04x 0x%04x stub\n",
lpszPath, lpszBuff, dwBuffSize, dwFlags);
if(!lpszPath) return -1;
if(lpszBuff) strcpy(lpszBuff, lpszPath);
DWORD dwBuffSize,
DWORD dwFlags)
{
- FIXME("(%s, %p, 0x%04lx, 0x%04lx) stub\n",
+ FIXME("(%s, %p, 0x%04x, 0x%04x) stub\n",
debugstr_w(lpszPath), lpszBuff, dwBuffSize, dwFlags);
if(!lpszPath) return -1;
if(lpszBuff) strcpyW(lpszBuff, lpszPath);
static const WCHAR AllUsersProfileValueW[] = {'A','l','l','U','s','e','r','s','P','r','o','f','i','l','e','\0'};
static const WCHAR szSHFolders[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','S','h','e','l','l',' ','F','o','l','d','e','r','s','\0'};
static const WCHAR szSHUserFolders[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','U','s','e','r',' ','S','h','e','l','l',' ','F','o','l','d','e','r','s','\0'};
-static const WCHAR szSHSetupFolders[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\0'};
/* This defaults to L"Documents and Settings" on Windows 2000/XP, but we're
* acting more Windows 9x-like for now.
*/
},
{ /* 0x14 - CSIDL_FONTS */
CSIDL_Type_WindowsPath,
- NULL,
+ FontsW,
FontsW
},
{ /* 0x15 - CSIDL_TEMPLATES */
hr = E_FAIL;
RegCloseKey(shellFolderKey);
RegCloseKey(userShellFolderKey);
- TRACE("returning 0x%08lx\n", hr);
+ TRACE("returning 0x%08x\n", hr);
return hr;
}
if (!pszPath)
return E_INVALIDARG;
- /* Try special cases first */
- hr = E_FAIL;
- switch (folder)
- {
- case CSIDL_PERSONAL:
- case CSIDL_MYMUSIC:
- case CSIDL_MYPICTURES:
- case CSIDL_MYVIDEO:
- {
- const char *home = getenv("HOME");
-
- /* special case for "My Documents", map to $HOME */
- if (home)
- {
- WCHAR homeW[MAX_PATH];
-
- MultiByteToWideChar(CP_ACP, 0, home, -1, homeW, MAX_PATH);
- if (GetFullPathNameW(homeW, MAX_PATH, pszPath, NULL) != 0 &&
- PathIsDirectoryW(pszPath))
- hr = S_OK;
- }
- break;
- }
- case CSIDL_DESKTOP:
- case CSIDL_DESKTOPDIRECTORY:
- {
- const char *home = getenv("HOME");
-
- /* special case for Desktop, map to $HOME/Desktop if it exists */
- if (home)
- {
- WCHAR desktopW[MAX_PATH];
-
- MultiByteToWideChar(CP_ACP, 0, home, -1, desktopW, MAX_PATH);
- PathAppendW(desktopW, DesktopW);
- if (GetFullPathNameW(desktopW, MAX_PATH, pszPath, NULL) != 0 &&
- PathIsDirectoryW(pszPath))
- hr = S_OK;
- }
- break;
- }
- }
- if (SUCCEEDED(hr))
- return hr;
-
- /* Either the folder was unhandled, or a suitable default wasn't found,
- * so use one of the resource-based defaults
- */
if (CSIDL_Data[folder].szDefaultPath &&
IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath))
{
strcatW(pszPath, pDefaultPath);
}
}
- TRACE("returning 0x%08lx\n", hr);
+ TRACE("returning 0x%08x\n", hr);
return hr;
}
{
HRESULT hr;
- TRACE("0x%08lx,0x%02x,%p\n", dwFlags, folder, pszPath);
+ TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath);
if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0]))
return E_INVALIDARG;
RegCloseKey(hKey);
}
}
- TRACE("returning 0x%08lx (output path is %s)\n", hr, debugstr_w(pszPath));
+ TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
return hr;
}
{
HRESULT hr;
- TRACE("%p,0x%08lx,0x%02x,%p\n", hToken, dwFlags, folder, pszPath);
+ TRACE("%p,0x%08x,0x%02x,%p\n", hToken, dwFlags, folder, pszPath);
if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0]))
return E_INVALIDARG;
if (FAILED(hr))
hr = _SHGetDefaultValue(folder, pszPath);
}
- TRACE("returning 0x%08lx (output path is %s)\n", hr, debugstr_w(pszPath));
+ TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
return hr;
}
{
HRESULT hr;
- TRACE("0x%08lx,0x%02x,%p\n", dwFlags, folder, pszPath);
+ TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath);
if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0]))
return E_INVALIDARG;
if (FAILED(hr))
hr = _SHGetDefaultValue(folder, pszPath);
}
- TRACE("returning 0x%08lx (output path is %s)\n", hr, debugstr_w(pszPath));
+ TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
return hr;
}
-/* From the original Wine source:
- *
- * Attempts to expand environment variables from szSrc into szDest, which is
+static HRESULT _SHOpenProfilesKey(PHKEY pKey)
+{
+ LONG lRet;
+ DWORD disp;
+
+ lRet = RegCreateKeyExW(HKEY_LOCAL_MACHINE, ProfileListW, 0, NULL, 0,
+ KEY_ALL_ACCESS, NULL, pKey, &disp);
+ return HRESULT_FROM_WIN32(lRet);
+}
+
+/* Reads the value named szValueName from the key profilesKey (assumed to be
+ * opened by _SHOpenProfilesKey) into szValue, which is assumed to be MAX_PATH
+ * WCHARs in length. If it doesn't exist, returns szDefault (and saves
+ * szDefault to the registry).
+ */
+static HRESULT _SHGetProfilesValue(HKEY profilesKey, LPCWSTR szValueName,
+ LPWSTR szValue, LPCWSTR szDefault)
+{
+ HRESULT hr;
+ DWORD type, dwPathLen = MAX_PATH * sizeof(WCHAR);
+ LONG lRet;
+
+ TRACE("%p,%s,%p,%s\n", profilesKey, debugstr_w(szValueName), szValue,
+ debugstr_w(szDefault));
+ lRet = RegQueryValueExW(profilesKey, szValueName, NULL, &type,
+ (LPBYTE)szValue, &dwPathLen);
+ if (!lRet && (type == REG_SZ || type == REG_EXPAND_SZ) && dwPathLen
+ && *szValue)
+ {
+ dwPathLen /= sizeof(WCHAR);
+ szValue[dwPathLen] = '\0';
+ hr = S_OK;
+ }
+ else
+ {
+ /* Missing or invalid value, set a default */
+ lstrcpynW(szValue, szDefault, MAX_PATH);
+ TRACE("Setting missing value %s to %s\n", debugstr_w(szValueName),
+ debugstr_w(szValue));
+ lRet = RegSetValueExW(profilesKey, szValueName, 0, REG_EXPAND_SZ,
+ (LPBYTE)szValue,
+ (strlenW(szValue) + 1) * sizeof(WCHAR));
+ if (lRet)
+ hr = HRESULT_FROM_WIN32(lRet);
+ else
+ hr = S_OK;
+ }
+ TRACE("returning 0x%08x (output value is %s)\n", hr, debugstr_w(szValue));
+ return hr;
+}
+
+/* Attempts to expand environment variables from szSrc into szDest, which is
* assumed to be MAX_PATH characters in length. Before referring to the
* environment, handles a few variables directly, because the environment
* variables may not be set when this is called (as during Wine's installation
* path
* If one of the directly handled environment variables is expanded, only
* expands a single variable, and only in the beginning of szSrc.
- *
- * That's fine for Wine, but it breaks in ReactOS where we have profile paths
- * like "c:\documents and settings\Administrator.REACTOS". Anyway, we have the
- * environment variables handy so we'll just use them instead of hacking around
*/
static HRESULT _SHExpandEnvironmentStrings(LPCWSTR szSrc, LPWSTR szDest)
{
- HRESULT hr = S_OK;
- WCHAR szTemp[MAX_PATH];
+ HRESULT hr;
+ WCHAR szTemp[MAX_PATH], szProfilesPrefix[MAX_PATH] = { 0 };
+ HKEY key = NULL;
TRACE("%s, %p\n", debugstr_w(szSrc), szDest);
hr = S_OK;
goto end;
}
+ /* Get the profile prefix, we'll probably be needing it */
+ hr = _SHOpenProfilesKey(&key);
+ if (SUCCEEDED(hr))
+ {
+ WCHAR szDefaultProfilesPrefix[MAX_PATH];
+
+ GetWindowsDirectoryW(szDefaultProfilesPrefix, MAX_PATH);
+ PathAddBackslashW(szDefaultProfilesPrefix);
+ PathAppendW(szDefaultProfilesPrefix, szDefaultProfileDirW);
+ hr = _SHGetProfilesValue(key, ProfilesDirectoryW, szProfilesPrefix,
+ szDefaultProfilesPrefix);
+ }
*szDest = 0;
strcpyW(szTemp, szSrc);
while (SUCCEEDED(hr) && szTemp[0] == '%')
{
- DWORD ret = ExpandEnvironmentStringsW(szSrc, szDest, MAX_PATH);
+ if (!strncmpiW(szTemp, AllUsersProfileW, strlenW(AllUsersProfileW)))
+ {
+ WCHAR szAllUsers[MAX_PATH];
+
+ strcpyW(szDest, szProfilesPrefix);
+ hr = _SHGetProfilesValue(key, AllUsersProfileValueW,
+ szAllUsers, AllUsersW);
+ PathAppendW(szDest, szAllUsers);
+ PathAppendW(szDest, szTemp + strlenW(AllUsersProfileW));
+ }
+ else if (!strncmpiW(szTemp, UserProfileW, strlenW(UserProfileW)))
+ {
+ WCHAR userName[MAX_PATH];
+ DWORD userLen = MAX_PATH;
- if (ret > MAX_PATH)
- hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
- else if (ret == 0)
- hr = HRESULT_FROM_WIN32(GetLastError());
+ strcpyW(szDest, szProfilesPrefix);
+ GetUserNameW(userName, &userLen);
+ PathAppendW(szDest, userName);
+ PathAppendW(szDest, szTemp + strlenW(UserProfileW));
+ }
+ else if (!strncmpiW(szTemp, SystemDriveW, strlenW(SystemDriveW)))
+ {
+ GetSystemDirectoryW(szDest, MAX_PATH);
+ if (szDest[1] != ':')
+ {
+ FIXME("non-drive system paths unsupported\n");
+ hr = E_FAIL;
+ }
+ else
+ {
+ strcpyW(szDest + 3, szTemp + strlenW(SystemDriveW) + 1);
+ hr = S_OK;
+ }
+ }
else
- hr = S_OK;
- /* By default, terminate loop */
- szTemp[0] = '\0';
- if (SUCCEEDED(hr) && strcmpW(szSrc, szDest) != 0)
{
- /* Continue the loop */
+ DWORD ret = ExpandEnvironmentStringsW(szSrc, szDest, MAX_PATH);
+
+ if (ret > MAX_PATH)
+ hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+ else if (ret == 0)
+ hr = HRESULT_FROM_WIN32(GetLastError());
+ else
+ hr = S_OK;
+ }
+ if (SUCCEEDED(hr) && szDest[0] == '%')
strcpyW(szTemp, szDest);
+ else
+ {
+ /* terminate loop */
+ szTemp[0] = '\0';
}
}
end:
- TRACE("returning 0x%08lx (input was %s, output is %s)\n", hr,
+ if (key)
+ RegCloseKey(key);
+ TRACE("returning 0x%08x (input was %s, output is %s)\n", hr,
debugstr_w(szSrc), debugstr_w(szDest));
return hr;
}
DWORD folder = nFolder & CSIDL_FOLDER_MASK;
CSIDL_Type type;
int ret;
-
+
TRACE("%p,%p,nFolder=0x%04x\n", hwndOwner,pszPath,nFolder);
/* Windows always NULL-terminates the resulting path regardless of success
ret = SHCreateDirectoryExW(hwndOwner, szBuildPath, NULL);
if (ret && ret != ERROR_ALREADY_EXISTS)
{
- ERR("Failed to create directory '%s'.\n", debugstr_w(szBuildPath));
+ ERR("Failed to create directory %s.\n", debugstr_w(szBuildPath));
hr = E_FAIL;
goto end;
}
- TRACE("Created missing system directory '%s'\n", debugstr_w(szBuildPath));
+ TRACE("Created missing system directory %s\n", debugstr_w(szBuildPath));
end:
- TRACE("returning 0x%08lx (final path is %s)\n", hr, debugstr_w(szBuildPath));
+ TRACE("returning 0x%08x (final path is %s)\n", hr, debugstr_w(szBuildPath));
return hr;
}
path);
else if (CSIDL_Data[folders[i]].type == CSIDL_Type_AllUsers)
_SHGetAllUsersProfilePath(SHGFP_TYPE_DEFAULT, folders[i], path);
- else if (CSIDL_Data[folders[i]].type == CSIDL_Type_CurrVer)
- _SHGetDefaultValue(folders[i], path);
+ else if (CSIDL_Data[folders[i]].type == CSIDL_Type_WindowsPath)
+ GetWindowsDirectoryW(path, MAX_PATH);
else
hr = E_FAIL;
if (*path)
if (hKey)
RegCloseKey(hKey);
- TRACE("returning 0x%08lx\n", hr);
+ TRACE("returning 0x%08x\n", hr);
return hr;
}
CSIDL_COOKIES,
CSIDL_HISTORY,
CSIDL_MYPICTURES,
- CSIDL_ADMINTOOLS
+ CSIDL_FONTS
};
WCHAR userShellFolderPath[MAX_PATH], shellFolderPath[MAX_PATH];
LPCWSTR pUserShellFolderPath, pShellFolderPath;
hr = _SHRegisterFolders(hRootKey, hToken, pUserShellFolderPath,
pShellFolderPath, folders, sizeof(folders) / sizeof(folders[0]));
- TRACE("returning 0x%08lx\n", hr);
+ TRACE("returning 0x%08x\n", hr);
return hr;
}
TRACE("\n");
hr = _SHRegisterFolders(HKEY_LOCAL_MACHINE, NULL, szSHUserFolders,
szSHFolders, folders, sizeof(folders) / sizeof(folders[0]));
- TRACE("returning 0x%08lx\n", hr);
+ TRACE("returning 0x%08x\n", hr);
return hr;
}
-static HRESULT _SHRegisterSetupShellFolders(void)
-{
- static const UINT folders[] = {
- CSIDL_PROGRAM_FILES_COMMON,
- CSIDL_PROGRAM_FILES,
- };
+/******************************************************************************
+ * _SHAppendToUnixPath [Internal]
+ *
+ * Helper function for _SHCreateSymbolicLinks. Appends pwszSubPath (or the
+ * corresponding resource, if IS_INTRESOURCE) to the unix base path 'szBasePath'
+ * and replaces backslashes with slashes.
+ *
+ * PARAMS
+ * szBasePath [IO] The unix base path, which will be appended to (CP_UNXICP).
+ * pwszSubPath [I] Sub-path or resource id (use MAKEINTRESOURCEW).
+ *
+ * RETURNS
+ * Success: TRUE,
+ * Failure: FALSE
+ */
+static inline BOOL _SHAppendToUnixPath(char *szBasePath, LPCWSTR pwszSubPath) {
+ WCHAR wszSubPath[MAX_PATH];
+ int cLen = strlen(szBasePath);
+ char *pBackslash;
+
+ if (IS_INTRESOURCE(pwszSubPath)) {
+ if (!LoadStringW(shell32_hInstance, LOWORD(pwszSubPath), wszSubPath, MAX_PATH)) {
+ /* Fall back to hard coded defaults. */
+ switch (LOWORD(pwszSubPath)) {
+ case IDS_PERSONAL:
+ lstrcpyW(wszSubPath, PersonalW);
+ break;
+ case IDS_MYMUSIC:
+ lstrcpyW(wszSubPath, My_MusicW);
+ break;
+ case IDS_MYPICTURES:
+ lstrcpyW(wszSubPath, My_PicturesW);
+ break;
+ case IDS_MYVIDEO:
+ lstrcpyW(wszSubPath, My_VideoW);
+ break;
+ default:
+ ERR("LoadString(%d) failed!\n", LOWORD(pwszSubPath));
+ return FALSE;
+ }
+ }
+ } else {
+ lstrcpyW(wszSubPath, pwszSubPath);
+ }
+
+ if (szBasePath[cLen-1] != '/') szBasePath[cLen++] = '/';
+
+ if (!WideCharToMultiByte(CP_ACP, 0, wszSubPath, -1, szBasePath + cLen,
+ FILENAME_MAX - cLen, NULL, NULL))
+ {
+ return FALSE;
+ }
+
+ pBackslash = szBasePath + cLen;
+ while ((pBackslash = strchr(pBackslash, '\\'))) *pBackslash = '/';
+
+ return TRUE;
+}
+#if 0
+/******************************************************************************
+ * _SHCreateSymbolicLinks [Internal]
+ *
+ * Sets up symbol links for various shell folders to point into the users home
+ * directory. We do an educated guess about what the user would probably want:
+ * - If there is a 'My Documents' directory in $HOME, the user probably wants
+ * wine's 'My Documents' to point there. Furthermore, we imply that the user
+ * is a Windows lover and has no problem with wine creating 'My Pictures',
+ * 'My Music' and 'My Video' subfolders under '$HOME/My Documents', if those
+ * do not already exits. We put appropriate symbolic links in place for those,
+ * too.
+ * - If there is no 'My Documents' directory in $HOME, we let 'My Documents'
+ * point directly to $HOME. We assume the user to be a unix hacker who does not
+ * want wine to create anything anywhere besides the .wine directory. So, if
+ * there already is a 'My Music' directory in $HOME, we symlink the 'My Music'
+ * shell folder to it. But if not, we symlink it to $HOME directly. The same
+ * holds fo 'My Pictures' and 'My Video'.
+ * - The Desktop shell folder is symlinked to '$HOME/Desktop', if that does
+ * exists and left alone if not.
+ * ('My Music',... above in fact means LoadString(IDS_MYMUSIC))
+ */
+static void _SHCreateSymbolicLinks(void)
+{
+ UINT aidsMyStuff[] = { IDS_MYPICTURES, IDS_MYVIDEO, IDS_MYMUSIC }, i;
+ int acsidlMyStuff[] = { CSIDL_MYPICTURES, CSIDL_MYVIDEO, CSIDL_MYMUSIC };
+ WCHAR wszTempPath[MAX_PATH];
+ char szPersonalTarget[FILENAME_MAX], *pszPersonal;
+ char szMyStuffTarget[FILENAME_MAX], *pszMyStuff;
+ char szDesktopTarget[FILENAME_MAX], *pszDesktop;
+ struct stat statFolder;
+ const char *pszHome;
HRESULT hr;
- TRACE("\n");
- hr = _SHRegisterFolders(HKEY_LOCAL_MACHINE, NULL, szSHSetupFolders,
- szSHSetupFolders, folders, sizeof(folders) / sizeof(folders[0]));
- TRACE("returning 0x%08lx\n", hr);
- return hr;
+ /* Create all necessary profile sub-dirs up to 'My Documents' and get the unix path. */
+ hr = SHGetFolderPathW(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL,
+ SHGFP_TYPE_DEFAULT, wszTempPath);
+ if (FAILED(hr)) return;
+ pszPersonal = wine_get_unix_file_name(wszTempPath);
+ if (!pszPersonal) return;
+
+ pszHome = getenv("HOME");
+ if (pszHome && !stat(pszHome, &statFolder) && S_ISDIR(statFolder.st_mode)) {
+ strcpy(szPersonalTarget, pszHome);
+ if (_SHAppendToUnixPath(szPersonalTarget, MAKEINTRESOURCEW(IDS_PERSONAL)) &&
+ !stat(szPersonalTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
+ {
+ /* '$HOME/My Documents' exists. Create 'My Pictures', 'My Videos' and
+ * 'My Music' subfolders or fail silently if they already exist. */
+ for (i = 0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) {
+ strcpy(szMyStuffTarget, szPersonalTarget);
+ if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])))
+ mkdir(szMyStuffTarget);
+ }
+ }
+ else
+ {
+ /* '$HOME/My Documents' doesn't exists, but '$HOME' does. */
+ strcpy(szPersonalTarget, pszHome);
+ }
+
+ /* Replace 'My Documents' directory with a symlink of fail silently if not empty. */
+ rmdir(pszPersonal);
+ symlink(szPersonalTarget, pszPersonal);
+ }
+ else
+ {
+ /* '$HOME' doesn't exist. Create 'My Pictures', 'My Videos' and 'My Music' subdirs
+ * in '%USERPROFILE%\\My Documents' or fail silently if they already exist. */
+ strcpy(szPersonalTarget, pszPersonal);
+ for (i = 0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) {
+ strcpy(szMyStuffTarget, szPersonalTarget);
+ if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])))
+ mkdir(szMyStuffTarget);
+ }
+ }
+
+ HeapFree(GetProcessHeap(), 0, pszPersonal);
+
+ /* Create symbolic links for 'My Pictures', 'My Video' and 'My Music'. */
+ for (i=0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) {
+ /* Create the current 'My Whatever' folder and get it's unix path. */
+ hr = SHGetFolderPathW(NULL, acsidlMyStuff[i]|CSIDL_FLAG_CREATE, NULL,
+ SHGFP_TYPE_DEFAULT, wszTempPath);
+ if (FAILED(hr)) continue;
+ pszMyStuff = wine_get_unix_file_name(wszTempPath);
+ if (!pszMyStuff) continue;
+
+ strcpy(szMyStuffTarget, szPersonalTarget);
+ if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])) &&
+ !stat(szMyStuffTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
+ {
+ /* If there's a 'My Whatever' directory where 'My Documents' links to, link to it. */
+ rmdir(pszMyStuff);
+ symlink(szMyStuffTarget, pszMyStuff);
+ }
+ else
+ {
+ /* Else link to where 'My Documents' itself links to. */
+ rmdir(pszMyStuff);
+ symlink(szPersonalTarget, pszMyStuff);
+ }
+ HeapFree(GetProcessHeap(), 0, pszMyStuff);
+ }
+
+ /* Last but not least, the Desktop folder */
+ strcpy(szDesktopTarget, pszHome);
+ if (_SHAppendToUnixPath(szDesktopTarget, DesktopW) &&
+ !stat(szDesktopTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
+ {
+ hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY|CSIDL_FLAG_CREATE, NULL,
+ SHGFP_TYPE_DEFAULT, wszTempPath);
+ if (SUCCEEDED(hr) && (pszDesktop = wine_get_unix_file_name(wszTempPath)))
+ {
+ rmdir(pszDesktop);
+ symlink(szDesktopTarget, pszDesktop);
+ HeapFree(GetProcessHeap(), 0, pszDesktop);
+ }
+ }
}
+#endif
/* Register the default values in the registry, as some apps seem to depend
* on their presence. The set registered was taken from Windows XP.
*/
HRESULT SHELL_RegisterShellFolders(void)
{
- HRESULT hr = _SHRegisterUserShellFolders(TRUE);
+ HRESULT hr;
+ /* Set up '$HOME' targeted symlinks for 'My Documents', 'My Pictures',
+ * 'My Video', 'My Music' and 'Desktop' in advance, so that the
+ * _SHRegister*ShellFolders() functions will find everything nice and clean
+ * and thus will not attempt to create them in the profile directory. */
+#if 0
+ _SHCreateSymbolicLinks();
+#endif
+
+ hr = _SHRegisterUserShellFolders(TRUE);
if (SUCCEEDED(hr))
hr = _SHRegisterUserShellFolders(FALSE);
if (SUCCEEDED(hr))
hr = _SHRegisterCommonShellFolders();
- if (SUCCEEDED(hr))
- hr = _SHRegisterSetupShellFolders();
return hr;
}
{
HRESULT hr = E_INVALIDARG;
- TRACE("%p 0x%08x %p 0x%08lx %p\n",
+ TRACE("%p 0x%08x %p 0x%08x %p\n",
hwndOwner, nFolder, hToken, dwReserved, ppidl);
if (!ppidl)
*ppidl = _ILCreateDesktop();
break;
+ case CSIDL_PERSONAL:
+ *ppidl = _ILCreateMyDocuments();
+ break;
+
case CSIDL_INTERNET:
*ppidl = _ILCreateIExplore();
break;
*ppidl = _ILCreatePrinters();
break;
- case CSIDL_FONTS:
- FIXME("virtual font folder");
- break;
-
case CSIDL_BITBUCKET:
*ppidl = _ILCreateBitBucket();
break;
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#ifndef __SHFLDR_H
-#define __SHFLDR_H
-
#define CHARS_IN_GUID 39
typedef struct {
HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST * pidlInOut,
LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes);
HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes);
-HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTR szOut,
+HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPWSTR szOut,
DWORD dwOutLen);
HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot,
static inline int SHELL32_GUIDToStringA (REFGUID guid, LPSTR str)
{
- return sprintf(str, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+ return sprintf(str, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
guid->Data1, guid->Data2, guid->Data3,
guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]);
guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]);
}
-void SHELL_FS_ProcessDisplayFilename(LPSTR szPath, DWORD dwFlags);
+void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags);
BOOL SHELL_FS_HideExtension(LPWSTR pwszPath);
-#endif /* __SHFLDR_H */
+DEFINE_GUID( CLSID_UnixFolder, 0xcc702eb2, 0x7dc5, 0x11d9, 0xc6, 0x87, 0x00, 0x04, 0x23, 0x8a, 0x01, 0xcd );
+DEFINE_GUID( CLSID_UnixDosFolder, 0x9d20aae8, 0x0625, 0x44b0, 0x9c, 0xa7, 0x71, 0x88, 0x9c, 0x22, 0x54, 0xd9 );
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
const IShellFolder2Vtbl *lpVtbl;
LONG ref;
- CLSID *pclsid;
-
/* both paths are parsible from the desktop */
LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */
LPITEMIDLIST pidlRoot; /* absolute pidl */
#define _IUnknown_(This) (IShellFolder*)&(This->lpVtbl)
#define _IShellFolder_(This) (IShellFolder*)&(This->lpVtbl)
-static shvheader DesktopSFHeader[] = {
+static const shvheader DesktopSFHeader[] = {
{IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15},
{IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
{IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
static ULONG WINAPI ISF_Desktop_fnAddRef (IShellFolder2 * iface)
{
- IGenericSFImpl *This = (IGenericSFImpl *)iface;
- ULONG refCount = InterlockedIncrement(&This->ref);
-
- TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
-
- return refCount;
+ return 2; /* non-heap based object */
}
static ULONG WINAPI ISF_Desktop_fnRelease (IShellFolder2 * iface)
{
- IGenericSFImpl *This = (IGenericSFImpl *)iface;
- ULONG refCount = InterlockedDecrement(&This->ref);
-
- TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
-
- if (!refCount)
- {
- TRACE ("-- destroying IShellFolder(%p)\n", This);
- if (This->pidlRoot)
- SHFree (This->pidlRoot);
- if (This->sPathTarget)
- SHFree (This->sPathTarget);
- LocalFree ((HLOCAL) This);
- return 0;
- }
- return refCount;
+ return 1; /* non-heap based object */
}
/**************************************************************************
}
else if (PathGetDriveNumberW (lpszDisplayName) >= 0)
{
- /* it's a filesystem path with a drive. Let MyComputer parse it */
- pidlTemp = _ILCreateMyComputer ();
+ /* it's a filesystem path with a drive. Let MyComputer/UnixDosFolder parse it */
+#if 0
+ if (UNIXFS_is_rooted_at_desktop())
+ pidlTemp = _ILCreateGuid(PT_GUID, &CLSID_UnixDosFolder);
+ else
+#endif
+ pidlTemp = _ILCreateMyComputer ();
szNext = lpszDisplayName;
}
else if (PathIsUNCW(lpszDisplayName))
*ppidl = pidlTemp;
- TRACE ("(%p)->(-- ret=0x%08lx)\n", This, hr);
+ TRACE ("(%p)->(-- ret=0x%08x)\n", This, hr);
return hr;
}
BOOL ret = TRUE;
WCHAR szPath[MAX_PATH];
- TRACE("(%p)->(flags=0x%08lx)\n", list, dwFlags);
+ TRACE("(%p)->(flags=0x%08x)\n", list, dwFlags);
/* enumerate the root folders */
if (dwFlags & SHCONTF_FOLDERS)
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
- TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n",
+ TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n",
This, hwndOwner, dwFlags, ppEnumIDList);
*ppEnumIDList = IEnumIDList_Constructor();
SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET |
SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER;
- TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08lx))\n",
+ TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
This, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
if (!rgfInOut)
/* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
*rgfInOut &= ~SFGAO_VALIDATE;
- TRACE ("-- result=0x%08lx\n", *rgfInOut);
+ TRACE ("-- result=0x%08x\n", *rgfInOut);
return hr;
}
hr = E_OUTOFMEMORY;
*ppvOut = pObj;
- TRACE ("(%p)->hr=0x%08lx\n", This, hr);
+ TRACE ("(%p)->hr=0x%08x\n", This, hr);
return hr;
}
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
HRESULT hr = S_OK;
+ LPWSTR pszPath;
- TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet);
+ TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet);
pdump (pidl);
if (!strRet)
return E_INVALIDARG;
- strRet->uType = STRRET_CSTR;
+ pszPath = CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR));
+ if (!pszPath)
+ return E_OUTOFMEMORY;
+
if (_ILIsDesktop (pidl))
{
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
- {
- BOOL defCharUsed;
-
- WideCharToMultiByte( CP_ACP, 0, This->sPathTarget, -1,
- strRet->u.cStr, MAX_PATH, NULL, &defCharUsed );
- if (defCharUsed)
- {
- strRet->u.pOleStr = SHAlloc((lstrlenW(This->sPathTarget)+1) *
- sizeof(WCHAR));
- if (!strRet->u.pOleStr)
- hr = E_OUTOFMEMORY;
- else
- {
- strcpyW(strRet->u.pOleStr, This->sPathTarget);
- strRet->uType = STRRET_WSTR;
- }
- }
- }
+ strcpyW(pszPath, This->sPathTarget);
else
- {
- HCR_GetClassNameA(&CLSID_ShellDesktop, strRet->u.cStr, MAX_PATH);
- }
+ HCR_GetClassNameW(&CLSID_ShellDesktop, pszPath, MAX_PATH);
}
else if (_ILIsPidlSimple (pidl))
{
* Only the folder itself can know it
*/
hr = SHELL32_GetDisplayNameOfChild (iface, pidl, dwFlags,
- strRet->u.cStr,
+ pszPath,
MAX_PATH);
}
else
{
/* parsing name like ::{...} */
- lstrcpyA (strRet->u.cStr, "::");
- SHELL32_GUIDToStringA (clsid, &strRet->u.cStr[2]);
+ pszPath[0] = ':';
+ pszPath[1] = ':';
+ SHELL32_GUIDToStringW (clsid, &pszPath[2]);
}
}
else
{
/* user friendly name */
- HCR_GetClassNameA (clsid, strRet->u.cStr, MAX_PATH);
+ HCR_GetClassNameW (clsid, pszPath, MAX_PATH);
}
}
else
{
int cLen = 0;
-
+
/* file system folder or file rooted at the desktop */
if ((GET_SHGDN_FOR(dwFlags) == SHGDN_FORPARSING) &&
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
{
- WideCharToMultiByte(CP_ACP, 0, This->sPathTarget, -1, strRet->u.cStr, MAX_PATH,
- NULL, NULL);
- PathAddBackslashA(strRet->u.cStr);
- cLen = lstrlenA(strRet->u.cStr);
+ lstrcpynW(pszPath, This->sPathTarget, MAX_PATH - 1);
+ PathAddBackslashW(pszPath);
+ cLen = lstrlenW(pszPath);
}
-
- _ILSimpleGetText (pidl, strRet->u.cStr + cLen, MAX_PATH - cLen);
+
+ _ILSimpleGetTextW(pidl, pszPath + cLen, MAX_PATH - cLen);
if (!_ILIsFolder(pidl))
- SHELL_FS_ProcessDisplayFilename(strRet->u.cStr, dwFlags);
+ SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags);
}
}
else
{
/* a complex pidl, let the subfolder do the work */
hr = SHELL32_GetDisplayNameOfChild (iface, pidl, dwFlags,
- strRet->u.cStr, MAX_PATH);
+ pszPath, MAX_PATH);
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /* Win9x always returns ANSI strings, NT always returns Unicode strings */
+ if (GetVersion() & 0x80000000)
+ {
+ strRet->uType = STRRET_CSTR;
+ if (!WideCharToMultiByte(CP_ACP, 0, pszPath, -1, strRet->u.cStr, MAX_PATH,
+ NULL, NULL))
+ strRet->u.cStr[0] = '\0';
+ CoTaskMemFree(pszPath);
+ }
+ else
+ {
+ strRet->uType = STRRET_WSTR;
+ strRet->u.pOleStr = pszPath;
+ }
}
+ else
+ CoTaskMemFree(pszPath);
- TRACE ("-- (%p)->(%s,0x%08lx)\n", This,
+ TRACE ("-- (%p)->(%s,0x%08x)\n", This,
strRet->uType == STRRET_CSTR ? strRet->u.cStr :
debugstr_w(strRet->u.pOleStr), hr);
return hr;
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
- FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", This, hwndOwner, pidl,
+ FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", This, hwndOwner, pidl,
debugstr_w (lpName), dwFlags, pPidlOut);
return E_FAIL;
HRESULT WINAPI ISF_Desktop_Constructor (
IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv)
{
- IGenericSFImpl *sf;
+ static IGenericSFImpl *cached_sf;
WCHAR szMyPath[MAX_PATH];
- HRESULT r;
TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid));
if (pUnkOuter)
return CLASS_E_NOAGGREGATION;
- if (!SHGetSpecialFolderPathW( 0, szMyPath, CSIDL_DESKTOPDIRECTORY, TRUE ))
- return E_UNEXPECTED;
+ if (!cached_sf)
+ {
+ IGenericSFImpl *sf;
- sf = LocalAlloc( LMEM_ZEROINIT, sizeof (IGenericSFImpl) );
- if (!sf)
- return E_OUTOFMEMORY;
+ if (!SHGetSpecialFolderPathW( 0, szMyPath, CSIDL_DESKTOPDIRECTORY, TRUE ))
+ return E_UNEXPECTED;
- sf->ref = 0;
- sf->lpVtbl = &vt_MCFldr_ShellFolder2;
- sf->pidlRoot = _ILCreateDesktop(); /* my qualified pidl */
- sf->sPathTarget = SHAlloc( (lstrlenW(szMyPath) + 1)*sizeof(WCHAR) );
- lstrcpyW( sf->sPathTarget, szMyPath );
+ sf = LocalAlloc( LMEM_ZEROINIT, sizeof (IGenericSFImpl) );
+ if (!sf)
+ return E_OUTOFMEMORY;
- r = IUnknown_QueryInterface( _IUnknown_(sf), riid, ppv );
- if (!SUCCEEDED (r))
- {
- IUnknown_Release( _IUnknown_(sf) );
- return r;
+ sf->ref = 1;
+ sf->lpVtbl = &vt_MCFldr_ShellFolder2;
+ sf->pidlRoot = _ILCreateDesktop(); /* my qualified pidl */
+ sf->sPathTarget = SHAlloc( (lstrlenW(szMyPath) + 1)*sizeof(WCHAR) );
+ lstrcpyW( sf->sPathTarget, szMyPath );
+
+ if (InterlockedCompareExchangePointer((void *)&cached_sf, sf, NULL) != NULL)
+ {
+ /* some other thread already been here */
+ SHFree( sf->pidlRoot );
+ SHFree( sf->sPathTarget );
+ LocalFree( sf );
+ }
}
- TRACE ("--(%p)\n", sf);
- return S_OK;
+ return IUnknown_QueryInterface( _IUnknown_(cached_sf), riid, ppv );
}
+
/*
* file system folder
*
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
WINE_DEFAULT_DEBUG_CHANNEL (shell);
-extern BOOL fileMoving;
-
/***********************************************************************
* IShellFolder implementation
*/
CLSID *pclsid;
/* both paths are parsible from the desktop */
- LPSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */
+ LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */
LPITEMIDLIST pidlRoot; /* absolute pidl */
IGenericSFImpl *This = (IGenericSFImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
+ TRACE ("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
IGenericSFImpl *This = (IGenericSFImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
+ TRACE ("(%p)->(count=%u)\n", This, refCount + 1);
if (!refCount) {
TRACE ("-- destroying IShellFolder(%p)\n", This);
- if (This->pidlRoot)
- SHFree (This->pidlRoot);
- if (This->sPathTarget)
- SHFree (This->sPathTarget);
+ SHFree (This->pidlRoot);
+ SHFree (This->sPathTarget);
LocalFree ((HLOCAL) This);
}
return refCount;
IUnknown_fnRelease,
};
-static shvheader GenericSFHeader[] = {
+static const shvheader GenericSFHeader[] = {
{IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15},
{IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
{IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef (This->pUnkOuter);
}
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_Release (This->pUnkOuter);
}
*/
LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path)
{
- static const WCHAR szfsbc[] = {
+ static WCHAR szfsbc[] = {
'F','i','l','e',' ','S','y','s','t','e','m',' ',
'B','i','n','d',' ','D','a','t','a',0 };
IFileSystemBindData *fsbd = NULL;
szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH);
/* build the full pathname to the element */
- /* lstrcpyW(szPath, This->sPathTarget); */
- MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, szPath, MAX_PATH);
+ lstrcpynW(szPath, This->sPathTarget, MAX_PATH - 1);
PathAddBackslashW(szPath);
len = lstrlenW(szPath);
lstrcpynW(szPath + len, szElement, MAX_PATH - len);
else
*ppidl = NULL;
- TRACE ("(%p)->(-- pidl=%p ret=0x%08lx)\n", This, ppidl ? *ppidl : 0, hr);
+ TRACE ("(%p)->(-- pidl=%p ret=0x%08x)\n", This, ppidl ? *ppidl : 0, hr);
return hr;
}
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
- TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", This, hwndOwner,
+ TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, hwndOwner,
dwFlags, ppEnumIDList);
*ppEnumIDList = IEnumIDList_Constructor();
if (*ppEnumIDList)
- {
- WCHAR path[MAX_PATH];
- MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, path, MAX_PATH);
- CreateFolderEnumList(*ppEnumIDList, path, dwFlags);
- }
+ CreateFolderEnumList(*ppEnumIDList, This->sPathTarget, dwFlags);
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
LPBC pbc, REFIID riid, LPVOID * ppvOut)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
- WCHAR szPath[MAX_PATH];
TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", This, pidl, pbc,
shdebugstr_guid (riid), ppvOut);
- MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, szPath, MAX_PATH);
- return SHELL32_BindToChild (This->pidlRoot, szPath, pidl, riid,
+ return SHELL32_BindToChild (This->pidlRoot, This->sPathTarget, pidl, riid,
ppvOut);
}
HRESULT hr = S_OK;
- TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08lx))\n", This, cidl, apidl,
+ TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", This, cidl, apidl,
rgfInOut, rgfInOut ? *rgfInOut : 0);
if (!rgfInOut)
/* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
*rgfInOut &= ~SFGAO_VALIDATE;
- TRACE ("-- result=0x%08lx\n", *rgfInOut);
+ TRACE ("-- result=0x%08x\n", *rgfInOut);
return hr;
}
*ppvOut = pObj;
}
- TRACE ("(%p)->hr=0x%08lx\n", This, hr);
+ TRACE ("(%p)->hr=0x%08x\n", This, hr);
return hr;
}
return doHide;
}
-void SHELL_FS_ProcessDisplayFilename(LPSTR szPath, DWORD dwFlags)
+void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags)
{
- WCHAR pathW[MAX_PATH];
-
/*FIXME: MSDN also mentions SHGDN_FOREDITING which is not yet handled. */
if (!(dwFlags & SHGDN_FORPARSING) &&
((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) {
- MultiByteToWideChar(CP_ACP, 0, szPath, -1, pathW, MAX_PATH);
- if (SHELL_FS_HideExtension(pathW) && szPath[0] != '.')
- PathRemoveExtensionA (szPath);
+ if (SHELL_FS_HideExtension(szPath) && szPath[0] != '.')
+ PathRemoveExtensionW(szPath);
}
}
DWORD dwFlags, LPSTRRET strRet)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
+ LPWSTR pszPath;
HRESULT hr = S_OK;
int len = 0;
- TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet);
+ TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet);
pdump (pidl);
if (!pidl || !strRet)
return E_INVALIDARG;
-
- strRet->uType = STRRET_CSTR;
+
+ pszPath = CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR));
+ if (!pszPath)
+ return E_OUTOFMEMORY;
+
if (_ILIsDesktop(pidl)) { /* empty pidl */
if ((GET_SHGDN_FOR(dwFlags) & SHGDN_FORPARSING) &&
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
{
if (This->sPathTarget)
- lstrcpynA(strRet->u.cStr, This->sPathTarget, MAX_PATH);
+ lstrcpynW(pszPath, This->sPathTarget, MAX_PATH);
} else {
/* pidl has to contain exactly one non null SHITEMID */
hr = E_INVALIDARG;
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER) &&
This->sPathTarget)
{
- lstrcpynA(strRet->u.cStr, This->sPathTarget, MAX_PATH);
- PathAddBackslashA(strRet->u.cStr);
- len = lstrlenA(strRet->u.cStr);
+ lstrcpynW(pszPath, This->sPathTarget, MAX_PATH);
+ PathAddBackslashW(pszPath);
+ len = lstrlenW(pszPath);
}
- _ILSimpleGetText(pidl, strRet->u.cStr + len, MAX_PATH - len);
- if (!_ILIsFolder(pidl)) SHELL_FS_ProcessDisplayFilename(strRet->u.cStr, dwFlags);
+ _ILSimpleGetTextW(pidl, pszPath + len, MAX_PATH + 1 - len);
+ if (!_ILIsFolder(pidl)) SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags);
} else {
- hr = SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags, strRet->u.cStr, MAX_PATH);
+ hr = SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags, pszPath, MAX_PATH);
}
- TRACE ("-- (%p)->(%s)\n", This, strRet->u.cStr);
+ if (SUCCEEDED(hr)) {
+ /* Win9x always returns ANSI strings, NT always returns Unicode strings */
+ if (GetVersion() & 0x80000000) {
+ strRet->uType = STRRET_CSTR;
+ if (!WideCharToMultiByte(CP_ACP, 0, pszPath, -1, strRet->u.cStr, MAX_PATH,
+ NULL, NULL))
+ strRet->u.cStr[0] = '\0';
+ CoTaskMemFree(pszPath);
+ } else {
+ strRet->uType = STRRET_WSTR;
+ strRet->u.pOleStr = pszPath;
+ }
+ } else
+ CoTaskMemFree(pszPath);
+
+ TRACE ("-- (%p)->(%s)\n", This, strRet->uType == STRRET_CSTR ? strRet->u.cStr : debugstr_w(strRet->u.pOleStr));
return hr;
}
LPITEMIDLIST * pPidlOut)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
- WCHAR szSrc[MAX_PATH], szDest[MAX_PATH];
+ WCHAR szSrc[MAX_PATH + 1], szDest[MAX_PATH + 1];
LPWSTR ptr;
BOOL bIsFolder = _ILIsFolder (ILFindLastID (pidl));
- TRACE ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", This, hwndOwner, pidl,
+ TRACE ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", This, hwndOwner, pidl,
debugstr_w (lpName), dwFlags, pPidlOut);
/* build source path */
- MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, szSrc, MAX_PATH);
+ lstrcpynW(szSrc, This->sPathTarget, MAX_PATH);
ptr = PathAddBackslashW (szSrc);
if (ptr)
- _ILSimpleGetTextW (pidl, ptr, MAX_PATH - (ptr - szSrc));
+ _ILSimpleGetTextW (pidl, ptr, MAX_PATH + 1 - (ptr - szSrc));
/* build destination path */
if (dwFlags == SHGDN_NORMAL || dwFlags & SHGDN_INFOLDER) {
- MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, szDest, MAX_PATH);
+ lstrcpynW(szDest, This->sPathTarget, MAX_PATH);
ptr = PathAddBackslashW (szDest);
if (ptr)
- lstrcpynW(ptr, lpName, MAX_PATH - (ptr - szDest));
+ lstrcpynW(ptr, lpName, MAX_PATH + 1 - (ptr - szDest));
} else
lstrcpynW(szDest, lpName, MAX_PATH);
psd->str.u.cStr, MAX_PATH);
return S_OK;
} else {
+ hr = S_OK;
+ psd->str.uType = STRRET_CSTR;
/* the data from the pidl */
switch (iColumn) {
case 0: /* name */
_ILGetFileAttributes (pidl, psd->str.u.cStr, MAX_PATH);
break;
}
- hr = S_OK;
- psd->str.uType = STRRET_CSTR;
}
return hr;
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_QueryInterface (This->pUnkOuter, riid, ppvObj);
}
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef (This->pUnkOuter);
}
*/
static HRESULT WINAPI
-ISFHelper_fnGetUniqueName (ISFHelper * iface, LPSTR lpName, UINT uLen)
+ISFHelper_fnGetUniqueName (ISFHelper * iface, LPWSTR pwszName, UINT uLen)
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
IEnumIDList *penum;
HRESULT hr;
- char szText[MAX_PATH];
- const char *szNewFolder = "New Folder";
+ WCHAR wszText[MAX_PATH];
+ const WCHAR wszNewFolder[] = {'N','e','w',' ','F','o','l','d','e','r',0 };
+ const WCHAR wszFormat[] = {'%','s',' ','%','d',0 };
- TRACE ("(%p)(%s %u)\n", This, lpName, uLen);
+ TRACE ("(%p)(%p %u)\n", This, pwszName, uLen);
- if (uLen < strlen (szNewFolder) + 4)
+ if (uLen < sizeof(wszNewFolder)/sizeof(WCHAR) + 3)
return E_POINTER;
- strcpy (lpName, szNewFolder);
+ lstrcpynW (pwszName, wszNewFolder, uLen);
hr = IShellFolder_fnEnumObjects (_IShellFolder2_ (This), 0,
SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penum);
IEnumIDList_Reset (penum);
while (S_OK == IEnumIDList_Next (penum, 1, &pidl, &dwFetched) &&
dwFetched) {
- _ILSimpleGetText (pidl, szText, MAX_PATH);
- if (0 == strcasecmp (szText, lpName)) {
- sprintf (lpName, "%s %d", szNewFolder, i++);
+ _ILSimpleGetTextW (pidl, wszText, MAX_PATH);
+ if (0 == lstrcmpiW (wszText, pwszName)) {
+ snprintfW (pwszName, uLen, wszFormat, wszNewFolder, i++);
if (i > 99) {
hr = E_FAIL;
break;
*/
static HRESULT WINAPI
-ISFHelper_fnAddFolder (ISFHelper * iface, HWND hwnd, LPCSTR lpName,
+ISFHelper_fnAddFolder (ISFHelper * iface, HWND hwnd, LPCWSTR pwszName,
LPITEMIDLIST * ppidlOut)
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
- char lpstrNewDir[MAX_PATH];
+ WCHAR wszNewDir[MAX_PATH];
DWORD bRes;
HRESULT hres = E_FAIL;
- TRACE ("(%p)(%s %p)\n", This, lpName, ppidlOut);
+ TRACE ("(%p)(%s %p)\n", This, debugstr_w(pwszName), ppidlOut);
- strcpy (lpstrNewDir, This->sPathTarget);
- PathAppendA(lpstrNewDir, lpName);
+ wszNewDir[0] = 0;
+ if (This->sPathTarget)
+ lstrcpynW(wszNewDir, This->sPathTarget, MAX_PATH);
+ PathAppendW(wszNewDir, pwszName);
- bRes = CreateDirectoryA (lpstrNewDir, NULL);
+ bRes = CreateDirectoryW (wszNewDir, NULL);
if (bRes) {
- SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHA, lpstrNewDir, NULL);
+ SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHW, wszNewDir, NULL);
hres = S_OK;
if (ppidlOut)
- hres = _ILCreateFromPathA(lpstrNewDir, ppidlOut);
+ hres = _ILCreateFromPathW(wszNewDir, ppidlOut);
} else {
- char lpstrText[128 + MAX_PATH];
- char lpstrTempText[128];
- char lpstrCaption[256];
+ WCHAR wszText[128 + MAX_PATH];
+ WCHAR wszTempText[128];
+ WCHAR wszCaption[256];
/* Cannot Create folder because of permissions */
- LoadStringA (shell32_hInstance, IDS_CREATEFOLDER_DENIED, lpstrTempText,
- sizeof (lpstrTempText));
- LoadStringA (shell32_hInstance, IDS_CREATEFOLDER_CAPTION, lpstrCaption,
- sizeof (lpstrCaption));
- sprintf (lpstrText, lpstrTempText, lpstrNewDir);
- MessageBoxA (hwnd, lpstrText, lpstrCaption, MB_OK | MB_ICONEXCLAMATION);
+ LoadStringW (shell32_hInstance, IDS_CREATEFOLDER_DENIED, wszTempText,
+ sizeof (wszTempText));
+ LoadStringW (shell32_hInstance, IDS_CREATEFOLDER_CAPTION, wszCaption,
+ sizeof (wszCaption));
+ sprintfW (wszText, wszTempText, wszNewDir);
+ MessageBoxW (hwnd, wszText, wszCaption, MB_OK | MB_ICONEXCLAMATION);
}
return hres;
}
+/****************************************************************************
+ * build_paths_list
+ *
+ * Builds a list of paths like the one used in SHFileOperation from a table of
+ * PIDLs relative to the given base folder
+ */
+static WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls)
+{
+ WCHAR *wszPathsList;
+ WCHAR *wszListPos;
+ int iPathLen;
+ int i;
+
+ iPathLen = lstrlenW(wszBasePath);
+ wszPathsList = HeapAlloc(GetProcessHeap(), 0, MAX_PATH*sizeof(WCHAR)*cidl+1);
+ wszListPos = wszPathsList;
+
+ for (i = 0; i < cidl; i++) {
+ if (!_ILIsFolder(pidls[i]) && !_ILIsValue(pidls[i]))
+ continue;
+
+ lstrcpynW(wszListPos, wszBasePath, MAX_PATH);
+ /* FIXME: abort if path too long */
+ _ILSimpleGetTextW(pidls[i], wszListPos+iPathLen, MAX_PATH-iPathLen);
+ wszListPos += lstrlenW(wszListPos)+1;
+ }
+ *wszListPos=0;
+ return wszPathsList;
+}
+
/****************************************************************************
* ISFHelper_fnDeleteItems
*
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
UINT i;
- char szPath[MAX_PATH];
- BOOL bConfirm = TRUE;
+ SHFILEOPSTRUCTW op;
+ WCHAR wszPath[MAX_PATH];
+ WCHAR *wszPathsList;
+ HRESULT ret;
+ WCHAR *wszCurrentPath;
TRACE ("(%p)(%u %p)\n", This, cidl, apidl);
+ if (cidl==0) return S_OK;
- /* deleting multiple items so give a slightly different warning */
- if (cidl != 1) {
- char tmp[8];
-
- snprintf (tmp, sizeof (tmp), "%d", cidl);
- if (!SHELL_ConfirmDialog(ASK_DELETE_MULTIPLE_ITEM, tmp))
- return E_FAIL;
- bConfirm = FALSE;
+ if (This->sPathTarget)
+ lstrcpynW(wszPath, This->sPathTarget, MAX_PATH);
+ else
+ wszPath[0] = '\0';
+ PathAddBackslashW(wszPath);
+ wszPathsList = build_paths_list(wszPath, cidl, apidl);
+
+ ZeroMemory(&op, sizeof(op));
+ op.hwnd = GetActiveWindow();
+ op.wFunc = FO_DELETE;
+ op.pFrom = wszPathsList;
+ op.fFlags = FOF_ALLOWUNDO;
+ if (SHFileOperationW(&op))
+ {
+ WARN("SHFileOperation failed\n");
+ ret = E_FAIL;
}
+ else
+ ret = S_OK;
- for (i = 0; i < cidl; i++) {
- strcpy (szPath, This->sPathTarget);
- PathAddBackslashA (szPath);
- _ILSimpleGetText (apidl[i], szPath + strlen (szPath), MAX_PATH);
-
- if (_ILIsFolder (apidl[i])) {
- LPITEMIDLIST pidl;
+ /* we currently need to manually send the notifies */
+ wszCurrentPath = wszPathsList;
+ for (i = 0; i < cidl; i++)
+ {
+ LONG wEventId;
- TRACE ("delete %s\n", szPath);
- if (!SHELL_DeleteDirectoryA (szPath, bConfirm)) {
- TRACE ("delete %s failed, bConfirm=%d\n", szPath, bConfirm);
- return E_FAIL;
- }
- pidl = ILCombine (This->pidlRoot, apidl[i]);
- SHChangeNotify (SHCNE_RMDIR, SHCNF_IDLIST, pidl, NULL);
- SHFree (pidl);
- } else if (_ILIsValue (apidl[i])) {
- LPITEMIDLIST pidl;
+ if (_ILIsFolder(apidl[i]))
+ wEventId = SHCNE_RMDIR;
+ else if (_ILIsValue(apidl[i]))
+ wEventId = SHCNE_DELETE;
+ else
+ continue;
- TRACE ("delete %s\n", szPath);
- if (!SHELL_DeleteFileA (szPath, bConfirm)) {
- TRACE ("delete %s failed, bConfirm=%d\n", szPath, bConfirm);
- return E_FAIL;
- }
- pidl = ILCombine (This->pidlRoot, apidl[i]);
- SHChangeNotify (SHCNE_DELETE, SHCNF_IDLIST, pidl, NULL);
- SHFree (pidl);
+ /* check if file exists */
+ if (GetFileAttributesW(wszCurrentPath) == INVALID_FILE_ATTRIBUTES)
+ {
+ LPITEMIDLIST pidl = ILCombine(This->pidlRoot, apidl[i]);
+ SHChangeNotify(wEventId, SHCNF_IDLIST, pidl, NULL);
+ SHFree(pidl);
}
+ wszCurrentPath += lstrlenW(wszCurrentPath)+1;
}
- return S_OK;
+ HeapFree(GetProcessHeap(), 0, wszPathsList);
+ return ret;
}
/****************************************************************************
IShellFolder_QueryInterface (pSFFrom, &IID_IPersistFolder2,
(LPVOID *) & ppf2);
- if (ppf2)
- {
+ if (ppf2) {
LPITEMIDLIST pidl;
- if (SUCCEEDED (IPersistFolder2_GetCurFolder (ppf2, &pidl)))
- {
- for (i = 0; i < cidl; i++)
- {
+ if (SUCCEEDED (IPersistFolder2_GetCurFolder (ppf2, &pidl))) {
+ for (i = 0; i < cidl; i++) {
SHGetPathFromIDListA (pidl, szSrcPath);
PathAddBackslashA (szSrcPath);
_ILSimpleGetText (apidl[i], szSrcPath + strlen (szSrcPath),
MAX_PATH);
- strcpy (szDstPath, This->sPathTarget);
+ if (!WideCharToMultiByte(CP_ACP, 0, This->sPathTarget, -1, szDstPath, MAX_PATH, NULL, NULL))
+ szDstPath[0] = '\0';
PathAddBackslashA (szDstPath);
_ILSimpleGetText (apidl[i], szDstPath + strlen (szDstPath),
MAX_PATH);
- TRACE ("copy %s to %s\n", szSrcPath, szDstPath);
-
- if (fileMoving)
- {
- fileMoving = FALSE;
- SHNotifyMoveFileA(szSrcPath, szDstPath);
- }
- else
- {
- SHNotifyCopyFileA(szSrcPath, szDstPath, TRUE);
- }
-
- /* FIXME: to work with folders we need SHFileOperation!
- SHFILEOPSTRUCTA op;
-
- if (fileMoving)
- {
- op.wFunc = FO_MOVE;
- fileMoving = FALSE;
- }
- else
- {
- op.wFunc = FO_COPY;
- }
-
- op.pTo = szDstPath;
- op.pFrom = szSrcPath;
- op.fFlags = FOF_SIMPLEPROGRESS;
- op.hwnd = NULL;
- op.hNameMappings = NULL;
- op.lpszProgressTitle = NULL;
-
- UINT bRes = SHFileOperationA(&op);
- DbgPrint("CopyItems SHFileOperationA 0x%08x\n", bRes);
- */
-
+ MESSAGE ("would copy %s to %s\n", szSrcPath, szDstPath);
}
SHFree (pidl);
}
{
IGenericSFImpl *This = impl_from_IPersistFolder3(iface);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef (This->pUnkOuter);
}
{
IGenericSFImpl *This = impl_from_IPersistFolder3(iface);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_Release (This->pUnkOuter);
}
static HRESULT WINAPI
IFSFldr_PersistFolder3_Initialize (IPersistFolder3 * iface, LPCITEMIDLIST pidl)
{
- char sTemp[MAX_PATH];
+ WCHAR wszTemp[MAX_PATH];
IGenericSFImpl *This = impl_from_IPersistFolder3(iface);
TRACE ("(%p)->(%p)\n", This, pidl);
- if (This->pidlRoot)
- SHFree (This->pidlRoot); /* free the old pidl */
+ SHFree (This->pidlRoot); /* free the old pidl */
This->pidlRoot = ILClone (pidl); /* set my pidl */
- if (This->sPathTarget)
- SHFree (This->sPathTarget);
+ SHFree (This->sPathTarget);
+ This->sPathTarget = NULL;
/* set my path */
- if (SHGetPathFromIDListA (pidl, sTemp)) {
- This->sPathTarget = SHAlloc (strlen (sTemp) + 1);
- strcpy (This->sPathTarget, sTemp);
+ if (SHGetPathFromIDListW (pidl, wszTemp)) {
+ int len = strlenW(wszTemp);
+ This->sPathTarget = SHAlloc((len + 1) * sizeof(WCHAR));
+ if (!This->sPathTarget)
+ return E_OUTOFMEMORY;
+ memcpy(This->sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR));
}
- TRACE ("--(%p)->(%s)\n", This, This->sPathTarget);
+ TRACE ("--(%p)->(%s)\n", This, debugstr_w(This->sPathTarget));
return S_OK;
}
IBindCtx * pbc, LPCITEMIDLIST pidlRoot,
const PERSIST_FOLDER_TARGET_INFO * ppfti)
{
- char sTemp[MAX_PATH];
+ WCHAR wszTemp[MAX_PATH];
IGenericSFImpl *This = impl_from_IPersistFolder3(iface);
TRACE ("(%p)->(%p,%p,%p)\n", This, pbc, pidlRoot, ppfti);
if (ppfti)
- TRACE ("--%p %s %s 0x%08lx 0x%08x\n",
+ TRACE ("--%p %s %s 0x%08x 0x%08x\n",
ppfti->pidlTargetFolder, debugstr_w (ppfti->szTargetParsingName),
debugstr_w (ppfti->szNetworkProvider), ppfti->dwAttributes,
ppfti->csidl);
*/
if (ppfti) {
if (ppfti->csidl != -1) {
- if (SHGetSpecialFolderPathA (0, sTemp, ppfti->csidl,
+ if (SHGetSpecialFolderPathW (0, wszTemp, ppfti->csidl,
ppfti->csidl & CSIDL_FLAG_CREATE)) {
- __SHCloneStrA (&This->sPathTarget, sTemp);
+ int len = strlenW(wszTemp);
+ This->sPathTarget = SHAlloc((len + 1) * sizeof(WCHAR));
+ if (!This->sPathTarget)
+ return E_OUTOFMEMORY;
+ memcpy(This->sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR));
}
} else if (ppfti->szTargetParsingName[0]) {
- __SHCloneStrWtoA (&This->sPathTarget, ppfti->szTargetParsingName);
+ int len = strlenW(ppfti->szTargetParsingName);
+ This->sPathTarget = SHAlloc((len + 1) * sizeof(WCHAR));
+ if (!This->sPathTarget)
+ return E_OUTOFMEMORY;
+ memcpy(This->sPathTarget, ppfti->szTargetParsingName,
+ (len + 1) * sizeof(WCHAR));
} else if (ppfti->pidlTargetFolder) {
- if (SHGetPathFromIDListA (ppfti->pidlTargetFolder, sTemp)) {
- __SHCloneStrA (&This->sPathTarget, sTemp);
+ if (SHGetPathFromIDListW(ppfti->pidlTargetFolder, wszTemp)) {
+ int len = strlenW(wszTemp);
+ This->sPathTarget = SHAlloc((len + 1) * sizeof(WCHAR));
+ if (!This->sPathTarget)
+ return E_OUTOFMEMORY;
+ memcpy(This->sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR));
}
}
}
- TRACE ("--(%p)->(target=%s)\n", This, debugstr_a (This->sPathTarget));
+ TRACE ("--(%p)->(target=%s)\n", This, debugstr_w(This->sPathTarget));
pdump (This->pidlRoot);
return (This->sPathTarget) ? S_OK : E_FAIL;
}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
* %S ???
* %* all following parameters (see batfile)
*
- * FIXME: use 'len'
- * FIXME: Careful of going over string boundaries. No checking is done to 'res'...
*/
-static BOOL SHELL_ArgifyW(WCHAR* out, int len, const WCHAR* fmt, const WCHAR* lpFile, LPITEMIDLIST pidl, LPCWSTR args)
+static BOOL SHELL_ArgifyW(WCHAR* out, int len, const WCHAR* fmt, const WCHAR* lpFile, LPITEMIDLIST pidl, LPCWSTR args, DWORD* out_len)
{
WCHAR xlpFile[1024];
BOOL done = FALSE;
BOOL found_p1 = FALSE;
PWSTR res = out;
PCWSTR cmd;
- LPVOID pv;
+ DWORD used = 0;
TRACE("%p, %d, %s, %s, %p, %p\n", out, len, debugstr_w(fmt),
debugstr_w(lpFile), pidl, args);
{
case '\0':
case '%':
- *res++ = '%';
+ used++;
+ if (used < len)
+ *res++ = '%';
break;
case '2':
{
if (*fmt == '*')
{
- *res++ = '"';
+ used++;
+ if (used < len)
+ *res++ = '"';
while(*args)
- *res++ = *args++;
- *res++ = '"';
+ {
+ used++;
+ if (used < len)
+ *res++ = *args++;
+ else
+ args++;
+ }
+ used++;
+ if (used < len)
+ *res++ = '"';
}
else
{
while(*args && !isspace(*args))
- *res++ = *args++;
+ {
+ used++;
+ if (used < len)
+ *res++ = *args++;
+ else
+ args++;
+ }
while(isspace(*args))
++args;
else
cmd = lpFile;
- /* Add double quotation marks unless we already have them
- (e.g.: "file://%1" %* for exefile) or unless the arg is already
- enclosed in double quotation marks */
- if ((res == out || *(fmt + 1) != '"') && *cmd != '"')
- {
- *res++ = '"';
- strcpyW(res, cmd);
- res += strlenW(cmd);
- *res++ = '"';
- }
- else
+ used += strlenW(cmd);
+ if (used < len)
{
strcpyW(res, cmd);
res += strlenW(cmd);
case 'l':
case 'L':
if (lpFile) {
- strcpyW(res, lpFile);
- res += strlenW(lpFile);
+ used += strlenW(lpFile);
+ if (used < len)
+ {
+ strcpyW(res, lpFile);
+ res += strlenW(lpFile);
+ }
}
- found_p1 = TRUE;
+ found_p1 = TRUE;
break;
case 'i':
case 'I':
if (pidl) {
+ INT chars = 0;
+ /* %p should not exceed 8, maybe 16 when looking foward to 64bit.
+ * allowing a buffer of 100 should more than exceed all needs */
+ WCHAR buf[100];
+ LPVOID pv;
HGLOBAL hmem = SHAllocShared(pidl, ILGetSize(pidl), 0);
pv = SHLockShared(hmem, 0);
- res += sprintfW(res, wszILPtr, pv);
+ chars = sprintfW(buf, wszILPtr, pv);
+ if (chars >= sizeof(buf)/sizeof(WCHAR))
+ ERR("pidl format buffer too small!\n");
+ used += chars;
+ if (used < len)
+ {
+ strcpyW(res,buf);
+ res += chars;
+ }
SHUnlockShared(pv);
}
found_p1 = TRUE;
envRet = GetEnvironmentVariableW(tmpBuffer, tmpEnvBuff, MAX_PATH);
if (envRet == 0 || envRet > MAX_PATH)
- strcpyW( res, tmpBuffer );
+ {
+ used += strlenW(tmpBuffer);
+ if (used < len)
+ {
+ strcpyW( res, tmpBuffer );
+ res += strlenW(tmpBuffer);
+ }
+ }
else
- strcpyW( res, tmpEnvBuff );
- res += strlenW(res);
+ {
+ used += strlenW(tmpEnvBuff);
+ if (used < len)
+ {
+ strcpyW( res, tmpEnvBuff );
+ res += strlenW(tmpEnvBuff);
+ }
+ }
}
done = TRUE;
break;
}
}
else
- *res++ = *fmt++;
+ {
+ used ++;
+ if (used < len)
+ *res++ = *fmt++;
+ else
+ fmt++;
+ }
}
*res = '\0';
+ TRACE("used %i of %i space\n",used,len);
+ if (out_len)
+ *out_len = used;
return found_p1;
}
-HRESULT SHELL_GetPathFromIDListForExecuteA(LPCITEMIDLIST pidl, LPSTR pszPath, UINT uOutSize)
-{
- STRRET strret;
- IShellFolder* desktop;
-
- HRESULT hr = SHGetDesktopFolder(&desktop);
-
- if (SUCCEEDED(hr)) {
- hr = IShellFolder_GetDisplayNameOf(desktop, pidl, SHGDN_FORPARSING, &strret);
-
- if (SUCCEEDED(hr))
- StrRetToStrNA(pszPath, uOutSize, &strret, pidl);
-
- IShellFolder_Release(desktop);
- }
-
- return hr;
-}
-
-HRESULT SHELL_GetPathFromIDListForExecuteW(LPCITEMIDLIST pidl, LPWSTR pszPath, UINT uOutSize)
+static HRESULT SHELL_GetPathFromIDListForExecuteW(LPCITEMIDLIST pidl, LPWSTR pszPath, UINT uOutSize)
{
STRRET strret;
IShellFolder* desktop;
{
STARTUPINFOW startup;
PROCESS_INFORMATION info;
- UINT_PTR retval = 31;
+ UINT_PTR retval = SE_ERR_NOASSOC;
UINT gcdret = 0;
WCHAR curdir[MAX_PATH];
+ DWORD dwCreationFlags;
+ const WCHAR *lpDirectory = NULL;
TRACE("Execute %s from directory %s\n", debugstr_w(lpCmd), debugstr_w(psei->lpDirectory));
+
+ /* make sure we don't fail the CreateProcess if the calling app passes in
+ * a bad working directory */
+ if (psei->lpDirectory && psei->lpDirectory[0])
+ {
+ DWORD attr = GetFileAttributesW(psei->lpDirectory);
+ if (attr != INVALID_FILE_ATTRIBUTES && attr & FILE_ATTRIBUTE_DIRECTORY)
+ lpDirectory = psei->lpDirectory;
+ }
+
/* ShellExecute specifies the command from psei->lpDirectory
* if present. Not from the current dir as CreateProcess does */
- if( psei->lpDirectory && psei->lpDirectory[0] )
+ if( lpDirectory )
if( ( gcdret = GetCurrentDirectoryW( MAX_PATH, curdir)))
- if( !SetCurrentDirectoryW( psei->lpDirectory))
- ERR("cannot set directory %s\n", debugstr_w(psei->lpDirectory));
+ if( !SetCurrentDirectoryW( lpDirectory))
+ ERR("cannot set directory %s\n", debugstr_w(lpDirectory));
ZeroMemory(&startup,sizeof(STARTUPINFOW));
startup.cb = sizeof(STARTUPINFOW);
startup.dwFlags = STARTF_USESHOWWINDOW;
startup.wShowWindow = psei->nShow;
- if (CreateProcessW(NULL, (LPWSTR)lpCmd, NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT,
- env, *psei->lpDirectory? psei->lpDirectory: NULL, &startup, &info))
+ dwCreationFlags = CREATE_UNICODE_ENVIRONMENT;
+ if (psei->fMask & SEE_MASK_NO_CONSOLE)
+ dwCreationFlags |= CREATE_NEW_CONSOLE;
+ if (CreateProcessW(NULL, (LPWSTR)lpCmd, NULL, NULL, FALSE, dwCreationFlags, env,
+ lpDirectory, &startup, &info))
{
/* Give 30 seconds to the app to come up, if desired. Probably only needed
when starting app immediately before making a DDE connection. */
if (shWait)
if (WaitForInputIdle( info.hProcess, 30000 ) == WAIT_FAILED)
- WARN("WaitForInputIdle failed: Error %ld\n", GetLastError() );
+ WARN("WaitForInputIdle failed: Error %d\n", GetLastError() );
retval = 33;
if (psei->fMask & SEE_MASK_NOCLOSEPROCESS)
psei_out->hProcess = info.hProcess;
}
else if ((retval = GetLastError()) >= 32)
{
- TRACE("CreateProcess returned error %d\n", retval);
+ TRACE("CreateProcess returned error %ld\n", retval);
retval = ERROR_BAD_FORMAT;
}
- TRACE("returning %u\n", retval);
+ TRACE("returning %lu\n", retval);
psei_out->hInstApp = (HINSTANCE)retval;
if( gcdret )
return found;
}
-static UINT SHELL_FindExecutableByOperation(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpOperation, LPWSTR key, LPWSTR filetype, LPWSTR command, LONG commandlen)
+static UINT SHELL_FindExecutableByOperation(LPCWSTR lpOperation, LPWSTR key, LPWSTR filetype, LPWSTR command, LONG commandlen)
{
static const WCHAR wCommand[] = {'\\','c','o','m','m','a','n','d',0};
+ HKEY hkeyClass;
+ WCHAR verb[MAX_PATH];
+
+ if (RegOpenKeyExW(HKEY_CLASSES_ROOT, filetype, 0, 0x02000000, &hkeyClass))
+ return SE_ERR_NOASSOC;
+ if (!HCR_GetDefaultVerbW(hkeyClass, lpOperation, verb, sizeof(verb)))
+ return SE_ERR_NOASSOC;
+ RegCloseKey(hkeyClass);
/* Looking for ...buffer\shell\<verb>\command */
strcatW(filetype, wszShell);
- strcatW(filetype, lpOperation);
+ strcatW(filetype, verb);
strcatW(filetype, wCommand);
if (RegQueryValueW(HKEY_CLASSES_ROOT, filetype, command,
return 33; /* FIXME see SHELL_FindExecutable() */
}
- return 31; /* default - 'No association was found' */
+ return SE_ERR_NOASSOC;
}
/*************************************************************************
LONG filetypelen = sizeof(filetype); /* length of above */
WCHAR command[1024]; /* command from registry */
WCHAR wBuffer[256]; /* Used to GetProfileString */
- UINT retval = 31; /* default - 'No association was found' */
+ UINT retval = SE_ERR_NOASSOC;
WCHAR *tok; /* token pointer */
WCHAR xlpFile[256]; /* result of SearchPath */
DWORD attribs; /* file attributes */
- TRACE("%s\n", (lpFile != NULL) ? debugstr_w(lpFile) : "-");
+ TRACE("%s\n", debugstr_w(lpFile));
+
+ if (!lpResult)
+ return ERROR_INVALID_PARAMETER;
xlpFile[0] = '\0';
lpResult[0] = '\0'; /* Start off with an empty return string */
if (key) *key = '\0';
/* trap NULL parameters on entry */
- if ((lpFile == NULL) || (lpResult == NULL) || (lpOperation == NULL))
+ if (!lpFile)
{
- WARN("(lpFile=%s,lpResult=%s,lpOperation=%s): NULL parameter\n",
- debugstr_w(lpFile), debugstr_w(lpOperation), debugstr_w(lpResult));
- return 2; /* File not found. Close enough, I guess. */
+ WARN("(lpFile=%s,lpResult=%s): NULL parameter\n",
+ debugstr_w(lpFile), debugstr_w(lpResult));
+ return ERROR_FILE_NOT_FOUND; /* File not found. Close enough, I guess. */
}
if (SHELL_TryAppPathW( lpFile, lpResult, env ))
if (extension == NULL || extension[1]==0)
{
- WARN("Returning 31 - No association\n");
- return 31; /* no association */
+ WARN("Returning SE_ERR_NOASSOC\n");
+ return SE_ERR_NOASSOC;
}
/* Three places to check: */
&filetypelen) == ERROR_SUCCESS)
{
filetypelen /= sizeof(WCHAR);
+ if (filetypelen == sizeof(filetype)/sizeof(WCHAR))
+ filetypelen--;
filetype[filetypelen] = '\0';
TRACE("File type: %s\n", debugstr_w(filetype));
}
+ else
+ {
+ *filetype = '\0';
+ filetypelen = 0;
+ }
}
if (*filetype)
{
- if (lpOperation)
- {
- /* pass the operation string to SHELL_FindExecutableByOperation() */
- filetype[filetypelen] = '\0';
- retval = SHELL_FindExecutableByOperation(lpPath, lpFile, lpOperation, key, filetype, command, sizeof(command));
- }
- else
- {
- WCHAR operation[MAX_PATH];
- HKEY hkey;
-
- /* Looking for ...buffer\shell\<operation>\command */
- strcatW(filetype, wszShell);
-
- /* enumerate the operation subkeys in the registry and search for one with an associated command */
- if (RegOpenKeyW(HKEY_CLASSES_ROOT, filetype, &hkey) == ERROR_SUCCESS)
- {
- int idx = 0;
- for(;; ++idx)
- {
- if (RegEnumKeyW(hkey, idx, operation, MAX_PATH) != ERROR_SUCCESS)
- break;
-
- filetype[filetypelen] = '\0';
- retval = SHELL_FindExecutableByOperation(lpPath, lpFile, operation, key, filetype, command, sizeof(command));
-
- if (retval > 32)
- break;
- }
- RegCloseKey(hkey);
- }
- }
+ /* pass the operation string to SHELL_FindExecutableByOperation() */
+ filetype[filetypelen] = '\0';
+ retval = SHELL_FindExecutableByOperation(lpOperation, key, filetype, command, sizeof(command));
if (retval > 32)
{
- SHELL_ArgifyW(lpResult, resultLen, command, xlpFile, pidl, args);
+ DWORD finishedLen;
+ SHELL_ArgifyW(lpResult, resultLen, command, xlpFile, pidl, args, &finishedLen);
+ if (finishedLen > resultLen)
+ ERR("Argify buffer not large enough.. truncated\n");
/* Remove double quotation marks and command line arguments */
if (*lpResult == '"')
}
*p = '\0';
}
+ else
+ {
+ /* Truncate on first space, like Windows:
+ * http://support.microsoft.com/?scid=kb%3Ben-us%3B140724
+ */
+ WCHAR *p = lpResult;
+ while (*p != ' ' && *p != '\0')
+ p++;
+ *p='\0';
+ }
}
}
else /* Check win.ini */
* launching an application and trying (#2) to connect to it
*
*/
-static unsigned dde_connect(WCHAR* key, WCHAR* start, WCHAR* ddeexec,
+static unsigned dde_connect(WCHAR* key, const WCHAR* start, WCHAR* ddeexec,
const WCHAR* lpFile, WCHAR *env,
LPCWSTR szCommandline, LPITEMIDLIST pidl, SHELL_ExecuteW32 execfunc,
LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out)
WCHAR * exec;
DWORD ddeInst = 0;
DWORD tid;
+ DWORD resultLen;
HSZ hszApp, hszTopic;
HCONV hConv;
HDDEDATA hDdeData;
- unsigned ret = 31;
+ unsigned ret = SE_ERR_NOASSOC;
BOOL unicode = !(GetVersion() & 0x80000000);
strcpyW(endkey, wApplication);
applen = sizeof(app);
if (RegQueryValueW(HKEY_CLASSES_ROOT, key, app, &applen) != ERROR_SUCCESS)
{
- FIXME("default app name NIY %s\n", debugstr_w(key));
- return 2;
+ WCHAR command[1024], fullpath[MAX_PATH];
+ static const WCHAR wSo[] = { '.','s','o',0 };
+ int sizeSo = sizeof(wSo)/sizeof(WCHAR);
+ LPWSTR ptr = NULL;
+ DWORD ret = 0;
+
+ /* Get application command from start string and find filename of application */
+ if (*start == '"')
+ {
+ strcpyW(command, start+1);
+ if ((ptr = strchrW(command, '"')))
+ *ptr = 0;
+ ret = SearchPathW(NULL, command, wszExe, sizeof(fullpath)/sizeof(WCHAR), fullpath, &ptr);
+ }
+ else
+ {
+ LPWSTR p,space;
+ for (p=(LPWSTR)start; (space=strchrW(p, ' ')); p=space+1)
+ {
+ int idx = space-start;
+ memcpy(command, start, idx*sizeof(WCHAR));
+ command[idx] = '\0';
+ if ((ret = SearchPathW(NULL, command, wszExe, sizeof(fullpath)/sizeof(WCHAR), fullpath, &ptr)))
+ break;
+ }
+ if (!ret)
+ ret = SearchPathW(NULL, start, wszExe, sizeof(fullpath)/sizeof(WCHAR), fullpath, &ptr);
+ }
+
+ if (!ret)
+ {
+ ERR("Unable to find application path for command %s\n", debugstr_w(start));
+ return ERROR_ACCESS_DENIED;
+ }
+ strcpyW(app, ptr);
+
+ /* Remove extensions (including .so) */
+ ptr = app + strlenW(app) - (sizeSo-1);
+ if (strlenW(app) >= sizeSo &&
+ !strcmpW(ptr, wSo))
+ *ptr = 0;
+
+ ptr = strrchrW(app, '.');
+ assert(ptr);
+ *ptr = 0;
}
strcpyW(endkey, wTopic);
if (!hConv)
{
static const WCHAR wIfexec[] = {'\\','i','f','e','x','e','c',0};
- TRACE("Launching '%s'\n", debugstr_w(start));
+ TRACE("Launching %s\n", debugstr_w(start));
ret = execfunc(start, env, TRUE, psei, psei_out);
- if (ret < 32)
+ if (ret <= 32)
{
TRACE("Couldn't launch\n");
goto error;
}
}
- SHELL_ArgifyW(res, sizeof(res)/sizeof(WCHAR), exec, lpFile, pidl, szCommandline);
+ SHELL_ArgifyW(res, sizeof(res)/sizeof(WCHAR), exec, lpFile, pidl, szCommandline, &resultLen);
+ if (resultLen > sizeof(res)/sizeof(WCHAR))
+ ERR("Argify buffer not large enough, truncated\n");
TRACE("%s %s => %s\n", debugstr_w(exec), debugstr_w(lpFile), debugstr_w(res));
/* It's documented in the KB 330337 that IE has a bug and returns
*/
if (unicode)
hDdeData = DdeClientTransaction((LPBYTE)res, (strlenW(res) + 1) * sizeof(WCHAR), hConv, 0L, 0,
- XTYP_EXECUTE, 10000, &tid);
+ XTYP_EXECUTE, 30000, &tid);
else
{
DWORD lenA = WideCharToMultiByte(CP_ACP, 0, res, -1, NULL, 0, NULL, NULL);
* execute_from_key [Internal]
*/
static UINT_PTR execute_from_key(LPWSTR key, LPCWSTR lpFile, WCHAR *env, LPCWSTR szCommandline,
+ LPCWSTR executable_name,
SHELL_ExecuteW32 execfunc,
LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out)
{
- WCHAR cmd[1024];
- LONG cmdlen = sizeof(cmd);
- UINT_PTR retval = 31;
+ static const WCHAR wCommand[] = {'c','o','m','m','a','n','d',0};
+ static const WCHAR wDdeexec[] = {'d','d','e','e','x','e','c',0};
+ WCHAR cmd[256], param[1024], ddeexec[256];
+ LONG cmdlen = sizeof(cmd), ddeexeclen = sizeof(ddeexec);
+ UINT_PTR retval = SE_ERR_NOASSOC;
+ DWORD resultLen;
+ LPWSTR tmp;
+
+ TRACE("%s %s %s %s %s\n", debugstr_w(key), debugstr_w(lpFile), debugstr_w(env),
+ debugstr_w(szCommandline), debugstr_w(executable_name));
cmd[0] = '\0';
+ param[0] = '\0';
- /* Get the application for the registry */
+ /* Get the application from the registry */
if (RegQueryValueW(HKEY_CLASSES_ROOT, key, cmd, &cmdlen) == ERROR_SUCCESS)
{
- static const WCHAR wCommand[] = {'c','o','m','m','a','n','d',0};
- static const WCHAR wDdeexec[] = {'d','d','e','e','x','e','c',0};
- LPWSTR tmp;
- WCHAR param[256];
- LONG paramlen = sizeof(param);
-
- param[0] = '\0';
+ TRACE("got cmd: %s\n", debugstr_w(cmd));
+
+ /* Is there a replace() function anywhere? */
+ cmdlen /= sizeof(WCHAR);
+ cmd[cmdlen] = '\0';
+ SHELL_ArgifyW(param, sizeof(param)/sizeof(WCHAR), cmd, lpFile, psei->lpIDList, szCommandline, &resultLen);
+ if (resultLen > sizeof(param)/sizeof(WCHAR))
+ ERR("Argify buffer not large enough, truncating\n");
+ }
- /* Get the parameters needed by the application
- from the associated ddeexec key */
- tmp = strstrW(key, wCommand);
- assert(tmp);
- strcpyW(tmp, wDdeexec);
+ /* Get the parameters needed by the application
+ from the associated ddeexec key */
+ tmp = strstrW(key, wCommand);
+ assert(tmp);
+ strcpyW(tmp, wDdeexec);
- if (RegQueryValueW(HKEY_CLASSES_ROOT, key, param, ¶mlen) == ERROR_SUCCESS)
- {
- TRACE("Got ddeexec %s => %s\n", debugstr_w(key), debugstr_w(param));
- retval = dde_connect(key, cmd, param, lpFile, env, szCommandline, psei->lpIDList, execfunc, psei, psei_out);
- }
- else
- {
- /* Is there a replace() function anywhere? */
- cmdlen /= sizeof(WCHAR);
- cmd[cmdlen] = '\0';
- SHELL_ArgifyW(param, sizeof(param)/sizeof(WCHAR), cmd, lpFile, psei->lpIDList, szCommandline);
- retval = execfunc(param, env, FALSE, psei, psei_out);
- }
+ if (RegQueryValueW(HKEY_CLASSES_ROOT, key, ddeexec, &ddeexeclen) == ERROR_SUCCESS)
+ {
+ TRACE("Got ddeexec %s => %s\n", debugstr_w(key), debugstr_w(ddeexec));
+ if (!param[0]) strcpyW(param, executable_name);
+ retval = dde_connect(key, param, ddeexec, lpFile, env, szCommandline, psei->lpIDList, execfunc, psei, psei_out);
}
- else TRACE("ooch\n");
+ else if (param[0])
+ {
+ TRACE("executing: %s\n", debugstr_w(param));
+ retval = execfunc(param, env, FALSE, psei, psei_out);
+ }
+ else
+ WARN("Nothing appropriate found for %s\n", debugstr_w(key));
return retval;
}
retval = FindExecutableW(wFile, wDirectory, wResult);
WideCharToMultiByte(CP_ACP, 0, wResult, -1, lpResult, MAX_PATH, NULL, NULL);
- if (wFile) SHFree( wFile );
- if (wDirectory) SHFree( wDirectory );
+ SHFree( wFile );
+ SHFree( wDirectory );
TRACE("returning %s\n", lpResult);
return retval;
/*************************************************************************
* FindExecutableW [SHELL32.@]
+ *
+ * This function returns the executable associated with the specified file
+ * for the default verb.
+ *
+ * PARAMS
+ * lpFile [I] The file to find the association for. This must refer to
+ * an existing file otherwise FindExecutable fails and returns
+ * SE_ERR_FNF.
+ * lpResult [O] Points to a buffer into which the executable path is
+ * copied. This parameter must not be NULL otherwise
+ * FindExecutable() segfaults. The buffer must be of size at
+ * least MAX_PATH characters.
+ *
+ * RETURNS
+ * A value greater than 32 on success, less than or equal to 32 otherwise.
+ * See the SE_ERR_* constants.
+ *
+ * NOTES
+ * On Windows XP and 2003, FindExecutable() seems to first convert the
+ * filename into 8.3 format, thus taking into account only the first three
+ * characters of the extension, and expects to find an association for those.
+ * However other Windows versions behave sanely.
*/
HINSTANCE WINAPI FindExecutableW(LPCWSTR lpFile, LPCWSTR lpDirectory, LPWSTR lpResult)
{
- UINT_PTR retval = 31; /* default - 'No association was found' */
+ UINT_PTR retval = SE_ERR_NOASSOC;
WCHAR old_dir[1024];
- TRACE("File %s, Dir %s\n",
- (lpFile != NULL ? debugstr_w(lpFile) : "-"), (lpDirectory != NULL ? debugstr_w(lpDirectory) : "-"));
+ TRACE("File %s, Dir %s\n", debugstr_w(lpFile), debugstr_w(lpDirectory));
lpResult[0] = '\0'; /* Start off with an empty return string */
-
- /* trap NULL parameters on entry */
- if ((lpFile == NULL) || (lpResult == NULL))
- {
- /* FIXME - should throw a warning, perhaps! */
- return (HINSTANCE)2; /* File not found. Close enough, I guess. */
- }
+ if (lpFile == NULL)
+ return (HINSTANCE)SE_ERR_FNF;
if (lpDirectory)
{
r = IContextMenu_InvokeCommand( cm, (LPCMINVOKECOMMANDINFO) &ici );
- TRACE("invoke command returned %08lx\n", r );
+ TRACE("invoke command returned %08x\n", r );
end:
if ( hmenu )
&IID_IShellExtInit, (LPVOID*)&obj );
if ( FAILED( r ) )
{
- ERR("failed %08lx\n", r );
+ ERR("failed %08x\n", r );
goto end;
}
static const DWORD unsupportedFlags =
SEE_MASK_INVOKEIDLIST | SEE_MASK_ICON | SEE_MASK_HOTKEY |
SEE_MASK_CONNECTNETDRV | SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI |
- SEE_MASK_UNICODE | SEE_MASK_NO_CONSOLE | SEE_MASK_ASYNCOK |
- SEE_MASK_HMONITOR;
+ SEE_MASK_UNICODE | SEE_MASK_ASYNCOK | SEE_MASK_HMONITOR;
- WCHAR wszApplicationName[MAX_PATH+2], wszParameters[1024], wszDir[MAX_PATH];
+ WCHAR *wszApplicationName, wszParameters[1024], wszDir[MAX_PATH];
+ DWORD dwApplicationNameLen = MAX_PATH+2;
+ DWORD len;
SHELLEXECUTEINFOW sei_tmp; /* modifiable copy of SHELLEXECUTEINFO struct */
WCHAR wfileName[MAX_PATH];
WCHAR *env;
WCHAR lpstrProtocol[256];
LPCWSTR lpFile;
- UINT_PTR retval = 31;
+ UINT_PTR retval = SE_ERR_NOASSOC;
WCHAR wcmd[1024];
WCHAR buffer[MAX_PATH];
- WCHAR target[MAX_PATH];
BOOL done;
- DWORD attribs;
+ BOOL appKnownSingular = FALSE;
/* make a local copy of the LPSHELLEXECUTEINFO structure and work with this from now on */
memcpy(&sei_tmp, sei, sizeof(sei_tmp));
- TRACE("mask=0x%08lx hwnd=%p verb=%s file=%s parm=%s dir=%s show=0x%08x class=%s\n",
+ TRACE("mask=0x%08x hwnd=%p verb=%s file=%s parm=%s dir=%s show=0x%08x class=%s\n",
sei_tmp.fMask, sei_tmp.hwnd, debugstr_w(sei_tmp.lpVerb),
debugstr_w(sei_tmp.lpFile), debugstr_w(sei_tmp.lpParameters),
debugstr_w(sei_tmp.lpDirectory), sei_tmp.nShow,
/* make copies of all path/command strings */
if (!sei_tmp.lpFile)
+ {
+ wszApplicationName = HeapAlloc(GetProcessHeap(), 0, dwApplicationNameLen*sizeof(WCHAR));
*wszApplicationName = '\0';
+ }
else if (*sei_tmp.lpFile == '\"')
{
- UINT l;
- strcpyW(wszApplicationName, sei_tmp.lpFile+1);
- l=lstrlenW(wszApplicationName);
+ DWORD l = strlenW(sei_tmp.lpFile+1);
+ if(l >= dwApplicationNameLen) dwApplicationNameLen = l+1;
+ wszApplicationName = HeapAlloc(GetProcessHeap(), 0, dwApplicationNameLen*sizeof(WCHAR));
+ memcpy(wszApplicationName, sei_tmp.lpFile+1, (l+1)*sizeof(WCHAR));
if (wszApplicationName[l-1] == '\"')
wszApplicationName[l-1] = '\0';
+ appKnownSingular = TRUE;
TRACE("wszApplicationName=%s\n",debugstr_w(wszApplicationName));
+ } else {
+ DWORD l = strlenW(sei_tmp.lpFile)+1;
+ if(l > dwApplicationNameLen) dwApplicationNameLen = l+1;
+ wszApplicationName = HeapAlloc(GetProcessHeap(), 0, dwApplicationNameLen*sizeof(WCHAR));
+ memcpy(wszApplicationName, sei_tmp.lpFile, l*sizeof(WCHAR));
}
- else
- strcpyW(wszApplicationName, sei_tmp.lpFile);
if (sei_tmp.lpParameters)
strcpyW(wszParameters, sei_tmp.lpParameters);
if (sei_tmp.fMask & unsupportedFlags)
{
- FIXME("flags ignored: 0x%08lx\n", sei_tmp.fMask & unsupportedFlags);
+ FIXME("flags ignored: 0x%08x\n", sei_tmp.fMask & unsupportedFlags);
}
/* process the IDList */
IShellExecuteHookW_Release(pSEH);
- if (hr == S_OK)
+ if (hr == S_OK) {
+ HeapFree(GetProcessHeap(), 0, wszApplicationName);
return TRUE;
+ }
}
SHGetPathFromIDListW(sei_tmp.lpIDList, wszApplicationName);
+ appKnownSingular = TRUE;
TRACE("-- idlist=%p (%s)\n", sei_tmp.lpIDList, debugstr_w(wszApplicationName));
}
+
if ( ERROR_SUCCESS == ShellExecute_FromContextMenu( &sei_tmp ) )
{
sei->hInstApp = (HINSTANCE) 33;
+ HeapFree(GetProcessHeap(), 0, wszApplicationName);
return TRUE;
}
-
+
if (sei_tmp.lpVerb && !wcscmp(sei_tmp.lpVerb, wProperties))
{
SH_ShowPropertiesDialog(sei_tmp.lpFile);
return TRUE;
}
-
if (sei_tmp.fMask & SEE_MASK_CLASSALL)
{
/* launch a document by fileclass like 'WordPad.Document.1' */
/* the Commandline contains 'c:\Path\wordpad.exe "%1"' */
/* FIXME: szCommandline should not be of a fixed size. Fixed to 1024, MAX_PATH is way too short! */
ULONG cmask=(sei_tmp.fMask & SEE_MASK_CLASSALL);
+ DWORD resultLen;
HCR_GetExecuteCommandW((cmask == SEE_MASK_CLASSKEY) ? sei_tmp.hkeyClass : NULL,
(cmask == SEE_MASK_CLASSNAME) ? sei_tmp.lpClass: NULL,
- (sei_tmp.lpVerb) ? sei_tmp.lpVerb : wszOpen,
+ sei_tmp.lpVerb,
wszParameters, sizeof(wszParameters)/sizeof(WCHAR));
/* FIXME: get the extension of lpFile, check if it fits to the lpClass */
- TRACE("SEE_MASK_CLASSNAME->'%s', doc->'%s'\n", debugstr_w(wszParameters), debugstr_w(wszApplicationName));
+ TRACE("SEE_MASK_CLASSNAME->%s, doc->%s\n", debugstr_w(wszParameters), debugstr_w(wszApplicationName));
wcmd[0] = '\0';
- done = SHELL_ArgifyW(wcmd, sizeof(wcmd)/sizeof(WCHAR), wszParameters, wszApplicationName, sei_tmp.lpIDList, NULL);
+ done = SHELL_ArgifyW(wcmd, sizeof(wcmd)/sizeof(WCHAR), wszParameters, wszApplicationName, sei_tmp.lpIDList, NULL, &resultLen);
if (!done && wszApplicationName[0])
{
strcatW(wcmd, wSpace);
strcatW(wcmd, wszApplicationName);
}
+ if (resultLen > sizeof(wcmd)/sizeof(WCHAR))
+ ERR("Argify buffer not large enough... truncating\n");
retval = execfunc(wcmd, NULL, FALSE, &sei_tmp, sei);
- if (retval > 32)
- return TRUE;
- else
- return FALSE;
+
+ HeapFree(GetProcessHeap(), 0, wszApplicationName);
+ return retval > 32;
}
/* Has the IDList not yet been translated? */
/* open shell folder for the specified class GUID */
strcpyW(wszParameters, buffer);
strcpyW(wszApplicationName, wExplorer);
+ appKnownSingular = TRUE;
sei_tmp.fMask &= ~SEE_MASK_INVOKEIDLIST;
} else {
+ WCHAR target[MAX_PATH];
+ DWORD attribs;
+ DWORD resultLen;
/* Check if we're executing a directory and if so use the
handler for the Folder class */
strcpyW(target, buffer);
attribs = GetFileAttributesW(buffer);
if (attribs != INVALID_FILE_ATTRIBUTES &&
- 0 != (attribs & FILE_ATTRIBUTE_DIRECTORY) &&
+ (attribs & FILE_ATTRIBUTE_DIRECTORY) &&
HCR_GetExecuteCommandW(0, wszFolder,
- sei_tmp.lpVerb?sei_tmp.lpVerb:wszOpen,
+ sei_tmp.lpVerb,
buffer, sizeof(buffer))) {
- SHELL_ArgifyW(wszApplicationName,
- sizeof(wszApplicationName)/sizeof(WCHAR),
- buffer, target, sei_tmp.lpIDList, NULL);
+ SHELL_ArgifyW(wszApplicationName, dwApplicationNameLen,
+ buffer, target, sei_tmp.lpIDList, NULL, &resultLen);
+ if (resultLen > dwApplicationNameLen)
+ ERR("Argify buffer not large enough... truncating\n");
+ appKnownSingular = FALSE;
}
sei_tmp.fMask &= ~SEE_MASK_INVOKEIDLIST;
}
}
/* expand environment strings */
- if (ExpandEnvironmentStringsW(sei_tmp.lpFile, buffer, MAX_PATH))
- lstrcpyW(wszApplicationName, buffer);
+ len = ExpandEnvironmentStringsW(sei_tmp.lpFile, NULL, 0);
+ if (len>0)
+ {
+ LPWSTR buf;
+ buf = HeapAlloc(GetProcessHeap(),0,(len+1)*sizeof(WCHAR));
+
+ ExpandEnvironmentStringsW(sei_tmp.lpFile, buf, len+1);
+ HeapFree(GetProcessHeap(), 0, wszApplicationName);
+ dwApplicationNameLen = len+1;
+ wszApplicationName = buf;
+ /* appKnownSingular unmodified */
+
+ sei_tmp.lpFile = wszApplicationName;
+ }
if (*sei_tmp.lpParameters)
- if (ExpandEnvironmentStringsW(sei_tmp.lpParameters, buffer, MAX_PATH))
- lstrcpyW(wszParameters, buffer);
+ {
+ len = ExpandEnvironmentStringsW(sei_tmp.lpParameters, NULL, 0);
+ if (len > 0)
+ {
+ LPWSTR buf;
+ len++;
+ buf = HeapAlloc(GetProcessHeap(),0,len*sizeof(WCHAR));
+ ExpandEnvironmentStringsW(sei_tmp.lpParameters, buf, len);
+ if (len > 1024)
+ ERR("Parameters exceeds buffer size (%i > 1024)\n",len);
+ lstrcpynW(wszParameters, buf, min(1024,len));
+ HeapFree(GetProcessHeap(),0,buf);
+ }
+ }
if (*sei_tmp.lpDirectory)
- if (ExpandEnvironmentStringsW(sei_tmp.lpDirectory, buffer, MAX_PATH))
- lstrcpyW(wszDir, buffer);
+ {
+ len = ExpandEnvironmentStringsW(sei_tmp.lpDirectory, NULL, 0);
+ if (len > 0)
+ {
+ LPWSTR buf;
+ len++;
+ buf = HeapAlloc(GetProcessHeap(),0,len*sizeof(WCHAR));
+ ExpandEnvironmentStringsW(sei_tmp.lpDirectory, buf, len);
+ if (len > 1024)
+ ERR("Directory exceeds buffer size (%i > 1024)\n",len);
+ lstrcpynW(wszDir, buf, min(1024,len));
+ HeapFree(GetProcessHeap(),0,buf);
+ }
+ }
/* Else, try to execute the filename */
TRACE("execute:%s,%s,%s\n", debugstr_w(wszApplicationName), debugstr_w(wszParameters), debugstr_w(wszDir));
/* separate out command line arguments from executable file name */
- if (!*sei_tmp.lpParameters) {
+ if (!*sei_tmp.lpParameters && !appKnownSingular) {
/* If the executable path is quoted, handle the rest of the command line as parameters. */
if (sei_tmp.lpFile[0] == '"') {
LPWSTR src = wszApplicationName/*sei_tmp.lpFile*/ + 1;
strcatW(wcmd, wszParameters);
}
- /* We set the default to open, and that should generally work.
- But that is not really the way the MS docs say to do it. */
- if (!sei_tmp.lpVerb)
- sei_tmp.lpVerb = wszOpen;
-
retval = execfunc(wcmd, NULL, FALSE, &sei_tmp, sei);
- if (retval > 32)
+ if (retval > 32) {
+ HeapFree(GetProcessHeap(), 0, wszApplicationName);
return TRUE;
+ }
/* Else, try to find the executable */
wcmd[0] = '\0';
}
TRACE("%s/%s => %s/%s\n", debugstr_w(wszApplicationName), debugstr_w(sei_tmp.lpVerb), debugstr_w(wszQuotedCmd), debugstr_w(lpstrProtocol));
if (*lpstrProtocol)
- retval = execute_from_key(lpstrProtocol, wszApplicationName, env, sei_tmp.lpParameters, execfunc, &sei_tmp, sei);
+ retval = execute_from_key(lpstrProtocol, wszApplicationName, env, sei_tmp.lpParameters, wcmd, execfunc, &sei_tmp, sei);
else
retval = execfunc(wszQuotedCmd, env, FALSE, &sei_tmp, sei);
HeapFree( GetProcessHeap(), 0, env );
}
- else if (PathIsURLW((LPWSTR)lpFile)) /* File not found, check for URL */
+ else if (PathIsURLW(lpFile)) /* File not found, check for URL */
{
static const WCHAR wShell[] = {'\\','s','h','e','l','l','\\',0};
static const WCHAR wCommand[] = {'\\','c','o','m','m','a','n','d',0};
lpFile += iSize;
while (*lpFile == ':') lpFile++;
}
- retval = execute_from_key(lpstrProtocol, lpFile, NULL, sei_tmp.lpParameters, execfunc, &sei_tmp, sei);
+ retval = execute_from_key(lpstrProtocol, lpFile, NULL, sei_tmp.lpParameters, wcmd, execfunc, &sei_tmp, sei);
}
/* Check if file specified is in the form www.??????.*** */
else if (!strncmpiW(lpFile, wWww, 3))
retval = (UINT_PTR)ShellExecuteW(sei_tmp.hwnd, sei_tmp.lpVerb, lpstrTmpFile, NULL, NULL, 0);
}
- TRACE("retval %u\n", retval);
+ TRACE("retval %lu\n", retval);
- if (retval <= 32)
- {
- sei->hInstApp = (HINSTANCE)retval;
- return FALSE;
- }
+ HeapFree(GetProcessHeap(), 0, wszApplicationName);
- sei->hInstApp = (HINSTANCE)33;
- return TRUE;
+ sei->hInstApp = (HINSTANCE)(retval > 32 ? 33 : retval);
+ return retval > 32;
}
/*************************************************************************
if (sei->fMask & SEE_MASK_NOCLOSEPROCESS)
sei->hProcess = seiW.hProcess;
- if (wVerb) SHFree(wVerb);
- if (wFile) SHFree(wFile);
- if (wParameters) SHFree(wParameters);
- if (wDirectory) SHFree(wDirectory);
- if (wClass) SHFree(wClass);
+ SHFree(wVerb);
+ SHFree(wFile);
+ SHFree(wParameters);
+ SHFree(wDirectory);
+ SHFree(wClass);
return ret;
}
SHELL_execute( &sei, SHELL_ExecuteW );
return sei.hInstApp;
}
+
+/*************************************************************************
+ * OpenAs_RunDLLA [SHELL32.@]
+ */
+void WINAPI OpenAs_RunDLLA(HWND hwnd, HINSTANCE hinst, LPCSTR cmdline, int cmdshow)
+{
+ FIXME("%p, %p, %s, %d\n", hwnd, hinst, debugstr_a(cmdline), cmdshow);
+}
+
+/*************************************************************************
+ * OpenAs_RunDLLW [SHELL32.@]
+ */
+void WINAPI OpenAs_RunDLLW(HWND hwnd, HINSTANCE hinst, LPCWSTR cmdline, int cmdshow)
+{
+ FIXME("%p, %p, %s, %d\n", hwnd, hinst, debugstr_w(cmdline), cmdshow);
+}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include <stdarg.h>
#include <string.h>
#include <ctype.h>
+#include <assert.h>
#include "windef.h"
#include "winbase.h"
#include "shlwapi.h"
#include "shell32_main.h"
#include "undocshell.h"
-#include "wine/unicode.h"
#include "wine/debug.h"
+#include "xdg.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
static const WCHAR wWildcardFile[] = {'*',0};
static const WCHAR wWildcardChars[] = {'*','?',0};
-static const WCHAR wBackslash[] = {'\\',0};
-static BOOL SHELL_DeleteDirectoryW(LPCWSTR path, BOOL bShowUI);
static DWORD SHNotifyCreateDirectoryA(LPCSTR path, LPSECURITY_ATTRIBUTES sec);
static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec);
static DWORD SHNotifyRemoveDirectoryA(LPCSTR path);
typedef struct
{
+ SHFILEOPSTRUCTW *req;
+ DWORD dwYesToAllMask;
+ BOOL bManyItems;
+ BOOL bCancelled;
+} FILE_OPERATION;
+
+/* Confirm dialogs with an optional "Yes To All" as used in file operations confirmations
+ */
+static const WCHAR CONFIRM_MSG_PROP[] = {'W','I','N','E','_','C','O','N','F','I','R','M',0};
+
+struct confirm_msg_info
+{
+ LPWSTR lpszText;
+ LPWSTR lpszCaption;
+ HICON hIcon;
+ BOOL bYesToAll;
+};
+
+/* as some buttons may be hidden and the dialog height may change we may need
+ * to move the controls */
+static void confirm_msg_move_button(HWND hDlg, INT iId, INT *xPos, INT yOffset, BOOL bShow)
+{
+ HWND hButton = GetDlgItem(hDlg, iId);
+ RECT r;
+
+ if (bShow) {
+ POINT pt;
+ int width;
+
+ GetWindowRect(hButton, &r);
+ width = r.right - r.left;
+ pt.x = r.left;
+ pt.y = r.top;
+ ScreenToClient(hDlg, &pt);
+ MoveWindow(hButton, *xPos - width, pt.y - yOffset, width, r.bottom - r.top, FALSE);
+ *xPos -= width + 5;
+ }
+ else
+ ShowWindow(hButton, SW_HIDE);
+}
+
+/* Note: we paint the text manually and don't use the static control to make
+ * sure the text has the same height as the one computed in WM_INITDIALOG
+ */
+static INT_PTR CALLBACK ConfirmMsgBox_Paint(HWND hDlg)
+{
+ PAINTSTRUCT ps;
+ HFONT hOldFont;
+ RECT r;
+ HDC hdc;
+
+ BeginPaint(hDlg, &ps);
+ hdc = ps.hdc;
+
+ GetClientRect(GetDlgItem(hDlg, IDD_MESSAGE), &r);
+ /* this will remap the rect to dialog coords */
+ MapWindowPoints(GetDlgItem(hDlg, IDD_MESSAGE), hDlg, (LPPOINT)&r, 2);
+ hOldFont = SelectObject(hdc, (HFONT)SendDlgItemMessageW(hDlg, IDD_MESSAGE, WM_GETFONT, 0, 0));
+ DrawTextW(hdc, (LPWSTR)GetPropW(hDlg, CONFIRM_MSG_PROP), -1, &r, DT_NOPREFIX | DT_PATH_ELLIPSIS | DT_WORDBREAK);
+ SelectObject(hdc, hOldFont);
+ EndPaint(hDlg, &ps);
+ return TRUE;
+}
+
+static INT_PTR CALLBACK ConfirmMsgBox_Init(HWND hDlg, LPARAM lParam)
+{
+ struct confirm_msg_info *info = (struct confirm_msg_info *)lParam;
+ INT xPos, yOffset;
+ int width, height;
+ HFONT hOldFont;
+ HDC hdc;
+ RECT r;
+
+ SetWindowTextW(hDlg, info->lpszCaption);
+ ShowWindow(GetDlgItem(hDlg, IDD_MESSAGE), SW_HIDE);
+ SetPropW(hDlg, CONFIRM_MSG_PROP, (HANDLE)info->lpszText);
+ SendDlgItemMessageW(hDlg, IDD_ICON, STM_SETICON, (WPARAM)info->hIcon, 0);
+
+ /* compute the text height and resize the dialog */
+ GetClientRect(GetDlgItem(hDlg, IDD_MESSAGE), &r);
+ hdc = GetDC(hDlg);
+ yOffset = r.bottom;
+ hOldFont = SelectObject(hdc, (HFONT)SendDlgItemMessageW(hDlg, IDD_MESSAGE, WM_GETFONT, 0, 0));
+ DrawTextW(hdc, info->lpszText, -1, &r, DT_NOPREFIX | DT_PATH_ELLIPSIS | DT_WORDBREAK | DT_CALCRECT);
+ SelectObject(hdc, hOldFont);
+ yOffset -= r.bottom;
+ yOffset = min(yOffset, 35); /* don't make the dialog too small */
+ ReleaseDC(hDlg, hdc);
+
+ GetClientRect(hDlg, &r);
+ xPos = r.right - 7;
+ GetWindowRect(hDlg, &r);
+ width = r.right - r.left;
+ height = r.bottom - r.top - yOffset;
+ MoveWindow(hDlg, (GetSystemMetrics(SM_CXSCREEN) - width)/2,
+ (GetSystemMetrics(SM_CYSCREEN) - height)/2, width, height, FALSE);
+
+ confirm_msg_move_button(hDlg, IDCANCEL, &xPos, yOffset, info->bYesToAll);
+ confirm_msg_move_button(hDlg, IDNO, &xPos, yOffset, TRUE);
+ confirm_msg_move_button(hDlg, IDD_YESTOALL, &xPos, yOffset, info->bYesToAll);
+ confirm_msg_move_button(hDlg, IDYES, &xPos, yOffset, TRUE);
+ return TRUE;
+}
+
+static INT_PTR CALLBACK ConfirmMsgBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ return ConfirmMsgBox_Init(hDlg, lParam);
+ case WM_PAINT:
+ return ConfirmMsgBox_Paint(hDlg);
+ case WM_COMMAND:
+ EndDialog(hDlg, wParam);
+ break;
+ case WM_CLOSE:
+ EndDialog(hDlg, IDCANCEL);
+ break;
+ }
+ return FALSE;
+}
+
+static int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll)
+{
+ static const WCHAR wszTemplate[] = {'S','H','E','L','L','_','Y','E','S','T','O','A','L','L','_','M','S','G','B','O','X',0};
+ struct confirm_msg_info info;
+
+ info.lpszText = lpszText;
+ info.lpszCaption = lpszCaption;
+ info.hIcon = hIcon;
+ info.bYesToAll = bYesToAll;
+ return DialogBoxParamW(shell32_hInstance, wszTemplate, hWnd, ConfirmMsgBoxProc, (LPARAM)&info);
+}
+
+/* confirmation dialogs content */
+typedef struct
+{
+ HINSTANCE hIconInstance;
+ UINT icon_resource_id;
UINT caption_resource_id, text_resource_id;
} SHELL_ConfirmIDstruc;
static BOOL SHELL_ConfirmIDs(int nKindOfDialog, SHELL_ConfirmIDstruc *ids)
{
+ ids->hIconInstance = shell32_hInstance;
switch (nKindOfDialog) {
case ASK_DELETE_FILE:
+ ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
ids->text_resource_id = IDS_DELETEITEM_TEXT;
return TRUE;
case ASK_DELETE_FOLDER:
+ ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
ids->caption_resource_id = IDS_DELETEFOLDER_CAPTION;
ids->text_resource_id = IDS_DELETEITEM_TEXT;
return TRUE;
case ASK_DELETE_MULTIPLE_ITEM:
+ ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
ids->text_resource_id = IDS_DELETEMULTIPLE_TEXT;
return TRUE;
+ case ASK_TRASH_FILE:
+ ids->icon_resource_id = IDI_SHELL_TRASH_FILE;
+ ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
+ ids->text_resource_id = IDS_TRASHITEM_TEXT;
+ return TRUE;
+ case ASK_TRASH_FOLDER:
+ ids->icon_resource_id = IDI_SHELL_TRASH_FILE;
+ ids->caption_resource_id = IDS_DELETEFOLDER_CAPTION;
+ ids->text_resource_id = IDS_TRASHFOLDER_TEXT;
+ return TRUE;
+ case ASK_TRASH_MULTIPLE_ITEM:
+ ids->icon_resource_id = IDI_SHELL_TRASH_FILE;
+ ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
+ ids->text_resource_id = IDS_TRASHMULTIPLE_TEXT;
+ return TRUE;
+ case ASK_CANT_TRASH_ITEM:
+ ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
+ ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
+ ids->text_resource_id = IDS_CANTTRASH_TEXT;
+ return TRUE;
+ case ASK_DELETE_SELECTED:
+ ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
+ ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
+ ids->text_resource_id = IDS_DELETESELECTED_TEXT;
+ return TRUE;
case ASK_OVERWRITE_FILE:
+ ids->hIconInstance = NULL;
+ ids->icon_resource_id = IDI_WARNING;
ids->caption_resource_id = IDS_OVERWRITEFILE_CAPTION;
ids->text_resource_id = IDS_OVERWRITEFILE_TEXT;
- return TRUE;
+ return TRUE;
+ case ASK_OVERWRITE_FOLDER:
+ ids->hIconInstance = NULL;
+ ids->icon_resource_id = IDI_WARNING;
+ ids->caption_resource_id = IDS_OVERWRITEFILE_CAPTION;
+ ids->text_resource_id = IDS_OVERWRITEFOLDER_TEXT;
+ return TRUE;
default:
FIXME(" Unhandled nKindOfDialog %d stub\n", nKindOfDialog);
}
return FALSE;
}
-BOOL SHELL_ConfirmDialog(int nKindOfDialog, LPCSTR szDir)
+static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op)
{
- CHAR szCaption[255], szText[255], szBuffer[MAX_PATH + 256];
+ WCHAR szCaption[255], szText[255], szBuffer[MAX_PATH + 256];
SHELL_ConfirmIDstruc ids;
+ DWORD_PTR args[1];
+ HICON hIcon;
+ int ret;
- if (!SHELL_ConfirmIDs(nKindOfDialog, &ids))
- return FALSE;
+ assert(nKindOfDialog >= 0 && nKindOfDialog < 32);
+ if (op && (op->dwYesToAllMask & (1 << nKindOfDialog)))
+ return TRUE;
- LoadStringA(shell32_hInstance, ids.caption_resource_id, szCaption, sizeof(szCaption));
- LoadStringA(shell32_hInstance, ids.text_resource_id, szText, sizeof(szText));
+ if (!SHELL_ConfirmIDs(nKindOfDialog, &ids)) return FALSE;
- FormatMessageA(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,
- szText, 0, 0, szBuffer, sizeof(szBuffer), (va_list*)&szDir);
+ LoadStringW(shell32_hInstance, ids.caption_resource_id, szCaption, sizeof(szCaption)/sizeof(WCHAR));
+ LoadStringW(shell32_hInstance, ids.text_resource_id, szText, sizeof(szText)/sizeof(WCHAR));
- return (IDOK == MessageBoxA(GetActiveWindow(), szBuffer, szCaption, MB_OKCANCEL | MB_ICONEXCLAMATION));
+ args[0] = (DWORD_PTR)szDir;
+ FormatMessageW(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,
+ szText, 0, 0, szBuffer, sizeof(szBuffer), (va_list*)args);
+ hIcon = LoadIconW(ids.hIconInstance, (LPWSTR)MAKEINTRESOURCE(ids.icon_resource_id));
+
+ ret = SHELL_ConfirmMsgBox(hWnd, szBuffer, szCaption, hIcon, op && op->bManyItems);
+ if (op) {
+ if (ret == IDD_YESTOALL) {
+ op->dwYesToAllMask |= (1 << nKindOfDialog);
+ ret = IDYES;
+ }
+ if (ret == IDCANCEL)
+ op->bCancelled = TRUE;
+ if (ret != IDYES)
+ op->req->fAnyOperationsAborted = TRUE;
+ }
+ return ret == IDYES;
}
-BOOL SHELL_ConfirmDialogW(int nKindOfDialog, LPCWSTR szDir)
+BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir)
{
- WCHAR szCaption[255], szText[255], szBuffer[MAX_PATH + 256];
- SHELL_ConfirmIDstruc ids;
-
- if (!SHELL_ConfirmIDs(nKindOfDialog, &ids))
- return FALSE;
-
- LoadStringW(shell32_hInstance, ids.caption_resource_id, szCaption, sizeof(szCaption));
- LoadStringW(shell32_hInstance, ids.text_resource_id, szText, sizeof(szText));
-
- FormatMessageW(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,
- szText, 0, 0, szBuffer, sizeof(szBuffer), (va_list*)&szDir);
-
- return (IDOK == MessageBoxW(GetActiveWindow(), szBuffer, szCaption, MB_OKCANCEL | MB_ICONEXCLAMATION));
+ return SHELL_ConfirmDialogW(hWnd, nKindOfDialog, szDir, NULL);
}
static DWORD SHELL32_AnsiToUnicodeBuf(LPCSTR aPath, LPWSTR *wPath, DWORD minChars)
HeapFree(GetProcessHeap(), 0, wPath);
}
+HRESULT WINAPI SHIsFileAvailableOffline(LPCWSTR path, LPDWORD status)
+{
+ FIXME("(%s, %p) stub\n", debugstr_w(path), status);
+ return E_FAIL;
+}
+
/**************************************************************************
* SHELL_DeleteDirectory() [internal]
*
* Asks for confirmation when bShowUI is true and deletes the directory and
* all its subdirectories and files if necessary.
*/
-BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir, BOOL bShowUI)
-{
- LPWSTR wPath;
- BOOL ret = FALSE;
-
- if (!SHELL32_AnsiToUnicodeBuf(pszDir, &wPath, 0))
- {
- ret = SHELL_DeleteDirectoryW(wPath, bShowUI);
- SHELL32_FreeUnicodeBuf(wPath);
- }
- return ret;
-}
-
-static BOOL SHELL_DeleteDirectoryW(LPCWSTR pszDir, BOOL bShowUI)
+BOOL SHELL_DeleteDirectoryW(HWND hwnd, LPCWSTR pszDir, BOOL bShowUI)
{
BOOL ret = TRUE;
HANDLE hFind;
if (hFind == INVALID_HANDLE_VALUE)
return FALSE;
- if (!bShowUI || (ret = SHELL_ConfirmDialogW(ASK_DELETE_FOLDER, pszDir)))
+ if (!bShowUI || (ret = SHELL_ConfirmDialogW(hwnd, ASK_DELETE_FOLDER, pszDir, NULL)))
{
do
{
- LPWSTR lp = wfd.cAlternateFileName;
- if (!lp[0])
- lp = wfd.cFileName;
- if (IsDotDir(lp))
+ if (IsDotDir(wfd.cFileName))
continue;
- PathCombineW(szTemp, pszDir, lp);
+ PathCombineW(szTemp, pszDir, wfd.cFileName);
if (FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes)
- ret = SHELL_DeleteDirectoryW(szTemp, FALSE);
+ ret = SHELL_DeleteDirectoryW(hwnd, szTemp, FALSE);
else
ret = (SHNotifyDeleteFileW(szTemp) == ERROR_SUCCESS);
} while (ret && FindNextFileW(hFind, &wfd));
return ret;
}
-/**************************************************************************
- * SHELL_DeleteFileA() [internal]
- */
-BOOL SHELL_DeleteFileA(LPCSTR pszFile, BOOL bShowUI)
-{
- if (bShowUI && !SHELL_ConfirmDialog(ASK_DELETE_FILE, pszFile))
- return FALSE;
-
- return (SHNotifyDeleteFileA(pszFile) == ERROR_SUCCESS);
-}
-
-BOOL SHELL_DeleteFileW(LPCWSTR pszFile, BOOL bShowUI)
-{
- if (bShowUI && !SHELL_ConfirmDialogW(ASK_DELETE_FILE, pszFile))
- return FALSE;
-
- return (SHNotifyDeleteFileW(pszFile) == ERROR_SUCCESS);
-}
-
/**************************************************************************
* Win32CreateDirectory [SHELL32.93]
*
TRACE("(%s %s)\n", debugstr_w(src), debugstr_w(dest));
- ret = MoveFileW(src, dest);
+ ret = MoveFileExW(src, dest, MOVEFILE_REPLACE_EXISTING);
+
+ /* MOVEFILE_REPLACE_EXISTING fails with dirs, so try MoveFile */
+ if (!ret)
+ ret = MoveFileW(src, dest);
+
if (!ret)
{
DWORD dwAttr;
SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW, dest, NULL);
return ERROR_SUCCESS;
}
- return GetLastError();
-}
-
-DWORD SHNotifyMoveFileA(LPCSTR src, LPCSTR dest)
-{
- BOOL ret;
- LPWSTR destW;
-
- ret = MoveFileA(src, dest);
- if (!ret)
- {
- DWORD dwAttr;
-
- SHELL32_AnsiToUnicodeBuf(dest, &destW, 0);
- dwAttr = SHFindAttrW(destW, FALSE);
- SHELL32_FreeUnicodeBuf(destW);
- if (INVALID_FILE_ATTRIBUTES == dwAttr)
- {
- /* Source file may be write protected or a system file */
- dwAttr = GetFileAttributesA(src);
- if (IsAttrib(dwAttr, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM))
- if (SetFileAttributesA(src, dwAttr & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM)))
- ret = MoveFileA(src, dest);
- }
- }
- if (ret)
- {
- //SHChangeNotify(SHCNE_RENAMEITEM, SHCNF_PATHA, src, dest);
- SHChangeNotify(SHCNE_CREATE, SHCNF_PATHA, dest, NULL);
- SHChangeNotify(SHCNE_DELETE, SHCNF_PATHA, src, NULL);
- return ERROR_SUCCESS;
- }
- return GetLastError();
-}
-
-/************************************************************************
- * SHNotifyCopyFile [internal]
- *
- * Copies a file. Also triggers a change notify if one exists.
- *
- * PARAMS
- * src [I] path to source file to move
- * dest [I] path to target file to move to
- * bFailIfExists [I] if TRUE, the target file will not be overwritten if
- * a file with this name already exists
- *
- * RETURNS
- * ERROR_SUCCESS if successful
- */
-DWORD SHNotifyCopyFileA(LPCSTR src, LPCSTR dest, BOOL bFailIfExists)
-{
- BOOL ret;
- ret = CopyFileA(src, dest, bFailIfExists);
- if (ret)
- {
- SHChangeNotify(SHCNE_CREATE, SHCNF_PATHA, dest, NULL);
- return ERROR_SUCCESS;
- }
return GetLastError();
}
{
ret = SHNotifyCreateDirectoryW(path, sec);
/* Refuse to work on certain error codes before trying to create directories recursively */
- if (ret != ERROR_FILE_EXISTS &&
+ if (ret != ERROR_SUCCESS &&
+ ret != ERROR_FILE_EXISTS &&
ret != ERROR_ALREADY_EXISTS &&
ret != ERROR_FILENAME_EXCED_RANGE)
{
while (*pSlash)
{
- while (*pSlash && *pSlash != '\\')
- pSlash = CharNextW(pSlash);
-
+ while (*pSlash && *pSlash != '\\') pSlash++;
if (*pSlash)
{
*pSlash = 0; /* terminate path at separator */
return ret;
}
-
/*************************************************************************
* SHFindAttrW [internal]
*
return dwAttr;
}
-/*
-DWORD SHFindAttrA(LPSTR pName, BOOL fileOnly)
-{
- WIN32_FIND_DATAA wfd;
- BOOL b_FileMask = fileOnly && (NULL != StrPBrkA(pName, wWildcardChars));
- DWORD dwAttr = INVALID_FILE_ATTRIBUTES;
- HANDLE hFind = FindFirstFileA(pName, &wfd);
-
- if (INVALID_HANDLE_VALUE != hFind)
- {
- do
- {
- if (b_FileMask && IsAttribDir(wfd.dwFileAttributes))
- continue;
- dwAttr = wfd.dwFileAttributes;
- break;
- }
- while (FindNextFileA(hFind, &wfd));
- FindClose(hFind);
- }
- return dwAttr;
-}
-*/
-
-/*************************************************************************
- *
- * SHFileStrICmp HelperFunction for SHFileOperationW
- *
- */
-BOOL SHFileStrICmpW(LPWSTR p1, LPWSTR p2, LPWSTR p1End, LPWSTR p2End)
-{
- WCHAR C1 = '\0';
- WCHAR C2 = '\0';
- int i_Temp = -1;
- int i_len1 = lstrlenW(p1);
- int i_len2 = lstrlenW(p2);
-
- if (p1End && (&p1[i_len1] >= p1End) && ('\\' == p1End[0]))
- {
- C1 = p1End[0];
- p1End[0] = '\0';
- i_len1 = lstrlenW(p1);
- }
- if (p2End)
- {
- if ((&p2[i_len2] >= p2End) && ('\\' == p2End[0]))
- {
- C2 = p2End[0];
- if (C2)
- p2End[0] = '\0';
- }
- }
- else
- {
- if ((i_len1 <= i_len2) && ('\\' == p2[i_len1]))
- {
- C2 = p2[i_len1];
- if (C2)
- p2[i_len1] = '\0';
- }
- }
- i_len2 = lstrlenW(p2);
- if (i_len1 == i_len2)
- i_Temp = lstrcmpiW(p1,p2);
- if (C1)
- p1[i_len1] = C1;
- if (C2)
- p2[i_len2] = C2;
- return !(i_Temp);
-}
-
-/*************************************************************************
- *
- * SHFileStrCpyCat HelperFunction for SHFileOperationW
- *
- */
-LPWSTR SHFileStrCpyCatW(LPWSTR pTo, LPCWSTR pFrom, LPCWSTR pCatStr)
-{
- LPWSTR pToFile = NULL;
- int i_len;
- if (pTo)
- {
- if (pFrom)
- lstrcpyW(pTo, pFrom);
- if (pCatStr)
- {
- i_len = lstrlenW(pTo);
- if ((i_len) && (pTo[--i_len] != '\\'))
- i_len++;
- pTo[i_len] = '\\';
- if (pCatStr[0] == '\\')
- pCatStr++; \
- lstrcpyW(&pTo[i_len+1], pCatStr);
- }
- pToFile = StrRChrW(pTo,NULL,'\\');
- if (!pToFile)
- pToFile = pTo;
- /* termination of the new string-group */
- pTo[(lstrlenW(pTo)) + 1] = '\0';
- }
- return pToFile;
-}
-
-/**************************************************************************
- * SHELL_FileNamesMatch()
- *
- * Accepts two \0 delimited lists of the file names. Checks whether number of
- * files in both lists is the same, and checks also if source-name exists.
- */
-BOOL SHELL_FileNamesMatch(LPCWSTR pszFiles1, LPCWSTR pszFiles2, BOOL bOnlySrc)
-{
- while ((pszFiles1[0] != '\0') &&
- (bOnlySrc || (pszFiles2[0] != '\0')))
- {
- if (NULL == StrPBrkW(pszFiles1, wWildcardChars))
- {
- if (INVALID_FILE_ATTRIBUTES == GetFileAttributesW(pszFiles1))
- return FALSE;
- }
- pszFiles1 += lstrlenW(pszFiles1) + 1;
- if (!bOnlySrc)
- pszFiles2 += lstrlenW(pszFiles2) + 1;
- }
- return ((pszFiles1[0] == '\0') && (bOnlySrc || (pszFiles2[0] == '\0')));
-}
-
/*************************************************************************
*
* SHNameTranslate HelperFunction for SHFileOperationA
* otherwise the ASCII strings are copied into it and the buffer is increased
* to point to the location after the final 0 termination char.
*/
-DWORD SHNameTranslate(LPWSTR* wString, LPCWSTR* pWToFrom, BOOL more)
+static DWORD SHNameTranslate(LPWSTR* wString, LPCWSTR* pWToFrom, BOOL more)
{
DWORD size = 0, aSize = 0;
LPCSTR aString = (LPCSTR)*pWToFrom;
aString += size;
} while ((size != 1) && more);
/* The two sizes might be different in the case of multibyte chars */
- size = MultiByteToWideChar(CP_ACP, 0, aString, aSize, *wString, 0);
+ size = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*pWToFrom, aSize, *wString, 0);
if (*wString) /* only in the second loop */
{
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*pWToFrom, aSize, *wString, size);
* lpFileOp [I/O] pointer to a structure containing all the necessary information
*
* RETURNS
- * Success: zero
- * Failure: nonzero
+ * Success: ERROR_SUCCESS.
+ * Failure: ERROR_CANCELLED.
*
* NOTES
* exported by name
return retCode;
}
-static const char * debug_shfileops_flags( DWORD fFlags )
+#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND 1026
+
+typedef struct
+{
+ DWORD attributes;
+ LPWSTR szDirectory;
+ LPWSTR szFilename;
+ LPWSTR szFullPath;
+ BOOL bFromWildcard;
+ BOOL bFromRelative;
+ BOOL bExists;
+} FILE_ENTRY;
+
+typedef struct
+{
+ FILE_ENTRY *feFiles;
+ DWORD num_alloc;
+ DWORD dwNumFiles;
+ BOOL bAnyFromWildcard;
+ BOOL bAnyDirectories;
+ BOOL bAnyDontExist;
+} FILE_LIST;
+
+
+static inline void grow_list(FILE_LIST *list)
+{
+ FILE_ENTRY *new = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, list->feFiles,
+ list->num_alloc * 2 * sizeof(*new) );
+ list->feFiles = new;
+ list->num_alloc *= 2;
+}
+
+/* adds a file to the FILE_ENTRY struct
+ */
+static void add_file_to_entry(FILE_ENTRY *feFile, LPWSTR szFile)
{
- return wine_dbg_sprintf( "%s%s%s%s%s%s%s%s%s%s%s%s%s",
- fFlags & FOF_MULTIDESTFILES ? "FOF_MULTIDESTFILES " : "",
- fFlags & FOF_CONFIRMMOUSE ? "FOF_CONFIRMMOUSE " : "",
- fFlags & FOF_SILENT ? "FOF_SILENT " : "",
- fFlags & FOF_RENAMEONCOLLISION ? "FOF_RENAMEONCOLLISION " : "",
- fFlags & FOF_NOCONFIRMATION ? "FOF_NOCONFIRMATION " : "",
- fFlags & FOF_WANTMAPPINGHANDLE ? "FOF_WANTMAPPINGHANDLE " : "",
- fFlags & FOF_ALLOWUNDO ? "FOF_ALLOWUNDO " : "",
- fFlags & FOF_FILESONLY ? "FOF_FILESONLY " : "",
- fFlags & FOF_SIMPLEPROGRESS ? "FOF_SIMPLEPROGRESS " : "",
- fFlags & FOF_NOCONFIRMMKDIR ? "FOF_NOCONFIRMMKDIR " : "",
- fFlags & FOF_NOERRORUI ? "FOF_NOERRORUI " : "",
- fFlags & FOF_NOCOPYSECURITYATTRIBS ? "FOF_NOCOPYSECURITYATTRIBS" : "",
- fFlags & 0xf000 ? "MORE-UNKNOWN-Flags" : "");
+ DWORD dwLen = lstrlenW(szFile) + 1;
+ LPWSTR ptr;
+
+ feFile->szFullPath = HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(WCHAR));
+ lstrcpyW(feFile->szFullPath, szFile);
+
+ ptr = StrRChrW(szFile, NULL, '\\');
+ if (ptr)
+ {
+ dwLen = ptr - szFile + 1;
+ feFile->szDirectory = HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(WCHAR));
+ lstrcpynW(feFile->szDirectory, szFile, dwLen);
+
+ dwLen = lstrlenW(feFile->szFullPath) - dwLen + 1;
+ feFile->szFilename = HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(WCHAR));
+ lstrcpyW(feFile->szFilename, ptr + 1); /* skip over backslash */
+ }
+ feFile->bFromWildcard = FALSE;
}
-static const char * debug_shfileops_action( DWORD op )
+static LPWSTR wildcard_to_file(LPWSTR szWildCard, LPWSTR szFileName)
{
- LPCSTR cFO_Name [] = {"FO_????","FO_MOVE","FO_COPY","FO_DELETE","FO_RENAME"};
- return wine_dbg_sprintf("%s", cFO_Name[ op ]);
+ LPWSTR szFullPath, ptr;
+ DWORD dwDirLen, dwFullLen;
+
+ ptr = StrRChrW(szWildCard, NULL, '\\');
+ dwDirLen = ptr - szWildCard + 1;
+
+ dwFullLen = dwDirLen + lstrlenW(szFileName) + 1;
+ szFullPath = HeapAlloc(GetProcessHeap(), 0, dwFullLen * sizeof(WCHAR));
+
+ lstrcpynW(szFullPath, szWildCard, dwDirLen + 1);
+ lstrcatW(szFullPath, szFileName);
+
+ return szFullPath;
}
-#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND 1026
-#define HIGH_ADR (LPWSTR)0xffffffff
+static void parse_wildcard_files(FILE_LIST *flList, LPWSTR szFile, LPDWORD pdwListIndex)
+{
+ WIN32_FIND_DATAW wfd;
+ HANDLE hFile = FindFirstFileW(szFile, &wfd);
+ FILE_ENTRY *file;
+ LPWSTR szFullPath;
+ BOOL res;
+
+ if (hFile == INVALID_HANDLE_VALUE) return;
-/* handle the complete deletion of `pTempFrom` */
-static int shfileops_delete(WIN32_FIND_DATAW *wfd,SHFILEOPSTRUCTW nFileOp, LPWSTR pFromFile,LPWSTR pTempFrom,HANDLE *hFind)
+ for (res = TRUE; res; res = FindNextFileW(hFile, &wfd))
+ {
+ if (IsDotDir(wfd.cFileName)) continue;
+ if (*pdwListIndex >= flList->num_alloc) grow_list( flList );
+ szFullPath = wildcard_to_file(szFile, wfd.cFileName);
+ file = &flList->feFiles[(*pdwListIndex)++];
+ add_file_to_entry(file, szFullPath);
+ file->bFromWildcard = TRUE;
+ file->attributes = wfd.dwFileAttributes;
+ if (IsAttribDir(file->attributes)) flList->bAnyDirectories = TRUE;
+ HeapFree(GetProcessHeap(), 0, szFullPath);
+ }
+ FindClose(hFile);
+}
+
+/* takes the null-separated file list and fills out the FILE_LIST */
+static HRESULT parse_file_list(FILE_LIST *flList, LPCWSTR szFiles)
{
- LPWSTR lpFileName;
- BOOL b_Mask = (NULL != StrPBrkW(&pFromFile[1], wWildcardChars));
- int retCode = 0;
- do
+ LPCWSTR ptr = szFiles;
+ WCHAR szCurFile[MAX_PATH];
+ DWORD i = 0, dwDirLen;
+
+ if (!szFiles)
+ return ERROR_INVALID_PARAMETER;
+
+ flList->bAnyFromWildcard = FALSE;
+ flList->bAnyDirectories = FALSE;
+ flList->bAnyDontExist = FALSE;
+ flList->num_alloc = 32;
+ flList->dwNumFiles = 0;
+
+ /* empty list */
+ if (!szFiles[0])
+ return ERROR_ACCESS_DENIED;
+
+ flList->feFiles = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ flList->num_alloc * sizeof(FILE_ENTRY));
+
+ while (*ptr)
{
- lpFileName = wfd->cAlternateFileName;
- if (!lpFileName[0])
- lpFileName = wfd->cFileName;
- if (IsDotDir(lpFileName) ||
- ((b_Mask) && IsAttribDir(wfd->dwFileAttributes) && (nFileOp.fFlags & FOF_FILESONLY)))
- continue;
- SHFileStrCpyCatW(&pFromFile[1], lpFileName, NULL);
- /* TODO: Check the SHELL_DeleteFileOrDirectoryW() function in shell32.dll */
- if (IsAttribFile(wfd->dwFileAttributes))
+ if (i >= flList->num_alloc) grow_list( flList );
+
+ /* change relative to absolute path */
+ if (PathIsRelativeW(ptr))
{
- if(SHNotifyDeleteFileW(pTempFrom) != ERROR_SUCCESS)
- {
- nFileOp.fAnyOperationsAborted = TRUE;
- retCode = 0x78; /* value unknown */
- }
+ dwDirLen = GetCurrentDirectoryW(MAX_PATH, szCurFile) + 1;
+ PathCombineW(szCurFile, szCurFile, ptr);
+ flList->feFiles[i].bFromRelative = TRUE;
+ }
+ else
+ {
+ lstrcpyW(szCurFile, ptr);
+ flList->feFiles[i].bFromRelative = FALSE;
+ }
+
+ /* parse wildcard files if they are in the filename */
+ if (StrPBrkW(szCurFile, wWildcardChars))
+ {
+ parse_wildcard_files(flList, szCurFile, &i);
+ flList->bAnyFromWildcard = TRUE;
+ i--;
}
- else if(!SHELL_DeleteDirectoryW(pTempFrom, (!(nFileOp.fFlags & FOF_NOCONFIRMATION))))
+ else
{
- nFileOp.fAnyOperationsAborted = TRUE;
- retCode = 0x79; /* value unknown */
+ FILE_ENTRY *file = &flList->feFiles[i];
+ add_file_to_entry(file, szCurFile);
+ file->attributes = GetFileAttributesW( file->szFullPath );
+ file->bExists = (file->attributes != INVALID_FILE_ATTRIBUTES);
+ if (!file->bExists) flList->bAnyDontExist = TRUE;
+ if (IsAttribDir(file->attributes)) flList->bAnyDirectories = TRUE;
}
+
+ /* advance to the next string */
+ ptr += lstrlenW(ptr) + 1;
+ i++;
}
- while (!nFileOp.fAnyOperationsAborted && FindNextFileW(*hFind,wfd));
- FindClose(*hFind);
- *hFind = INVALID_HANDLE_VALUE;
- return retCode;
-}
+ flList->dwNumFiles = i;
-/*
- * Summary of flags:
- *
- * implemented flags:
- * FOF_MULTIDESTFILES, FOF_NOCONFIRMATION, FOF_FILESONLY
- *
- * unimplememented and ignored flags:
- * FOF_CONFIRMMOUSE, FOF_SILENT, FOF_NOCONFIRMMKDIR,
- * FOF_SIMPLEPROGRESS, FOF_NOCOPYSECURITYATTRIBS
- *
- * partially implemented, breaks if file exists:
- * FOF_RENAMEONCOLLISION
- *
- * unimplemented and break if any other flag set:
- * FOF_ALLOWUNDO, FOF_WANTMAPPINGHANDLE
- */
+ return S_OK;
+}
-static int shfileops_check_flags(SHFILEOPSTRUCTW nFileOp)
+/* free the FILE_LIST */
+static void destroy_file_list(FILE_LIST *flList)
{
- FILEOP_FLAGS OFl = ((FILEOP_FLAGS)nFileOp.fFlags & 0xfff);
- long FuncSwitch = (nFileOp.wFunc & FO_MASK);
- long level= nFileOp.wFunc >> 4;
-
- TRACE("%s level=%ld nFileOp.fFlags=0x%x\n",
- debug_shfileops_action(FuncSwitch), level, nFileOp.fFlags);
- /* OFl &= (-1 - (FOF_MULTIDESTFILES | FOF_FILESONLY)); */
- /* OFl ^= (FOF_SILENT | FOF_NOCONFIRMATION | FOF_SIMPLEPROGRESS | FOF_NOCONFIRMMKDIR); */
- OFl &= (~(FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | FOF_FILESONLY)); /* implemented */
- OFl ^= (FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_NOCOPYSECURITYATTRIBS); /* ignored, if one */
- OFl &= (~FOF_SIMPLEPROGRESS); /* ignored, only with FOF_SILENT */
- if (OFl)
+ DWORD i;
+
+ if (!flList || !flList->feFiles)
+ return;
+
+ for (i = 0; i < flList->dwNumFiles; i++)
{
- if (OFl & (~(FOF_CONFIRMMOUSE | FOF_SILENT | FOF_RENAMEONCOLLISION |
- FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_NOCOPYSECURITYATTRIBS | FOF_ALLOWUNDO)))
+ HeapFree(GetProcessHeap(), 0, flList->feFiles[i].szDirectory);
+ HeapFree(GetProcessHeap(), 0, flList->feFiles[i].szFilename);
+ HeapFree(GetProcessHeap(), 0, flList->feFiles[i].szFullPath);
+ }
+
+ HeapFree(GetProcessHeap(), 0, flList->feFiles);
+}
+
+static void copy_dir_to_dir(FILE_OPERATION *op, FILE_ENTRY *feFrom, LPWSTR szDestPath)
+{
+ WCHAR szFrom[MAX_PATH], szTo[MAX_PATH];
+ SHFILEOPSTRUCTW fileOp;
+
+ static const WCHAR wildCardFiles[] = {'*','.','*',0};
+
+ if (IsDotDir(feFrom->szFilename))
+ return;
+
+ if (PathFileExistsW(szDestPath))
+ PathCombineW(szTo, szDestPath, feFrom->szFilename);
+ else
+ lstrcpyW(szTo, szDestPath);
+
+ if (!(op->req->fFlags & FOF_NOCONFIRMATION) && PathFileExistsW(szTo)) {
+ if (!SHELL_ConfirmDialogW(op->req->hwnd, ASK_OVERWRITE_FOLDER, feFrom->szFilename, op))
{
- FIXME("%s level=%ld lpFileOp->fFlags=0x%x not implemented, Aborted=TRUE, stub\n",
- debug_shfileops_action(FuncSwitch), level, OFl);
- return 0x403; /* 1027, we need an extension to shlfileop */
+ /* Vista returns an ERROR_CANCELLED even if user pressed "No" */
+ if (!op->bManyItems)
+ op->bCancelled = TRUE;
+ return;
}
- else
- {
- TRACE("%s level=%ld lpFileOp->fFlags=0x%x not fully implemented, stub\n",
- debug_shfileops_action(FuncSwitch), level, OFl);
- }
- }
- return 0;
+ }
+
+ szTo[lstrlenW(szTo) + 1] = '\0';
+ SHNotifyCreateDirectoryW(szTo, NULL);
+
+ PathCombineW(szFrom, feFrom->szFullPath, wildCardFiles);
+ szFrom[lstrlenW(szFrom) + 1] = '\0';
+
+ memcpy(&fileOp, op->req, sizeof(fileOp));
+ fileOp.pFrom = szFrom;
+ fileOp.pTo = szTo;
+ fileOp.fFlags &= ~FOF_MULTIDESTFILES; /* we know we're copying to one dir */
+
+ /* Don't ask the user about overwriting files when he accepted to overwrite the
+ folder. FIXME: this is not exactly what Windows does - e.g. there would be
+ an additional confirmation for a nested folder */
+ fileOp.fFlags |= FOF_NOCONFIRMATION;
+
+ SHFileOperationW(&fileOp);
}
-static int shfileops_do_operation(WIN32_FIND_DATAW wfd,SHFILEOPSTRUCTW *nFileOp, LPWSTR pToFile, LPWSTR pFromFile)
+static BOOL copy_file_to_file(FILE_OPERATION *op, WCHAR *szFrom, WCHAR *szTo)
{
- LPWSTR lpFileName = wfd.cAlternateFileName;
- if (!lpFileName[0])
- lpFileName = wfd.cFileName;
- if (IsDotDir(lpFileName) ||
- (IsAttribDir(wfd.dwFileAttributes) && (nFileOp->fFlags & FOF_FILESONLY)))
- return 0; /* next name in pTempFrom(dir) */
- SHFileStrCpyCatW(&pToFile[1], lpFileName, NULL);
- SHFileStrCpyCatW(&pFromFile[1], lpFileName, NULL);
- return SHFileOperationW (nFileOp);
+ if (!(op->req->fFlags & FOF_NOCONFIRMATION) && PathFileExistsW(szTo))
+ {
+ if (!SHELL_ConfirmDialogW(op->req->hwnd, ASK_OVERWRITE_FILE, PathFindFileNameW(szTo), op))
+ return 0;
+ }
+
+ return SHNotifyCopyFileW(szFrom, szTo, FALSE) == 0;
}
-/* get attributes of the parent dir of pTemp and create the directory if it does not exists */
-static DWORD shfileops_get_parent_attr2(LPWSTR pFile,LPWSTR pTemp,int flag,int *retCode)
+/* copy a file or directory to another directory */
+static void copy_to_dir(FILE_OPERATION *op, FILE_ENTRY *feFrom, FILE_ENTRY *feTo)
{
- DWORD PathAttr;
- pFile[0] = '\0';
- PathAttr = GetFileAttributesW(pTemp);
- if ((PathAttr == INVALID_FILE_ATTRIBUTES) && flag)
+ if (!PathFileExistsW(feTo->szFullPath))
+ SHNotifyCreateDirectoryW(feTo->szFullPath, NULL);
+
+ if (IsAttribFile(feFrom->attributes))
{
- /* create dir must be here, sample target D:\y\ *.* create with RC=10003 */
- if (SHNotifyCreateDirectoryW(pTemp, NULL))
- {
- *retCode = 0x73;/* value unknown */
- /*goto shfileop_end;*/
- return PathAttr;
- }
- PathAttr = GetFileAttributesW(pTemp);
+ WCHAR szDestPath[MAX_PATH];
+
+ PathCombineW(szDestPath, feTo->szFullPath, feFrom->szFilename);
+ copy_file_to_file(op, feFrom->szFullPath, szDestPath);
}
- pFile[0] = '\\';
- return PathAttr;
+ else if (!(op->req->fFlags & FOF_FILESONLY && feFrom->bFromWildcard))
+ copy_dir_to_dir(op, feFrom, feTo->szFullPath);
}
-/* get attributes of the parent dir of pTemp without creating the directory if it does not exists */
-static DWORD shfileops_get_parent_attr(LPWSTR pFile,LPWSTR pTemp)
+static void create_dest_dirs(LPWSTR szDestDir)
{
- /* less efficient:
- return shfileops_get_parent_attr2(pFile,pTemp,0,NULL);
- */
- DWORD PathAttr;
- pFile[0] = '\0';
- PathAttr = GetFileAttributesW(pTemp);
- pFile[0] = '\\';
- return PathAttr;
+ WCHAR dir[MAX_PATH];
+ LPWSTR ptr = StrChrW(szDestDir, '\\');
+
+ /* make sure all directories up to last one are created */
+ while (ptr && (ptr = StrChrW(ptr + 1, '\\')))
+ {
+ lstrcpynW(dir, szDestDir, ptr - szDestDir + 1);
+
+ if (!PathFileExistsW(dir))
+ SHNotifyCreateDirectoryW(dir, NULL);
+ }
+
+ /* create last directory */
+ if (!PathFileExistsW(szDestDir))
+ SHNotifyCreateDirectoryW(szDestDir, NULL);
}
-/*************************************************************************
- * SHFileOperationW [SHELL32.@]
- *
- * See SHFileOperationA.
- */
-int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
+/* the FO_COPY operation */
+static HRESULT copy_files(FILE_OPERATION *op, FILE_LIST *flFrom, FILE_LIST *flTo)
{
- SHFILEOPSTRUCTW nFileOp = *(lpFileOp);
+ DWORD i;
+ FILE_ENTRY *entryToCopy;
+ FILE_ENTRY *fileDest = &flTo->feFiles[0];
+ BOOL bCancelIfAnyDirectories = FALSE;
- LPCWSTR pNextFrom = nFileOp.pFrom;
- LPCWSTR pNextTo = nFileOp.pTo;
- LPCWSTR pFrom = pNextFrom;
- LPCWSTR pTo = NULL;
- HANDLE hFind = INVALID_HANDLE_VALUE;
- WIN32_FIND_DATAW wfd;
- LPWSTR pTempFrom = NULL;
- LPWSTR pTempTo = NULL;
- LPWSTR pFromFile;
- LPWSTR pToFile = NULL;
- int retCode = 0;
- DWORD ToAttr;
- DWORD ToPathAttr;
-
- BOOL b_Multi = (nFileOp.fFlags & FOF_MULTIDESTFILES);
-
- BOOL b_MultiTo = (FO_DELETE != (lpFileOp->wFunc & FO_MASK));
- BOOL b_MultiPaired = (!b_MultiTo);
- BOOL b_MultiFrom = FALSE;
- BOOL not_overwrite;
- BOOL ask_overwrite;
- BOOL b_SameRoot;
- BOOL b_SameTailName;
- BOOL b_ToInvalidTail = FALSE;
- BOOL b_ToValid; /* for W98-Bug for FO_MOVE with source and target in same rootdrive */
- BOOL b_Mask;
- BOOL b_ToTailSlash = FALSE;
-
- long FuncSwitch = (nFileOp.wFunc & FO_MASK);
- long level= nFileOp.wFunc>>4;
-
- /* default no error */
- nFileOp.fAnyOperationsAborted = FALSE;
-
- if ((FuncSwitch < FO_MOVE) || (FuncSwitch > FO_RENAME))
- goto shfileop_end; /* no valid FunctionCode */
-
- if (level == 0)
- TRACE("%s: flags (0x%04x) : %s\n",
- debug_shfileops_action(FuncSwitch), nFileOp.fFlags,
- debug_shfileops_flags(nFileOp.fFlags) );
-
- /* establish when pTo is interpreted as the name of the destination file
- * or the directory where the Fromfile should be copied to.
- * This depends on:
- * (1) pTo points to the name of an existing directory;
- * (2) the flag FOF_MULTIDESTFILES is present;
- * (3) whether pFrom point to multiple filenames.
- *
- * Some experiments:
- *
- * destisdir 1 1 1 1 0 0 0 0
- * FOF_MULTIDESTFILES 1 1 0 0 1 1 0 0
- * multiple from filenames 1 0 1 0 1 0 1 0
- * ---------------
- * copy files to dir 1 0 1 1 0 0 1 0
- * create dir 0 0 0 0 0 0 1 0
- */
-
- retCode = shfileops_check_flags(nFileOp);
- if (retCode)
- goto shfileop_end;
-
- if ((pNextFrom) && (!(b_MultiTo) || (pNextTo)))
+ if (flFrom->bAnyDontExist)
+ return ERROR_SHELL_INTERNAL_FILE_NOT_FOUND;
+
+ if (op->req->fFlags & FOF_MULTIDESTFILES && flFrom->bAnyFromWildcard)
+ return ERROR_CANCELLED;
+
+ if (!(op->req->fFlags & FOF_MULTIDESTFILES) && flTo->dwNumFiles != 1)
+ return ERROR_CANCELLED;
+
+ if (op->req->fFlags & FOF_MULTIDESTFILES && flFrom->dwNumFiles != 1 &&
+ flFrom->dwNumFiles != flTo->dwNumFiles)
+ {
+ return ERROR_CANCELLED;
+ }
+
+ if (flFrom->dwNumFiles > 1 && flTo->dwNumFiles == 1 &&
+ !PathFileExistsW(flTo->feFiles[0].szFullPath) &&
+ IsAttribFile(fileDest->attributes))
+ {
+ bCancelIfAnyDirectories = TRUE;
+ }
+
+ if (flFrom->dwNumFiles > 1 && flTo->dwNumFiles == 1 && fileDest->bFromRelative &&
+ !PathFileExistsW(fileDest->szFullPath))
+ {
+ op->req->fAnyOperationsAborted = TRUE;
+ return ERROR_CANCELLED;
+ }
+
+ if (!(op->req->fFlags & FOF_MULTIDESTFILES) && flFrom->dwNumFiles != 1 &&
+ PathFileExistsW(fileDest->szFullPath) &&
+ IsAttribFile(fileDest->attributes))
+ {
+ return ERROR_CANCELLED;
+ }
+
+ for (i = 0; i < flFrom->dwNumFiles; i++)
+ {
+ entryToCopy = &flFrom->feFiles[i];
+
+ if (op->req->fFlags & FOF_MULTIDESTFILES)
+ fileDest = &flTo->feFiles[i];
+
+ if (IsAttribDir(entryToCopy->attributes) &&
+ !lstrcmpiW(entryToCopy->szFullPath, fileDest->szDirectory))
{
- nFileOp.pFrom = pTempFrom = HeapAlloc(GetProcessHeap(), 0, ((1 + 2 * (b_MultiTo)) * MAX_PATH + 6) * sizeof(WCHAR));
- if (!pTempFrom)
- {
- retCode = ERROR_OUTOFMEMORY;
- SetLastError(retCode);
- goto shfileop_end;
- }
- if (b_MultiTo)
- pTempTo = &pTempFrom[MAX_PATH + 4];
- nFileOp.pTo = pTempTo;
- ask_overwrite = (!(nFileOp.fFlags & FOF_NOCONFIRMATION) && !(nFileOp.fFlags & FOF_RENAMEONCOLLISION));
- not_overwrite = (!(nFileOp.fFlags & FOF_NOCONFIRMATION) || (nFileOp.fFlags & FOF_RENAMEONCOLLISION));
+ return ERROR_SUCCESS;
}
- else
+
+ if (IsAttribDir(entryToCopy->attributes) && bCancelIfAnyDirectories)
+ return ERROR_CANCELLED;
+
+ create_dest_dirs(fileDest->szDirectory);
+
+ if (!lstrcmpiW(entryToCopy->szFullPath, fileDest->szFullPath))
+ {
+ if (IsAttribFile(entryToCopy->attributes))
+ return ERROR_NO_MORE_SEARCH_HANDLES;
+ else
+ return ERROR_SUCCESS;
+ }
+
+ if ((flFrom->dwNumFiles > 1 && flTo->dwNumFiles == 1) ||
+ (flFrom->dwNumFiles == 1 && IsAttribDir(fileDest->attributes)))
{
- retCode = ERROR_SHELL_INTERNAL_FILE_NOT_FOUND;
- goto shfileop_end;
+ copy_to_dir(op, entryToCopy, fileDest);
}
- /* need break at error before change sourcepointer */
- while(!nFileOp.fAnyOperationsAborted && (pNextFrom[0]))
+ else if (IsAttribDir(entryToCopy->attributes))
+ {
+ copy_dir_to_dir(op, entryToCopy, fileDest->szFullPath);
+ }
+ else
{
- nFileOp.wFunc = ((level + 1) << 4) + FuncSwitch;
- nFileOp.fFlags = lpFileOp->fFlags;
+ if (!copy_file_to_file(op, entryToCopy->szFullPath, fileDest->szFullPath))
+ {
+ op->req->fAnyOperationsAborted = TRUE;
+ return ERROR_CANCELLED;
+ }
+ }
- if (b_MultiTo)
- {
- pTo = pNextTo;
- pNextTo = &pNextTo[lstrlenW(pTo)+1];
- b_MultiTo = (b_Multi && pNextTo[0]);
- }
+ /* Vista return code. XP would return e.g. ERROR_FILE_NOT_FOUND, ERROR_ALREADY_EXISTS */
+ if (op->bCancelled)
+ return ERROR_CANCELLED;
+ }
- pFrom = pNextFrom;
- pNextFrom = &pNextFrom[lstrlenW(pNextFrom)+1];
- if (!b_MultiFrom && !b_MultiTo)
- b_MultiFrom = (pNextFrom[0]);
+ /* Vista return code. On XP if the used pressed "No" for the last item,
+ * ERROR_ARENA_TRASHED would be returned */
+ return ERROR_SUCCESS;
+}
- pFromFile = SHFileStrCpyCatW(pTempFrom, pFrom, NULL);
+static BOOL confirm_delete_list(HWND hWnd, DWORD fFlags, BOOL fTrash, FILE_LIST *flFrom)
+{
+ if (flFrom->dwNumFiles > 1)
+ {
+ WCHAR tmp[8];
+ const WCHAR format[] = {'%','d',0};
- if (pTo)
- {
- pToFile = SHFileStrCpyCatW(pTempTo, pTo, NULL);
- }
- if (!b_MultiPaired)
- {
- b_MultiPaired =
- SHELL_FileNamesMatch(lpFileOp->pFrom, lpFileOp->pTo, (!b_Multi || b_MultiFrom));
- }
- if (!(b_MultiPaired) || !(pFromFile) || !(pFromFile[1]) || ((pTo) && !(pToFile)))
- {
- retCode = ERROR_SHELL_INTERNAL_FILE_NOT_FOUND;
- goto shfileop_end;
- }
- if (pTo)
- {
- b_ToTailSlash = (!pToFile[1]);
- if (b_ToTailSlash)
- {
- pToFile[0] = '\0';
- if (StrChrW(pTempTo,'\\'))
- {
- pToFile = SHFileStrCpyCatW(pTempTo, NULL, NULL);
- }
- }
- b_ToInvalidTail = (NULL != StrPBrkW(&pToFile[1], wWildcardChars));
- }
+ wnsprintfW(tmp, sizeof(tmp)/sizeof(tmp[0]), format, flFrom->dwNumFiles);
+ return SHELL_ConfirmDialogW(hWnd, (fTrash?ASK_TRASH_MULTIPLE_ITEM:ASK_DELETE_MULTIPLE_ITEM), tmp, NULL);
+ }
+ else
+ {
+ FILE_ENTRY *fileEntry = &flFrom->feFiles[0];
- /* for all */
- b_Mask = (NULL != StrPBrkW(&pFromFile[1], wWildcardChars));
- if (FO_RENAME == FuncSwitch)
- {
- /* temporary only for FO_RENAME */
- if (b_MultiTo || b_MultiFrom || (b_Mask && !b_ToInvalidTail))
- {
-#ifndef W98_FO_FUNCTION
- retCode = ERROR_GEN_FAILURE; /* W2K ERROR_GEN_FAILURE, W98 returns no error */
-#endif
- goto shfileop_end;
- }
- }
-
- hFind = FindFirstFileW(pFrom, &wfd);
- if (INVALID_HANDLE_VALUE == hFind)
- {
- if ((FO_DELETE == FuncSwitch) && (b_Mask) && IsAttribDir(shfileops_get_parent_attr(pFromFile,pTempFrom)))
- {
- /* FO_DELETE with mask and without found is valid */
- goto shfileop_end;
- }
- /* root (without mask) is also not allowed as source, tested in W98 */
- retCode = ERROR_SHELL_INTERNAL_FILE_NOT_FOUND;
- goto shfileop_end;
- }
+ if (IsAttribFile(fileEntry->attributes))
+ return SHELL_ConfirmDialogW(hWnd, (fTrash?ASK_TRASH_FILE:ASK_DELETE_FILE), fileEntry->szFullPath, NULL);
+ else if (!(fFlags & FOF_FILESONLY && fileEntry->bFromWildcard))
+ return SHELL_ConfirmDialogW(hWnd, (fTrash?ASK_TRASH_FOLDER:ASK_DELETE_FOLDER), fileEntry->szFullPath, NULL);
+ }
+ return TRUE;
+}
- /* for all */
+/* the FO_DELETE operation */
+static HRESULT delete_files(LPSHFILEOPSTRUCTW lpFileOp, FILE_LIST *flFrom)
+{
+ FILE_ENTRY *fileEntry;
+ DWORD i;
+ BOOL bPathExists;
+ BOOL bTrash;
- /* ??? b_Mask = (!SHFileStrICmpA(&pFromFile[1], &wfd.cFileName[0], HIGH_ADR, HIGH_ADR)); */
- if (!pTo) /* FO_DELETE */
- {
- retCode = shfileops_delete(&wfd,nFileOp,pFromFile,pTempFrom,&hFind);
- /* if ret is not 0, nFileOp.fAnyOperationsAborted is TRUE and the loop will end */
- continue;
- } /* FO_DELETE ends, pTo must be always valid from here */
+ if (!flFrom->dwNumFiles)
+ return ERROR_SUCCESS;
- b_SameRoot = (toupperW(pTempFrom[0]) == toupperW(pTempTo[0]));
- b_SameTailName = SHFileStrICmpW(pToFile, pFromFile, NULL, NULL);
+ /* Windows also checks only the first item */
+ bTrash = (lpFileOp->fFlags & FOF_ALLOWUNDO);
+ //&& TRASH_CanTrashFile(flFrom->feFiles[0].szFullPath);
- ToPathAttr = ToAttr = GetFileAttributesW(pTempTo);
- if (!b_Mask && (ToAttr == INVALID_FILE_ATTRIBUTES) && (pToFile))
- {
- ToPathAttr = shfileops_get_parent_attr(pToFile,pTempTo);
- }
+ if (!(lpFileOp->fFlags & FOF_NOCONFIRMATION) || (!bTrash && lpFileOp->fFlags & FOF_WANTNUKEWARNING))
+ if (!confirm_delete_list(lpFileOp->hwnd, lpFileOp->fFlags, bTrash, flFrom))
+ {
+ lpFileOp->fAnyOperationsAborted = TRUE;
+ return 0;
+ }
- if (FO_RENAME == FuncSwitch)
- {
- if (!b_SameRoot || b_Mask /* FO_RENAME works not with Mask */
- || !SHFileStrICmpW(pTempFrom, pTempTo, pFromFile, NULL)
- || (SHFileStrICmpW(pTempFrom, pTempTo, pFromFile, HIGH_ADR) && !b_ToTailSlash))
- {
- retCode = 0x73;
- goto shfileop_end;
- }
- if (b_ToInvalidTail)
- {
- retCode=0x2;
- goto shfileop_end;
- }
- if (INVALID_FILE_ATTRIBUTES == ToPathAttr)
- {
- retCode = 0x75;
- goto shfileop_end;
- }
- if (IsAttribDir(wfd.dwFileAttributes) && IsAttribDir(ToAttr))
- {
- retCode = (b_ToTailSlash) ? 0xb7 : 0x7b;
- goto shfileop_end;
- }
- /* we use SHNotifyMoveFile() instead MoveFileW */
- if (SHNotifyMoveFileW(pTempFrom, pTempTo) != ERROR_SUCCESS)
- {
- /* we need still the value for the returncode, we use the mostly assumed */
- retCode = 0xb7;
- goto shfileop_end;
- }
- goto shfileop_end;
- }
+ for (i = 0; i < flFrom->dwNumFiles; i++)
+ {
+ bPathExists = TRUE;
+ fileEntry = &flFrom->feFiles[i];
- /* W98 Bug with FO_MOVE different from FO_COPY, better the same as FO_COPY */
- b_ToValid = ((b_SameTailName && b_SameRoot && (FO_COPY == FuncSwitch)) ||
- (b_SameTailName && !b_SameRoot) || (b_ToInvalidTail));
+ if (!IsAttribFile(fileEntry->attributes) &&
+ (lpFileOp->fFlags & FOF_FILESONLY && fileEntry->bFromWildcard))
+ continue;
- /* handle mask in source */
- if (b_Mask)
- {
- if (!IsAttribDir(ToAttr))
- {
- retCode = (b_ToInvalidTail &&/* b_SameTailName &&*/ (FO_MOVE == FuncSwitch)) \
- ? 0x2 : 0x75;
- goto shfileop_end;
- }
- pToFile = SHFileStrCpyCatW(pTempTo, NULL, wBackslash);
- nFileOp.fFlags = (nFileOp.fFlags | FOF_MULTIDESTFILES);
- do
- {
- retCode = shfileops_do_operation(wfd,&nFileOp,pToFile,pFromFile);
- } while(!nFileOp.fAnyOperationsAborted && FindNextFileW(hFind, &wfd));
- }
- FindClose(hFind);
- hFind = INVALID_HANDLE_VALUE;
- /* FO_COPY/FO_MOVE with mask, FO_DELETE and FO_RENAME are solved */
- if (b_Mask)
+ if (bTrash)
+ {
+ BOOL bDelete;
+#if 0
+ if (TRASH_TrashFile(fileEntry->szFullPath))
continue;
+#endif
- /* only FO_COPY/FO_MOVE without mask, all others are (must be) solved */
- if (IsAttribDir(wfd.dwFileAttributes) && (ToAttr == INVALID_FILE_ATTRIBUTES))
- {
- if (pToFile)
- {
- ToPathAttr = shfileops_get_parent_attr2(pToFile,pTempTo,b_ToValid,&retCode);
- if (retCode)
- goto shfileop_end;
- if (b_ToInvalidTail)
- {
- retCode = 0x10003;
- goto shfileop_end;
- }
- }
- }
+ /* Note: Windows silently deletes the file in such a situation, we show a dialog */
+ if (!(lpFileOp->fFlags & FOF_NOCONFIRMATION) || (lpFileOp->fFlags & FOF_WANTNUKEWARNING))
+ bDelete = SHELL_ConfirmDialogW(lpFileOp->hwnd, ASK_CANT_TRASH_ITEM, fileEntry->szFullPath, NULL);
+ else
+ bDelete = TRUE;
- /* trailing BackSlash is ever removed and pToFile points to BackSlash before */
- if (!b_MultiTo && (b_MultiFrom || (!(b_Multi) && IsAttribDir(ToAttr))))
- {
- if ((FO_MOVE == FuncSwitch) && IsAttribDir(ToAttr) && IsAttribDir(wfd.dwFileAttributes))
- {
- if (b_Multi)
- {
- retCode = 0x73; /* !b_Multi = 0x8 ?? */
- goto shfileop_end;
- }
- }
- pToFile = SHFileStrCpyCatW(pTempTo, NULL, wfd.cFileName);
- ToAttr = GetFileAttributesW(pTempTo);
- }
+ if (!bDelete)
+ {
+ lpFileOp->fAnyOperationsAborted = TRUE;
+ break;
+ }
+ }
+
+ /* delete the file or directory */
+ if (IsAttribFile(fileEntry->attributes))
+ bPathExists = DeleteFileW(fileEntry->szFullPath);
+ else
+ bPathExists = SHELL_DeleteDirectoryW(lpFileOp->hwnd, fileEntry->szFullPath, FALSE);
- if (IsAttribDir(ToAttr))
- {
- if (IsAttribFile(wfd.dwFileAttributes))
- {
- retCode = (FO_COPY == FuncSwitch) ? 0x75 : 0xb7;
- goto shfileop_end;
- }
- }
- else
- {
- ToPathAttr = shfileops_get_parent_attr(pToFile,pTempTo);
- if (IsAttribFile(ToPathAttr))
- {
- /* error, is this tested ? */
- retCode = 0x777402;
- goto shfileop_end;
- }
- }
+ if (!bPathExists)
+ return ERROR_PATH_NOT_FOUND;
+ }
- /* singlesource + no mask */
- if (INVALID_FILE_ATTRIBUTES == (ToAttr & ToPathAttr))
- {
- /* Target-dir does not exist, and cannot be created */
- retCode=0x75;
- goto shfileop_end;
- }
+ return ERROR_SUCCESS;
+}
- switch(FuncSwitch)
- {
- case FO_MOVE:
- pToFile = NULL;
- if ((ToAttr == INVALID_FILE_ATTRIBUTES) && SHFileStrICmpW(pTempFrom, pTempTo, pFromFile, NULL))
- {
- nFileOp.wFunc = ((level+1)<<4) + FO_RENAME;
- }
- else
- {
- if (b_SameRoot && IsAttribDir(ToAttr) && IsAttribDir(wfd.dwFileAttributes))
- {
- /* we need pToFile for FO_DELETE after FO_MOVE contence */
- pToFile = SHFileStrCpyCatW(pTempFrom, NULL, wWildcardFile);
- }
- else
- {
- nFileOp.wFunc = ((level+1)<<4) + FO_COPY;
- }
- }
- retCode = SHFileOperationW(&nFileOp);
- if (pToFile)
- ((DWORD*)pToFile)[0] = '\0';
- if (!nFileOp.fAnyOperationsAborted && (FO_RENAME != (nFileOp.wFunc & 0xf)))
- {
- nFileOp.wFunc = ((level+1)<<4) + FO_DELETE;
- retCode = SHFileOperationW(&nFileOp);
- }
- continue;
- case FO_COPY:
- if (SHFileStrICmpW(pTempFrom, pTempTo, NULL, NULL))
- { /* target is the same as source ? */
- /* we still need the value for the returncode, we assume 0x71 */
- retCode = 0x71;
- goto shfileop_end;
- }
- if (IsAttribDir((ToAttr & wfd.dwFileAttributes)))
- {
- if (IsAttribDir(ToAttr) || !SHNotifyCreateDirectoryW(pTempTo, NULL))
- {
- /* ??? nFileOp.fFlags = (nFileOp.fFlags | FOF_MULTIDESTFILES); */
- SHFileStrCpyCatW(pTempFrom, NULL, wWildcardFile);
- retCode = SHFileOperationW(&nFileOp);
- }
- else
- {
- retCode = 0x750;/* value unknown */
- goto shfileop_end;
- }
- }
- else
- {
- if (!(ask_overwrite && SHELL_ConfirmDialogW(ASK_OVERWRITE_FILE, pTempTo))
- && (not_overwrite))
- {
- /* we still need the value for the returncode, we use the mostly assumed */
- retCode = 0x73;
- goto shfileop_end;
- }
- if (SHNotifyCopyFileW(pTempFrom, pTempTo, TRUE) != ERROR_SUCCESS)
- {
- retCode = 0x77; /* value unknown */
- goto shfileop_end;
- }
- }
- }
- }
+static void move_dir_to_dir(LPSHFILEOPSTRUCTW lpFileOp, FILE_ENTRY *feFrom, LPWSTR szDestPath)
+{
+ WCHAR szFrom[MAX_PATH], szTo[MAX_PATH];
+ SHFILEOPSTRUCTW fileOp;
-shfileop_end:
- if (hFind != INVALID_HANDLE_VALUE)
- FindClose(hFind);
- hFind = INVALID_HANDLE_VALUE;
- HeapFree(GetProcessHeap(), 0, pTempFrom);
- if (retCode)
- nFileOp.fAnyOperationsAborted = TRUE;
- TRACE("%s level=%ld AnyOpsAborted=%s ret=0x%x, with %s %s%s\n",
- debug_shfileops_action(FuncSwitch), level,
- nFileOp.fAnyOperationsAborted ? "TRUE":"FALSE",
- retCode, debugstr_w(pFrom), pTo ? "-> ":"", debugstr_w(pTo));
+ static const WCHAR wildCardFiles[] = {'*','.','*',0};
- lpFileOp->fAnyOperationsAborted = nFileOp.fAnyOperationsAborted;
- return retCode;
+ if (IsDotDir(feFrom->szFilename))
+ return;
+
+ SHNotifyCreateDirectoryW(szDestPath, NULL);
+
+ PathCombineW(szFrom, feFrom->szFullPath, wildCardFiles);
+ szFrom[lstrlenW(szFrom) + 1] = '\0';
+
+ lstrcpyW(szTo, szDestPath);
+ szTo[lstrlenW(szDestPath) + 1] = '\0';
+
+ memcpy(&fileOp, lpFileOp, sizeof(fileOp));
+ fileOp.pFrom = szFrom;
+ fileOp.pTo = szTo;
+
+ SHFileOperationW(&fileOp);
+}
+
+/* moves a file or directory to another directory */
+static void move_to_dir(LPSHFILEOPSTRUCTW lpFileOp, FILE_ENTRY *feFrom, FILE_ENTRY *feTo)
+{
+ WCHAR szDestPath[MAX_PATH];
+
+ PathCombineW(szDestPath, feTo->szFullPath, feFrom->szFilename);
+
+ if (IsAttribFile(feFrom->attributes))
+ SHNotifyMoveFileW(feFrom->szFullPath, szDestPath);
+ else if (!(lpFileOp->fFlags & FOF_FILESONLY && feFrom->bFromWildcard))
+ move_dir_to_dir(lpFileOp, feFrom, szDestPath);
+}
+
+/* the FO_MOVE operation */
+static HRESULT move_files(LPSHFILEOPSTRUCTW lpFileOp, FILE_LIST *flFrom, FILE_LIST *flTo)
+{
+ DWORD i;
+ FILE_ENTRY *entryToMove;
+ FILE_ENTRY *fileDest;
+
+ if (!flFrom->dwNumFiles || !flTo->dwNumFiles)
+ return ERROR_CANCELLED;
+
+ if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) &&
+ flTo->dwNumFiles > 1 && flFrom->dwNumFiles > 1)
+ {
+ return ERROR_CANCELLED;
+ }
+
+ if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) &&
+ !flFrom->bAnyDirectories &&
+ flFrom->dwNumFiles > flTo->dwNumFiles)
+ {
+ return ERROR_CANCELLED;
+ }
+
+ if (!PathFileExistsW(flTo->feFiles[0].szDirectory))
+ return ERROR_CANCELLED;
+
+ if ((lpFileOp->fFlags & FOF_MULTIDESTFILES) &&
+ flFrom->dwNumFiles != flTo->dwNumFiles)
+ {
+ return ERROR_CANCELLED;
+ }
+
+ fileDest = &flTo->feFiles[0];
+ for (i = 0; i < flFrom->dwNumFiles; i++)
+ {
+ entryToMove = &flFrom->feFiles[i];
+
+ if (lpFileOp->fFlags & FOF_MULTIDESTFILES)
+ fileDest = &flTo->feFiles[i];
+
+ if (!PathFileExistsW(fileDest->szDirectory))
+ return ERROR_CANCELLED;
+
+ if (fileDest->bExists && IsAttribDir(fileDest->attributes))
+ move_to_dir(lpFileOp, entryToMove, fileDest);
+ else
+ SHNotifyMoveFileW(entryToMove->szFullPath, fileDest->szFullPath);
+ }
+
+ return ERROR_SUCCESS;
+}
+
+/* the FO_RENAME files */
+static HRESULT rename_files(LPSHFILEOPSTRUCTW lpFileOp, FILE_LIST *flFrom, FILE_LIST *flTo)
+{
+ FILE_ENTRY *feFrom;
+ FILE_ENTRY *feTo;
+
+ if (flFrom->dwNumFiles != 1)
+ return ERROR_GEN_FAILURE;
+
+ if (flTo->dwNumFiles != 1)
+ return ERROR_CANCELLED;
+
+ feFrom = &flFrom->feFiles[0];
+ feTo= &flTo->feFiles[0];
+
+ /* fail if destination doesn't exist */
+ if (!feFrom->bExists)
+ return ERROR_SHELL_INTERNAL_FILE_NOT_FOUND;
+
+ /* fail if destination already exists */
+ if (feTo->bExists)
+ return ERROR_ALREADY_EXISTS;
+
+ return SHNotifyMoveFileW(feFrom->szFullPath, feTo->szFullPath);
+}
+
+/* alert the user if an unsupported flag is used */
+static void check_flags(FILEOP_FLAGS fFlags)
+{
+ WORD wUnsupportedFlags = FOF_NO_CONNECTED_ELEMENTS |
+ FOF_NOCOPYSECURITYATTRIBS | FOF_NORECURSEREPARSE |
+ FOF_RENAMEONCOLLISION | FOF_WANTMAPPINGHANDLE;
+
+ if (fFlags & wUnsupportedFlags)
+ FIXME("Unsupported flags: %04x\n", fFlags);
+}
+
+/*************************************************************************
+ * SHFileOperationW [SHELL32.@]
+ *
+ * See SHFileOperationA
+ */
+int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
+{
+ FILE_OPERATION op;
+ FILE_LIST flFrom, flTo;
+ int ret = 0;
+
+ if (!lpFileOp)
+ return ERROR_INVALID_PARAMETER;
+
+ check_flags(lpFileOp->fFlags);
+
+ ZeroMemory(&flFrom, sizeof(FILE_LIST));
+ ZeroMemory(&flTo, sizeof(FILE_LIST));
+
+ if ((ret = parse_file_list(&flFrom, lpFileOp->pFrom)))
+ return ret;
+
+ if (lpFileOp->wFunc != FO_DELETE)
+ parse_file_list(&flTo, lpFileOp->pTo);
+
+ ZeroMemory(&op, sizeof(op));
+ op.req = lpFileOp;
+ op.bManyItems = (flFrom.dwNumFiles > 1);
+
+ switch (lpFileOp->wFunc)
+ {
+ case FO_COPY:
+ ret = copy_files(&op, &flFrom, &flTo);
+ break;
+ case FO_DELETE:
+ ret = delete_files(lpFileOp, &flFrom);
+ break;
+ case FO_MOVE:
+ ret = move_files(lpFileOp, &flFrom, &flTo);
+ break;
+ case FO_RENAME:
+ ret = rename_files(lpFileOp, &flFrom, &flTo);
+ break;
+ default:
+ ret = ERROR_INVALID_PARAMETER;
+ break;
+ }
+
+ destroy_file_list(&flFrom);
+
+ if (lpFileOp->wFunc != FO_DELETE)
+ destroy_file_list(&flTo);
+
+ if (ret == ERROR_CANCELLED)
+ lpFileOp->fAnyOperationsAborted = TRUE;
+
+ return ret;
}
#define SHDSA_GetItemCount(hdsa) (*(int*)(hdsa))
/*************************************************************************
* SheGetDirA [SHELL32.@]
*
- */
-HRESULT WINAPI SheGetDirA(LPSTR u, LPSTR v)
-{ FIXME("%p %p stub\n",u,v);
+ * drive = 0: returns the current directory path
+ * drive > 0: returns the current directory path of the specified drive
+ * drive=1 -> A: drive=2 -> B: ...
+ * returns 0 if successful
+*/
+DWORD WINAPI SheGetDirA(DWORD drive, LPSTR buffer)
+{
+ WCHAR org_path[MAX_PATH];
+ DWORD ret;
+ char drv_path[3];
+
+ /* change current directory to the specified drive */
+ if (drive) {
+ strcpy(drv_path, "A:");
+ drv_path[0] += (char)drive-1;
+
+ GetCurrentDirectoryW(MAX_PATH, org_path);
+
+ SetCurrentDirectoryA(drv_path);
+ }
+
+ /* query current directory path of the specified drive */
+ ret = GetCurrentDirectoryA(MAX_PATH, buffer);
+
+ /* back to the original drive */
+ if (drive)
+ SetCurrentDirectoryW(org_path);
+
+ if (!ret)
+ return GetLastError();
+
return 0;
}
/*************************************************************************
* SheGetDirW [SHELL32.@]
*
+ * drive = 0: returns the current directory path
+ * drive > 0: returns the current directory path of the specified drive
+ * drive=1 -> A: drive=2 -> B: ...
+ * returns 0 if successful
*/
-HRESULT WINAPI SheGetDirW(LPWSTR u, LPWSTR v)
-{ FIXME("%p %p stub\n",u,v);
- return 0;
+DWORD WINAPI SheGetDirW(DWORD drive, LPWSTR buffer)
+{
+ WCHAR org_path[MAX_PATH];
+ DWORD ret;
+ char drv_path[3];
+
+ /* change current directory to the specified drive */
+ if (drive) {
+ strcpy(drv_path, "A:");
+ drv_path[0] += (char)drive-1;
+
+ GetCurrentDirectoryW(MAX_PATH, org_path);
+
+ SetCurrentDirectoryA(drv_path);
+ }
+
+ /* query current directory path of the specified drive */
+ ret = GetCurrentDirectoryW(MAX_PATH, buffer);
+
+ /* back to the original drive */
+ if (drive)
+ SetCurrentDirectoryW(org_path);
+
+ if (!ret)
+ return GetLastError();
+
+ return 0;
}
/*************************************************************************
* SheChangeDirA [SHELL32.@]
*
+ * changes the current directory to the specified path
+ * and returns 0 if successful
*/
-HRESULT WINAPI SheChangeDirA(LPSTR u)
-{ FIXME("(%s),stub\n",debugstr_a(u));
- return 0;
+DWORD WINAPI SheChangeDirA(LPSTR path)
+{
+ if (SetCurrentDirectoryA(path))
+ return 0;
+ else
+ return GetLastError();
}
/*************************************************************************
* SheChangeDirW [SHELL32.@]
*
+ * changes the current directory to the specified path
+ * and returns 0 if successful
*/
-HRESULT WINAPI SheChangeDirW(LPWSTR u)
-{ FIXME("(%s),stub\n",debugstr_w(u));
- return 0;
+DWORD WINAPI SheChangeDirW(LPWSTR path)
+{
+ if (SetCurrentDirectoryW(path))
+ return 0;
+ else
+ return GetLastError();
}
/*************************************************************************
root[0] += (char)drive;
return GetDriveTypeA(root);
}
+
+/***********************************************************************
+ * SHPathPrepareForWriteW (SHELL32.@)
+ */
+HRESULT WINAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *modless, LPCWSTR path, DWORD flags)
+{
+ HRESULT res;
+ DWORD err;
+ LPCWSTR realpath;
+ int len;
+ WCHAR* last_slash;
+ WCHAR* temppath=NULL;
+
+ TRACE("%p %p %s 0x%80x\n", hwnd, modless, debugstr_w(path), flags);
+
+ if (flags & ~(SHPPFW_DIRCREATE|SHPPFW_ASKDIRCREATE|SHPPFW_IGNOREFILENAME))
+ FIXME("unimplemented flags 0x%08x\n", flags);
+
+ /* cut off filename if necessary */
+ if (flags & SHPPFW_IGNOREFILENAME)
+ {
+ last_slash = StrRChrW(path, NULL, '\\');
+ if (last_slash == NULL)
+ len = 1;
+ else
+ len = last_slash - path + 1;
+ temppath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+ if (!temppath)
+ return E_OUTOFMEMORY;
+ StrCpyNW(temppath, path, len);
+ realpath = temppath;
+ }
+ else
+ {
+ realpath = path;
+ }
+
+ /* try to create the directory if asked to */
+ if (flags & (SHPPFW_DIRCREATE|SHPPFW_ASKDIRCREATE))
+ {
+ if (flags & SHPPFW_ASKDIRCREATE)
+ FIXME("treating SHPPFW_ASKDIRCREATE as SHPPFW_DIRCREATE\n");
+
+ SHCreateDirectoryExW(0, realpath, NULL);
+ }
+
+ /* check if we can access the directory */
+ res = GetFileAttributesW(realpath);
+
+ HeapFree(GetProcessHeap(), 0, temppath);
+
+ if (res == INVALID_FILE_ATTRIBUTES)
+ {
+ err = GetLastError();
+ if (err == ERROR_FILE_NOT_FOUND)
+ return HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND);
+ return HRESULT_FROM_WIN32(err);
+ }
+ else if (res & FILE_ATTRIBUTE_DIRECTORY)
+ return S_OK;
+ else
+ return HRESULT_FROM_WIN32(ERROR_DIRECTORY);
+}
+
+/***********************************************************************
+ * SHPathPrepareForWriteA (SHELL32.@)
+ */
+HRESULT WINAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *modless, LPCSTR path, DWORD flags)
+{
+ WCHAR wpath[MAX_PATH];
+ MultiByteToWideChar( CP_ACP, 0, path, -1, wpath, MAX_PATH);
+ return SHPathPrepareForWriteW(hwnd, modless, wpath, flags);
+}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
/***************************************************************************
* GetNextElement (internal function)
*
- * gets a part of a string till the first backslash
+ * Gets a part of a string till the first backslash.
*
* PARAMETERS
* pszNext [IN] string to get the element from
LPCWSTR pszTail = pszNext;
DWORD dwCopy;
- TRACE ("(%s %p 0x%08lx)\n", debugstr_w (pszNext), pszOut, dwOut);
+ TRACE ("(%s %p 0x%08x)\n", debugstr_w (pszNext), pszOut, dwOut);
*pszOut = 0x0000;
else
pszTail = NULL;
- TRACE ("--(%s %s 0x%08lx %p)\n", debugstr_w (pszNext), debugstr_w (pszOut), dwOut, pszTail);
+ TRACE ("--(%s %s 0x%08x %p)\n", debugstr_w (pszNext), debugstr_w (pszOut), dwOut, pszTail);
return pszTail;
}
ILFree (*pidlInOut);
*pidlInOut = pidlTemp;
- TRACE ("-- pidl=%p ret=0x%08lx\n", pidlInOut ? *pidlInOut : NULL, hr);
+ TRACE ("-- pidl=%p ret=0x%08x\n", pidlInOut ? *pidlInOut : NULL, hr);
return hr;
}
* via IPersistFolder3 or IPersistFolder.
*
* NOTES
- * pathRoot can be NULL for Folders beeing a drive.
- * In this case the absolute path is build from pidlChild (eg. C:)
+ * pathRoot can be NULL for Folders being a drive.
+ * In this case the absolute path is built from pidlChild (eg. C:)
*/
static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot,
- LPCITEMIDLIST pidlChild, REFCLSID clsid, REFIID riid, LPVOID * ppvOut)
+ LPCITEMIDLIST pidlChild, REFCLSID clsid, LPVOID * ppvOut)
{
HRESULT hr;
TRACE ("%p %s %p\n", pidlRoot, debugstr_w(pathRoot), pidlChild);
- if (SUCCEEDED ((hr = SHCoCreateInstance (NULL, clsid, NULL, riid, ppvOut)))) {
+ hr = SHCoCreateInstance(NULL, clsid, NULL, &IID_IShellFolder, ppvOut);
+ if (SUCCEEDED (hr))
+ {
LPITEMIDLIST pidlAbsolute = ILCombine (pidlRoot, pidlChild);
IPersistFolder *pPF;
IPersistFolder3 *ppf;
}
if (pidlChild) {
- LPCSTR pszChild = _ILGetTextPointer(pidlChild);
int len = lstrlenW(ppfti.szTargetParsingName);
- if (pszChild)
- MultiByteToWideChar (CP_ACP, 0, pszChild, -1, ppfti.szTargetParsingName + len, MAX_PATH - len);
- else
- hr = E_INVALIDARG;
+ if (!_ILSimpleGetTextW(pidlChild, ppfti.szTargetParsingName + len, MAX_PATH - len))
+ hr = E_INVALIDARG;
}
IPersistFolder3_InitializeEx (ppf, NULL, pidlAbsolute, &ppfti);
}
ILFree (pidlAbsolute);
}
- TRACE ("-- (%p) ret=0x%08lx\n", *ppvOut, hr);
+ TRACE ("-- (%p) ret=0x%08x\n", *ppvOut, hr);
return hr;
}
if ((clsid = _ILGetGUIDPointer (pidlChild))) {
/* virtual folder */
- hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild, clsid, &IID_IShellFolder, (LPVOID *) & pSF);
+ hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild, clsid, (LPVOID *)&pSF);
} else {
/* file system folder */
CLSID clsidFolder = CLSID_ShellFSFolder;
lstrcpynW(wszFolderPath, pathRoot, MAX_PATH);
pwszPathTail = PathAddBackslashW(wszFolderPath);
}
- MultiByteToWideChar(CP_ACP, 0, _ILGetTextPointer(pidlChild), -1, pwszPathTail, MAX_PATH - (int)(pwszPathTail - wszFolderPath));
+
+ _ILSimpleGetTextW(pidlChild,pwszPathTail,MAX_PATH - (int)(pwszPathTail - wszFolderPath));
+
if (SHELL32_GetCustomFolderAttributeFromPath (wszFolderPath,
wszDotShellClassInfo, wszCLSID, wszCLSIDValue, CHARS_IN_GUID))
CLSIDFromString (wszCLSIDValue, &clsidFolder);
- hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild,
- &clsidFolder, &IID_IShellFolder, (LPVOID *)&pSF);
+ hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild,
+ &clsidFolder, (LPVOID *)&pSF);
}
ILFree (pidlChild);
IShellFolder_Release (pSF);
}
- TRACE ("-- returning (%p) %08lx\n", *ppvOut, hr);
+ TRACE ("-- returning (%p) %08x\n", *ppvOut, hr);
return hr;
}
/***********************************************************************
* SHELL32_GetDisplayNameOfChild
*
- * Retrives the display name of a child object of a shellfolder.
+ * Retrieves the display name of a child object of a shellfolder.
*
* For a pidl eg. [subpidl1][subpidl2][subpidl3]:
* - it binds to the child shellfolder [subpidl1]
* virtual folders with the registry key WantsFORPARSING set.
*/
HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf,
- LPCITEMIDLIST pidl, DWORD dwFlags, LPSTR szOut, DWORD dwOutLen)
+ LPCITEMIDLIST pidl, DWORD dwFlags, LPWSTR szOut, DWORD dwOutLen)
{
LPITEMIDLIST pidlFirst;
HRESULT hr = E_INVALIDARG;
- TRACE ("(%p)->(pidl=%p 0x%08lx %p 0x%08lx)\n", psf, pidl, dwFlags, szOut, dwOutLen);
+ TRACE ("(%p)->(pidl=%p 0x%08x %p 0x%08x)\n", psf, pidl, dwFlags, szOut, dwOutLen);
pdump (pidl);
pidlFirst = ILCloneFirst (pidl);
hr = IShellFolder_GetDisplayNameOf (psfChild, pidlNext, dwFlags, &strTemp);
if (SUCCEEDED (hr)) {
- hr = StrRetToStrNA (szOut, dwOutLen, &strTemp, pidlNext);
+ if(!StrRetToStrNW (szOut, dwOutLen, &strTemp, pidlNext))
+ hr = E_FAIL;
}
IShellFolder_Release (psfChild);
}
} else
hr = E_OUTOFMEMORY;
- TRACE ("-- ret=0x%08lx %s\n", hr, szOut);
+ TRACE ("-- ret=0x%08x %s\n", hr, debugstr_w(szOut));
return hr;
}
* SHELL32_GetItemAttributes
*
* NOTES
- * observerd values:
+ * Observed values:
* folder: 0xE0000177 FILESYSTEM | HASSUBFOLDER | FOLDER
* file: 0x40000177 FILESYSTEM
* drive: 0xf0000144 FILESYSTEM | HASSUBFOLDER | FOLDER | FILESYSANCESTOR
* file: 0x40400177 FILESYSTEM | CANMONIKER
* drive 0xF0400154 FILESYSTEM | HASSUBFOLDER | FOLDER | FILESYSANCESTOR | CANMONIKER | CANRENAME (LABEL)
*
- * This function does not set flags!! It only resets flags when necessary.
+ * According to the MSDN documentation this function should not set flags. It claims only to reset flags when necessary.
+ * However it turns out the native shell32.dll _sets_ flags in several cases - so do we.
*/
HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
{
DWORD dwAttributes;
+ BOOL has_guid;
static const DWORD dwSupportedAttr=
SFGAO_CANCOPY | /*0x00000001 */
SFGAO_CANMOVE | /*0x00000002 */
SFGAO_FILESYSTEM | /*0x40000000 */
SFGAO_HASSUBFOLDER; /*0x80000000 */
- TRACE ("0x%08lx\n", *pdwAttributes);
+ TRACE ("0x%08x\n", *pdwAttributes);
if (*pdwAttributes & ~dwSupportedAttr)
{
- WARN ("attributes 0x%08lx not implemented\n", (*pdwAttributes & ~dwSupportedAttr));
+ WARN ("attributes 0x%08x not implemented\n", (*pdwAttributes & ~dwSupportedAttr));
*pdwAttributes &= dwSupportedAttr;
}
+ has_guid = _ILGetGUIDPointer(pidl) != NULL;
+
dwAttributes = *pdwAttributes;
if (_ILIsDrive (pidl)) {
*pdwAttributes &= SFGAO_HASSUBFOLDER|SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR|
SFGAO_DROPTARGET|SFGAO_HASPROPSHEET|SFGAO_CANLINK;
- } else if (_ILGetGUIDPointer (pidl) && HCR_GetFolderAttributes(pidl, &dwAttributes)) {
+ } else if (has_guid && HCR_GetFolderAttributes(pidl, &dwAttributes)) {
*pdwAttributes = dwAttributes;
} else if (_ILGetDataPointer (pidl)) {
dwAttributes = _ILGetFileAttributes (pidl, NULL, 0);
+ if (!dwAttributes && has_guid) {
+ WCHAR path[MAX_PATH];
+ STRRET strret;
+
+ /* File attributes are not present in the internal PIDL structure, so get them from the file system. */
+
+ HRESULT hr = IShellFolder_GetDisplayNameOf(psf, pidl, SHGDN_FORPARSING, &strret);
+
+ if (SUCCEEDED(hr)) {
+ hr = StrRetToBufW(&strret, pidl, path, MAX_PATH);
+
+ /* call GetFileAttributes() only for file system paths, not for parsing names like "::{...}" */
+ if (SUCCEEDED(hr) && path[0]!=':')
+ dwAttributes = GetFileAttributesW(path);
+ }
+ }
+
/* Set common attributes */
*pdwAttributes |= SFGAO_FILESYSTEM | SFGAO_DROPTARGET | SFGAO_HASPROPSHEET | SFGAO_CANDELETE |
SFGAO_CANRENAME | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANCOPY;
} else {
*pdwAttributes &= SFGAO_HASSUBFOLDER|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET|SFGAO_CANRENAME|SFGAO_CANLINK;
}
- TRACE ("-- 0x%08lx\n", *pdwAttributes);
+ TRACE ("-- 0x%08x\n", *pdwAttributes);
return S_OK;
}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "windef.h"
#include "shell32_Si.rc"
#include "shell32_Sk.rc"
#include "shell32_Sv.rc"
+#include "shell32_Tr.rc"
#include "shell32_Uk.rc"
#include "shell32_Wa.rc"
#include "shell32_Zh.rc"
/*
* Copyright 2000 Juergen Schmied
- * Copyright 2006 Ged Murphy
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_SHELL_RES_H
#define IDS_SHV_COLUMN9 15
#define IDS_SHV_COLUMN10 16
#define IDS_SHV_COLUMN11 17
+#define IDS_SHV_COLUMN_DELFROM 18
+#define IDS_SHV_COLUMN_DELDATE 19
#define IDS_DESKTOP 20
#define IDS_MYCOMPUTER 21
#define IDS_VIEW_LIST 26
#define IDS_VIEW_DETAILS 27
-#define IDS_CREATEFOLDER_DENIED 30
-#define IDS_CREATEFOLDER_CAPTION 31
-#define IDS_DELETEITEM_CAPTION 32
-#define IDS_DELETEFOLDER_CAPTION 33
-#define IDS_DELETEITEM_TEXT 34
-#define IDS_DELETEMULTIPLE_TEXT 35
-#define IDS_OVERWRITEFILE_CAPTION 36
-#define IDS_OVERWRITEFILE_TEXT 37
-
#define IDS_RESTART_TITLE 40
#define IDS_RESTART_PROMPT 41
#define IDS_SHUTDOWN_TITLE 42
#define IDS_DRIVE_CDROM 73
#define IDS_DRIVE_NETWORK 74
+#define IDS_CREATEFOLDER_DENIED 128
+#define IDS_CREATEFOLDER_CAPTION 129
+#define IDS_DELETEITEM_CAPTION 130
+#define IDS_DELETEFOLDER_CAPTION 131
+#define IDS_DELETEITEM_TEXT 132
+#define IDS_DELETEMULTIPLE_TEXT 133
+#define IDS_OVERWRITEFILE_CAPTION 134
+#define IDS_OVERWRITEFILE_TEXT 135
+#define IDS_DELETESELECTED_TEXT 136
+#define IDS_TRASHFOLDER_TEXT 137
+#define IDS_TRASHITEM_TEXT 138
+#define IDS_TRASHMULTIPLE_TEXT 139
+#define IDS_CANTTRASH_TEXT 140
+#define IDS_OVERWRITEFOLDER_TEXT 141
+
+/* Note: this string is referenced from the registry*/
+#define IDS_RECYCLEBIN_FOLDER_NAME 8964
+
+#define IDD_ICON 0x4300
+#define IDD_MESSAGE 0x4301
+
+/* these IDs are the same as on native */
+#define IDD_YESTOALL 0x3207
/* browse for folder dialog box */
+#define IDD_MAKENEWFOLDER 0x3746
+#define IDD_FOLDERTEXT 0x3745
+#define IDD_FOLDER 0x3744
#define IDD_STATUS 0x3743
#define IDD_TITLE 0x3742
#define IDD_TREEVIEW 0x3741
#define SHELL_EXTENDED_SHORTCUT_DLG 0x4000
-#define RUN_AS_DIALOG 0x4001
-/*
- * Do not alter the icon, bitmap + avi resource
- * numbers they sync with the Windows counterpart
- */
-/* ICONS */
-#define IDI_SHELL_DOCUMENT 1
-#define IDI_SHELL_RICH_TEXT 2
-#define IDI_SHELL_EXE 3
-#define IDI_SHELL_FOLDER 4
-#define IDI_SHELL_FOLDER_OPEN 5
-#define IDI_SHELL_5_12_FLOPPY 6
-#define IDI_SHELL_3_14_FLOPPY 7
-#define IDI_SHELL_FLOPPY 8
-#define IDI_SHELL_DRIVE 9
+#define IDI_SHELL_DOCUMENT 1
+#define IDI_SHELL_FOLDER 4
+#define IDI_SHELL_FOLDER_OPEN 5
+#define IDI_SHELL_5_12_FLOPPY 6
+#define IDI_SHELL_3_14_FLOPPY 7
+#define IDI_SHELL_FLOPPY 8
+#define IDI_SHELL_DRIVE 9
#define IDI_SHELL_NETDRIVE 10
-#define IDI_SHELL_NETDRIVE2 11 //THIS SHOULD BE #define IDI_SHELL_NETDRIVE_OFF
+#define IDI_SHELL_NETDRIVE2 11
#define IDI_SHELL_CDROM 12
#define IDI_SHELL_RAMDISK 13
-
+#define IDI_SHELL_ENTIRE_NETWORK 14
#define IDI_SHELL_NETWORK 15
#define IDI_SHELL_MY_COMPUTER 16
#define IDI_SHELL_PRINTER 17
#define IDI_SHELL_MY_NETWORK_PLACES 18
#define IDI_SHELL_COMPUTERS_NEAR_ME 19
-#define IDI_SHELL_PROGRAMS_FOLDER 20
-#define IDI_SHELL_RECENT_DOCUMENTS 21
-#define IDI_SHELL_CONTROL_PANEL 22
+#define IDI_SHELL_FOLDER_SMALL_XP 20
#define IDI_SHELL_SEARCH 23
#define IDI_SHELL_HELP 24
-#define IDI_SHELL_RUN 25
-#define IDI_SHELL_SHUTDOWN 28
-#define IDI_SHELL_SHARE 29
+#define IDI_SHELL_FOLDER_OPEN_LARGE 29
#define IDI_SHELL_SHORTCUT 30
+#define IDI_SHELL_FOLDER_OPEN_SMALL 31
#define IDI_SHELL_EMPTY_RECYCLE_BIN 32
#define IDI_SHELL_FULL_RECYCLE_BIN 33
#define IDI_SHELL_DESKTOP 35
-#define IDI_SHELL_CONTROL_PANEL2 36
-#define IDI_SHELL_PROGRAMS_FOLDER2 37
+#define IDI_SHELL_CONTROL_PANEL 36
#define IDI_SHELL_PRINTERS_FOLDER 38
#define IDI_SHELL_FONTS_FOLDER 39
-#define IDI_SHELL_TSKBAR_STARTMENU 40
-#define IDI_SHELL_CD_MUSIC 41
-#define IDI_SHELL_FAVORITES 44
-#define IDI_SHELL_LOGOFF 45
-#define IDI_SHELL_EXPLORER 46
-
-#define IDI_SHELL_LOCKED 48
-
-#define IDI_SHELL_FIND_IN_FILE 134
-
-#define IDI_SHELL_CONTROL_PANEL3 137
-#define IDI_SHELL_PRINTER2 138
-#define IDI_SHELL_INF_FILE 151
-#define IDI_SHELL_TEXT_FILE 152
-#define IDI_SHELL_BAT_FILE 153
-#define IDI_SHELL_SYSTEM_FILE 154
-#define IDI_SHELL_FONT_FILE 155
-#define IDI_SHELL_TT_FONT_FILE 156
-#define IDI_SHELL_FONT_FILE2 157
-#define IDI_SHELL_RUN2 160
-
-#define IDI_SHELL_NETWORK_FOLDER 172
-
-#define IDI_SHELL_EMPTY_RECYCLE_BIN1 191
-#define IDI_SHELL_FULL_RECYCLE_BIN1 192
-
+#define IDI_SHELL_TRASH_FILE 142
+#define IDI_SHELL_CONFIRM_DELETE 161
+#define IDI_SHELL_MY_DOCUMENTS 235
-#define IDI_SHELL_TURN_OFF 221
-#define IDI_SHELL_DVD_ROM 222
-#define IDI_SHELL_MOVIE_FILE 224
-#define IDI_SHELL_MUSIC_FILE 225
-
-#define IDI_SHELL_CD_MUSIC2 228
-
-#define IDI_SHELL_MY_DOCUMENTS 235
-#define IDI_SHELL_MY_PICTURES 236
-#define IDI_SHELL_MY_MUSIC 237
-#define IDI_SHELL_MY_MOVIES 238
-
-#define IDI_SHELL_PRINTER3 245
-
-#define IDI_SHELL_CAMERA 248
-#define IDI_SHELL_OVER_HEAD_PROJ 249
-#define IDI_SHELL_DISPLAY 250
-#define IDI_SHELL_PRINT_PICS 252
-#define IDI_SHELL_EMPTY_RECYCLE_BIN3 254
-
-#define IDI_SHELL_HELP1 263
-#define IDI_SHELL_SENDMAIL 265
-#define IDI_SHELL_ACCESSABILITY 268
-#define IDI_SHELL_USERS 269
-#define IDI_SHELL_SCREEN_COLORS 270
-#define IDI_SHELL_ADD_REM_PROGRAMS 271
-#define IDI_SHELL_TUNES 277
-#define IDI_SHELL_USER_ACCOUNTS 279
-#define IDI_SHELL_HELP_FILE 289
-#define IDI_SHELL_GO 290
-#define IDI_SHELL_DVD_DRIVE 291
-#define IDI_SHELL_CD_ADD_MUSIC 292
-#define IDI_SHELL_CD 293
-#define IDI_SHELL_CD_ROM 294
-#define IDI_SHELL_CDR 295
-#define IDI_SHELL_CDRW 296
-#define IDI_SHELL_DVD_RAM 297
-#define IDI_SHELL_DVDR_ROM 298
-#define IDI_SHELL_MP3_PLAYER 299
-#define IDI_SHELL_CD_ROM1 302
-#define IDI_SHELL_DVD_ROM1 304
-
-#define IDI_SHELL_CAMERA1 309
-#define IDI_SHELL_SCANNER 315
-#define IDI_SHELL_CAMCORDER 317
-#define IDI_SHELL_DVDRW_ROM 318
-#define IDI_SHELL_NEW_FOLDER 319
-#define IDI_SHELL_FAVOTITES 322
-#define IDI_SHELL_SEARCH1 323
-#define IDI_SHELL_HELP2 324
-#define IDI_SHELL_LOGOFF1 325
-#define IDI_SHELL_PROGRAMS_FOLDER1 326
-#define IDI_SHELL_RECENT_DOCUMENTS1 327
-#define IDI_SHELL_RUN1 328
-#define IDI_SHELL_SHUTDOWN1 329
-#define IDI_SHELL_CONTROL_PANEL1 330
-#define IDI_SHELL_IDEA 1001
-#define IDI_SHELL_HELP_FILE1 1004
-#define IDI_SHELL_SHUTDOWN2 8240
-
-/* BITMAPS */
-#define IDB_SHELL_IEXPLORE_LG 204
-#define IDB_SHELL_IEXPLORE1_LG 205
-#define IDB_SHELL_IEXPLORE_SM 206
-#define IDB_SHELL_IEXPLORE1_SM 207
-#define IDB_SHELL_EXPLORER_LG 214
-#define IDB_SHELL_EXPLORER1_LG 215
-#define IDB_SHELL_EXPLORER_SM 216
-#define IDB_SHELL_EXPLORER1_SM 217
-#define IDB_SHELL_UNKNOWN1 225
-#define IDB_SHELL_UNKNOWN2 226
-#define IDB_SHELL_UNKNOWN3 227
-#define IDB_SHELL_UNKNOWN4 228
-#define IDB_SHELL_UNKNOWN5 230
-#define IDB_SHELL_UNKNOWN6 231
-#define IDB_SHELL_UNKNOWN7 245
-
-/* AVI */
-#define IDA_SHELL_COPY 160
-#define IDA_SHELL_COPY1 161
-#define IDA_SHELL_COPY2 167
-#define IDA_SHELL_COPY3 168
-#define IDA_SHELL_RECYCLE 162
-#define IDA_SHELL_EMPTY_RECYCLE 163
-#define IDA_SHELL_DELETE 164
-#define IDA_SHELL_DELETE1 169
-#define IDA_SHELL_DOWNLOAD 170
+/*
+AVI resources, windows shell32 has 14 of them: 150-152 and 160-170
+FIXME: Need to add them, but for now just let them use the same: searching.avi
+(also to limit shell32's size)
+*/
+#define IDR_AVI_SEARCH 150
+#define IDR_AVI_SEARCHING 151
+#define IDR_AVI_FINDCOMPUTER 152
+#define IDR_AVI_FILEMOVE 160
+#define IDR_AVI_FILECOPY 161
+#define IDR_AVI_FILENUKE 163
+#define IDR_AVI_FILEDELETE 164
#endif
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-
#include <string.h>
#define COBJMACROS
#include "windef.h"
#include "wingdi.h"
#include "pidl.h"
-#include "shlguid.h"
#include "shlobj.h"
#include "shell32_main.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
-extern BOOL fileMoving;
-
/**************************************************************************
* IContextMenu Implementation
*/
BgCmImpl *This = (BgCmImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+ TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
BgCmImpl *This = (BgCmImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(count=%li)\n", This, refCount + 1);
+ TRACE("(%p)->(count=%i)\n", This, refCount + 1);
if (!refCount)
{
}
DestroyMenu(hMyMenu);
- TRACE("(%p)->returning 0x%lx\n",This,hr);
+ TRACE("(%p)->returning 0x%x\n",This,hr);
return hr;
}
{
BgCmImpl *This = (BgCmImpl *)iface;
ISFHelper * psfhlp;
- char szName[MAX_PATH];
+ WCHAR wszName[MAX_PATH];
IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, (LPVOID*)&psfhlp);
if (psfhlp)
{
LPITEMIDLIST pidl;
- ISFHelper_GetUniqueName(psfhlp, szName, MAX_PATH);
- ISFHelper_AddFolder(psfhlp, 0, szName, &pidl);
+ ISFHelper_GetUniqueName(psfhlp, wszName, MAX_PATH);
+ ISFHelper_AddFolder(psfhlp, 0, wszName, &pidl);
if(psv)
{
}
}
-/***************************************************************************/
-static BOOL DoLink(LPCSTR pSrcFile, LPCSTR pDstFile)
-{
- IShellLinkA *psl = NULL;
- IPersistFile *pPf = NULL;
- HRESULT hres;
- WCHAR widelink[MAX_PATH];
- BOOL ret = FALSE;
-
- CoInitialize(0);
-
- hres = CoCreateInstance( &CLSID_ShellLink,
- NULL,
- CLSCTX_INPROC_SERVER,
- &IID_IShellLinkA,
- (LPVOID )&psl);
-
- if(SUCCEEDED(hres))
- {
- hres = IShellLinkA_QueryInterface(psl, &IID_IPersistFile, (LPVOID *)&pPf);
- if(FAILED(hres))
- {
- ERR("failed QueryInterface for IPersistFile %08lx\n", hres);
- goto fail;
- }
-
- TRACE("shortcut point to %s\n", pSrcFile);
-
- hres = IShellLinkA_SetPath(psl, pSrcFile);
-
- if(FAILED(hres))
- {
- ERR("failed Set{IDList|Path} %08lx\n", hres);
- goto fail;
- }
-
- MultiByteToWideChar(CP_ACP, 0, pDstFile, -1, widelink, MAX_PATH);
-
- /* create the short cut */
- hres = IPersistFile_Save(pPf, widelink, TRUE);
-
- if(FAILED(hres))
- {
- ERR("failed IPersistFile::Save %08lx\n", hres);
- IPersistFile_Release(pPf);
- IShellLinkA_Release(psl);
- goto fail;
- }
-
- hres = IPersistFile_SaveCompleted(pPf, widelink);
- IPersistFile_Release(pPf);
- IShellLinkA_Release(psl);
- TRACE("shortcut %s has been created, result=%08lx\n", pDstFile, hres);
- ret = TRUE;
- }
- else
- {
- ERR("CoCreateInstance failed, hres=%08lx\n", hres);
- }
-
- fail:
- CoUninitialize();
- return ret;
-}
-
-static BOOL MakeLink(IContextMenu2 *iface)
-{
-
- BgCmImpl *This = (BgCmImpl *)iface;
- BOOL bSuccess = FALSE;
- IDataObject * pda;
-
- TRACE("\n");
-
- if(SUCCEEDED(OleGetClipboard(&pda)))
- {
- STGMEDIUM medium;
- FORMATETC formatetc;
-
- TRACE("pda=%p\n", pda);
-
- /* Set the FORMATETC structure*/
- InitFormatEtc(formatetc, RegisterClipboardFormatA(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
-
- /* Get the pidls from IDataObject */
- if(SUCCEEDED(IDataObject_GetData(pda, &formatetc, &medium)))
- {
- LPITEMIDLIST * apidl;
- LPITEMIDLIST pidl;
- IShellFolder *psfFrom = NULL, *psfDesktop;
-
- LPIDA lpcida = GlobalLock(medium.u.hGlobal);
- TRACE("cida=%p\n", lpcida);
-
- apidl = _ILCopyCidaToaPidl(&pidl, lpcida);
-
- /* bind to the source shellfolder */
- SHGetDesktopFolder(&psfDesktop);
- if(psfDesktop)
- {
- IShellFolder_BindToObject(psfDesktop, pidl, NULL, &IID_IShellFolder, (LPVOID*)&psfFrom);
- IShellFolder_Release(psfDesktop);
- }
-
- if (psfFrom)
- {
- /* get source and destination shellfolder */
- IPersistFolder2 *ppfdst = NULL;
- IPersistFolder2 *ppfsrc = NULL;
- IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppfdst);
- IShellFolder_QueryInterface(psfFrom, &IID_IPersistFolder2, (LPVOID*)&ppfsrc);
-
- TRACE("[%p,%p]\n",ppfdst,ppfsrc);
-
- /* do the link/s */
- /* hack to get desktop path */
- if ( (ppfdst && ppfsrc) || (This->bDesktop && ppfsrc) )
- {
- int i;
- char szSrcPath[MAX_PATH];
- char szDstPath[MAX_PATH];
- BOOL ret = FALSE;
- LPITEMIDLIST pidl2;
- char filename[MAX_PATH];
- char linkFilename[MAX_PATH];
- char srcFilename[MAX_PATH];
-
- IPersistFolder2_GetCurFolder(ppfsrc, &pidl2);
- SHGetPathFromIDListA (pidl2, szSrcPath);
-
- if (This->bDesktop)
- {
- SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &pidl2);
- SHGetPathFromIDListA (pidl2, szDstPath);
- }
- else
- {
- IPersistFolder2_GetCurFolder(ppfdst, &pidl2);
- SHGetPathFromIDListA (pidl2, szDstPath);
- }
-
- for (i = 0; i < lpcida->cidl; i++)
- {
- _ILSimpleGetText (apidl[i], filename, MAX_PATH);
-
- TRACE("filename %s\n", filename);
-
- lstrcpyA(linkFilename, szDstPath);
- PathAddBackslashA(linkFilename);
- lstrcatA(linkFilename, "Shortcut to ");
- lstrcatA(linkFilename, filename);
- lstrcatA(linkFilename, ".lnk");
-
- TRACE("linkFilename %s\n", linkFilename);
-
- lstrcpyA(srcFilename, szSrcPath);
- PathAddBackslashA(srcFilename);
- lstrcatA(srcFilename, filename);
-
- TRACE("srcFilename %s\n", srcFilename);
-
- ret = DoLink(srcFilename, linkFilename);
-
- if (ret)
- {
- SHChangeNotify(SHCNE_CREATE, SHCNF_PATHA, linkFilename, NULL);
- }
- }
- }
- if(ppfdst) IPersistFolder2_Release(ppfdst);
- if(ppfsrc) IPersistFolder2_Release(ppfsrc);
- IShellFolder_Release(psfFrom);
- }
-
- _ILFreeaPidl(apidl, lpcida->cidl);
- SHFree(pidl);
-
- /* release the medium*/
- ReleaseStgMedium(&medium);
- }
- IDataObject_Release(pda);
- }
- return bSuccess;
-}
-
-
/**************************************************************************
* DoPaste
*/
{
/* get source and destination shellfolder */
ISFHelper *psfhlpdst, *psfhlpsrc;
-
- if (This->bDesktop)
- {
- /* unimplemented
- SHGetDesktopFolder(&psfDesktop);
- IFSFolder_Constructor(psfDesktop, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
- IShellFolder_QueryInterface(psfhlpdst, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
- */
- IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
- }
- else
- {
- IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
- }
-
+ IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
IShellFolder_QueryInterface(psfFrom, &IID_ISFHelper, (LPVOID*)&psfhlpsrc);
/* do the copy/move */
if (psfhlpdst && psfhlpsrc)
{
ISFHelper_CopyItems(psfhlpdst, psfFrom, lpcida->cidl, (LPCITEMIDLIST*)apidl);
+ /* FIXME handle move
+ ISFHelper_DeleteItems(psfhlpsrc, lpcida->cidl, apidl);
+ */
}
if(psfhlpdst) ISFHelper_Release(psfhlpdst);
if(psfhlpsrc) ISFHelper_Release(psfhlpsrc);
}
IDataObject_Release(pda);
}
+#if 0
+ HGLOBAL hMem;
+
+ OpenClipboard(NULL);
+ hMem = GetClipboardData(CF_HDROP);
+
+ if(hMem)
+ {
+ char * pDropFiles = (char *)GlobalLock(hMem);
+ if(pDropFiles)
+ {
+ int len, offset = sizeof(DROPFILESTRUCT);
+ while( pDropFiles[offset] != 0)
+ {
+ len = strlen(pDropFiles + offset);
+ TRACE("%s\n", pDropFiles + offset);
+ offset += len+1;
+ }
+ }
+ GlobalUnlock(hMem);
+ }
+ CloseClipboard();
+#endif
return bSuccess;
}
DoPaste(iface);
break;
- case FCIDM_SHVIEW_INSERTLINK:
- MakeLink(iface);
- break;
-
case FCIDM_SHVIEW_PROPERTIES:
if (This->bDesktop) {
ShellExecuteA(lpcmi->hwnd, "open", "rundll32.exe shell32.dll,Control_RunDLL desk.cpl", NULL, NULL, SW_SHOWNORMAL);
{
BgCmImpl *This = (BgCmImpl *)iface;
- TRACE("(%p)->(idcom=%x flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
+ TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
/* test the existence of the menu items, the file dialog enables
the buttons according to this */
{
BgCmImpl *This = (BgCmImpl *)iface;
- FIXME("(%p)->(msg=%x wp=%x lp=%lx)\n",This, uMsg, wParam, lParam);
+ FIXME("(%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam);
return E_NOTIMPL;
}
/*
- * Systray
+ * Systray handling
*
- * Copyright 1999 Kai Morich <kai.morich@bigfoot.de>
- *
- * Manage the systray window. That it actually appears in the docking
- * area of KDE is handled in dlls/x11drv/window.c,
- * X11DRV_set_wm_hints using KWM_DOCKWINDOW.
+ * Copyright 1999 Kai Morich <kai.morich@bigfoot.de>
+ * Copyright 2004 Mike Hearn, for CodeWeavers
+ * Copyright 2005 Robert Shearman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "config.h"
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
#include <stdarg.h>
-#include <string.h>
#include "windef.h"
#include "winbase.h"
-#include "winnls.h"
#include "wingdi.h"
+#include "winnls.h"
#include "winuser.h"
-#include "shlobj.h"
#include "shellapi.h"
-#include "shell32_main.h"
-#include "commctrl.h"
-#include "wine/debug.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(shell);
-
-typedef struct SystrayItem {
- HWND hWnd;
- HWND hWndToolTip;
- NOTIFYICONDATAW notifyIcon;
- struct SystrayItem *nextTrayItem;
-} SystrayItem;
-
-static SystrayItem *systray=NULL;
-static int firstSystray=TRUE; /* defer creation of window class until first systray item is created */
+#include "wine/debug.h"
-#define ICON_SIZE GetSystemMetrics(SM_CXSMICON)
-/* space around icon (forces icon to center of KDE systray area) */
-#define ICON_BORDER 4
-
-
-
-static BOOL SYSTRAY_ItemIsEqual(PNOTIFYICONDATAW pnid1, PNOTIFYICONDATAW pnid2)
-{
- if (pnid1->hWnd != pnid2->hWnd) return FALSE;
- if (pnid1->uID != pnid2->uID) return FALSE;
- return TRUE;
-}
-
-
-static void SYSTRAY_ItemTerm(SystrayItem *ptrayItem)
-{
- if(ptrayItem->notifyIcon.hIcon)
- DestroyIcon(ptrayItem->notifyIcon.hIcon);
- if(ptrayItem->hWndToolTip)
- DestroyWindow(ptrayItem->hWndToolTip);
- if(ptrayItem->hWnd)
- DestroyWindow(ptrayItem->hWnd);
- return;
-}
-
-
-static BOOL SYSTRAY_Delete(PNOTIFYICONDATAW pnid)
-{
- SystrayItem **ptrayItem = &systray;
-
- while (*ptrayItem) {
- if (SYSTRAY_ItemIsEqual(pnid, &(*ptrayItem)->notifyIcon)) {
- SystrayItem *next = (*ptrayItem)->nextTrayItem;
- TRACE("%p: %p %s\n", *ptrayItem, (*ptrayItem)->notifyIcon.hWnd, debugstr_w((*ptrayItem)->notifyIcon.szTip));
- SYSTRAY_ItemTerm(*ptrayItem);
-
- HeapFree(GetProcessHeap(),0,*ptrayItem);
- *ptrayItem = next;
-
- return TRUE;
- }
- ptrayItem = &((*ptrayItem)->nextTrayItem);
- }
+WINE_DEFAULT_DEBUG_CHANNEL(systray);
- return FALSE; /* not found */
-}
+static const WCHAR classname[] = /* Shell_TrayWnd */ {'S','h','e','l','l','_','T','r','a','y','W','n','d','\0'};
-static LRESULT CALLBACK SYSTRAY_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+/*************************************************************************
+ * Shell_NotifyIcon [SHELL32.296]
+ * Shell_NotifyIconA [SHELL32.297]
+ */
+BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA pnid)
{
- HDC hdc;
- PAINTSTRUCT ps;
-
- switch (message) {
- case WM_PAINT:
- {
- RECT rc;
- SystrayItem *ptrayItem = systray;
-
- while (ptrayItem) {
- if (ptrayItem->hWnd==hWnd) {
- if (ptrayItem->notifyIcon.hIcon) {
- hdc = BeginPaint(hWnd, &ps);
- GetClientRect(hWnd, &rc);
- if (!DrawIconEx(hdc, rc.left+ICON_BORDER, rc.top+ICON_BORDER, ptrayItem->notifyIcon.hIcon,
- ICON_SIZE, ICON_SIZE, 0, 0, DI_DEFAULTSIZE|DI_NORMAL)) {
- ERR("Paint(SystrayWindow %p) failed -> removing SystrayItem %p\n", hWnd, ptrayItem);
- SYSTRAY_Delete(&ptrayItem->notifyIcon);
- }
- }
- break;
- }
- ptrayItem = ptrayItem->nextTrayItem;
+ NOTIFYICONDATAW nidW;
+ INT cbSize;
+
+ /* Validate the cbSize as Windows XP does */
+ if (pnid->cbSize != NOTIFYICONDATAA_V1_SIZE &&
+ pnid->cbSize != NOTIFYICONDATAA_V2_SIZE &&
+ pnid->cbSize != NOTIFYICONDATAA_V3_SIZE &&
+ pnid->cbSize != sizeof(NOTIFYICONDATAA))
+ {
+ WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n",
+ pnid->cbSize, NOTIFYICONDATAA_V1_SIZE);
+ cbSize = NOTIFYICONDATAA_V1_SIZE;
}
- EndPaint(hWnd, &ps);
- }
- break;
-
- case WM_MOUSEMOVE:
- case WM_LBUTTONDOWN:
- case WM_LBUTTONUP:
- case WM_RBUTTONDOWN:
- case WM_RBUTTONUP:
- case WM_MBUTTONDOWN:
- case WM_MBUTTONUP:
- {
- MSG msg;
- SystrayItem *ptrayItem = systray;
-
- while ( ptrayItem ) {
- if (ptrayItem->hWnd == hWnd) {
- msg.hwnd=hWnd;
- msg.message=message;
- msg.wParam=wParam;
- msg.lParam=lParam;
- msg.time = GetMessageTime ();
- msg.pt.x = LOWORD(GetMessagePos ());
- msg.pt.y = HIWORD(GetMessagePos ());
-
- SendMessageW(ptrayItem->hWndToolTip, TTM_RELAYEVENT, 0, (LPARAM)&msg);
- }
- ptrayItem = ptrayItem->nextTrayItem;
- }
- }
- /* fall through */
-
- case WM_LBUTTONDBLCLK:
- case WM_RBUTTONDBLCLK:
- case WM_MBUTTONDBLCLK:
- {
- SystrayItem *ptrayItem = systray;
-
- while (ptrayItem) {
- if (ptrayItem->hWnd == hWnd) {
- if (ptrayItem->notifyIcon.hWnd && ptrayItem->notifyIcon.uCallbackMessage) {
- if (!PostMessageW(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
- (WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)message)) {
- ERR("PostMessage(SystrayWindow %p) failed -> removing SystrayItem %p\n", hWnd, ptrayItem);
- SYSTRAY_Delete(&ptrayItem->notifyIcon);
- }
+ else
+ cbSize = pnid->cbSize;
+
+ ZeroMemory(&nidW, sizeof(nidW));
+ nidW.cbSize = sizeof(nidW);
+ nidW.hWnd = pnid->hWnd;
+ nidW.uID = pnid->uID;
+ nidW.uFlags = pnid->uFlags;
+ nidW.uCallbackMessage = pnid->uCallbackMessage;
+ nidW.hIcon = pnid->hIcon;
+
+ /* szTip */
+ if (pnid->uFlags & NIF_TIP)
+ MultiByteToWideChar(CP_ACP, 0, pnid->szTip, -1, nidW.szTip, sizeof(nidW.szTip)/sizeof(WCHAR));
+
+ if (cbSize >= NOTIFYICONDATAA_V2_SIZE)
+ {
+ nidW.dwState = pnid->dwState;
+ nidW.dwStateMask = pnid->dwStateMask;
+
+ /* szInfo, szInfoTitle */
+ if (pnid->uFlags & NIF_INFO)
+ {
+ MultiByteToWideChar(CP_ACP, 0, pnid->szInfo, -1, nidW.szInfo, sizeof(nidW.szInfo)/sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, pnid->szInfoTitle, -1, nidW.szInfoTitle, sizeof(nidW.szInfoTitle)/sizeof(WCHAR));
}
- break;
- }
- ptrayItem = ptrayItem->nextTrayItem;
- }
- }
- break;
-
- default:
- return (DefWindowProcW(hWnd, message, wParam, lParam));
- }
- return (0);
-
-}
-
-
-static BOOL SYSTRAY_RegisterClass(void)
-{
- WNDCLASSW wc;
- static const WCHAR WineSystrayW[] = { 'W','i','n','e','S','y','s','t','r','a','y',0 };
-
- wc.style = CS_SAVEBITS|CS_DBLCLKS;
- wc.lpfnWndProc = SYSTRAY_WndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = 0;
- wc.hIcon = 0;
- wc.hCursor = LoadCursorW(0, (LPWSTR)IDC_ARROW);
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- wc.lpszMenuName = NULL;
- wc.lpszClassName = WineSystrayW;
-
- if (!RegisterClassW(&wc)) {
- ERR("RegisterClass(WineSystray) failed\n");
- return FALSE;
- }
- return TRUE;
-}
-
-
-static BOOL SYSTRAY_ItemInit(SystrayItem *ptrayItem)
-{
- RECT rect;
- static const WCHAR WineSystrayW[] = { 'W','i','n','e','S','y','s','t','r','a','y',0 };
- static const WCHAR Wine_SystrayW[] = { 'W','i','n','e','-','S','y','s','t','r','a','y',0 };
- /* Register the class if this is our first tray item. */
- if ( firstSystray ) {
- firstSystray = FALSE;
- if ( !SYSTRAY_RegisterClass() ) {
- ERR( "RegisterClass(WineSystray) failed\n" );
- return FALSE;
+ nidW.u.uTimeout = pnid->u.uTimeout;
+ nidW.dwInfoFlags = pnid->dwInfoFlags;
}
- }
+
+ if (cbSize >= NOTIFYICONDATAA_V3_SIZE)
+ nidW.guidItem = pnid->guidItem;
- /* Initialize the window size. */
- rect.left = 0;
- rect.top = 0;
- rect.right = ICON_SIZE+2*ICON_BORDER;
- rect.bottom = ICON_SIZE+2*ICON_BORDER;
-
- ZeroMemory( ptrayItem, sizeof(SystrayItem) );
- /* Create tray window for icon. */
- ptrayItem->hWnd = CreateWindowExW( WS_EX_TRAYWINDOW,
- WineSystrayW, Wine_SystrayW,
- WS_VISIBLE,
- CW_USEDEFAULT, CW_USEDEFAULT,
- rect.right-rect.left, rect.bottom-rect.top,
- 0, 0, 0, 0 );
- if ( !ptrayItem->hWnd ) {
- ERR( "CreateWindow(WineSystray) failed\n" );
- return FALSE;
- }
-
- /* Create tooltip for icon. */
- ptrayItem->hWndToolTip = CreateWindowW( TOOLTIPS_CLASSW,NULL,TTS_ALWAYSTIP,
- CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT,
- ptrayItem->hWnd, 0, 0, 0 );
- if ( !ptrayItem->hWndToolTip ) {
- ERR( "CreateWindow(TOOLTIP) failed\n" );
- return FALSE;
- }
- return TRUE;
-}
-
-
-static void SYSTRAY_ItemSetMessage(SystrayItem *ptrayItem, UINT uCallbackMessage)
-{
- ptrayItem->notifyIcon.uCallbackMessage = uCallbackMessage;
-}
-
-
-static void SYSTRAY_ItemSetIcon(SystrayItem *ptrayItem, HICON hIcon)
-{
- if(ptrayItem->notifyIcon.hIcon)
- DestroyIcon(ptrayItem->notifyIcon.hIcon);
- ptrayItem->notifyIcon.hIcon = CopyIcon(hIcon);
- InvalidateRect(ptrayItem->hWnd, NULL, TRUE);
-}
-
-
-static void SYSTRAY_ItemSetTip(SystrayItem *ptrayItem, const WCHAR* szTip, int modify)
-{
- TTTOOLINFOW ti;
-
- lstrcpynW(ptrayItem->notifyIcon.szTip, szTip, sizeof(ptrayItem->notifyIcon.szTip)/sizeof(WCHAR));
-
- ti.cbSize = sizeof(TTTOOLINFOW);
- ti.uFlags = 0;
- ti.hwnd = ptrayItem->hWnd;
- ti.hinst = 0;
- ti.uId = 0;
- ti.lpszText = ptrayItem->notifyIcon.szTip;
- ti.rect.left = 0;
- ti.rect.top = 0;
- ti.rect.right = ICON_SIZE+2*ICON_BORDER;
- ti.rect.bottom = ICON_SIZE+2*ICON_BORDER;
-
- if(modify)
- SendMessageW(ptrayItem->hWndToolTip, TTM_UPDATETIPTEXTW, 0, (LPARAM)&ti);
- else
- SendMessageW(ptrayItem->hWndToolTip, TTM_ADDTOOLW, 0, (LPARAM)&ti);
-}
-
-
-static BOOL SYSTRAY_Add(PNOTIFYICONDATAW pnid)
-{
- SystrayItem **ptrayItem = &systray;
- static const WCHAR emptyW[] = { 0 };
-
- /* Find last element. */
- while( *ptrayItem ) {
- if ( SYSTRAY_ItemIsEqual(pnid, &(*ptrayItem)->notifyIcon) )
- return FALSE;
- ptrayItem = &((*ptrayItem)->nextTrayItem);
- }
- /* Allocate SystrayItem for element and add to end of list. */
- (*ptrayItem) = HeapAlloc(GetProcessHeap(),0,sizeof(SystrayItem));
-
- /* Initialize and set data for the tray element. */
- SYSTRAY_ItemInit( (*ptrayItem) );
- (*ptrayItem)->notifyIcon.uID = pnid->uID; /* only needed for callback message */
- (*ptrayItem)->notifyIcon.hWnd = pnid->hWnd; /* only needed for callback message */
- SYSTRAY_ItemSetIcon (*ptrayItem, (pnid->uFlags&NIF_ICON) ?pnid->hIcon :0);
- SYSTRAY_ItemSetMessage(*ptrayItem, (pnid->uFlags&NIF_MESSAGE)?pnid->uCallbackMessage:0);
- SYSTRAY_ItemSetTip (*ptrayItem, (pnid->uFlags&NIF_TIP) ?pnid->szTip :emptyW, FALSE);
-
- TRACE("%p: %p %s\n", (*ptrayItem), (*ptrayItem)->notifyIcon.hWnd,
- debugstr_w((*ptrayItem)->notifyIcon.szTip));
- return TRUE;
-}
-
-
-static BOOL SYSTRAY_Modify(PNOTIFYICONDATAW pnid)
-{
- SystrayItem *ptrayItem = systray;
-
- while ( ptrayItem ) {
- if ( SYSTRAY_ItemIsEqual(pnid, &ptrayItem->notifyIcon) ) {
- if (pnid->uFlags & NIF_ICON)
- SYSTRAY_ItemSetIcon(ptrayItem, pnid->hIcon);
- if (pnid->uFlags & NIF_MESSAGE)
- SYSTRAY_ItemSetMessage(ptrayItem, pnid->uCallbackMessage);
- if (pnid->uFlags & NIF_TIP)
- SYSTRAY_ItemSetTip(ptrayItem, pnid->szTip, TRUE);
-
- TRACE("%p: %p %s\n", ptrayItem, ptrayItem->notifyIcon.hWnd, debugstr_w(ptrayItem->notifyIcon.szTip));
- return TRUE;
- }
- ptrayItem = ptrayItem->nextTrayItem;
- }
- return FALSE; /* not found */
-}
-
-
-/*************************************************************************
- *
- */
-BOOL SYSTRAY_Init(void)
-{
- return TRUE;
+ if (cbSize >= sizeof(NOTIFYICONDATAA))
+ nidW.hBalloonIcon = pnid->hBalloonIcon;
+ return Shell_NotifyIconW(dwMessage, &nidW);
}
/*************************************************************************
* Shell_NotifyIconW [SHELL32.298]
*/
-BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW pnid )
+BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW nid)
{
- BOOL flag=FALSE;
- TRACE("enter %p %d %ld\n", pnid->hWnd, pnid->uID, dwMessage);
- switch(dwMessage) {
- case NIM_ADD:
- flag = SYSTRAY_Add(pnid);
- break;
- case NIM_MODIFY:
- flag = SYSTRAY_Modify(pnid);
- break;
- case NIM_DELETE:
- flag = SYSTRAY_Delete(pnid);
- break;
- }
- TRACE("leave %p %d %ld=%d\n", pnid->hWnd, pnid->uID, dwMessage, flag);
- return flag;
-}
+ HWND tray;
+ COPYDATASTRUCT cds;
+ char *buffer = NULL;
+
+ TRACE("dwMessage = %d, nid->cbSize=%d\n", dwMessage, nid->cbSize);
+
+ /* Validate the cbSize so that WM_COPYDATA doesn't crash the application */
+ if (nid->cbSize != NOTIFYICONDATAW_V1_SIZE &&
+ nid->cbSize != NOTIFYICONDATAW_V2_SIZE &&
+ nid->cbSize != NOTIFYICONDATAW_V3_SIZE &&
+ nid->cbSize != sizeof(NOTIFYICONDATAW))
+ {
+ NOTIFYICONDATAW newNid;
+
+ WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n",
+ nid->cbSize, NOTIFYICONDATAW_V1_SIZE);
+ CopyMemory(&newNid, nid, NOTIFYICONDATAW_V1_SIZE);
+ newNid.cbSize = NOTIFYICONDATAW_V1_SIZE;
+ return Shell_NotifyIconW(dwMessage, &newNid);
+ }
-/*************************************************************************
- * Shell_NotifyIconA [SHELL32.297]
- * Shell_NotifyIcon [SHELL32.296]
- */
-BOOL WINAPI Shell_NotifyIconA (DWORD dwMessage, PNOTIFYICONDATAA pnid )
-{
- BOOL ret;
+ tray = FindWindowExW(0, NULL, classname, NULL);
+ if (!tray) return FALSE;
+
+ cds.dwData = dwMessage;
+
+ /* FIXME: if statement only needed because we don't support interprocess
+ * icon handles */
+ if (nid->uFlags & NIF_ICON)
+ {
+ ICONINFO iconinfo;
+ BITMAP bmMask;
+ BITMAP bmColour;
+ LONG cbMaskBits;
+ LONG cbColourBits;
+
+ if (!GetIconInfo(nid->hIcon, &iconinfo))
+ goto noicon;
+
+ if (!GetObjectW(iconinfo.hbmMask, sizeof(bmMask), &bmMask) ||
+ !GetObjectW(iconinfo.hbmColor, sizeof(bmColour), &bmColour))
+ {
+ DeleteObject(iconinfo.hbmMask);
+ DeleteObject(iconinfo.hbmColor);
+ goto noicon;
+ }
+
+ cbMaskBits = (bmMask.bmPlanes * bmMask.bmWidth * bmMask.bmHeight * bmMask.bmBitsPixel) / 8;
+ cbColourBits = (bmColour.bmPlanes * bmColour.bmWidth * bmColour.bmHeight * bmColour.bmBitsPixel) / 8;
+ cds.cbData = nid->cbSize + 2*sizeof(BITMAP) + cbMaskBits + cbColourBits;
+ buffer = HeapAlloc(GetProcessHeap(), 0, cds.cbData);
+ if (!buffer)
+ {
+ DeleteObject(iconinfo.hbmMask);
+ DeleteObject(iconinfo.hbmColor);
+ return FALSE;
+ }
+ cds.lpData = buffer;
+
+ memcpy(buffer, nid, nid->cbSize);
+ buffer += nid->cbSize;
+ memcpy(buffer, &bmMask, sizeof(bmMask));
+ buffer += sizeof(bmMask);
+ memcpy(buffer, &bmColour, sizeof(bmColour));
+ buffer += sizeof(bmColour);
+ GetBitmapBits(iconinfo.hbmMask, cbMaskBits, buffer);
+ buffer += cbMaskBits;
+ GetBitmapBits(iconinfo.hbmColor, cbColourBits, buffer);
+ buffer += cbColourBits;
+
+ DeleteObject(iconinfo.hbmMask);
+ DeleteObject(iconinfo.hbmColor);
+ }
+ else
+ {
+noicon:
+ cds.cbData = nid->cbSize;
+ cds.lpData = nid;
+ }
- PNOTIFYICONDATAW p = HeapAlloc(GetProcessHeap(),0,sizeof(NOTIFYICONDATAW));
- memcpy(p, pnid, sizeof(NOTIFYICONDATAW));
- MultiByteToWideChar( CP_ACP, 0, pnid->szTip, -1, p->szTip, sizeof(p->szTip)/sizeof(WCHAR) );
- p->szTip[sizeof(p->szTip)/sizeof(WCHAR)-1] = 0;
+ SendMessageW(tray, WM_COPYDATA, (WPARAM)nid->hWnd, (LPARAM)&cds);
- ret = Shell_NotifyIconW(dwMessage, p );
+ /* FIXME: if statement only needed because we don't support interprocess
+ * icon handles */
+ HeapFree(GetProcessHeap(), 0, buffer);
- HeapFree(GetProcessHeap(),0,p);
- return ret;
+ return TRUE;
}
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_UNDOCSHELL_H
BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2);
-BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
+BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID *sOtherDirs);
/****************************************************************************
* Shell Namespace Routines