Index: source/gui/CGUI.h =================================================================== --- source/gui/CGUI.h +++ source/gui/CGUI.h @@ -622,10 +622,13 @@ static const CStr EventNameRelease; static const CStr EventNameMouseRightPress; static const CStr EventNameMouseLeftPress; + static const CStr EventNameMouseMiddlePress; static const CStr EventNameMouseWheelDown; static const CStr EventNameMouseWheelUp; static const CStr EventNameMouseLeftDoubleClick; static const CStr EventNameMouseLeftRelease; + static const CStr EventNameMouseMiddleDoubleClick; + static const CStr EventNameMouseMiddleRelease; static const CStr EventNameMouseRightDoubleClick; static const CStr EventNameMouseRightRelease; Index: source/gui/CGUI.cpp =================================================================== --- source/gui/CGUI.cpp +++ source/gui/CGUI.cpp @@ -53,12 +53,15 @@ const CStr CGUI::EventNameRelease = "Release"; const CStr CGUI::EventNameMouseRightPress = "MouseRightPress"; const CStr CGUI::EventNameMouseLeftPress = "MouseLeftPress"; +const CStr CGUI::EventNameMouseMiddlePress = "MouseMiddlePress"; const CStr CGUI::EventNameMouseWheelDown = "MouseWheelDown"; const CStr CGUI::EventNameMouseWheelUp = "MouseWheelUp"; const CStr CGUI::EventNameMouseLeftDoubleClick = "MouseLeftDoubleClick"; const CStr CGUI::EventNameMouseLeftRelease = "MouseLeftRelease"; const CStr CGUI::EventNameMouseRightDoubleClick = "MouseRightDoubleClick"; const CStr CGUI::EventNameMouseRightRelease = "MouseRightRelease"; +const CStr CGUI::EventNameMouseMiddleDoubleClick = "MouseMiddleDoubleClick"; +const CStr CGUI::EventNameMouseMiddleRelease = "MouseMiddleRelease"; CGUI::CGUI(const shared_ptr& runtime) : m_BaseObject(*this), @@ -179,6 +182,11 @@ ret = pNearest->SendMouseEvent(GUIM_MOUSE_PRESS_RIGHT, EventNameMouseRightPress); break; + case SDL_BUTTON_MIDDLE: + if (pNearest) + ret = pNearest->SendEvent(GUIM_MOUSE_PRESS_MIDDLE, EventNameMouseMiddlePress); + break; + default: break; } @@ -216,6 +224,18 @@ ret = pNearest->SendMouseEvent(GUIM_MOUSE_RELEASE_RIGHT, EventNameMouseRightRelease); } break; + case SDL_BUTTON_MIDDLE: + if (pNearest) + { + double timeElapsed = timer_Time() - pNearest->m_LastClickTime[SDL_BUTTON_MIDDLE]; + pNearest->m_LastClickTime[SDL_BUTTON_MIDDLE] = timer_Time(); + + if (timeElapsed < SELECT_DBLCLICK_RATE) + ret = pNearest->SendEvent(GUIM_MOUSE_DBLCLICK_MIDDLE, EventNameMouseMiddleDoubleClick); + else + ret = pNearest->SendEvent(GUIM_MOUSE_RELEASE_MIDDLE, EventNameMouseMiddleRelease); + } + break; } // Reset all states on all visible objects Index: source/gui/SGUIMessage.h =================================================================== --- source/gui/SGUIMessage.h +++ source/gui/SGUIMessage.h @@ -34,11 +34,14 @@ GUIM_MOUSE_PRESS_RIGHT, GUIM_MOUSE_DOWN_LEFT, GUIM_MOUSE_DOWN_RIGHT, + GUIM_MOUSE_PRESS_MIDDLE, GUIM_MOUSE_DBLCLICK_LEFT, GUIM_MOUSE_DBLCLICK_LEFT_ITEM, // Triggered when doubleclicking on a list item GUIM_MOUSE_DBLCLICK_RIGHT, + GUIM_MOUSE_DBLCLICK_MIDDLE, GUIM_MOUSE_RELEASE_LEFT, GUIM_MOUSE_RELEASE_RIGHT, + GUIM_MOUSE_RELEASE_MIDDLE, GUIM_MOUSE_WHEEL_UP, GUIM_MOUSE_WHEEL_DOWN, GUIM_SETTINGS_UPDATED, // SGUIMessage.m_Value = name of setting