auto import from //depot/cupcake/@135863

This commit is contained in:
The Android Open Source Project
2009-03-04 09:49:09 -08:00
parent 41df385128
commit c474dec3ff

View File

@@ -1254,8 +1254,10 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
res |= WindowManagerImpl.ADD_FLAG_APP_VISIBLE;
}
boolean focusChanged = false;
if (win.canReceiveKeys()) {
if (updateFocusedWindowLocked(UPDATE_FOCUS_WILL_ASSIGN_LAYERS)) {
if ((focusChanged=updateFocusedWindowLocked(UPDATE_FOCUS_WILL_ASSIGN_LAYERS))
== true) {
imMayMove = false;
}
}
@@ -1270,6 +1272,12 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
//dump();
if (focusChanged) {
if (mCurrentFocus != null) {
mKeyWaiter.handleNewWindowLocked(mCurrentFocus);
}
}
if (localLOGV) Log.v(
TAG, "New client " + client.asBinder()
+ ": window=" + win);
@@ -1633,17 +1641,18 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
outSurface.clear();
}
boolean assignLayers = false;
if (focusMayChange) {
//System.out.println("Focus may change: " + win.mAttrs.getTitle());
if (updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
assignLayers = true;
imMayMove = false;
}
//System.out.println("Relayout " + win + ": focus=" + mCurrentFocus);
}
// updateFocusedWindowLocked() already assigned layers so we only need to
// reassign them at this point if the IM window state gets shuffled
boolean assignLayers = false;
if (imMayMove) {
if (moveInputMethodWindowsIfNeededLocked(false)) {
assignLayers = true;
@@ -2371,7 +2380,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
}
updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
assignLayersLocked();
mLayoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
Binder.restoreCallingIdentity(origId);
@@ -2513,7 +2521,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
if (changed && performLayout) {
mLayoutNeeded = true;
updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
assignLayersLocked();
performLayoutAndPlaceSurfacesLocked();
}
}
@@ -2894,7 +2901,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
if (DEBUG_REORDER) Log.v(TAG, "Final window list:");
if (DEBUG_REORDER) dumpWindowsLocked();
updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
assignLayersLocked();
mLayoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
}
@@ -2942,7 +2948,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
}
updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES);
assignLayersLocked();
mLayoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
@@ -4114,6 +4119,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
private long timeToSwitch;
private boolean wasFrozen;
private boolean focusPaused;
private WindowState curFocus;
DispatchState(KeyEvent theEvent, WindowState theFocus) {
focus = theFocus;
@@ -4127,6 +4133,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
eventDispatching = mEventDispatching;
timeToSwitch = mTimeToSwitch;
wasFrozen = mWasFrozen;
curFocus = mCurrentFocus;
// cache the paused state at ctor time as well
if (theFocus == null || theFocus.mToken == null) {
Log.i(TAG, "focus " + theFocus + " mToken is null at event dispatch!");
@@ -4141,7 +4148,8 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
+ " lw=" + lastWin + " lb=" + lastBinder
+ " fin=" + finished + " gfw=" + gotFirstWindow
+ " ed=" + eventDispatching + " tts=" + timeToSwitch
+ " wf=" + wasFrozen + " fp=" + focusPaused + "}}";
+ " wf=" + wasFrozen + " fp=" + focusPaused
+ " mcf=" + mCurrentFocus + "}}";
}
};
private DispatchState mDispatchState = null;
@@ -4261,7 +4269,8 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
+ " targetIsNew=" + targetIsNew
+ " paused="
+ (targetWin != null ? targetWin.mToken.paused : false)
+ " mFocusedApp=" + mFocusedApp);
+ " mFocusedApp=" + mFocusedApp
+ " mCurrentFocus=" + mCurrentFocus);
targetApp = targetWin != null
? targetWin.mAppToken : mFocusedApp;
@@ -4290,7 +4299,10 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
wait(curTimeout);
if (DEBUG_INPUT) Log.v(TAG, "Finished waiting @"
+ SystemClock.uptimeMillis() + " startTime="
+ startTime + " switchTime=" + mTimeToSwitch);
+ startTime + " switchTime=" + mTimeToSwitch
+ " target=" + targetWin + " mLW=" + mLastWin
+ " mLB=" + mLastBinder + " fin=" + mFinished
+ " mCurrentFocus=" + mCurrentFocus);
} catch (InterruptedException e) {
}
}
@@ -4656,10 +4668,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
mFinished = true;
notifyAll();
}
} else {
if (DEBUG_INPUT || true) Log.v(
TAG, "finishedKey: " + client + " tried to finish but mLastBinder="
+ mLastBinder);
}
if (qev != null) {
@@ -4687,7 +4695,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
return;
}
synchronized (this) {
if (DEBUG_INPUT || true) Log.v(
if (DEBUG_INPUT) Log.v(
TAG, "New key dispatch window: win="
+ newWindow.mClient.asBinder()
+ ", last=" + mLastBinder
@@ -4701,7 +4709,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
newWindow.mToken.paused = false;
mGotFirstWindow = true;
boolean doNotify = true;
if ((newWindow.mAttrs.flags & FLAG_SYSTEM_ERROR) != 0) {
if (DEBUG_INPUT) Log.v(TAG,
@@ -4718,29 +4725,21 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
TAG, "Last win layer=" + mLastWin.mLayer
+ ", new win layer=" + newWindow.mLayer);
if (newWindow.mLayer >= mLastWin.mLayer) {
if (!mLastWin.canReceiveKeys()) {
mLastWin.mToken.paused = false;
if (DEBUG_INPUT || true) Log.v(TAG,
"Finishing old key to " + mLastWin);
doFinishedKeyLocked(true); // does a notifyAll()
doNotify = false;
} else {
if (DEBUG_INPUT || true) Log.v(TAG, "mLastWin " + mLastWin
+ " still receiving keys; not resetting dispatch to "
+ newWindow);
}
} else {
// the new window is lower; no need to wake key waiters
if (DEBUG_INPUT || true) Log.v(TAG,
"New layer " + newWindow.mLayer + " is below last layer "
+ mLastWin.mLayer + " - not resetting dispatch");
doNotify = false;
// The new window is above the old; finish pending input to the last
// window and start directing it to the new one.
mLastWin.mToken.paused = false;
doFinishedKeyLocked(true); // does a notifyAll()
}
// Either the new window is lower, so there is no need to wake key waiters,
// or we just finished key input to the previous window, which implicitly
// notified the key waiters. In both cases, we don't need to issue the
// notification here.
return;
}
if (doNotify) {
notifyAll();
}
// Now that we've put a new window state in place, make the event waiter
// take notice and retarget its attentions.
notifyAll();
}
}
@@ -8397,23 +8396,26 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo
final WindowState oldFocus = mCurrentFocus;
mCurrentFocus = newFocus;
mLosingFocus.remove(newFocus);
if (newFocus != null) {
mKeyWaiter.handleNewWindowLocked(newFocus);
}
final WindowState imWindow = mInputMethodWindow;
if (newFocus != imWindow && oldFocus != imWindow) {
moveInputMethodWindowsIfNeededLocked(
if (moveInputMethodWindowsIfNeededLocked(
mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS &&
mode != UPDATE_FOCUS_WILL_PLACE_SURFACES);
mLayoutNeeded = true;
mode != UPDATE_FOCUS_WILL_PLACE_SURFACES)) {
mLayoutNeeded = true;
}
if (mode == UPDATE_FOCUS_PLACING_SURFACES) {
performLayoutLockedInner();
} else if (mode != UPDATE_FOCUS_WILL_PLACE_SURFACES) {
mLayoutNeeded = true;
performLayoutAndPlaceSurfacesLocked();
} else if (mode == UPDATE_FOCUS_WILL_PLACE_SURFACES) {
// Client will do the layout, but we need to assign layers
// for handleNewWindowLocked() below.
assignLayersLocked();
}
}
if (newFocus != null && mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS) {
mKeyWaiter.handleNewWindowLocked(newFocus);
}
return true;
}
return false;