Warning, /graphics/krita/3rdparty/ext_qt/0025-Android-Move-events-handling-to-QtLayout.patch is written in an unsupported language. File is not indexed.
0001 From 8ac206954f3f45c156e0d380507705c07fb65bc0 Mon Sep 17 00:00:00 2001 0002 From: Sharaf Zaman <sharafzaz121@gmail.com> 0003 Date: Mon, 19 Oct 2020 10:09:57 +0000 0004 Subject: [PATCH 25/46] Android: Move events handling to QtLayout 0005 0006 Whenever a widget with Qt::Window flag is used a new 0007 QtSurface is created and this is used by Android to 0008 send us events. However, as soon as this Surface is 0009 destroyed, the events stop coming until the user 0010 starts the new event by touching the new Surface. 0011 This causes interruptions and leaves events in an 0012 undefined state in apps where events are supposed to 0013 come in continuous manner. 0014 0015 By moving it to ViewGroup, we stop relying on Surfaces. 0016 0017 [ChangeLog][Android] Move events handling to QtLayout 0018 --- 0019 .../org/qtproject/qt5/android/QtLayout.java | 43 +++++++++++++++++++ 0020 .../org/qtproject/qt5/android/QtSurface.java | 31 ------------- 0021 2 files changed, 43 insertions(+), 31 deletions(-) 0022 0023 diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java 0024 index f22b8176c8..6b067a9cfd 100644 0025 --- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java 0026 +++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java 0027 @@ -46,24 +46,42 @@ import android.util.AttributeSet; 0028 import android.util.DisplayMetrics; 0029 import android.view.View; 0030 import android.view.ViewGroup; 0031 +import android.view.MotionEvent; 0032 +import android.view.GestureDetector; 0033 0034 public class QtLayout extends ViewGroup 0035 { 0036 + private GestureDetector m_gestureDetector; 0037 private Runnable m_startApplicationRunnable; 0038 + 0039 public QtLayout(Context context, Runnable startRunnable) 0040 { 0041 super(context); 0042 m_startApplicationRunnable = startRunnable; 0043 + initializeGestureDetector(context); 0044 } 0045 0046 public QtLayout(Context context, AttributeSet attrs) 0047 { 0048 super(context, attrs); 0049 + initializeGestureDetector(context); 0050 } 0051 0052 public QtLayout(Context context, AttributeSet attrs, int defStyle) 0053 { 0054 super(context, attrs, defStyle); 0055 + initializeGestureDetector(context); 0056 + } 0057 + 0058 + private void initializeGestureDetector(Context context) 0059 + { 0060 + m_gestureDetector = 0061 + new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 0062 + public void onLongPress(MotionEvent event) { 0063 + QtNative.longPress(getId(), (int) event.getX(), (int) event.getY()); 0064 + } 0065 + }); 0066 + m_gestureDetector.setIsLongpressEnabled(true); 0067 } 0068 0069 @Override 0070 @@ -252,4 +270,29 @@ public class QtLayout extends ViewGroup 0071 addView(childView, params); 0072 } 0073 } 0074 + 0075 + @Override 0076 + public boolean onInterceptTouchEvent(MotionEvent ev) { 0077 + return true; 0078 + } 0079 + 0080 + @Override 0081 + public boolean onTouchEvent(MotionEvent event) { 0082 + QtNative.sendTouchEvent(event, getId()); 0083 + m_gestureDetector.onTouchEvent(event); 0084 + return true; 0085 + } 0086 + 0087 + @Override 0088 + public boolean onTrackballEvent(MotionEvent event) 0089 + { 0090 + QtNative.sendTrackballEvent(event, getId()); 0091 + return true; 0092 + } 0093 + 0094 + @Override 0095 + public boolean onGenericMotionEvent(MotionEvent event) 0096 + { 0097 + return QtNative.sendGenericMotionEvent(event, getId()); 0098 + } 0099 } 0100 diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java 0101 index 08b5a80f7e..723a783c6b 100644 0102 --- a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java 0103 +++ b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java 0104 @@ -43,8 +43,6 @@ package org.qtproject.qt5.android; 0105 import android.app.Activity; 0106 import android.content.Context; 0107 import android.graphics.PixelFormat; 0108 -import android.view.GestureDetector; 0109 -import android.view.MotionEvent; 0110 import android.view.SurfaceHolder; 0111 import android.view.SurfaceView; 0112 0113 @@ -53,7 +51,6 @@ import java.lang.reflect.Method; 0114 0115 public class QtSurface extends SurfaceView implements SurfaceHolder.Callback 0116 { 0117 - private GestureDetector m_gestureDetector; 0118 private Object m_accessibilityDelegate = null; 0119 0120 public QtSurface(Context context, int id, boolean onTop, int imageDepth) 0121 @@ -69,13 +66,6 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback 0122 getHolder().setFormat(PixelFormat.RGBA_8888); 0123 0124 setId(id); 0125 - m_gestureDetector = 0126 - new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 0127 - public void onLongPress(MotionEvent event) { 0128 - QtNative.longPress(getId(), (int) event.getX(), (int) event.getY()); 0129 - } 0130 - }); 0131 - m_gestureDetector.setIsLongpressEnabled(true); 0132 } 0133 0134 @Override 0135 @@ -97,25 +87,4 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback 0136 { 0137 QtNative.setSurface(getId(), null, 0, 0); 0138 } 0139 - 0140 - @Override 0141 - public boolean onTouchEvent(MotionEvent event) 0142 - { 0143 - QtNative.sendTouchEvent(event, getId()); 0144 - m_gestureDetector.onTouchEvent(event); 0145 - return true; 0146 - } 0147 - 0148 - @Override 0149 - public boolean onTrackballEvent(MotionEvent event) 0150 - { 0151 - QtNative.sendTrackballEvent(event, getId()); 0152 - return true; 0153 - } 0154 - 0155 - @Override 0156 - public boolean onGenericMotionEvent(MotionEvent event) 0157 - { 0158 - return QtNative.sendGenericMotionEvent(event, getId()); 0159 - } 0160 } 0161 -- 0162 2.33.0 0163