From 18a587e56986162f8ae6a785832edfd079c83e82 Mon Sep 17 00:00:00 2001 From: David Quintana Date: Tue, 15 Apr 2014 22:30:37 +0000 Subject: [PATCH] [RSHELL] * Fix gcc build. * Wip beginning of horizontal menubar keyboard navigation. Not working yet. ;P CORE-7586 svn path=/branches/shell-experiments/; revision=62755 --- base/shell/rshell/CMenuFocusManager.cpp | 32 +++++++++++++++++++++++++ base/shell/rshell/CMenuFocusManager.h | 4 ++++ base/shell/rshell/CMenuToolbars.cpp | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/base/shell/rshell/CMenuFocusManager.cpp b/base/shell/rshell/CMenuFocusManager.cpp index 5d207d081f8..ec4a33e86dc 100644 --- a/base/shell/rshell/CMenuFocusManager.cpp +++ b/base/shell/rshell/CMenuFocusManager.cpp @@ -157,6 +157,9 @@ CMenuFocusManager::CMenuFocusManager() : m_captureHwnd(0), m_hwndUnderMouse(NULL), m_entryUnderMouse(NULL), + m_selectedMenu(NULL), + m_selectedItem(0), + m_selectedItemFlags(0), m_bandCount(0) { m_ptPrev.x = 0; @@ -355,6 +358,35 @@ LRESULT CMenuFocusManager::MsgFilterHook(INT nCode, WPARAM wParam, LPARAM lParam case WM_MOUSEMOVE: callNext = ProcessMouseMove(msg); break; + case WM_INITMENUPOPUP: + DbgPrint("WM_INITMENUPOPUP %p %p\n", wParam, lParam); + m_selectedMenu = reinterpret_cast(lParam); + m_selectedItem = -1; + m_selectedItemFlags = 0; + break; + case WM_MENUSELECT: + DbgPrint("WM_MENUSELECT %p %p\n", wParam, lParam); + m_selectedMenu = reinterpret_cast(lParam); + m_selectedItem = LOWORD(wParam); + m_selectedItemFlags = HIWORD(wParam); + break; + case WM_KEYDOWN: + switch (msg->wParam) + { + case VK_LEFT: + if (m_current->hmenu == m_selectedMenu) + { + m_parent->mb->_MenuItemHotTrack(VK_LEFT); + } + break; + case VK_RIGHT: + if (!(m_selectedItemFlags & MF_POPUP)) + { + m_parent->mb->_MenuItemHotTrack(VK_RIGHT); + } + break; + } + break; } if (!callNext) diff --git a/base/shell/rshell/CMenuFocusManager.h b/base/shell/rshell/CMenuFocusManager.h index 6c5ec86b6ca..88cacd79711 100644 --- a/base/shell/rshell/CMenuFocusManager.h +++ b/base/shell/rshell/CMenuFocusManager.h @@ -73,6 +73,10 @@ private: HWND m_hwndUnderMouse; StackEntry * m_entryUnderMouse; + HMENU m_selectedMenu; + INT m_selectedItem; + DWORD m_selectedItemFlags; + // TODO: make dynamic #define MAX_RECURSE 20 StackEntry m_bandStack[MAX_RECURSE]; diff --git a/base/shell/rshell/CMenuToolbars.cpp b/base/shell/rshell/CMenuToolbars.cpp index 8b8826bc6f0..8cd26ea772b 100644 --- a/base/shell/rshell/CMenuToolbars.cpp +++ b/base/shell/rshell/CMenuToolbars.cpp @@ -277,12 +277,12 @@ HRESULT CMenuToolbarBase::OnCustomDraw(LPNMTBCUSTOMDRAW cdraw, LRESULT * theResu CMenuToolbarBase::CMenuToolbarBase(CMenuBand *menuBand, BOOL usePager) : m_hwnd(NULL), + m_hwndToolbar(NULL), m_useFlatMenus(FALSE), m_SubclassOld(NULL), m_disableMouseTrack(FALSE), m_timerEnabled(FALSE), m_menuBand(menuBand), - m_hwndToolbar(NULL), m_dwMenuFlags(0), m_hasSizes(FALSE), m_usePager(usePager),