diff --git a/Minecraft.Client/Common/UI/UIController.cpp b/Minecraft.Client/Common/UI/UIController.cpp index ed0e41f7..765ce602 100644 --- a/Minecraft.Client/Common/UI/UIController.cpp +++ b/Minecraft.Client/Common/UI/UIController.cpp @@ -1101,6 +1101,9 @@ void UIController::tickInput() panelOffsetY = pMainPanel->getYPos(); } + bool leftPressed = g_KBMInput.IsMouseButtonPressed(KeyboardMouseInput::MOUSE_LEFT); + bool leftDown = leftPressed || g_KBMInput.IsMouseButtonDown(KeyboardMouseInput::MOUSE_LEFT); + // Mouse hover — hit test against C++ control bounds. // Simple controls use SetFocusToElement; list controls // use their own SetTouchFocus for Flash-side hit testing. @@ -1158,7 +1161,7 @@ void UIController::tickInput() if (rowHeight > 0) adjustedMouseY -= rowHeight; } - UIControl_MultiList *pMulti = dynamic_cast(ctrl); + UIControl_MultiList *pMulti = dynamic_cast(ctrl); if (pMulti) { S32 adjustedY = static_cast(sceneMouseY); @@ -1169,13 +1172,14 @@ void UIController::tickInput() if (rowHeight > 0) adjustedY -= (rowHeight * 2); } - pMulti->SetTouchFocus( - static_cast(sceneMouseX), adjustedY, false); + + S32 localX = static_cast(sceneMouseX) - cx; + pMulti->SetTouchFocus(localX, adjustedY, leftDown); } else { static_cast(ctrl)->SetTouchFocus( - static_cast(sceneMouseX), adjustedMouseY, false); + static_cast(sceneMouseX), adjustedMouseY, leftDown); } hitControlId = -1; hitArea = INT_MAX; @@ -1247,9 +1251,6 @@ void UIController::tickInput() } } - bool leftPressed = g_KBMInput.IsMouseButtonPressed(KeyboardMouseInput::MOUSE_LEFT); - bool leftDown = leftPressed || g_KBMInput.IsMouseButtonDown(KeyboardMouseInput::MOUSE_LEFT); - if (m_mouseDraggingSliderScene != eUIScene_COUNT && m_mouseDraggingSliderScene != pScene->getSceneType()) { m_mouseDraggingSliderScene = eUIScene_COUNT;