diff --git a/xbmc/guilib/Key.h b/xbmc/guilib/Key.h index 1498b28dd4002..280c11bd16cb5 100644 --- a/xbmc/guilib/Key.h +++ b/xbmc/guilib/Key.h @@ -89,8 +89,10 @@ #define KEY_MOUSE_LONG_CLICK 0xE020 #define KEY_MOUSE_WHEEL_UP 0xE101 #define KEY_MOUSE_WHEEL_DOWN 0xE102 -#define KEY_MOUSE_DRAG 0xE103 -#define KEY_MOUSE_MOVE 0xE104 +#define KEY_MOUSE_MOVE 0xE103 +#define KEY_MOUSE_DRAG 0xE104 +#define KEY_MOUSE_DRAG_START 0xE105 +#define KEY_MOUSE_DRAG_END 0xE106 #define KEY_MOUSE_NOOP 0xEFFF #define KEY_MOUSE_END 0xEFFF diff --git a/xbmc/input/ButtonTranslator.cpp b/xbmc/input/ButtonTranslator.cpp index c297408f367c8..e49373004e1e9 100644 --- a/xbmc/input/ButtonTranslator.cpp +++ b/xbmc/input/ButtonTranslator.cpp @@ -411,8 +411,10 @@ static const ActionMapping mousekeys[] = { "longclick", KEY_MOUSE_LONG_CLICK }, { "wheelup", KEY_MOUSE_WHEEL_UP }, { "wheeldown", KEY_MOUSE_WHEEL_DOWN }, + { "mousemove", KEY_MOUSE_MOVE }, { "mousedrag", KEY_MOUSE_DRAG }, - { "mousemove", KEY_MOUSE_MOVE } + { "mousedragstart", KEY_MOUSE_DRAG_START }, + { "mousedragend", KEY_MOUSE_DRAG_END } }; static const ActionMapping touchcommands[] = diff --git a/xbmc/input/MouseStat.cpp b/xbmc/input/MouseStat.cpp index a8143c913d8d7..b01fc5d2f1533 100644 --- a/xbmc/input/MouseStat.cpp +++ b/xbmc/input/MouseStat.cpp @@ -129,9 +129,15 @@ void CMouseStat::HandleEvent(XBMC_Event& newEvent) bNothingDown = false; break; case CButtonState::MB_DRAG_START: + bHold[i] = CButtonState::MB_DRAG_START; + bNothingDown = false; + break; case CButtonState::MB_DRAG: + bHold[i] = CButtonState::MB_DRAG; + bNothingDown = false; + break; case CButtonState::MB_DRAG_END: - bHold[i] = action - CButtonState::MB_DRAG_START + 1; + bHold[i] = CButtonState::MB_DRAG_END; bNothingDown = false; break; default: @@ -163,9 +169,22 @@ void CMouseStat::HandleEvent(XBMC_Event& newEvent) if (m_Key == KEY_MOUSE_NOOP) { - // The bHold array is set true if CButtonState::Update spots a mouse drag - if (bHold[MOUSE_LEFT_BUTTON]) - m_Key = KEY_MOUSE_DRAG; + // The bHold array is set to the drag action + if (bHold[MOUSE_LEFT_BUTTON] != 0) + { + switch (bHold[MOUSE_LEFT_BUTTON]) + { + case CButtonState::MB_DRAG: + m_Key = KEY_MOUSE_DRAG; + break; + case CButtonState::MB_DRAG_START: + m_Key = KEY_MOUSE_DRAG_START; + break; + case CButtonState::MB_DRAG_END: + m_Key = KEY_MOUSE_DRAG_END; + break; + } + } // dz is +1 on wheel up and -1 on wheel down else if (m_mouseState.dz > 0)