]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/toplvcmn.cpp
resource loader structure added for loading menu bar, apple menu will not get multipl...
[wxWidgets.git] / src / common / toplvcmn.cpp
index 9cc07cc8d8276f4b44b690c1b3185f6789894e53..0e21ec247b808ce94154ce991a6b915c2be2853c 100644 (file)
@@ -45,6 +45,11 @@ END_EVENT_TABLE()
 // implementation
 // ============================================================================
 
+// FIXME: some platforms don't have wxTopLevelWindow yet
+#ifdef wxTopLevelWindowNative
+    IMPLEMENT_DYNAMIC_CLASS(wxTopLevelWindow, wxWindow)
+#endif
+
 // ----------------------------------------------------------------------------
 // construction/destruction
 // ----------------------------------------------------------------------------
@@ -53,6 +58,11 @@ wxTopLevelWindowBase::wxTopLevelWindowBase()
 {
 }
 
+wxTopLevelWindowBase::~wxTopLevelWindowBase()
+{
+    // this destructor is required for Darwin
+}
+
 bool wxTopLevelWindowBase::Destroy()
 {
     // delayed destruction: the frame will be deleted during the next idle
@@ -64,31 +74,32 @@ bool wxTopLevelWindowBase::Destroy()
 }
 
 // ----------------------------------------------------------------------------
-// wxTopLevelWindow size management: we exclude the areas taken by menu/status/toolbars
-// from the client area, so the client area is what's really available for the
-// frame contents
+// wxTopLevelWindow size management: we exclude the areas taken by
+// menu/status/toolbars from the client area, so the client area is what's
+// really available for the frame contents
 // ----------------------------------------------------------------------------
 
 void wxTopLevelWindowBase::DoScreenToClient(int *x, int *y) const
 {
     wxWindow::DoScreenToClient(x, y);
 
-    // We may be faking the client origin.
-    // So a window that's really at (0, 30) may appear
-    // (to wxWin apps) to be at (0, 0).
+    // translate the wxWindow client coords to our client coords
     wxPoint pt(GetClientAreaOrigin());
-    *x -= pt.x;
-    *y -= pt.y;
+    if ( x )
+        *x -= pt.x;
+    if ( y )
+        *y -= pt.y;
 }
 
 void wxTopLevelWindowBase::DoClientToScreen(int *x, int *y) const
 {
-    // We may be faking the client origin.
-    // So a window that's really at (0, 30) may appear
-    // (to wxWin apps) to be at (0, 0).
-    wxPoint pt1(GetClientAreaOrigin());
-    *x += pt1.x;
-    *y += pt1.y;
+    // our client area origin (0, 0) may be really something like (0, 30) for
+    // wxWindow if we have a toolbar, account for it before translating
+    wxPoint pt(GetClientAreaOrigin());
+    if ( x )
+        *x += pt.x;
+    if ( y )
+        *y += pt.y;
 
     wxWindow::DoClientToScreen(x, y);
 }
@@ -126,6 +137,9 @@ void wxTopLevelWindowBase::OnSize(wxSizeEvent& WXUNUSED(event))
             {
                 if ( child )
                 {
+#ifdef __WXPM__
+                    AlterChildPos();
+#endif
                     return;     // it's our second subwindow - nothing to do
                 }
 
@@ -149,6 +163,9 @@ void wxTopLevelWindowBase::OnSize(wxSizeEvent& WXUNUSED(event))
 #endif
 
             child->SetSize(ofs, ofs, clientW - 2*ofs, clientH - 2*ofs);
+#ifdef __WXPM__
+            UpdateInternalSize(child, clientH);
+#endif
         }
     }
 }
@@ -166,4 +183,3 @@ bool wxTopLevelWindowBase::SendIconizeEvent(bool iconized)
 
     return GetEventHandler()->ProcessEvent(event);
 }
-