X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/44fbc477af80b3fe0be6052361734ad0d064d58d..b9f933ab5d4a293790d0f5186c434229678c76ea:/src/msw/treectrl.cpp?ds=sidebyside diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index 9a393feba7..d4a3025c38 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -2294,12 +2294,26 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) eventType = wxEVT_COMMAND_TREE_KEY_DOWN; TV_KEYDOWN *info = (TV_KEYDOWN *)lParam; - // we pass 0 as 2 last CreateKeyEvent() parameters because we - // don't have access to the real key press flags here - but as - // it is only used to determin wxKeyEvent::m_altDown flag it's - // not too bad + // fabricate the lParam and wParam parameters sufficiently + // similar to the ones from a "real" WM_KEYDOWN so that + // CreateKeyEvent() works correctly + WXLPARAM lParam = + (::GetKeyState(VK_MENU) & 0x100 ? KF_ALTDOWN : 0) << 16; + + WXWPARAM wParam = info->wVKey; + + int keyCode = wxCharCodeMSWToWX(info->wVKey); + if ( !keyCode ) + { + // wxCharCodeMSWToWX() returns 0 to indicate that this is a + // simple ASCII key + keyCode = wParam; + } + event.m_evtKey = CreateKeyEvent(wxEVT_KEY_DOWN, - wxCharCodeMSWToWX(info->wVKey)); + keyCode, + lParam, + wParam); // a separate event for Space/Return if ( !wxIsCtrlDown() && !wxIsShiftDown() && @@ -2572,16 +2586,13 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) // an image depending on the expanded/collapsed state - bug in // comctl32.dll or our code? { - NM_TREEVIEW* tv = (NM_TREEVIEW*)lParam; - if ( tv->action == TVE_EXPAND ) - { - wxTreeItemId id = (WXHTREEITEM)tv->itemNew.hItem; + NM_TREEVIEW* tv = (NM_TREEVIEW *)lParam; + wxTreeItemId id = (WXHTREEITEM)tv->itemNew.hItem; - int image = GetItemImage(id, wxTreeItemIcon_Expanded); - if ( image != -1 ) - { - RefreshItem(id); - } + int image = GetItemImage(id, wxTreeItemIcon_Expanded); + if ( image != -1 ) + { + RefreshItem(id); } } break; @@ -2589,7 +2600,7 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) case TVN_GETDISPINFO: // NB: so far the user can't set the image himself anyhow, so do it // anyway - but this may change later -// if ( /* !processed && */ 1 ) + //if ( /* !processed && */ 1 ) { wxTreeItemId item = event.m_item; TV_DISPINFO *info = (TV_DISPINFO *)lParam;