return OnPagerCalcSize(reinterpret_cast<LPNMPGCALCSIZE>(hdr));
case TBN_DROPDOWN:
- return OnCommand(reinterpret_cast<LPNMTOOLBAR>(hdr)->iItem, 0, theResult);
+ return ProcessClick(reinterpret_cast<LPNMTOOLBAR>(hdr)->iItem);
case TBN_HOTITEMCHANGE:
//return OnHotItemChange(reinterpret_cast<LPNMTBHOTITEM>(hdr), theResult);
return m_menuBand->_TrackContextMenu(contextMenu, pt.x, pt.y);
}
-HRESULT CMenuToolbarBase::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theResult)
+HRESULT CMenuToolbarBase::ProcessClick(INT iItem)
{
if (m_disableMouseTrack)
{
- *theResult = 1;
TRACE("Item click prevented by DisableMouseTrack\n");
return S_OK;
}
return S_FALSE;
}
- *theResult = 0;
-
- INT iItem = (INT)wParam;
-
if (PopupItem(iItem, FALSE) == S_OK)
{
TRACE("PopupItem returned S_OK\n");
return m_menuBand->_MenuItemHotTrack(MPOS_EXECUTE);
}
-HRESULT CMenuToolbarBase::MenuBarMouseDown(INT item)
+HRESULT CMenuToolbarBase::MenuBarMouseDown(INT iIndex)
{
- LRESULT theResult;
TBBUTTON btn;
if (m_initFlags & SMINIT_VERTICAL)
return S_OK;
- SendMessage(m_hwndToolbar, TB_GETBUTTON, item, reinterpret_cast<LPARAM>(&btn));
- return OnCommand(btn.idCommand, 0, &theResult);
+ ::SendMessageW(m_hwndToolbar, TB_GETBUTTON, iIndex, reinterpret_cast<LPARAM>(&btn));
+ return ProcessClick(btn.idCommand);
}
-HRESULT CMenuToolbarBase::MenuBarMouseUp(INT item)
+HRESULT CMenuToolbarBase::MenuBarMouseUp(INT iIndex)
{
- LRESULT theResult;
TBBUTTON btn;
if (!(m_initFlags & SMINIT_VERTICAL))
return S_OK;
- SendMessage(m_hwndToolbar, TB_GETBUTTON, item, reinterpret_cast<LPARAM>(&btn));
- return OnCommand(btn.idCommand, 0, &theResult);
+ ::SendMessageW(m_hwndToolbar, TB_GETBUTTON, iIndex, reinterpret_cast<LPARAM>(&btn));
+ return ProcessClick(btn.idCommand);
}
-HRESULT CMenuToolbarBase::ExecuteItem(INT iItem)
+HRESULT CMenuToolbarBase::PrepareExecuteItem(INT iItem)
{
this->m_menuBand->_KillPopupTimers();
- INT index;
- DWORD_PTR data;
-
- GetDataFromId(iItem, &index, &data);
+ m_executeItem = iItem;
+ return GetDataFromId(iItem, &m_executeIndex, &m_executeData);
+}
- return InternalExecuteItem(iItem, index, data);
+HRESULT CMenuToolbarBase::ExecuteItem()
+{
+ return InternalExecuteItem(m_executeItem, m_executeItem, m_executeData);
}
HRESULT CMenuToolbarBase::OnContextMenu(NMMOUSE * rclick)
HRESULT hr = m_menuBand->_CallCBWithItemId(info.wID, SMC_GETINFO, 0, reinterpret_cast<LPARAM>(sminfo));
if (FAILED_UNEXPECTEDLY(hr))
+ {
+ delete sminfo;
return hr;
+ }
AddButton(info.wID, info.dwTypeData, info.hSubMenu != NULL, sminfo->iIcon, reinterpret_cast<DWORD_PTR>(sminfo), last);
INT index = 0;
INT indexOpen = 0;
- STRRET sr = { STRRET_CSTR, { 0 } };
+ if (m_menuBand->_CallCBWithItemPidl(item, 0x10000000, 0, 0) == S_OK)
+ {
+ STRRET sr = { STRRET_CSTR, { 0 } };
- hr = m_shellFolder->GetDisplayNameOf(item, SIGDN_NORMALDISPLAY, &sr);
- if (FAILED_UNEXPECTEDLY(hr))
- return hr;
+ hr = m_shellFolder->GetDisplayNameOf(item, SIGDN_NORMALDISPLAY, &sr);
+ if (FAILED_UNEXPECTEDLY(hr))
+ return hr;
- StrRetToStr(&sr, NULL, &MenuString);
+ StrRetToStr(&sr, NULL, &MenuString);
- index = SHMapPIDLToSystemImageListIndex(m_shellFolder, item, &indexOpen);
+ index = SHMapPIDLToSystemImageListIndex(m_shellFolder, item, &indexOpen);
- LPCITEMIDLIST itemc = item;
+ LPCITEMIDLIST itemc = item;
- SFGAOF attrs = SFGAO_FOLDER;
- hr = m_shellFolder->GetAttributesOf(1, &itemc, &attrs);
+ SFGAOF attrs = SFGAO_FOLDER;
+ hr = m_shellFolder->GetAttributesOf(1, &itemc, &attrs);
- DWORD_PTR dwData = reinterpret_cast<DWORD_PTR>(ILClone(item));
+ DWORD_PTR dwData = reinterpret_cast<DWORD_PTR>(ILClone(item));
- // Fetch next item already, so we know if the current one is the last
- hr = eidl->Next(1, &item, NULL);
+ // Fetch next item already, so we know if the current one is the last
+ hr = eidl->Next(1, &item, NULL);
- AddButton(++i, MenuString, attrs & SFGAO_FOLDER, index, dwData, hr != S_OK);
+ AddButton(++i, MenuString, attrs & SFGAO_FOLDER, index, dwData, hr != S_OK);
- CoTaskMemFree(MenuString);
+ CoTaskMemFree(MenuString);
+ }
+ else
+ {
+ // Fetch next item here also
+ hr = eidl->Next(1, &item, NULL);
+ }
}
ILFree(item);
pidl = ILClone(m_idList);
if (!pidl)
{
+ ERR("ILClone failed!\n");
(*reinterpret_cast<IUnknown**>(ppv))->Release();
return E_FAIL;
}