X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/14f355c2b5c71fc7c3d680aea366582d2ac60f7b..74a8f67d96591cec101def2a7d47c64072aff7fd:/src/motif/frame.cpp diff --git a/src/motif/frame.cpp b/src/motif/frame.cpp index 061c5a675b..c4c3d3c952 100644 --- a/src/motif/frame.cpp +++ b/src/motif/frame.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: motif/frame.cpp +// Name: src/motif/frame.cpp // Purpose: wxFrame // Author: Julian Smart // Modified by: @@ -17,27 +17,22 @@ // 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" +#include "wx/frame.h" -#ifdef __VMS -#define XtDisplay XTDISPLAY -#define XtWindow XTWINDOW -#define XtScreen XTSCREEN +#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 -#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" - #ifdef __VMS__ #pragma message disable nosimpint #endif @@ -86,7 +81,6 @@ static void wxFrameMapProc(Widget frameShell, XtPointer clientData, // ---------------------------------------------------------------------------- extern wxList wxModelessWindows; -extern wxList wxPendingDelete; // ---------------------------------------------------------------------------- // wxWin macros @@ -97,8 +91,6 @@ BEGIN_EVENT_TABLE(wxFrame, wxFrameBase) EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged) END_EVENT_TABLE() -IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow) - // ============================================================================ // implementation // ============================================================================ @@ -109,13 +101,13 @@ IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow) 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, @@ -128,12 +120,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; @@ -168,7 +155,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) @@ -180,26 +167,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; @@ -212,7 +198,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; @@ -260,46 +246,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 ) @@ -340,7 +312,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) @@ -348,16 +320,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 @@ -390,42 +367,27 @@ 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; } -void wxFrame::DoGetPosition(int *x, int *y) const -{ - Window parent_window = XtWindow((Widget) m_frameShell), - next_parent = XtWindow((Widget) m_frameShell), - root = RootWindowOfScreen(XtScreen((Widget) m_frameShell)); - - // 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) m_frameShell), parent_window, &root, - &next_parent, &theChildren, &n); - XFree(theChildren); // not needed - } - int xx, yy; unsigned int dummy; - XGetGeometry(XtDisplay((Widget) m_frameShell), parent_window, &root, - &xx, &yy, &dummy, &dummy, &dummy, &dummy); - if (x) *x = xx; - if (y) *y = yy; -} - void wxFrame::DoSetSize(int x, int y, int width, int height, int WXUNUSED(sizeFlags)) { if (x > -1) @@ -445,8 +407,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; @@ -457,15 +419,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) @@ -478,8 +439,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 ); } @@ -488,7 +449,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, @@ -496,11 +457,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 ); @@ -545,7 +501,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) { @@ -567,7 +523,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 @@ -594,13 +550,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, @@ -661,7 +610,7 @@ bool wxFrame::PreResize() PositionStatusBar(); #endif // wxUSE_STATUSBAR - return TRUE; + return true; } WXWidget wxFrame::GetClientWidget() const