]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/toplevel.cpp
Crash fix under VC++
[wxWidgets.git] / src / motif / toplevel.cpp
index 5f2891a4e5ff1f7324412208fb1fadce5d97f838..40b9fc446bab1174a037e8141d1744a9a8beab58 100644 (file)
@@ -21,6 +21,9 @@
     #pragma implementation "toplevel.h"
 #endif
 
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
 #include "wx/toplevel.h"
 #include "wx/app.h"
 
@@ -66,8 +69,14 @@ static void wxTLWEventHandler( Widget wid,
 
 void wxTopLevelWindowMotif::PreDestroy()
 {
-    if ( (GetWindowStyleFlag() & wxDIALOG_MODAL) != wxDIALOG_MODAL )
+#ifdef __VMS
+#pragma message disable codcauunr
+#endif
+   if ( (GetWindowStyleFlag() & wxDIALOG_MODAL) != wxDIALOG_MODAL )
         wxModelessWindows.DeleteObject(this);
+#ifdef __VMS
+#pragma message enable codcauunr
+#endif
 
     m_icons.m_icons.Empty();
 
@@ -185,6 +194,29 @@ bool wxTopLevelWindowMotif::Create( wxWindow *parent, wxWindowID id,
     return retval;
 }
 
+void wxTopLevelWindowMotif::DoGetPosition(int *x, int *y) const
+{
+    Widget top = (Widget) GetTopWidget();
+    Window parent_window = XtWindow((Widget) top),
+        next_parent   = XtWindow((Widget) top),
+        root          = RootWindowOfScreen(XtScreen((Widget) top));
+
+    // search for the parent that is child of ROOT, because the WM may
+    // reparent twice and notify only the next parent (like FVWM)
+    while (next_parent != root) {
+        Window *theChildren; unsigned int n;
+        parent_window = next_parent;
+        XQueryTree(XtDisplay((Widget) top), parent_window, &root,
+            &next_parent, &theChildren, &n);
+        XFree(theChildren); // not needed
+    }
+    int xx, yy; unsigned int dummy;
+    XGetGeometry(XtDisplay((Widget) top), parent_window, &root,
+        &xx, &yy, &dummy, &dummy, &dummy, &dummy);
+    if (x) *x = xx;
+    if (y) *y = yy;
+}
+
 void wxTopLevelWindowMotif::Raise()
 {
     Widget top = (Widget) GetTopWidget();
@@ -304,11 +336,11 @@ bool wxTopLevelWindowMotif::IsMaximized() const
     return FALSE;
 }
 
-void wxTopLevelWindowMotif::SetSizeHints( int minW, int minH,
-                                          int maxW, int maxH,
-                                          int incW, int incH )
+void wxTopLevelWindowMotif::DoSetSizeHints( int minW, int minH,
+                                            int maxW, int maxH,
+                                            int incW, int incH )
 {
-    wxTopLevelWindowBase::SetSizeHints( minW, minH, maxW, maxH, incW, incH );
+    wxTopLevelWindowBase::DoSetSizeHints( minW, minH, maxW, maxH, incW, incH );
 
     int count = 0;
     Arg args[6];