+
+ if (event.EventType == EET_MOUSE_INPUT_EVENT) {
+ s32 x = event.MouseInput.X;
+ s32 y = event.MouseInput.Y;
+ gui::IGUIElement *hovered =
+ Environment->getRootGUIElement()->getElementFromPoint(
+ core::position2d<s32>(x, y));
+ if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
+ m_old_tooltip_id = -1;
+ m_old_tooltip = "";
+ }
+ if (!isChild(hovered,this)) {
+ if (DoubleClickDetection(event)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+/******************************************************************************/
+bool GUIFormSpecMenu::DoubleClickDetection(const SEvent event)
+{
+ if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
+ m_doubleclickdetect[0].pos = m_doubleclickdetect[1].pos;
+ m_doubleclickdetect[0].time = m_doubleclickdetect[1].time;
+
+ m_doubleclickdetect[1].pos = m_pointer;
+ m_doubleclickdetect[1].time = getTimeMs();
+ }
+ else if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) {
+ u32 delta = porting::getDeltaMs(m_doubleclickdetect[0].time, getTimeMs());
+ if (delta > 400) {
+ return false;
+ }
+
+ double squaredistance =
+ m_doubleclickdetect[0].pos
+ .getDistanceFromSQ(m_doubleclickdetect[1].pos);
+
+ if (squaredistance > (30*30)) {
+ return false;
+ }
+
+ SEvent* translated = new SEvent();
+ assert(translated != 0);
+ //translate doubleclick to escape
+ memset(translated, 0, sizeof(SEvent));
+ translated->EventType = irr::EET_KEY_INPUT_EVENT;
+ translated->KeyInput.Key = KEY_ESCAPE;
+ translated->KeyInput.Control = false;
+ translated->KeyInput.Shift = false;
+ translated->KeyInput.PressedDown = true;
+ translated->KeyInput.Char = 0;
+ OnEvent(*translated);
+
+ // no need to send the key up event as we're already deleted
+ // and no one else did notice this event
+ delete translated;
+ return true;
+ }