mirror of
https://github.com/reactos/reactos.git
synced 2025-06-20 07:36:05 +00:00
[RSHELL]
* Almost working keyboard navigation on horizontal menu bar. It does not yet switch between menus when a submenu of the shell menu is currently open and you press [right]. CORE-7586 svn path=/branches/shell-experiments/; revision=62891
This commit is contained in:
parent
dc8f232870
commit
78790baf2e
4 changed files with 17 additions and 16 deletions
|
@ -715,23 +715,23 @@ HRESULT CMenuBand::_TrackContextMenu(IContextMenu * contextMenu, INT x, INT y)
|
||||||
if (popup == NULL)
|
if (popup == NULL)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
DbgPrint("Before Query\n");
|
TRACE("Before Query\n");
|
||||||
hr = contextMenu->QueryContextMenu(popup, 0, 0, UINT_MAX, CMF_NORMAL);
|
hr = contextMenu->QueryContextMenu(popup, 0, 0, UINT_MAX, CMF_NORMAL);
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
{
|
{
|
||||||
DbgPrint("Query failed\n");
|
TRACE("Query failed\n");
|
||||||
DestroyMenu(popup);
|
DestroyMenu(popup);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HWND hwnd = m_menuOwner ? m_menuOwner : m_topLevelWindow;
|
HWND hwnd = m_menuOwner ? m_menuOwner : m_topLevelWindow;
|
||||||
|
|
||||||
DbgPrint("Before Tracking\n");
|
TRACE("Before Tracking\n");
|
||||||
uCommand = ::TrackPopupMenuEx(popup, TPM_RETURNCMD, x, y, hwnd, NULL);
|
uCommand = ::TrackPopupMenuEx(popup, TPM_RETURNCMD, x, y, hwnd, NULL);
|
||||||
|
|
||||||
if (uCommand != 0)
|
if (uCommand != 0)
|
||||||
{
|
{
|
||||||
DbgPrint("Before InvokeCommand\n");
|
TRACE("Before InvokeCommand\n");
|
||||||
CMINVOKECOMMANDINFO cmi = { 0 };
|
CMINVOKECOMMANDINFO cmi = { 0 };
|
||||||
cmi.cbSize = sizeof(cmi);
|
cmi.cbSize = sizeof(cmi);
|
||||||
cmi.lpVerb = MAKEINTRESOURCEA(uCommand);
|
cmi.lpVerb = MAKEINTRESOURCEA(uCommand);
|
||||||
|
@ -740,7 +740,7 @@ HRESULT CMenuBand::_TrackContextMenu(IContextMenu * contextMenu, INT x, INT y)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DbgPrint("TrackPopupMenu failed. Code=%d, LastError=%d\n", uCommand, GetLastError());
|
TRACE("TrackPopupMenu failed. Code=%d, LastError=%d\n", uCommand, GetLastError());
|
||||||
hr = S_FALSE;
|
hr = S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -288,7 +288,7 @@ LRESULT CMenuFocusManager::ProcessMouseMove(MSG* msg)
|
||||||
DisableMouseTrack(NULL, FALSE);
|
DisableMouseTrack(NULL, FALSE);
|
||||||
if (isTracking && iHitTestResult>=0 && m_current->type == TrackedMenuEntry)
|
if (isTracking && iHitTestResult>=0 && m_current->type == TrackedMenuEntry)
|
||||||
SendMessage(entry->hwnd, WM_CANCELMODE, 0, 0);
|
SendMessage(entry->hwnd, WM_CANCELMODE, 0, 0);
|
||||||
PostMessage(child, WM_USER_CHANGETRACKEDITEM, iHitTestResult, isTracking);
|
PostMessage(child, WM_USER_CHANGETRACKEDITEM, iHitTestResult, MAKELPARAM(isTracking, TRUE));
|
||||||
if (m_current->type == TrackedMenuEntry)
|
if (m_current->type == TrackedMenuEntry)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -359,13 +359,13 @@ LRESULT CMenuFocusManager::MsgFilterHook(INT nCode, WPARAM hookWParam, LPARAM ho
|
||||||
callNext = ProcessMouseMove(msg);
|
callNext = ProcessMouseMove(msg);
|
||||||
break;
|
break;
|
||||||
case WM_INITMENUPOPUP:
|
case WM_INITMENUPOPUP:
|
||||||
DbgPrint("WM_INITMENUPOPUP %p %p\n", msg->wParam, msg->lParam);
|
TRACE("WM_INITMENUPOPUP %p %p\n", msg->wParam, msg->lParam);
|
||||||
m_selectedMenu = reinterpret_cast<HMENU>(msg->lParam);
|
m_selectedMenu = reinterpret_cast<HMENU>(msg->lParam);
|
||||||
m_selectedItem = -1;
|
m_selectedItem = -1;
|
||||||
m_selectedItemFlags = 0;
|
m_selectedItemFlags = 0;
|
||||||
break;
|
break;
|
||||||
case WM_MENUSELECT:
|
case WM_MENUSELECT:
|
||||||
DbgPrint("WM_MENUSELECT %p %p\n", msg->wParam, msg->lParam);
|
TRACE("WM_MENUSELECT %p %p\n", msg->wParam, msg->lParam);
|
||||||
m_selectedMenu = reinterpret_cast<HMENU>(msg->lParam);
|
m_selectedMenu = reinterpret_cast<HMENU>(msg->lParam);
|
||||||
m_selectedItem = GET_X_LPARAM(msg->wParam);
|
m_selectedItem = GET_X_LPARAM(msg->wParam);
|
||||||
m_selectedItemFlags = HIWORD(msg->wParam);
|
m_selectedItemFlags = HIWORD(msg->wParam);
|
||||||
|
@ -621,7 +621,7 @@ HRESULT CMenuFocusManager::PushTrackedPopup(HMENU popup)
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
DbgPrint("PushTrackedPopup %p\n", popup);
|
TRACE("PushTrackedPopup %p\n", popup);
|
||||||
m_selectedMenu = popup;
|
m_selectedMenu = popup;
|
||||||
m_selectedItem = -1;
|
m_selectedItem = -1;
|
||||||
m_selectedItemFlags = 0;
|
m_selectedItemFlags = 0;
|
||||||
|
|
|
@ -131,7 +131,7 @@ LRESULT CMenuToolbarBase::SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
||||||
return IsTrackedItem(wParam);
|
return IsTrackedItem(wParam);
|
||||||
case WM_USER_CHANGETRACKEDITEM:
|
case WM_USER_CHANGETRACKEDITEM:
|
||||||
m_SubclassOld(hWnd, uMsg, wParam, lParam);
|
m_SubclassOld(hWnd, uMsg, wParam, lParam);
|
||||||
return ChangeTrackedItem(wParam, lParam);
|
return ChangeTrackedItem(wParam, LOWORD(lParam), HIWORD(lParam));
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
OnWinEvent(hWnd, uMsg, wParam, lParam, &lr);
|
OnWinEvent(hWnd, uMsg, wParam, lParam, &lr);
|
||||||
|
@ -604,6 +604,7 @@ HRESULT CMenuToolbarBase::ChangeHotItem(CMenuToolbarBase * toolbar, INT item, DW
|
||||||
SendMessage(m_hwndToolbar, TB_SETHOTITEM, (WPARAM) -1, 0);
|
SendMessage(m_hwndToolbar, TB_SETHOTITEM, (WPARAM) -1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRACE("Hot item changed from %p %p, to %p %p\n", m_hotBar, m_hotItem, toolbar, item);
|
||||||
m_hotBar = toolbar;
|
m_hotBar = toolbar;
|
||||||
m_hotItem = item;
|
m_hotItem = item;
|
||||||
|
|
||||||
|
@ -690,7 +691,7 @@ HRESULT CMenuToolbarBase::IsTrackedItem(INT index)
|
||||||
return S_FALSE;
|
return S_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT CMenuToolbarBase::ChangeTrackedItem(INT index, BOOL wasTracking)
|
HRESULT CMenuToolbarBase::ChangeTrackedItem(INT index, BOOL wasTracking, BOOL mouse)
|
||||||
{
|
{
|
||||||
TBBUTTON btn;
|
TBBUTTON btn;
|
||||||
|
|
||||||
|
@ -703,9 +704,9 @@ HRESULT CMenuToolbarBase::ChangeTrackedItem(INT index, BOOL wasTracking)
|
||||||
if (!SendMessage(m_hwndToolbar, TB_GETBUTTON, index, reinterpret_cast<LPARAM>(&btn)))
|
if (!SendMessage(m_hwndToolbar, TB_GETBUTTON, index, reinterpret_cast<LPARAM>(&btn)))
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
DbgPrint("ChangeTrackedItem %d, %d\n", index, wasTracking);
|
TRACE("ChangeTrackedItem %d, %d\n", index, wasTracking);
|
||||||
m_isTrackingPopup = wasTracking;
|
m_isTrackingPopup = wasTracking;
|
||||||
return m_menuBand->_ChangeHotItem(this, btn.idCommand, HICF_MOUSE);
|
return m_menuBand->_ChangeHotItem(this, btn.idCommand, mouse ? HICF_MOUSE : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT CMenuToolbarBase::PopupSubMenu(UINT iItem, UINT index, IShellMenu* childShellMenu)
|
HRESULT CMenuToolbarBase::PopupSubMenu(UINT iItem, UINT index, IShellMenu* childShellMenu)
|
||||||
|
@ -912,13 +913,13 @@ HRESULT CMenuToolbarBase::KeyboardItemChange(DWORD dwSelectType)
|
||||||
{
|
{
|
||||||
if (prev != btn.idCommand)
|
if (prev != btn.idCommand)
|
||||||
{
|
{
|
||||||
DbgPrint("Setting Hot item to %d\n", index);
|
TRACE("Setting Hot item to %d\n", index);
|
||||||
if (!(m_initFlags & SMINIT_VERTICAL) && m_isTrackingPopup)
|
if (!(m_initFlags & SMINIT_VERTICAL) && m_isTrackingPopup)
|
||||||
{
|
{
|
||||||
HWND tlw;
|
HWND tlw;
|
||||||
m_menuBand->_GetTopLevelWindow(&tlw);
|
m_menuBand->_GetTopLevelWindow(&tlw);
|
||||||
SendMessage(tlw, WM_CANCELMODE, 0, 0);
|
SendMessage(tlw, WM_CANCELMODE, 0, 0);
|
||||||
PostMessage(m_hwndToolbar, WM_USER_CHANGETRACKEDITEM, index, m_isTrackingPopup);
|
PostMessage(m_hwndToolbar, WM_USER_CHANGETRACKEDITEM, index, MAKELPARAM(m_isTrackingPopup, FALSE));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_menuBand->_ChangeHotItem(this, btn.idCommand, 0);
|
m_menuBand->_ChangeHotItem(this, btn.idCommand, 0);
|
||||||
|
|
|
@ -78,7 +78,7 @@ public:
|
||||||
HRESULT KeyboardItemChange(DWORD changeType);
|
HRESULT KeyboardItemChange(DWORD changeType);
|
||||||
|
|
||||||
HRESULT IsTrackedItem(INT index);
|
HRESULT IsTrackedItem(INT index);
|
||||||
HRESULT ChangeTrackedItem(INT index, BOOL wasTracking);
|
HRESULT ChangeTrackedItem(INT index, BOOL wasTracking, BOOL mouse);
|
||||||
|
|
||||||
HRESULT GetSizes(SIZE* pMinSize, SIZE* pMaxSize, SIZE* pIntegralSize);
|
HRESULT GetSizes(SIZE* pMinSize, SIZE* pMaxSize, SIZE* pIntegralSize);
|
||||||
HRESULT SetPosSize(int x, int y, int cx, int cy);
|
HRESULT SetPosSize(int x, int y, int cx, int cy);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue