X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1248b41f9f71110347659db8c54c75786eba23c6..cc4d5638c66a409e421420ed7110917755a66788:/src/motif/frame.cpp?ds=sidebyside diff --git a/src/motif/frame.cpp b/src/motif/frame.cpp index 29cc119131..be67bd55c9 100644 --- a/src/motif/frame.cpp +++ b/src/motif/frame.cpp @@ -1,10 +1,9 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: motif/frame.cpp +// Name: src/motif/frame.cpp // Purpose: wxFrame // Author: Julian Smart // Modified by: // Created: 17/09/98 -// RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,28 +16,21 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "frame.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#ifdef __VMS -#define XtDisplay XTDISPLAY -#define XtWindow XTWINDOW -#define XtScreen XTSCREEN -#endif - #include "wx/frame.h" -#include "wx/statusbr.h" -#include "wx/toolbar.h" -#include "wx/menu.h" -#include "wx/settings.h" -#include "wx/utils.h" -#include "wx/log.h" -#include "wx/app.h" -#include "wx/icon.h" + +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/app.h" + #include "wx/utils.h" + #include "wx/menu.h" + #include "wx/icon.h" + #include "wx/settings.h" + #include "wx/toolbar.h" + #include "wx/statusbr.h" +#endif #ifdef __VMS__ #pragma message disable nosimpint @@ -88,7 +80,6 @@ static void wxFrameMapProc(Widget frameShell, XtPointer clientData, // ---------------------------------------------------------------------------- extern wxList wxModelessWindows; -extern wxList wxPendingDelete; // ---------------------------------------------------------------------------- // wxWin macros @@ -99,8 +90,6 @@ BEGIN_EVENT_TABLE(wxFrame, wxFrameBase) EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged) END_EVENT_TABLE() -IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow) - // ============================================================================ // implementation // ============================================================================ @@ -111,13 +100,13 @@ IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow) void wxFrame::Init() { - m_iconized = FALSE; + m_iconized = false; //// Motif-specific m_frameShell = (WXWidget) NULL; - m_mainWidget = (WXWidget) NULL;; - m_workArea = (WXWidget) NULL;; - m_clientArea = (WXWidget) NULL;; + m_mainWidget = (WXWidget) NULL; + m_workArea = (WXWidget) NULL; + m_clientArea = (WXWidget) NULL; } bool wxFrame::Create(wxWindow *parent, @@ -130,12 +119,7 @@ bool wxFrame::Create(wxWindow *parent, { if( !wxTopLevelWindow::Create( parent, id, title, pos, size, style, name ) ) - return FALSE; - - m_backgroundColour = - wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE); - m_foregroundColour = *wxBLACK; - m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + return false; int x = pos.x, y = pos.y; int width = size.x, height = size.y; @@ -170,7 +154,7 @@ bool wxFrame::Create(wxWindow *parent, "Created frame (0x%p) with work area 0x%p and client " "area 0x%p", m_mainWidget, m_workArea, m_clientArea); - XtAddEventHandler((Widget) m_clientArea, ExposureMask,FALSE, + XtAddEventHandler((Widget) m_clientArea, ExposureMask,False, wxUniversalRepaintProc, (XtPointer) this); if (x > -1) @@ -182,26 +166,25 @@ bool wxFrame::Create(wxWindow *parent, if (height > -1) XtVaSetValues((Widget) m_frameShell, XmNheight, height, NULL); - ChangeFont(FALSE); - - ChangeBackgroundColour(); - + PostCreation(); PreResize(); - wxSizeEvent sizeEvent(wxSize(width, height), GetId()); + wxSize newSize(width, height); + wxSizeEvent sizeEvent(newSize, GetId()); sizeEvent.SetEventObject(this); - GetEventHandler()->ProcessEvent(sizeEvent); + HandleWindowEvent(sizeEvent); - return TRUE; + return true; } -bool wxFrame::DoCreate( wxWindow* parent, wxWindowID id, - const wxString& title, - const wxPoint& pos, - const wxSize& size, - long style, - const wxString& name ) +bool wxFrame::XmDoCreateTLW(wxWindow* WXUNUSED(parent), + wxWindowID WXUNUSED(id), + const wxString& WXUNUSED(title), + const wxPoint& WXUNUSED(pos), + const wxSize& WXUNUSED(size), + long style, + const wxString& name) { Widget frameShell; @@ -214,7 +197,7 @@ bool wxFrame::DoCreate( wxWindow* parent, wxWindowID id, XmNallowShellResize, True, XmNdeleteResponse, XmDO_NOTHING, XmNmappedWhenManaged, False, - XmNiconic, (style & wxICONIZE) ? TRUE : FALSE, + XmNiconic, (style & wxICONIZE) ? True : False, NULL); m_frameShell = (WXWidget)frameShell; @@ -262,46 +245,32 @@ bool wxFrame::DoCreate( wxWindow* parent, wxWindowID id, wxModelessWindows.Append( this ); - return TRUE; + return true; } wxFrame::~wxFrame() { - m_isBeingDeleted = TRUE; + SendDestroyEvent(); if (m_clientArea) { - XtRemoveEventHandler((Widget) m_clientArea, ExposureMask, FALSE, + XtRemoveEventHandler((Widget) m_clientArea, ExposureMask, False, wxUniversalRepaintProc, (XtPointer) this); } if (GetMainWidget()) - Show(FALSE); + Show(false); if (m_frameMenuBar) { m_frameMenuBar->DestroyMenuBar(); - - // Hack to stop core dump on Ultrix, OSF, for some strange reason. -#if MOTIF_MENUBAR_DELETE_FIX - GetMenuBar()->SetMainWidget((WXWidget) NULL); -#endif - delete m_frameMenuBar; - m_frameMenuBar = NULL; + wxDELETE(m_frameMenuBar); } - if (m_frameStatusBar) - { - delete m_frameStatusBar; - m_frameStatusBar = NULL; - } + wxDELETE(m_frameStatusBar); PreDestroy(); - DoDestroy(); -} -void wxFrame::DoDestroy() -{ Widget frameShell = (Widget)GetShellWidget(); if( frameShell ) @@ -342,7 +311,7 @@ void wxFrame::DoGetClientSize(int *x, int *y) const { int sbw, sbh; m_frameStatusBar->GetSize(& sbw, & sbh); - yy -= sbh; + yy = (Dimension)(yy - sbh); } #if wxUSE_TOOLBAR if (m_frameToolBar) @@ -350,16 +319,21 @@ void wxFrame::DoGetClientSize(int *x, int *y) const int tbw, tbh; m_frameToolBar->GetSize(& tbw, & tbh); if (m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL) - xx -= tbw; + xx = (Dimension)(xx - tbw); else - yy -= tbh; + yy = (Dimension)(yy - tbh); } #endif // wxUSE_TOOLBAR - *x = xx; *y = yy; + +//CE found a call here with NULL y pointer + if (x) + *x = xx; + if (y) + *y = yy; } // Set the client size (i.e. leave the calculation of borders etc. -// to wxWindows) +// to wxWidgets) void wxFrame::DoSetClientSize(int width, int height) { // Calculate how large the new main window should be @@ -392,15 +366,22 @@ void wxFrame::DoSetClientSize(int width, int height) } PreResize(); - wxSizeEvent sizeEvent(wxSize(width, height), GetId()); + wxSize newSize(width, height); + wxSizeEvent sizeEvent(newSize, GetId()); sizeEvent.SetEventObject(this); - GetEventHandler()->ProcessEvent(sizeEvent); + HandleWindowEvent(sizeEvent); } void wxFrame::DoGetSize(int *width, int *height) const { + if (!m_frameShell) + { + *width = -1; *height = -1; + return; + } + Dimension xx, yy; XtVaGetValues((Widget) m_frameShell, XmNwidth, &xx, XmNheight, &yy, NULL); *width = xx; *height = yy; @@ -425,8 +406,8 @@ void wxFrame::DoSetSize(int x, int y, int width, int height, int WXUNUSED(sizeFl bool wxFrame::Show( bool show ) { - if( !wxTopLevelWindowMotif::Show( show ) ) - return FALSE; + if( !wxWindowBase::Show( show ) ) + return false; m_isShown = show; @@ -437,15 +418,14 @@ bool wxFrame::Show( bool show ) SetVisibleStatus(show); if (show) { - XtMapWidget (shell); - XRaiseWindow (XtDisplay(shell), XtWindow(shell)); + XtPopup(shell, XtGrabNone); } else { - XtUnmapWidget(shell); + XtPopdown(shell); } - return TRUE; + return true; } void wxFrame::SetTitle(const wxString& title) @@ -458,8 +438,8 @@ void wxFrame::SetTitle(const wxString& title) if( !title.empty() ) XtVaSetValues( (Widget)m_frameShell, - XmNtitle, title.c_str(), - XmNiconName, title.c_str(), + XmNtitle, (const char*)title.mb_str(), + XmNiconName, (const char*)title.mb_str(), NULL ); } @@ -468,7 +448,7 @@ void wxFrame::DoSetIcon(const wxIcon& icon) if (!m_frameShell) return; - if (!icon.Ok() || !icon.GetDrawable()) + if (!icon.IsOk() || !icon.GetDrawable()) return; XtVaSetValues((Widget) m_frameShell, @@ -476,11 +456,6 @@ void wxFrame::DoSetIcon(const wxIcon& icon) NULL); } -void wxFrame::SetIcon(const wxIcon& icon) -{ - SetIcons( wxIconBundle( icon ) ); -} - void wxFrame::SetIcons(const wxIconBundle& icons) { wxFrameBase::SetIcons( icons ); @@ -525,7 +500,7 @@ void wxFrame::SetMenuBar(wxMenuBar *menuBar) } // Currently can't set it twice - // wxASSERT_MSG( (m_frameMenuBar == (wxMenuBar*) NULL), "Cannot set the menubar more than once"); + // wxASSERT_MSG( (m_frameMenuBar == NULL), "Cannot set the menubar more than once"); if (m_frameMenuBar) { @@ -547,7 +522,7 @@ void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event) { wxSysColourChangedEvent event2; event2.SetEventObject( m_frameStatusBar ); - m_frameStatusBar->ProcessEvent(event2); + m_frameStatusBar->HandleWindowEvent(event2); } // Propagate the event to the non-top-level children @@ -574,13 +549,6 @@ void wxFrame::OnActivate(wxActivateEvent& event) } } -void wxFrame::SendSizeEvent() -{ - wxSizeEvent event(GetSize(), GetId()); - event.SetEventObject(this); - GetEventHandler()->AddPendingEvent(event); -} - #if wxUSE_TOOLBAR wxToolBar* wxFrame::CreateToolBar(long style, @@ -641,7 +609,7 @@ bool wxFrame::PreResize() PositionStatusBar(); #endif // wxUSE_STATUSBAR - return TRUE; + return true; } WXWidget wxFrame::GetClientWidget() const