]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/nanox.c
[ 1563875 ] wxTreeCtrl::FindItem asserts when item not found
[wxWidgets.git] / src / x11 / nanox.c
index 1f220e3e517730ac9d9eed0f3a44cedeb3d821fa..5c2c8b27ab74989ae51ef964f2a308a6a6ba6f5e 100644 (file)
@@ -2,19 +2,17 @@
  * nanox.c
  *
  * Replacements for some comomon Xlib functions
+ * Licence: The wxWidgets licence
  */
 
 #include "wx/setup.h"
 
 #if wxUSE_NANOX
 
-#ifdef __GNUG__
-#pragma implementation "Xlib.h"
-#endif
-
 #include <ctype.h>
 #include <malloc.h>
 #include <string.h>
+#include <stdio.h>
 #include "wx/defs.h"
 #include "wx/x11/nanox/X11/Xlib.h"
 
@@ -154,6 +152,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;
@@ -179,12 +179,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)
     {
@@ -351,6 +364,7 @@ XFontStruct* XLoadQueryFont(Display* display, const char* fontSpec)
     XFontStruct* fontInfo = malloc(sizeof(XFontStruct));
     fontInfo->fid = GrCreateFont(fontName, 0, 0);
     GrGetFontInfo(fontInfo->fid, & fontInfo->info);
+    printf("Warning: should not call XLoadQueryFont since font spec is not used in Nano-X.\n");
     return fontInfo;
 }
 
@@ -433,5 +447,13 @@ int XTranslateCoordinates(Display* display, Window srcWindow, Window destWindow,
     return 1;
 }
 
+/* Should not really be necessary but in no-optimize mode
+ * gcc complains that wxNoop is not found if wxNoop is inline.
+ */
+
+void wxNoop()
+{
+}
+
 #endif
   /* wxUSE_NANOX */