]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/toplvcmn.cpp
Always send an erase event to satisfy some users...
[wxWidgets.git] / src / common / toplvcmn.cpp
index 9cc07cc8d8276f4b44b690c1b3185f6789894e53..6c9f3d89f93f900afebe73228983d133f9f1c4c2 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);
 }
@@ -166,4 +177,3 @@ bool wxTopLevelWindowBase::SendIconizeEvent(bool iconized)
 
     return GetEventHandler()->ProcessEvent(event);
 }
-