Fix error recovery when a drag can't be started

Also make sure to properly dispose *both* ends of the drag input
channel when we're done.  That was being tidied up after, but was
also making the system work harder and was provoking a bit of
debug logging.

Change-Id: I1ff3100bc4c441f1609c57242864d5744ff1aaa2
This commit is contained in:
Chris Tate
2010-10-22 19:10:34 -07:00
parent c17942f7b3
commit ef70a07753

View File

@@ -552,6 +552,7 @@ public class WindowManagerService extends IWindowManager.Stub
mInputManager.unregisterInputChannel(mServerChannel);
InputQueue.unregisterInputChannel(mClientChannel);
mClientChannel.dispose();
mServerChannel.dispose();
mClientChannel = null;
mServerChannel = null;
}
@@ -624,7 +625,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
if (DEBUG_DRAG) {
Slog.d(TAG, "sending DRAG_STARTED to new window " + newWin);
Slog.d(TAG, "need to send DRAG_STARTED to new window " + newWin);
}
sendDragStartedLw(newWin, mCurrentX, mCurrentY, mDataDescription);
}
@@ -6242,8 +6243,14 @@ public class WindowManagerService extends IWindowManager.Stub
mDragState.register();
mInputMonitor.updateInputWindowsLw();
mInputManager.transferTouchFocus(callingWin.mInputChannel,
mDragState.mServerChannel);
if (!mInputManager.transferTouchFocus(callingWin.mInputChannel,
mDragState.mServerChannel)) {
Slog.e(TAG, "Unable to transfer touch focus");
mDragState.unregister();
mDragState = null;
mInputMonitor.updateInputWindowsLw();
return false;
}
mDragState.mData = data;
mDragState.mCurrentX = touchX;