summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaciej Białka <maciej.bialka@sonyericsson.com>2010-03-05 08:40:09 +0100
committerJean-Baptiste Queru <jbq@google.com>2010-07-19 15:12:20 -0700
commit26824b7a9e4f5fe5c3b7e0576320f58fd035b100 (patch)
treec68afdd59d0b09c36d854232c32dff5a75f309e3
parent45988040454b710c20abf5fda74cdafb874a28bf (diff)
downloadframeworks_base-26824b7a9e4f5fe5c3b7e0576320f58fd035b100.zip
frameworks_base-26824b7a9e4f5fe5c3b7e0576320f58fd035b100.tar.gz
frameworks_base-26824b7a9e4f5fe5c3b7e0576320f58fd035b100.tar.bz2
Remove the window from being a target for motion events when it is destroyed.
If window was destroyed when touch was pressed this destroyed window was still considered as a target for motion events. In some cases this could result with hang up inside event dispatch procedure. Change-Id: I2ede17a40b14b2f509ab3d2560abb65292324f45
-rw-r--r--services/java/com/android/server/WindowManagerService.java7
1 files changed, 7 insertions, 0 deletions
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 88463b0..68787cd 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -2149,6 +2149,7 @@ public class WindowManagerService extends IWindowManager.Stub
private void removeWindowInnerLocked(Session session, WindowState win) {
mKeyWaiter.finishedKey(session, win.mClient, true,
KeyWaiter.RETURN_NOTHING);
+ mKeyWaiter.releaseMotionTarget(win);
mKeyWaiter.releasePendingPointerLocked(win.mSession);
mKeyWaiter.releasePendingTrackballLocked(win.mSession);
@@ -6120,6 +6121,12 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
+ void releaseMotionTarget(WindowState win) {
+ if (mMotionTarget == win) {
+ mMotionTarget = null;
+ }
+ }
+
MotionEvent finishedKey(Session session, IWindow client, boolean force,
int returnWhat) {
if (DEBUG_INPUT) Slog.v(