diff --git a/source/gui/CGUI.cpp b/source/gui/CGUI.cpp index 2e9b63a85f..11c52827fb 100644 --- a/source/gui/CGUI.cpp +++ b/source/gui/CGUI.cpp @@ -53,12 +53,15 @@ const CStr CGUI::EventNamePress = "Press"; 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 @@ InReaction CGUI::HandleEvent(const SDL_Event_* ev) 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 @@ InReaction CGUI::HandleEvent(const SDL_Event_* ev) 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 diff --git a/source/gui/CGUI.h b/source/gui/CGUI.h index 795beeaa04..48c3426a2d 100644 --- a/source/gui/CGUI.h +++ b/source/gui/CGUI.h @@ -622,10 +622,13 @@ private: 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; diff --git a/source/gui/SGUIMessage.h b/source/gui/SGUIMessage.h index 82f0ad7a3c..32ce65062d 100644 --- a/source/gui/SGUIMessage.h +++ b/source/gui/SGUIMessage.h @@ -34,11 +34,14 @@ enum EGUIMessageType 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