Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3486b969 authored by Craig Mautner's avatar Craig Mautner
Browse files

Fix drag bug.

Previous assumption -- that the drag window was defined at time of
DragState construction -- was false. The window, and hence the
Display, is not known until performDrag. This change delays assigning
DragState.mDisplayContent until the window/Display is known.

Fixes bug 7028203.

Change-Id: I5799005652c484ff0c45ab340ce3b9e4b784883e
parent 71d7c3c6
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -71,12 +71,6 @@ class DragState {
        mFlags = flags;
        mLocalWin = localWin;
        mNotifiedWindows = new ArrayList<WindowState>();
        WindowState win = service.mWindowMap.get(token);
        if (win != null) {
            mDisplayContent = win.mDisplayContent;
        } else {
            Slog.e(WindowManagerService.TAG, "No window associated with token");
        }
    }

    void reset() {
@@ -92,7 +86,11 @@ class DragState {
        mNotifiedWindows = null;
    }

    void register() {
    /**
     * @param displayContent The display parameters associated with the window being dragged.
     */
    void register(DisplayContent displayContent) {
        mDisplayContent = displayContent;
        if (WindowManagerService.DEBUG_DRAG) Slog.d(WindowManagerService.TAG, "registering drag input channel");
        if (mClientChannel != null) {
            Slog.e(WindowManagerService.TAG, "Duplicate register of drag input channel");
+1 −1
Original line number Diff line number Diff line
@@ -280,7 +280,7 @@ final class Session extends IWindowSession.Stub
            // !!! FIXME: put all this heavy stuff onto the mH looper, as well as
            // the actual drag event dispatch stuff in the dragstate

            mService.mDragState.register();
            mService.mDragState.register(callingWin.mDisplayContent);
            mService.mInputMonitor.updateInputWindowsLw(true /*force*/);
            if (!mService.mInputManager.transferTouchFocus(callingWin.mInputChannel,
                    mService.mDragState.mServerChannel)) {