From ff6b424a2e66adde9357ed87eb3a9b9448173806 Mon Sep 17 00:00:00 2001
From: Julian Smart <julian@anthemion.co.uk>
Date: Tue, 26 Feb 2002 14:51:08 +0000
Subject: [PATCH] Fixed XGetWindowAttributes so 'mapped' is reported correctly.
 About box now pops up, but is a mess.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14412 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 src/x11/app.cpp    |  2 ++
 src/x11/nanox.c    | 17 ++++++++++++++++-
 src/x11/window.cpp |  2 ++
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/x11/app.cpp b/src/x11/app.cpp
index 83dbe13466..fe76481c95 100644
--- a/src/x11/app.cpp
+++ b/src/x11/app.cpp
@@ -180,8 +180,10 @@ void wxApp::CleanUp()
 int wxEntryStart( int& argc, char *argv[] )
 {
 #ifdef __WXDEBUG__
+#if !wxUSE_NANOX
     // install the X error handler
     gs_pfnXErrorHandler = XSetErrorHandler( wxXErrorHandler );
+#endif
 #endif // __WXDEBUG__
 
     wxString displayName;
diff --git a/src/x11/nanox.c b/src/x11/nanox.c
index ee7dda4098..0aafc49442 100644
--- a/src/x11/nanox.c
+++ b/src/x11/nanox.c
@@ -155,6 +155,8 @@ Status XGetWindowAttributes(Display* display, Window w,
                             XWindowAttributes* window_attributes)
 {
     GR_WINDOW_INFO info;
+    Window parent = 0;
+    GrFlush();
     GrGetWindowInfo(w, & info);
 
     window_attributes->x = info.x;
@@ -180,12 +182,25 @@ Status XGetWindowAttributes(Display* display, Window w,
     window_attributes->override_redirect = FALSE;
     window_attributes->screen = NULL;
 
+    /* We need to check if any parents are unmapped,
+     * or we will report a window as mapped when it is not.
+     */
+    parent = info.parent;
+    while (parent)
+    {
+        GrGetWindowInfo(parent, & info);
+        if (info.mapped == 0)
+            window_attributes->map_state = IsUnmapped;
+
+        parent = info.parent;
+    }
+
     return 1;
 }
 
 static XErrorHandler* g_ErrorHandler = NULL;
 
-static void DefaultNanoXErrorHandler(GR_EVENT_ERROR* ep)
+void DefaultNanoXErrorHandler(GR_EVENT_ERROR* ep)
 {
     if (g_ErrorHandler)
     {
diff --git a/src/x11/window.cpp b/src/x11/window.cpp
index 8159498ff7..a83a67877c 100644
--- a/src/x11/window.cpp
+++ b/src/x11/window.cpp
@@ -1062,7 +1062,9 @@ void wxWindowX11::OnInternalIdle()
 
     // Set the input focus if couldn't do it before
     if (m_needsInputFocus)
+    {
 	SetFocus();
+    }
 }
 
 // ----------------------------------------------------------------------------
-- 
2.47.2