From d1657fae80732d69a3c7a50b4f06292400d1d759 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sun, 21 Aug 2011 12:51:52 +0000 Subject: [PATCH] (svn r22794) -Codechange: let window drawing determine which windows may be drawn when a modal progress is busy --- src/window.cpp | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index fec88ce7df..748ed87465 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -468,6 +468,27 @@ static void DispatchMouseWheelEvent(Window *w, NWidgetCore *nwid, int wheel) } } +/** + * Returns whether a window may be shown or not. + * @param w The window to consider. + * @return True iff it may be shown, otherwise false. + */ +static bool MayBeShown(const Window *w) +{ + /* If we're not modal, everything is okay. */ + if (!HasModalProgress()) return true; + + switch (w->window_class) { + case WC_MAIN_WINDOW: ///< The background, i.e. the game. + case WC_MODAL_PROGRESS: ///< The actual progress window. + case WC_QUERY_STRING: ///< The abort window. + return true; + + default: + return false; + } +} + /** * Generate repaint events for the visible part of window w within the rectangle. * @@ -484,11 +505,12 @@ static void DrawOverlappedWindow(Window *w, int left, int top, int right, int bo { const Window *v; FOR_ALL_WINDOWS_FROM_BACK_FROM(v, w->z_front) { - if (right > v->left && + if (MayBeShown(v) && + right > v->left && bottom > v->top && left < v->left + v->width && top < v->top + v->height) { - /* v and rectangle intersect with eeach other */ + /* v and rectangle intersect with each other */ int x; if (left < (x = v->left)) { @@ -546,7 +568,8 @@ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom) _cur_dpi = &bk; FOR_ALL_WINDOWS_FROM_BACK(w) { - if (right > w->left && + if (MayBeShown(w) && + right > w->left && bottom > w->top && left < w->left + w->width && top < w->top + w->height) {