X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1bc822dfb5cdc24fd2d98b59ea20c9951301bfb1..8534ba34283b7011a9b63aa1e65ee47fe6cc5688:/src/motif/frame.cpp?ds=sidebyside diff --git a/src/motif/frame.cpp b/src/motif/frame.cpp index 2b8dc03fff..6213bc498c 100644 --- a/src/motif/frame.cpp +++ b/src/motif/frame.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "frame.h" #endif @@ -36,6 +36,7 @@ #include "wx/utils.h" #include "wx/log.h" #include "wx/app.h" +#include "wx/icon.h" #ifdef __VMS__ #pragma message disable nosimpint @@ -87,10 +88,6 @@ static void wxFrameMapProc(Widget frameShell, XtPointer clientData, extern wxList wxModelessWindows; extern wxList wxPendingDelete; -// TODO: this should be tidied so that any frame can be the -// top frame -// static bool wxTopLevelUsed = FALSE; - // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- @@ -100,7 +97,7 @@ BEGIN_EVENT_TABLE(wxFrame, wxFrameBase) EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged) END_EVENT_TABLE() -IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow) +IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow) // ============================================================================ // implementation @@ -119,7 +116,6 @@ void wxFrame::Init() m_mainWidget = (WXWidget) NULL;; m_workArea = (WXWidget) NULL;; m_clientArea = (WXWidget) NULL;; - // m_visibleStatus = TRUE; } bool wxFrame::Create(wxWindow *parent, @@ -205,25 +201,13 @@ bool wxFrame::DoCreate( wxWindow* parent, wxWindowID id, long style, const wxString& name ) { - static bool wxTopLevelUsed = FALSE; /* this is global */ - WXWidget frameShell; + Widget frameShell; - if (wxTopLevelUsed) - { - // Change suggested by Matthew Flatt - frameShell = (WXWidget)XtAppCreateShell( name, - wxTheApp->GetClassName(), - topLevelShellWidgetClass, - (Display*) wxGetDisplay(), - NULL, 0 ); - } - else - { - frameShell = wxTheApp->GetTopLevelWidget(); - wxTopLevelUsed = TRUE; - } + frameShell = XtCreatePopupShell( name, topLevelShellWidgetClass, + (Widget)wxTheApp->GetTopLevelWidget(), + NULL, 0 ); - XtVaSetValues((Widget) frameShell, + XtVaSetValues(frameShell, // Allows menu to resize XmNallowShellResize, True, XmNdeleteResponse, XmDO_NOTHING, @@ -231,10 +215,10 @@ bool wxFrame::DoCreate( wxWindow* parent, wxWindowID id, XmNiconic, (style & wxICONIZE) ? TRUE : FALSE, NULL); - m_frameShell = frameShell; + m_frameShell = (WXWidget)frameShell; m_mainWidget = (WXWidget) XtVaCreateManagedWidget("main_window", - xmMainWindowWidgetClass, (Widget) frameShell, + xmMainWindowWidgetClass, frameShell, XmNresizePolicy, XmRESIZE_NONE, NULL); @@ -265,11 +249,11 @@ bool wxFrame::DoCreate( wxWindow* parent, wxWindowID id, XtFree( (char *)ptr ); /* Part of show-&-hide fix */ - XtAddEventHandler( (Widget)frameShell, StructureNotifyMask, + XtAddEventHandler( frameShell, StructureNotifyMask, False, (XtEventHandler)wxFrameMapProc, (XtPointer)this ); - XtRealizeWidget((Widget) frameShell); + XtRealizeWidget(frameShell); wxAddWindowToTable( (Widget)m_workArea, this); wxAddWindowToTable( (Widget)m_clientArea, this); @@ -309,15 +293,19 @@ wxFrame::~wxFrame() delete m_frameStatusBar; m_frameStatusBar = NULL; } + + PreDestroy(); + DoDestroy(); } void wxFrame::DoDestroy() { Widget frameShell = (Widget)GetShellWidget(); - XtRemoveEventHandler( frameShell, StructureNotifyMask, - False, (XtEventHandler)wxFrameMapProc, - (XtPointer)this ); + if( frameShell ) + XtRemoveEventHandler( frameShell, StructureNotifyMask, + False, (XtEventHandler)wxFrameMapProc, + (XtPointer)this ); if( m_clientArea ) { @@ -500,10 +488,12 @@ void wxFrame::DoSetIcon(const wxIcon& icon) if (!m_frameShell) return; - if (!icon.Ok() || !icon.GetPixmap()) + if (!icon.Ok() || !icon.GetDrawable()) return; - XtVaSetValues((Widget) m_frameShell, XtNiconPixmap, icon.GetPixmap(), NULL); + XtVaSetValues((Widget) m_frameShell, + XtNiconPixmap, icon.GetDrawable(), + NULL); } void wxFrame::SetIcon(const wxIcon& icon) @@ -591,7 +581,7 @@ void wxFrame::OnActivate(wxActivateEvent& event) if (!event.GetActive()) return; - for(wxWindowList::Node *node = GetChildren().GetFirst(); node; + for(wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); node; node = node->GetNext()) { // Find a child that's a subwindow, but not a dialog box. @@ -655,7 +645,7 @@ void wxFrame::PositionToolBar() tw = cw; } - tb->SetSize(0, 0, tw, th, wxSIZE_NO_ADJUSTMENTS); + tb->SetSize(0, 0, -1, -1, wxSIZE_NO_ADJUSTMENTS); } } #endif // wxUSE_TOOLBAR @@ -687,13 +677,13 @@ void wxFrame::ChangeFont(bool WXUNUSED(keepOriginalSize)) void wxFrame::ChangeBackgroundColour() { if (GetClientWidget()) - DoChangeBackgroundColour(GetClientWidget(), m_backgroundColour); + wxDoChangeBackgroundColour(GetClientWidget(), m_backgroundColour); } void wxFrame::ChangeForegroundColour() { if (GetClientWidget()) - DoChangeForegroundColour(GetClientWidget(), m_foregroundColour); + wxDoChangeForegroundColour(GetClientWidget(), m_foregroundColour); } /* MATTEW: Used to insure that hide-&-show within an event cycle works */