- Revision
- 159401
- Author
- [email protected]
- Date
- 2013-11-18 00:25:09 -0800 (Mon, 18 Nov 2013)
Log Message
[EFL][WK2] Process single tap using mouse move, down and up event.
https://bugs.webkit.org/show_bug.cgi?id=106864
Patch by Eunmi Lee <[email protected]> on 2013-11-18
Reviewed by Christophe Dumez.
Send mouse events to the web process to perform the clicking when
single tap gesture is recognized.
Additionally, add WKViewSendMouseDownEvent(), WKViewSendMouseUpEvent()
and WKViewSendMouseMoveEvent() to avoid using WK2 internals in the EFL
API implementation.
* UIProcess/API/C/efl/WKViewEfl.cpp:
(WKViewSendMouseDownEvent):
(WKViewSendMouseUpEvent):
(WKViewSendMouseMoveEvent):
* UIProcess/API/C/efl/WKViewEfl.h:
* UIProcess/API/efl/GestureRecognizer.cpp:
(WebKit::GestureHandler::handleSingleTap):
* UIProcess/efl/WebViewEfl.cpp:
(WebKit::WebViewEfl::sendMouseEvent):
* UIProcess/efl/WebViewEfl.h:
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (159400 => 159401)
--- trunk/Source/WebKit2/ChangeLog 2013-11-18 07:51:26 UTC (rev 159400)
+++ trunk/Source/WebKit2/ChangeLog 2013-11-18 08:25:09 UTC (rev 159401)
@@ -1,3 +1,27 @@
+2013-11-18 Eunmi Lee <[email protected]>
+
+ [EFL][WK2] Process single tap using mouse move, down and up event.
+ https://bugs.webkit.org/show_bug.cgi?id=106864
+
+ Reviewed by Christophe Dumez.
+
+ Send mouse events to the web process to perform the clicking when
+ single tap gesture is recognized.
+ Additionally, add WKViewSendMouseDownEvent(), WKViewSendMouseUpEvent()
+ and WKViewSendMouseMoveEvent() to avoid using WK2 internals in the EFL
+ API implementation.
+
+ * UIProcess/API/C/efl/WKViewEfl.cpp:
+ (WKViewSendMouseDownEvent):
+ (WKViewSendMouseUpEvent):
+ (WKViewSendMouseMoveEvent):
+ * UIProcess/API/C/efl/WKViewEfl.h:
+ * UIProcess/API/efl/GestureRecognizer.cpp:
+ (WebKit::GestureHandler::handleSingleTap):
+ * UIProcess/efl/WebViewEfl.cpp:
+ (WebKit::WebViewEfl::sendMouseEvent):
+ * UIProcess/efl/WebViewEfl.h:
+
2013-11-17 Dan Bernstein <[email protected]>
Try to fix the EFL build.
Modified: trunk/Source/WebKit2/UIProcess/API/C/efl/WKViewEfl.cpp (159400 => 159401)
--- trunk/Source/WebKit2/UIProcess/API/C/efl/WKViewEfl.cpp 2013-11-18 07:51:26 UTC (rev 159400)
+++ trunk/Source/WebKit2/UIProcess/API/C/efl/WKViewEfl.cpp 2013-11-18 08:25:09 UTC (rev 159401)
@@ -29,6 +29,7 @@
#include "EwkView.h"
#include "WKAPICast.h"
#include "WebViewEfl.h"
+#include <Evas.h>
#include <WebKit2/WKImageCairo.h>
using namespace WebKit;
@@ -58,3 +59,18 @@
UNUSED_PARAM(touchEventRef);
#endif
}
+
+void WKViewSendMouseDownEvent(WKViewRef viewRef, Evas_Event_Mouse_Down* event)
+{
+ static_cast<WebViewEfl*>(toImpl(viewRef))->sendMouseEvent(event);
+}
+
+void WKViewSendMouseUpEvent(WKViewRef viewRef, Evas_Event_Mouse_Up* event)
+{
+ static_cast<WebViewEfl*>(toImpl(viewRef))->sendMouseEvent(event);
+}
+
+void WKViewSendMouseMoveEvent(WKViewRef viewRef, Evas_Event_Mouse_Move* event)
+{
+ static_cast<WebViewEfl*>(toImpl(viewRef))->sendMouseEvent(event);
+}
Modified: trunk/Source/WebKit2/UIProcess/API/C/efl/WKViewEfl.h (159400 => 159401)
--- trunk/Source/WebKit2/UIProcess/API/C/efl/WKViewEfl.h 2013-11-18 07:51:26 UTC (rev 159400)
+++ trunk/Source/WebKit2/UIProcess/API/C/efl/WKViewEfl.h 2013-11-18 08:25:09 UTC (rev 159401)
@@ -28,6 +28,9 @@
#include <WebKit2/WKBase.h>
+typedef struct _Evas_Event_Mouse_Down Evas_Event_Mouse_Down;
+typedef struct _Evas_Event_Mouse_Move Evas_Event_Mouse_Move;
+typedef struct _Evas_Event_Mouse_Up Evas_Event_Mouse_Up;
typedef struct _cairo_surface cairo_surface_t;
#ifdef __cplusplus
@@ -42,6 +45,10 @@
WK_EXPORT void WKViewSendTouchEvent(WKViewRef, WKTouchEventRef);
+WK_EXPORT void WKViewSendMouseDownEvent(WKViewRef, Evas_Event_Mouse_Down*);
+WK_EXPORT void WKViewSendMouseUpEvent(WKViewRef, Evas_Event_Mouse_Up*);
+WK_EXPORT void WKViewSendMouseMoveEvent(WKViewRef, Evas_Event_Mouse_Move*);
+
#ifdef __cplusplus
}
#endif
Modified: trunk/Source/WebKit2/UIProcess/API/efl/GestureRecognizer.cpp (159400 => 159401)
--- trunk/Source/WebKit2/UIProcess/API/efl/GestureRecognizer.cpp 2013-11-18 07:51:26 UTC (rev 159400)
+++ trunk/Source/WebKit2/UIProcess/API/efl/GestureRecognizer.cpp 2013-11-18 08:25:09 UTC (rev 159401)
@@ -31,6 +31,7 @@
#include "EwkView.h"
#include "NotImplemented.h"
#include "WKSharedAPICast.h"
+#include "WKViewEfl.h"
#if ENABLE(TOUCH_EVENTS)
@@ -115,9 +116,51 @@
}
}
-void GestureHandler::handleSingleTap(const IntPoint&)
+void GestureHandler::handleSingleTap(const IntPoint& position)
{
- notImplemented();
+ Evas* evas = evas_object_evas_get(m_ewkView->evasObject());
+ ASSERT(evas);
+
+ // Send mouse move, down and up event to create fake click event.
+ Evas_Event_Mouse_Move mouseMove;
+ mouseMove.buttons = 0;
+ mouseMove.prev.output.x = mouseMove.prev.canvas.x = position.x();
+ mouseMove.prev.output.y = mouseMove.prev.canvas.y = position.y();
+ mouseMove.cur.output.x = mouseMove.cur.canvas.x = position.x();
+ mouseMove.cur.output.y = mouseMove.cur.canvas.y = position.y();
+ mouseMove.data = ""
+ mouseMove.modifiers = const_cast<Evas_Modifier*>(evas_key_modifier_get(evas));
+ mouseMove.locks = const_cast<Evas_Lock*>(evas_key_lock_get(evas));
+ mouseMove.timestamp = ecore_loop_time_get();
+ mouseMove.event_flags = EVAS_EVENT_FLAG_NONE;
+ mouseMove.dev = 0;
+ WKViewSendMouseMoveEvent(m_ewkView->wkView(), &mouseMove);
+
+ Evas_Event_Mouse_Down mouseDown;
+ mouseDown.button = 1;
+ mouseDown.output.x = mouseDown.canvas.x = position.x();
+ mouseDown.output.y = mouseDown.canvas.y = position.y();
+ mouseDown.data = ""
+ mouseDown.modifiers = const_cast<Evas_Modifier*>(evas_key_modifier_get(evas));
+ mouseDown.locks = const_cast<Evas_Lock*>(evas_key_lock_get(evas));
+ mouseDown.flags = EVAS_BUTTON_NONE;
+ mouseDown.timestamp = ecore_loop_time_get();
+ mouseDown.event_flags = EVAS_EVENT_FLAG_NONE;
+ mouseDown.dev = 0;
+ WKViewSendMouseDownEvent(m_ewkView->wkView(), &mouseDown);
+
+ Evas_Event_Mouse_Up mouseUp;
+ mouseUp.button = 1;
+ mouseUp.output.x = mouseUp.canvas.x = position.x();
+ mouseUp.output.y = mouseUp.canvas.y = position.y();
+ mouseUp.data = ""
+ mouseUp.modifiers = const_cast<Evas_Modifier*>(evas_key_modifier_get(evas));
+ mouseUp.locks = const_cast<Evas_Lock*>(evas_key_lock_get(evas));
+ mouseUp.flags = EVAS_BUTTON_NONE;
+ mouseUp.timestamp = ecore_loop_time_get();
+ mouseUp.event_flags = EVAS_EVENT_FLAG_NONE;
+ mouseUp.dev = 0;
+ WKViewSendMouseUpEvent(m_ewkView->wkView(), &mouseUp);
}
void GestureHandler::handleDoubleTap(const IntPoint&)
Modified: trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.cpp (159400 => 159401)
--- trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.cpp 2013-11-18 07:51:26 UTC (rev 159400)
+++ trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.cpp 2013-11-18 08:25:09 UTC (rev 159401)
@@ -29,6 +29,7 @@
#include "DownloadManagerEfl.h"
#include "EwkView.h"
#include "InputMethodContextEfl.h"
+#include "NativeWebMouseEvent.h"
#include "WebContextMenuProxyEfl.h"
#include "WebPopupMenuListenerEfl.h"
#include "ewk_context_private.h"
@@ -124,4 +125,22 @@
}
#endif
+void WebViewEfl::sendMouseEvent(const Evas_Event_Mouse_Down* event)
+{
+ ASSERT(event);
+ m_page->handleMouseEvent(NativeWebMouseEvent(event, transformFromScene(), m_userViewportTransform.toAffineTransform()));
+}
+
+void WebViewEfl::sendMouseEvent(const Evas_Event_Mouse_Up* event)
+{
+ ASSERT(event);
+ m_page->handleMouseEvent(NativeWebMouseEvent(event, transformFromScene(), m_userViewportTransform.toAffineTransform()));
+}
+
+void WebViewEfl::sendMouseEvent(const Evas_Event_Mouse_Move* event)
+{
+ ASSERT(event);
+ m_page->handleMouseEvent(NativeWebMouseEvent(event, transformFromScene(), m_userViewportTransform.toAffineTransform()));
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.h (159400 => 159401)
--- trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.h 2013-11-18 07:51:26 UTC (rev 159400)
+++ trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.h 2013-11-18 08:25:09 UTC (rev 159401)
@@ -47,6 +47,9 @@
#if ENABLE(TOUCH_EVENTS)
void sendTouchEvent(EwkTouchEvent*);
#endif
+ void sendMouseEvent(const Evas_Event_Mouse_Down*);
+ void sendMouseEvent(const Evas_Event_Mouse_Up*);
+ void sendMouseEvent(const Evas_Event_Mouse_Move*);
private:
WebViewEfl(WebContext*, WebPageGroup*);