X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/66f8b9ace213e02e184460e0c1a212cacea27edd..4227afa4f748870bbfce75047db465f024e0ac1d:/src/motif/toplevel.cpp diff --git a/src/motif/toplevel.cpp b/src/motif/toplevel.cpp index 9968142e41..d99fa360b0 100644 --- a/src/motif/toplevel.cpp +++ b/src/motif/toplevel.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(__APPLE__) +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "toplevel.h" #endif @@ -66,8 +66,6 @@ static void wxTLWEventHandler( Widget wid, void wxTopLevelWindowMotif::PreDestroy() { - wxTopLevelWindows.DeleteObject(this); - if ( (GetWindowStyleFlag() & wxDIALOG_MODAL) != wxDIALOG_MODAL ) wxModelessWindows.DeleteObject(this); @@ -90,17 +88,6 @@ void wxTopLevelWindowMotif::PreDestroy() 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() @@ -198,6 +185,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(); @@ -336,6 +346,13 @@ void wxTopLevelWindowMotif::SetSizeHints( int minW, int minH, XtSetValues( (Widget)GetShellWidget(), args, count ); } +bool wxTopLevelWindowMotif::SetShape( const wxRegion& region ) +{ + return wxDoSetShape( (Display*)GetXDisplay(), + XtWindow( (Widget)GetShellWidget() ), + region ); +} + // --------------------------------------------------------------------------- // Callback definition // ---------------------------------------------------------------------------