ReactOS 0.4.17-dev-1266-g5d5a280
utility.cpp File Reference
#include "objects.h"
#include <strsafe.h>
#include <wine/debug.h>
Include dependency graph for utility.cpp:

Go to the source code of this file.

Classes

struct  ADDFAVORITEDIALOGDATA
 

Macros

#define PATH_VALID_ELEMENT
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shdocvw)
 
static INT_PTR GetMenuItemIdByPos (HMENU hMenu, UINT Pos)
 
static BOOL IsMenuSeparator (HMENU hMenu, UINT Pos)
 
EXTERN_C HRESULT SHELL_GetIDListFromObject (IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
 
static HRESULT SHELL_CompareAbsoluteIDs (LPARAM lParam, PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b)
 
EXTERN_C BOOL SHELL_IsEqualAbsoluteID (PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b)
 
EXTERN_C BOOL SHELL_IsVerb (IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb)
 
static int SHELL_FindVerbPos (IContextMenu *pcm, UINT idCmdFirst, HMENU hMenu, LPCWSTR Verb)
 
EXTERN_C VOID SHELL_RemoveVerb (IContextMenu *pcm, UINT idCmdFirst, HMENU hMenu, LPCWSTR Verb)
 
EXTERN_C BOOL _ILIsDesktop (LPCITEMIDLIST pidl)
 
EXTERN_C BOOL WINAPI IEILIsEqual (_In_ LPCITEMIDLIST pidl1, _In_ LPCITEMIDLIST pidl2, _In_ BOOL bUnknown)
 
static VOID SHDOCVW_PathDeleteInvalidChars (LPWSTR pszDisplayName)
 
static HRESULT SHDOCVW_CreateShortcut (_In_ LPCWSTR pszLnkFileName, _In_ PCIDLIST_ABSOLUTE pidlTarget, _In_opt_ LPCWSTR pszDescription)
 
static LRESULT AddFavoriteDialogProc (_In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
 
static int CALLBACK AddFavoriteDialogCallback (_In_ HWND hwnd, _In_ UINT uMsg, _In_ LPARAM lParam, _In_ LPARAM lpData)
 
static HRESULT AddFavoriteDialog (_In_ HWND hwnd, _Inout_ PWSTR pszDir, _Inout_ PWSTR pszTitle, _In_ PCWSTR pszText)
 
EXTERN_C HRESULT WINAPI AddUrlToFavorites (_In_ HWND hwnd, _In_ LPCWSTR pszUrlW, _In_ LPCWSTR pszTitleW, _In_ BOOL NoUI)
 

Macro Definition Documentation

◆ PATH_VALID_ELEMENT

#define PATH_VALID_ELEMENT
Value:
( \
)
#define PATH_CHAR_CLASS_OTHER_VALID
Definition: path.c:2115
#define PATH_CHAR_CLASS_SPACE
Definition: path.c:2114
#define PATH_CHAR_CLASS_SEMICOLON
Definition: path.c:2112
#define PATH_CHAR_CLASS_COMMA
Definition: path.c:2113
#define PATH_CHAR_CLASS_DOT
Definition: path.c:2109

Function Documentation

◆ _ILIsDesktop()

EXTERN_C BOOL _ILIsDesktop ( LPCITEMIDLIST  pidl)
inline

Definition at line 123 of file utility.cpp.

124{
125 return (pidl == NULL || pidl->mkid.cb == 0);
126}
#define NULL
Definition: types.h:112

◆ AddFavoriteDialog()

static HRESULT AddFavoriteDialog ( _In_ HWND  hwnd,
_Inout_ PWSTR  pszDir,
_Inout_ PWSTR  pszTitle,
_In_ PCWSTR  pszText 
)
static

Definition at line 249 of file utility.cpp.

254{
255 CComHeapPtr<ITEMIDLIST> pidlBaseDir, pidl;
256 HRESULT hr = SHParseDisplayName(pszDir, NULL, &pidlBaseDir, 0, NULL);
257 if (FAILED(hr))
258 return hr;
259
262 WCHAR szBuf[MAX_PATH];
263 *szBuf = UNICODE_NULL;
264 BROWSEINFOW info = { hwnd, pidlBaseDir, szBuf, pszText, flags, AddFavoriteDialogCallback, (LPARAM)&data };
266 if (!pidlResult)
267 return S_FALSE;
268 pidl.Attach(pidlResult);
269 return SHGetPathFromIDListW(pidl, pszDir) ? S_OK : E_FAIL;
270}
EXTERN_C LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi)
Definition: brfolder.cpp:1464
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
#define MAX_PATH
Definition: compat.h:34
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
Definition: path.c:1677
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLbitfield flags
Definition: glext.h:7161
unsigned int UINT
Definition: sysinfo.c:13
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
LONG_PTR LPARAM
Definition: minwindef.h:175
#define UNICODE_NULL
short WCHAR
Definition: pedump.c:58
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
Definition: pidl.c:1548
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1496
_In_ LPCSTR pszDir
Definition: shellapi.h:612
#define BIF_RETURNONLYFSDIRS
Definition: shlobj.h:1262
#define BIF_USENEWUI
Definition: shlobj.h:1269
#define BIF_EDITBOX
Definition: shlobj.h:1266
static int CALLBACK AddFavoriteDialogCallback(_In_ HWND hwnd, _In_ UINT uMsg, _In_ LPARAM lParam, _In_ LPARAM lpData)
Definition: utility.cpp:222
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define S_FALSE
Definition: winerror.h:3451

Referenced by AddUrlToFavorites().

◆ AddFavoriteDialogCallback()

static int CALLBACK AddFavoriteDialogCallback ( _In_ HWND  hwnd,
_In_ UINT  uMsg,
_In_ LPARAM  lParam,
_In_ LPARAM  lpData 
)
static

Definition at line 222 of file utility.cpp.

227{
229 switch (uMsg)
230 {
231 case BFFM_INITIALIZED:
234 data.hEdit = FindWindowExW(hwnd, NULL, L"EDIT", NULL);
235 SendMessageW(hwnd, WM_SETTEXT, 0, (LPARAM)data.pszCaption);
237 SendMessageW(data.hEdit, WM_SETTEXT, 0, (LPARAM)data.pszName); // Initialize
238 break;
239 case BFFM_SELCHANGED:
240 SendMessageW(data.hEdit, WM_SETTEXT, 0, (LPARAM)data.pszName); // Restore
241 break;
243 return TRUE;
244 }
245 return 0;
246}
#define TRUE
Definition: types.h:120
#define L(x)
Definition: resources.c:13
UINT_PTR WPARAM
Definition: minwindef.h:174
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define WM_NEXTDLGCTL
Definition: winuser.h:1671
#define WM_SETTEXT
Definition: winuser.h:1645
HWND WINAPI FindWindowExW(_In_opt_ HWND, _In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:3014
#define SetWindowLongPtrW
Definition: winuser.h:5512
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define BFFM_SELCHANGED
Definition: shlobj.h:1282
#define BFFM_VALIDATEFAILED
Definition: shlobj.h:1302
#define BFFM_INITIALIZED
Definition: shlobj.h:1281
#define GWLP_WNDPROC
Definition: treelist.c:66
#define GWLP_USERDATA
Definition: treelist.c:63
static LRESULT AddFavoriteDialogProc(_In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
Definition: utility.cpp:198

Referenced by AddFavoriteDialog().

◆ AddFavoriteDialogProc()

static LRESULT AddFavoriteDialogProc ( _In_ HWND  hwnd,
_In_ UINT  uMsg,
_In_ WPARAM  wParam,
_In_ LPARAM  lParam 
)
static

Definition at line 198 of file utility.cpp.

203{
205 NMHDR *pHdr = (NMHDR*)lParam;
206 if (uMsg == WM_NOTIFY)
207 data.IgnoreChanges |= (pHdr->code == NM_CLICK || pHdr->code == NM_SETFOCUS); // Ignore changes from the tree
208 if (uMsg == WM_COMMAND && HIWORD(wParam) == EN_SETFOCUS)
209 data.IgnoreChanges = (HWND)lParam != data.hEdit; // Ignore changes in the tree rename edit
210 if (uMsg == WM_COMMAND && HIWORD(wParam) == EN_UPDATE && (HWND)lParam == data.hEdit && !data.IgnoreChanges)
211 {
212 SendMessageW(data.hEdit, WM_GETTEXT, MAX_PATH, (LPARAM)data.pszName); // Save user input
213 BOOL bad = FALSE;
214 for (PWSTR p = data.pszName; *p; ++p)
217 }
218 return CallWindowProcW(data.pOrgProc, hwnd, uMsg, wParam, lParam);
219}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define FALSE
Definition: types.h:117
HANDLE HWND
Definition: compat.h:19
BOOL WINAPI PathIsValidCharW(WCHAR c, DWORD class)
Definition: path.c:2197
unsigned int BOOL
Definition: ntddk_ex.h:94
GLfloat GLfloat p
Definition: glext.h:8902
#define NM_CLICK
Definition: commctrl.h:130
#define NM_SETFOCUS
Definition: commctrl.h:135
#define GetWindowLongPtrW
Definition: winuser.h:4983
#define EN_SETFOCUS
Definition: winuser.h:2056
#define EN_UPDATE
Definition: winuser.h:2057
#define WM_COMMAND
Definition: winuser.h:1768
#define WM_GETTEXT
Definition: winuser.h:1646
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_NOTIFY
Definition: richedit.h:61
#define BFFM_ENABLEOK
Definition: shlobj.h:1289
UINT code
Definition: winuser.h:3267
uint16_t * PWSTR
Definition: typedefs.h:56
#define HIWORD(l)
Definition: typedefs.h:247
#define PATH_VALID_ELEMENT

Referenced by AddFavoriteDialogCallback().

◆ AddUrlToFavorites()

EXTERN_C HRESULT WINAPI AddUrlToFavorites ( _In_ HWND  hwnd,
_In_ LPCWSTR  pszUrlW,
_In_ LPCWSTR  pszTitleW,
_In_ BOOL  NoUI 
)

Definition at line 276 of file utility.cpp.

281{
282 TRACE("%p, %s, %s, %d\n", hwnd, wine_dbgstr_w(pszUrlW), wine_dbgstr_w(pszTitleW), NoUI);
283
284 if (!pszUrlW || !pszTitleW)
285 return E_INVALIDARG;
286
287 CCoInit CoInit;
288 HRESULT hr = S_OK;
289 BOOL IsUrl = PathIsURLW(pszUrlW);
290 PCWSTR pszExt = IsUrl ? L".url" : L".lnk";
293
294 WCHAR szDir[MAX_PATH];
296 return E_FAIL;
297
298 if (!NoUI)
299 {
300 PCWSTR pszText = IsUrl ? pszUrlW : PathFindFileNameW(pszUrlW);
301 if ((hr = AddFavoriteDialog(hwnd, szDir, szTitle, pszText)) == S_FALSE)
302 return hr;
303 }
305
306 WCHAR szLnk[MAX_PATH * 2];
307 if (SUCCEEDED(hr))
308 hr = StringCchPrintfW(szLnk, _countof(szLnk), L"%s\\%s%s", szDir, szTitle, pszExt);
309
310 if (IsUrl && SUCCEEDED(hr))
311 {
312 // TODO: For the !NoUI case, we should ask the user if they want to overwrite if the file already exists
313 hr = WritePrivateProfileStringW(L"InternetShortcut", L"URL", pszUrlW, szLnk) ? S_OK : E_FAIL;
314 }
315 else if (SUCCEEDED(hr))
316 {
317 BOOL bMustCopy;
318 if (NoUI)
319 hr = SHGetNewLinkInfoW(pszUrlW, szDir, szLnk, &bMustCopy, 0) ? S_OK : E_FAIL;
320
321 CComHeapPtr<ITEMIDLIST> pidl;
323 hr = SHParseDisplayName(pszUrlW, NULL, &pidl, 0, NULL);
325 hr = SHDOCVW_CreateShortcut(szLnk, pidl, NULL);
326 }
327
328 if (FAILED(hr) && !NoUI)
330 return hr;
331}
#define E_INVALIDARG
Definition: ddrawi.h:101
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
Definition: profile.c:1453
BOOL WINAPI PathIsURLW(const WCHAR *path)
Definition: path.c:3214
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:4394
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define wine_dbgstr_w
Definition: kernel32.h:34
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName, BOOL *pfMustCopy, UINT uFlags)
Definition: shellord.c:2735
#define SHELL_ErrorBox
Definition: shellutils.h:126
#define CSIDL_FAVORITES
Definition: shlobj.h:2226
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
const uint16_t * PCWSTR
Definition: typedefs.h:57
static HRESULT AddFavoriteDialog(_In_ HWND hwnd, _Inout_ PWSTR pszDir, _Inout_ PWSTR pszTitle, _In_ PCWSTR pszText)
Definition: utility.cpp:249
static HRESULT SHDOCVW_CreateShortcut(_In_ LPCWSTR pszLnkFileName, _In_ PCIDLIST_ABSOLUTE pidlTarget, _In_opt_ LPCWSTR pszDescription)
Definition: utility.cpp:162
static VOID SHDOCVW_PathDeleteInvalidChars(LPWSTR pszDisplayName)
Definition: utility.cpp:146

Referenced by AddItemToFavorites().

◆ GetMenuItemIdByPos()

static INT_PTR GetMenuItemIdByPos ( HMENU  hMenu,
UINT  Pos 
)
inlinestatic

Definition at line 16 of file utility.cpp.

17{
18 MENUITEMINFOW mii;
19 mii.cbSize = FIELD_OFFSET(MENUITEMINFOW, hbmpItem); /* USER32 version agnostic */
20 mii.fMask = MIIM_ID; /* GetMenuItemID does not handle sub-menus, this does */
21 mii.cch = 0;
22 return GetMenuItemInfoW(hMenu, Pos, TRUE, &mii) ? mii.wID : -1;
23}
ush Pos
Definition: deflate.h:92
#define MIIM_ID
Definition: winuser.h:733
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255

Referenced by SHELL_FindVerbPos().

◆ IEILIsEqual()

EXTERN_C BOOL WINAPI IEILIsEqual ( _In_ LPCITEMIDLIST  pidl1,
_In_ LPCITEMIDLIST  pidl2,
_In_ BOOL  bUnknown 
)

Definition at line 132 of file utility.cpp.

136{
137 UINT cb1 = ILGetSize(pidl1), cb2 = ILGetSize(pidl2);
138 if (cb1 == cb2 && memcmp(pidl1, pidl2, cb1) == 0)
139 return TRUE;
140
141 FIXME("%p, %p\n", pidl1, pidl2);
142 return FALSE;
143}
#define FIXME(fmt,...)
Definition: precomp.h:53
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
Definition: pidl.c:941

Referenced by CMruBase::_IsEqual().

◆ IsMenuSeparator()

static BOOL IsMenuSeparator ( HMENU  hMenu,
UINT  Pos 
)
inlinestatic

Definition at line 26 of file utility.cpp.

27{
28 MENUITEMINFOW mii;
29 mii.cbSize = FIELD_OFFSET(MENUITEMINFOW, hbmpItem); /* USER32 version agnostic */
30 mii.fMask = MIIM_FTYPE;
31 mii.cch = 0;
32 return GetMenuItemInfoW(hMenu, Pos, TRUE, &mii) && (mii.fType & MFT_SEPARATOR);
33}
#define MIIM_FTYPE
Definition: winuser.h:740
#define MFT_SEPARATOR
Definition: winuser.h:755

Referenced by SHELL_RemoveVerb().

◆ SHDOCVW_CreateShortcut()

static HRESULT SHDOCVW_CreateShortcut ( _In_ LPCWSTR  pszLnkFileName,
_In_ PCIDLIST_ABSOLUTE  pidlTarget,
_In_opt_ LPCWSTR  pszDescription 
)
static

Definition at line 162 of file utility.cpp.

166{
167 HRESULT hr;
168
169 CComPtr<IShellLink> psl;
170 hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
171 IID_PPV_ARG(IShellLink, &psl));
173 return hr;
174
175 psl->SetIDList(pidlTarget);
176
177 if (pszDescription)
178 psl->SetDescription(pszDescription);
179
180 CComPtr<IPersistFile> ppf;
183 return hr;
184
185 return ppf->Save(pszLnkFileName, TRUE);
186}
#define IID_PPV_ARG(Itype, ppType)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)

Referenced by AddUrlToFavorites().

◆ SHDOCVW_PathDeleteInvalidChars()

static VOID SHDOCVW_PathDeleteInvalidChars ( LPWSTR  pszDisplayName)
static

Definition at line 146 of file utility.cpp.

147{
148#define PATH_VALID_ELEMENT ( \
149 PATH_CHAR_CLASS_DOT | PATH_CHAR_CLASS_SEMICOLON | PATH_CHAR_CLASS_COMMA | \
150 PATH_CHAR_CLASS_SPACE | PATH_CHAR_CLASS_OTHER_VALID \
151)
152 PWCHAR pch, pchSrc;
153 for (pch = pchSrc = pszDisplayName; *pchSrc; ++pchSrc)
154 {
156 *pch++ = *pchSrc;
157 }
158 *pch = UNICODE_NULL;
159}
#define pch(ap)
Definition: match.c:418
uint16_t * PWCHAR
Definition: typedefs.h:56

Referenced by AddUrlToFavorites().

◆ SHELL_CompareAbsoluteIDs()

static HRESULT SHELL_CompareAbsoluteIDs ( LPARAM  lParam,
PCIDLIST_ABSOLUTE  a,
PCIDLIST_ABSOLUTE  b 
)
static

Definition at line 58 of file utility.cpp.

59{
60 IShellFolder *psf;
62 if (FAILED(hr))
63 return hr;
64 hr = psf->CompareIDs(lParam, a, b);
65 psf->Release();
66 return hr;
67}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
HRESULT CompareIDs([in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE pidl2)
ULONG Release()

Referenced by SHELL_IsEqualAbsoluteID().

◆ SHELL_FindVerbPos()

static int SHELL_FindVerbPos ( IContextMenu *  pcm,
UINT  idCmdFirst,
HMENU  hMenu,
LPCWSTR  Verb 
)
static

Definition at line 93 of file utility.cpp.

94{
95 for (UINT i = 0, c = GetMenuItemCount(hMenu); i < c; ++i)
96 {
97 INT_PTR id = GetMenuItemIdByPos(hMenu, i);
98 if (id != -1 && SHELL_IsVerb(pcm, id - idCmdFirst, Verb))
99 return i;
100 }
101 return -1;
102}
const GLubyte * c
Definition: glext.h:8905
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define c
Definition: ke_i.h:80
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
int32_t INT_PTR
Definition: typedefs.h:64
static INT_PTR GetMenuItemIdByPos(HMENU hMenu, UINT Pos)
Definition: utility.cpp:16
EXTERN_C BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb)
Definition: utility.cpp:76

Referenced by SHELL_RemoveVerb().

◆ SHELL_GetIDListFromObject()

EXTERN_C HRESULT SHELL_GetIDListFromObject ( IUnknown *  punk,
PIDLIST_ABSOLUTE *  ppidl 
)

Definition at line 36 of file utility.cpp.

37{
38#if DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA && 0 // FIXME: SHELL32 not ready yet
39 return SHGetIDListFromObject(punk, ppidl);
40#else
41 HRESULT hr;
42 IPersistFolder2 *pf2;
44 {
45 hr = pf2->GetCurFolder(ppidl);
46 pf2->Release();
47 }
48 IPersistIDList *pil;
50 {
51 hr = pil->GetIDList(ppidl);
52 pil->Release();
53 }
54 return hr;
55#endif
56}
HRESULT GetCurFolder([out] PIDLIST_ABSOLUTE *ppidl)
HRESULT GetIDList([out] PIDLIST_ABSOLUTE *ppidl)
HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
Definition: pidl.c:1682
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158

Referenced by SHDOCVW_GetCurrentLocationFromView().

◆ SHELL_IsEqualAbsoluteID()

EXTERN_C BOOL SHELL_IsEqualAbsoluteID ( PCIDLIST_ABSOLUTE  a,
PCIDLIST_ABSOLUTE  b 
)

Definition at line 70 of file utility.cpp.

71{
73}
#define SHCIDS_CANONICALONLY
Definition: shobjidl.idl:226
static HRESULT SHELL_CompareAbsoluteIDs(LPARAM lParam, PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b)
Definition: utility.cpp:58

◆ SHELL_IsVerb()

EXTERN_C BOOL SHELL_IsVerb ( IContextMenu *  pcm,
UINT_PTR  idCmd,
LPCWSTR  Verb 
)

Definition at line 76 of file utility.cpp.

77{
78 HRESULT hr;
79 WCHAR wide[MAX_PATH];
80 if (SUCCEEDED(hr = pcm->GetCommandString(idCmd, GCS_VERBW, NULL, (LPSTR)wide, _countof(wide))))
81 return !lstrcmpiW(wide, Verb);
82
83 CHAR ansi[_countof(wide)], buf[MAX_PATH];
85 {
86 if (SUCCEEDED(hr = pcm->GetCommandString(idCmd, GCS_VERBA, NULL, ansi, _countof(ansi))))
87 return !lstrcmpiA(ansi, buf);
88 }
89 return FALSE;
90}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4133
DWORD WINAPI SHUnicodeToAnsi(const WCHAR *src, char *dest, int dest_len)
Definition: main.c:1756
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
HRESULT GetCommandString([in] UINT_PTR idCmd, [in] UINT uType, [out] UINT *pwReserved, [out, size_is(cchMax)] LPSTR pszName, [in] UINT cchMax)
char CHAR
Definition: pedump.c:57
char * LPSTR
Definition: typedefs.h:51
static UINT WPARAM LPARAM BOOL ansi
Definition: misc.c:135

Referenced by SHELL_FindVerbPos().

◆ SHELL_RemoveVerb()

EXTERN_C VOID SHELL_RemoveVerb ( IContextMenu *  pcm,
UINT  idCmdFirst,
HMENU  hMenu,
LPCWSTR  Verb 
)

Definition at line 105 of file utility.cpp.

106{
107 int nPos = SHELL_FindVerbPos(pcm, idCmdFirst, hMenu, Verb);
108 if (nPos < 0)
109 return;
110 int nCount = GetMenuItemCount(hMenu);
111 BOOL bSepBefore = nPos && IsMenuSeparator(hMenu, nPos - 1);
112 BOOL bSepAfter = IsMenuSeparator(hMenu, nPos + 1);
113 if (DeleteMenu(hMenu, nPos, MF_BYPOSITION))
114 {
115 if ((bSepBefore && bSepAfter) || (bSepAfter && nPos == 0))
116 DeleteMenu(hMenu, nPos, MF_BYPOSITION);
117 else if (bSepBefore && nPos + 1 == nCount)
118 DeleteMenu(hMenu, nPos - 1, MF_BYPOSITION);
119 }
120}
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MF_BYPOSITION
Definition: winuser.h:203
static BOOL IsMenuSeparator(HMENU hMenu, UINT Pos)
Definition: utility.cpp:26
static int SHELL_FindVerbPos(IContextMenu *pcm, UINT idCmdFirst, HMENU hMenu, LPCWSTR Verb)
Definition: utility.cpp:93

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shdocvw  )