From 50cf698b76bd140a4ada4058f9abbee837289a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Mon, 16 Jun 2014 13:35:21 +0200 Subject: Android: Fix hover-event handling. The accessibility delegate needs to intercept the hover events before the view gets them, but since the dispatchHoverEvent() method was added in API level 14 and we build with API level < 14, we can't call the super class implementation (e.g., when the event isn't handled by the accessibility delegate). In the previous implementation we where trying to solve this by using the reflection API, but that does not provide a solution to call the super class implementation (Note: It's possible with JDK 7 or newer), so the code would call itself recursively and we would eventually get a stack overflow exception. This change uses the OnHoverListener class to intercept the hover events, this way we avoid "overriding" the dispatchHoverEvent() method in QtSurface and therefore avoid the problem it causes. Task-number: QTBUG-38905 Change-Id: I8b3cbad718d8524042397bb877e39e3005bfb4ce Reviewed-by: Frederik Gladhorn --- .../jar/src/org/qtproject/qt5/android/QtSurface.java | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'src/android/jar') diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java index 45a80a3dbb..ca3f20f11b 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java @@ -110,24 +110,6 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback } } - public boolean dispatchHoverEvent(MotionEvent event) { - // Always attempt to dispatch hover events to accessibility first. - if (m_accessibilityDelegate != null) { - try { - Method dispHoverA11y = m_accessibilityDelegate.getClass().getMethod("dispatchHoverEvent", MotionEvent.class); - boolean ret = (Boolean) dispHoverA11y.invoke(m_accessibilityDelegate, event); - if (ret) - return true; - SurfaceView view = (SurfaceView) this; - Method dispHoverView = view.getClass().getMethod("dispatchHoverEvent", MotionEvent.class); - return (Boolean) dispHoverView.invoke(view, event); - } catch (Exception e) { - Log.w("Qt A11y", "EXCEPTION in dispatchHoverEvent for Accessibility: " + e); - } - } - return false; - } - @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { -- cgit v1.2.3