// resources.
closeAllWindows();
+ // Close the desktop.
+ if (desktop != null) {
+ setDesktop(null);
+ }
+
// Give the overarching application an opportunity to release
// resources.
onExit();
oldMouseY = 0;
}
if (desktop != null) {
- desktop.setDimensions(0, 0, resize.getWidth(),
- resize.getHeight() - (hideStatusBar ? 0 : 1));
+ desktop.setDimensions(0, desktopTop, resize.getWidth(),
+ (desktopBottom - desktopTop));
desktop.onResize(resize);
}
*/
public final void setDesktop(final TDesktop desktop) {
if (this.desktop != null) {
+ this.desktop.onPreClose();
+ this.desktop.onUnfocus();
this.desktop.onClose();
}
this.desktop = desktop;
// Place the cursor if it is visible
if (!menuIsActive) {
+
+ int visibleWindowCount = 0;
+ for (TWindow window: sorted) {
+ if (window.isShown()) {
+ visibleWindowCount++;
+ }
+ }
+ if (visibleWindowCount == 0) {
+ // No windows are visible, only the desktop. Allow it to
+ // have the cursor.
+ if (desktop != null) {
+ sorted.add(desktop);
+ }
+ }
+
TWidget activeWidget = null;
if (sorted.size() > 0) {
activeWidget = sorted.get(sorted.size() - 1).getActiveChild();
+ int cursorClipTop = desktopTop;
+ int cursorClipBottom = desktopBottom;
if (activeWidget.isCursorVisible()) {
- if ((activeWidget.getCursorAbsoluteY() < desktopBottom)
- && (activeWidget.getCursorAbsoluteY() > desktopTop)
+ if ((activeWidget.getCursorAbsoluteY() <= cursorClipBottom)
+ && (activeWidget.getCursorAbsoluteY() >= cursorClipTop)
) {
getScreen().putCursor(true,
activeWidget.getCursorAbsoluteX(),