// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(__APPLE__)
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#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"
void wxTopLevelWindowMotif::PreDestroy()
{
- wxTopLevelWindows.DeleteObject(this);
-
- 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();
wxTopLevelWindowMotif::~wxTopLevelWindowMotif()
{
SetMainWidget( (WXWidget)0 );
-
- // If this is the last top-level window, exit.
- if (wxTheApp && (wxTopLevelWindows.GetCount() == 0))
- {
- wxTheApp->SetTopWindow(NULL);
-
- if (wxTheApp->GetExitOnFrameDelete())
- {
- wxTheApp->ExitMainLoop();
- }
- }
}
void wxTopLevelWindowMotif::Init()
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();
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];