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

Commit ef17e871 authored by Michael Wright's avatar Michael Wright
Browse files

Flush pending input events immediately upon channel dispose

Change-Id: I949326423f733376aa8d3121bfed24fd76ca0784
parent 10f9b099
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -372,6 +372,7 @@ public final class InputMethodManager {
                            return;
                        }
                        
                        flushPendingEventsLocked();
                        mCurMethod = res.method;
                        if (mCurChannel != null) {
                            mCurChannel.dispose();
@@ -718,6 +719,7 @@ public final class InputMethodManager {
     */
    void clearBindingLocked() {
        clearConnectionLocked();
        flushPendingEventsLocked();
        mBindSequence = -1;
        mCurId = null;
        mCurMethod = null;
@@ -1712,6 +1714,30 @@ public final class InputMethodManager {
        }
    }

    private void flushPendingEventsLocked() {
        mH.removeMessages(MSG_EVENT_TIMEOUT);
        PendingEvent curr, prev, next;
        curr = mFirstPendingEvent;
        prev = null;
        while (curr != null) {
            next = curr.mNext;
            curr.mNext = prev;
            prev = curr;
            curr = next;
        }
        curr = prev;
        prev = null;
        while (curr != null) {
            Message msg = mH.obtainMessage(MSG_EVENT_TIMEOUT, curr.mSeq, 0, curr);
            msg.setAsynchronous(true);
            mH.sendMessage(msg);
            next = curr.mNext;
            curr.mNext = prev;
            prev = curr;
            curr = next;
        }
    }

    public void showInputMethodPicker() {
        synchronized (mH) {
            showInputMethodPickerLocked();