mirror of
https://github.com/reactos/reactos.git
synced 2025-07-29 14:51:56 +00:00
[RSHELL]
* CMenuBand: Fix the keyboard navigation a bit. Still not fully working yet. * Show submenus a bit closer to the arrow, as Windows does. CORE-7881 svn path=/branches/shell-experiments/; revision=62323
This commit is contained in:
parent
9cf711a73f
commit
2902b1cf0c
2 changed files with 144 additions and 130 deletions
|
@ -314,7 +314,6 @@ HRESULT STDMETHODCALLTYPE CMenuBand::GetBandInfo(
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IDockingWindow */
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::ShowDW(BOOL fShow)
|
HRESULT STDMETHODCALLTYPE CMenuBand::ShowDW(BOOL fShow)
|
||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
@ -394,54 +393,6 @@ HRESULT STDMETHODCALLTYPE CMenuBand::UIActivateIO(BOOL fActivate, LPMSG lpMsg)
|
||||||
return S_FALSE;
|
return S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::HasFocusIO()
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::TranslateAcceleratorIO(LPMSG lpMsg)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::IsDirty()
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::Load(IStream *pStm)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::Save(IStream *pStm, BOOL fClearDirty)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::GetSizeMax(ULARGE_INTEGER *pcbSize)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::GetClassID(CLSID *pClassID)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
|
HRESULT STDMETHODCALLTYPE CMenuBand::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
|
||||||
{
|
{
|
||||||
if (!pguidCmdGroup)
|
if (!pguidCmdGroup)
|
||||||
|
@ -492,10 +443,6 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnSelect(DWORD dwSelectType)
|
||||||
m_subMenuChild->OnSelect(MPOS_CANCELLEVEL);
|
m_subMenuChild->OnSelect(MPOS_CANCELLEVEL);
|
||||||
return m_subMenuParent->OnSelect(dwSelectType);
|
return m_subMenuParent->OnSelect(dwSelectType);
|
||||||
case MPOS_SELECTRIGHT:
|
case MPOS_SELECTRIGHT:
|
||||||
if (m_hotBar && m_hotItem >= 0)
|
|
||||||
{
|
|
||||||
// TODO: popup the current child if it has subitems, otherwise spread up.
|
|
||||||
}
|
|
||||||
return m_subMenuParent->OnSelect(dwSelectType);
|
return m_subMenuParent->OnSelect(dwSelectType);
|
||||||
case MPOS_EXECUTE:
|
case MPOS_EXECUTE:
|
||||||
case MPOS_FULLCANCEL:
|
case MPOS_FULLCANCEL:
|
||||||
|
@ -741,8 +688,7 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wPa
|
||||||
rc = cdraw->nmcd.rc;
|
rc = cdraw->nmcd.rc;
|
||||||
hdc = cdraw->nmcd.hdc;
|
hdc = cdraw->nmcd.hdc;
|
||||||
|
|
||||||
if (cdraw->nmcd.uItemState != CDIS_DISABLED &&
|
if (((INT)cdraw->nmcd.dwItemSpec == m_hotItem ||
|
||||||
((INT)cdraw->nmcd.dwItemSpec == m_hotItem ||
|
|
||||||
(m_hotItem < 0 && (INT)cdraw->nmcd.dwItemSpec == m_popupItem)))
|
(m_hotItem < 0 && (INT)cdraw->nmcd.dwItemSpec == m_popupItem)))
|
||||||
{
|
{
|
||||||
cdraw->nmcd.uItemState = CDIS_HOT;
|
cdraw->nmcd.uItemState = CDIS_HOT;
|
||||||
|
@ -799,78 +745,6 @@ HRESULT STDMETHODCALLTYPE CMenuBand::IsWindowOwner(HWND hWnd)
|
||||||
return S_FALSE;
|
return S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::GetSubMenu(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::SetToolbar(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::SetMinWidth(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::SetNoBorder(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::SetTheme(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::GetTop(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::GetBottom(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::GetTracked(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::GetParentSite(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::GetState(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::DoDefaultAction(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CMenuBand::IsEmpty(THIS)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT CMenuBand::_CallCBWithItemId(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
HRESULT CMenuBand::_CallCBWithItemId(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
return _CallCB(uMsg, wParam, lParam, id);
|
return _CallCB(uMsg, wParam, lParam, id);
|
||||||
|
@ -968,7 +842,7 @@ HRESULT CMenuBand::_MenuItemHotTrack(DWORD changeType)
|
||||||
{
|
{
|
||||||
if (m_staticToolbar && (m_hotBar == m_staticToolbar || m_hotBar == NULL))
|
if (m_staticToolbar && (m_hotBar == m_staticToolbar || m_hotBar == NULL))
|
||||||
{
|
{
|
||||||
hr = m_staticToolbar->ChangeHotItem(VK_DOWN);
|
hr = m_staticToolbar->ChangeHotItem(VK_UP);
|
||||||
if (hr == S_FALSE)
|
if (hr == S_FALSE)
|
||||||
{
|
{
|
||||||
if (m_SFToolbar)
|
if (m_SFToolbar)
|
||||||
|
@ -991,9 +865,29 @@ HRESULT CMenuBand::_MenuItemHotTrack(DWORD changeType)
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (changeType == MPOS_SELECTLEFT)
|
||||||
|
{
|
||||||
|
if (m_subMenuChild)
|
||||||
|
m_subMenuChild->OnSelect(MPOS_CANCELLEVEL);
|
||||||
|
return m_subMenuParent->OnSelect(MPOS_CANCELLEVEL);
|
||||||
|
}
|
||||||
|
else if (changeType == MPOS_SELECTRIGHT)
|
||||||
|
{
|
||||||
|
if (m_hotBar && m_hotItem >= 0)
|
||||||
|
{
|
||||||
|
// TODO: popup the current child if it has subitems, otherwise spread up.
|
||||||
|
if (m_hotBar->HasSubMenu(m_hotItem)==S_OK)
|
||||||
|
{
|
||||||
|
LRESULT result;
|
||||||
|
m_hotBar->PopupItem(m_hotItem);
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return m_subMenuParent->OnSelect(changeType);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_subMenuParent->OnSelect(changeType);
|
return m_subMenuParent->OnSelect(changeType);
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -1017,3 +911,123 @@ HRESULT CMenuBand::_OnPopupSubMenu(INT popupItem, IMenuPopup * popup, POINTL * p
|
||||||
if (m_SFToolbar) m_SFToolbar->InvalidateDraw();
|
if (m_SFToolbar) m_SFToolbar->InvalidateDraw();
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::GetSubMenu(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::SetToolbar(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::SetMinWidth(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::SetNoBorder(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::SetTheme(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::GetTop(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::GetBottom(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::GetTracked(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::GetParentSite(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::GetState(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::DoDefaultAction(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::IsEmpty(THIS)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::HasFocusIO()
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::TranslateAcceleratorIO(LPMSG lpMsg)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::IsDirty()
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::Load(IStream *pStm)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::Save(IStream *pStm, BOOL fClearDirty)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::GetSizeMax(ULARGE_INTEGER *pcbSize)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::GetClassID(CLSID *pClassID)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE CMenuBand::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
|
@ -295,7 +295,7 @@ HRESULT CMenuToolbarBase::PopupSubMenu(UINT itemId, UINT index, IShellMenu* chil
|
||||||
ClientToScreen(m_hwndToolbar, &a);
|
ClientToScreen(m_hwndToolbar, &a);
|
||||||
ClientToScreen(m_hwndToolbar, &b);
|
ClientToScreen(m_hwndToolbar, &b);
|
||||||
|
|
||||||
POINTL pt = { b.x, a.y };
|
POINTL pt = { b.x - 4, a.y };
|
||||||
RECTL rcl = { a.x, a.y, b.x, b.y }; // maybe-TODO: fetch client area of deskbar?
|
RECTL rcl = { a.x, a.y, b.x, b.y }; // maybe-TODO: fetch client area of deskbar?
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue