diff --git a/src/framework/core/timer.cpp b/src/framework/core/timer.cpp index 3e678a7f..ee05f7a9 100644 --- a/src/framework/core/timer.cpp +++ b/src/framework/core/timer.cpp @@ -27,6 +27,7 @@ void Timer::restart() { m_startTicks = g_clock.ticks(); + m_stopped = false; } ticks_t Timer::ticksElapsed() diff --git a/src/framework/core/timer.h b/src/framework/core/timer.h index 55ce6c8d..318eb5bb 100644 --- a/src/framework/core/timer.h +++ b/src/framework/core/timer.h @@ -31,13 +31,17 @@ public: Timer() { restart(); } void restart(); + void stop() { m_stopped = true; } ticks_t startTicks() { return m_startTicks; } ticks_t ticksElapsed(); double timeElapsed() { return ticksElapsed()/1000.0; } + bool running() { return !m_stopped; } + private: ticks_t m_startTicks; + Boolean m_stopped; }; #endif diff --git a/src/framework/ui/uiwidget.cpp b/src/framework/ui/uiwidget.cpp index 660bbf44..d401730e 100644 --- a/src/framework/ui/uiwidget.cpp +++ b/src/framework/ui/uiwidget.cpp @@ -35,6 +35,7 @@ UIWidget::UIWidget() { m_lastFocusReason = Fw::ActiveFocusReason; m_states = Fw::DefaultState; + m_clickTimer.stop(); initBaseStyle(); initText(); @@ -1111,6 +1112,14 @@ bool UIWidget::onKeyUp(uchar keyCode, int keyboardModifiers) bool UIWidget::onMousePress(const Point& mousePos, Fw::MouseButton button) { + if(button == Fw::MouseLeftButton) { + if(m_clickTimer.running() && m_clickTimer.ticksElapsed() <= 500) { + if(onMouseDoubleClick(mousePos)) + return true; + m_clickTimer.stop(); + } else + m_clickTimer.restart(); + } return callLuaField("onMousePress", mousePos, button); } @@ -1145,6 +1154,11 @@ bool UIWidget::onMouseWheel(const Point& mousePos, Fw::MouseWheelDirection direc return callLuaField("onMouseWheel", mousePos, direction); } +bool UIWidget::onMouseDoubleClick(const Point& mousePos) +{ + return callLuaField("onMouseDoubleClick", mousePos); +} + bool UIWidget::propagateOnKeyText(const std::string& keyText) { // do a backup of children list, because it may change while looping it diff --git a/src/framework/ui/uiwidget.h b/src/framework/ui/uiwidget.h index 163a801c..50379cce 100644 --- a/src/framework/ui/uiwidget.h +++ b/src/framework/ui/uiwidget.h @@ -29,6 +29,7 @@ #include #include #include +#include template struct EdgeGroup { @@ -71,6 +72,7 @@ protected: UIWidgetList m_lockedChildren; UIWidgetPtr m_focusedChild; OTMLNodePtr m_style; + Timer m_clickTimer; Fw::FocusReason m_lastFocusReason; public: @@ -176,6 +178,7 @@ protected: virtual bool onMouseRelease(const Point& mousePos, Fw::MouseButton button); virtual bool onMouseMove(const Point& mousePos, const Point& mouseMoved); virtual bool onMouseWheel(const Point& mousePos, Fw::MouseWheelDirection direction); + virtual bool onMouseDoubleClick(const Point& mousePos); bool propagateOnKeyText(const std::string& keyText); bool propagateOnKeyDown(uchar keyCode, int keyboardModifiers);