From ff6b424a2e66adde9357ed87eb3a9b9448173806 Mon Sep 17 00:00:00 2001 From: Julian Smart 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.45.2