my wxMotif fixes (merged with Robert's changes), wxMotif compiles, links

and runs... until you click in the menu, that is.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2929 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-06-29 12:34:18 +00:00
parent a641505f0d
commit dfe1eee3bb
28 changed files with 782 additions and 751 deletions

View File

@@ -6,7 +6,7 @@
// Created: 17/09/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
@@ -33,7 +33,7 @@
extern wxList wxModelessWindows;
// Implemented in frame.cpp
extern void wxFrameFocusProc(Widget workArea, XtPointer clientData,
extern void wxFrameFocusProc(Widget workArea, XtPointer clientData,
XmAnyCallbackStruct *cbs);
#define wxID_NOTEBOOK_CLIENT_AREA wxID_HIGHEST + 100
@@ -76,19 +76,19 @@ bool wxMDIParentFrame::Create(wxWindow *parent,
m_clientWindow = (wxMDIClientWindow*) NULL;
m_activeChild = (wxMDIChildFrame*) NULL;
m_activeMenuBar = (wxMenuBar*) NULL;
bool success = wxFrame::Create(parent, id, title, pos, size, style, name);
if (success)
{
// TODO: app cannot override OnCreateClient since
// wxMDIParentFrame::OnCreateClient will still be called
// (we're in the constructor). How to resolve?
m_clientWindow = OnCreateClient();
// Uses own style for client style
m_clientWindow->CreateClient(this, GetWindowStyleFlag());
int w, h;
GetClientSize(& w, & h);
m_clientWindow->SetSize(0, 0, w, h);
@@ -102,9 +102,9 @@ wxMDIParentFrame::~wxMDIParentFrame()
{
// Make sure we delete the client window last of all
RemoveChild(m_clientWindow);
DestroyChildren();
delete m_clientWindow;
m_clientWindow = NULL;
}
@@ -112,7 +112,7 @@ wxMDIParentFrame::~wxMDIParentFrame()
void wxMDIParentFrame::SetMenuBar(wxMenuBar *menu_bar)
{
m_frameMenuBar = menu_bar;
SetChildMenuBar((wxMDIChildFrame*) NULL);
}
@@ -126,7 +126,7 @@ void wxMDIParentFrame::OnSize(wxSizeEvent& event)
int y = 0;
int width, height;
GetClientSize(&width, &height);
if ( GetClientWindow() )
GetClientWindow()->SetSize(x, y, width, height);
}
@@ -158,14 +158,14 @@ wxMDIClientWindow *wxMDIParentFrame::OnCreateClient()
void wxMDIParentFrame::SetChildMenuBar(wxMDIChildFrame* child)
{
wxMenuBar* oldMenuBar = m_activeMenuBar;
if (child == (wxMDIChildFrame*) NULL) // No child: use parent frame
{
if (GetMenuBar() && (GetMenuBar() != m_activeMenuBar))
{
// if (m_activeMenuBar)
// m_activeMenuBar->DestroyMenuBar();
m_activeMenuBar = GetMenuBar();
m_activeMenuBar->CreateMenuBar(this);
/*
@@ -174,7 +174,7 @@ void wxMDIParentFrame::SetChildMenuBar(wxMDIChildFrame* child)
*/
if (oldMenuBar && oldMenuBar->GetMainWidget())
XtUnmapWidget((Widget) oldMenuBar->GetMainWidget());
}
}
else if (child->GetMenuBar() == (wxMenuBar*) NULL) // No child menu bar: use parent frame
@@ -199,7 +199,7 @@ void wxMDIParentFrame::SetChildMenuBar(wxMDIChildFrame* child)
{
// if (m_activeMenuBar)
// m_activeMenuBar->DestroyMenuBar();
m_activeMenuBar = child->GetMenuBar();
m_activeMenuBar->CreateMenuBar(this);
/*
@@ -219,20 +219,20 @@ bool wxMDIParentFrame::ProcessEvent(wxEvent& event)
static wxEventType inEvent = wxEVT_NULL;
if (inEvent == event.GetEventType())
return FALSE;
inEvent = event.GetEventType();
bool res = FALSE;
if (m_activeChild && event.IsKindOf(CLASSINFO(wxCommandEvent)))
{
res = m_activeChild->GetEventHandler()->ProcessEvent(event);
}
if (!res)
res = GetEventHandler()->wxEvtHandler::ProcessEvent(event);
inEvent = wxEVT_NULL;
return res;
}
@@ -252,7 +252,7 @@ void wxMDIParentFrame::DoSetClientSize(int width, int height)
void wxMDIParentFrame::OnSysColourChanged(wxSysColourChangedEvent& event)
{
// TODO
// Propagate the event to the non-top-level children
wxFrame::OnSysColourChanged(event);
}
@@ -299,31 +299,31 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
const wxString& name)
{
SetName(name);
m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE);
m_foregroundColour = *wxBLACK;
m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
if ( id > -1 )
m_windowId = id;
else
m_windowId = (int)NewControlId();
wxMDIClientWindow* clientWindow = parent->GetClientWindow();
wxASSERT_MSG( (clientWindow != (wxWindow*) NULL), "Missing MDI client window.");
if (clientWindow) clientWindow->AddChild(this);
SetMDIParentFrame(parent);
int x = pos.x; int y = pos.y;
int width = size.x; int height = size.y;
int width = size.x;
int height = size.y;
if (width == -1)
width = 200; // TODO: give reasonable default
if (height == -1)
height = 200; // TODO: give reasonable default
// We're deactivating the old child
wxMDIChildFrame* oldActiveChild = parent->GetActiveChild();
if (oldActiveChild)
@@ -332,13 +332,13 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
event.SetEventObject( oldActiveChild );
oldActiveChild->GetEventHandler()->ProcessEvent(event);
}
// This is the currently active child
parent->SetActiveChild((wxMDIChildFrame*) this);
// This time we'll try a bog-standard bulletin board for
// the 'frame'. A main window doesn't seem to work.
m_mainWidget = (WXWidget) XtVaCreateWidget("client",
xmBulletinBoardWidgetClass, (Widget) clientWindow->GetTopWidget(),
XmNmarginWidth, 0,
@@ -354,22 +354,22 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
XtAddEventHandler((Widget) m_mainWidget, ExposureMask,FALSE,
wxUniversalRepaintProc, (XtPointer) this);
SetCanAddEventHandler(TRUE);
AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
ChangeBackgroundColour();
ChangeBackgroundColour();
XtManageChild((Widget) m_mainWidget);
SetTitle(title);
clientWindow->AddPage(this, title, TRUE);
clientWindow->Refresh();
// Positions the toolbar and status bar -- but we don't have any.
// PreResize();
wxModelessWindows.Append(this);
return TRUE;
}
@@ -380,19 +380,19 @@ wxMDIChildFrame::~wxMDIChildFrame()
if (m_mainWidget)
XtRemoveEventHandler((Widget) m_mainWidget, ExposureMask,FALSE,
wxUniversalRepaintProc, (XtPointer) this);
if (GetMDIParentFrame())
{
wxMDIParentFrame* parentFrame = GetMDIParentFrame();
if (parentFrame->GetActiveChild() == this)
parentFrame->SetActiveChild((wxMDIChildFrame*) NULL);
wxMDIClientWindow* clientWindow = parentFrame->GetClientWindow();
// Remove page if still there
if (clientWindow->RemovePage(this))
clientWindow->Refresh();
// Set the selection to the first remaining page
if (clientWindow->GetPageCount() > 0)
{
@@ -415,14 +415,14 @@ void wxMDIChildFrame::OnRaise()
wxMDIParentFrame* parentFrame = (wxMDIParentFrame*) GetParent() ;
wxMDIChildFrame* oldActiveChild = parentFrame->GetActiveChild();
parentFrame->SetActiveChild(this);
if (oldActiveChild)
{
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldActiveChild->GetId());
event.SetEventObject( oldActiveChild );
oldActiveChild->GetEventHandler()->ProcessEvent(event);
}
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, this->GetId());
event.SetEventObject( this );
this->GetEventHandler()->ProcessEvent(event);
@@ -432,7 +432,7 @@ void wxMDIChildFrame::OnLower()
{
wxMDIParentFrame* parentFrame = (wxMDIParentFrame*) GetParent() ;
wxMDIChildFrame* oldActiveChild = parentFrame->GetActiveChild();
if (oldActiveChild == this)
{
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldActiveChild->GetId());
@@ -483,7 +483,7 @@ void wxMDIChildFrame::SetMenuBar(wxMenuBar *menuBar)
// Don't create the underlying menubar yet; need to recreate
// it every time the child is activated.
m_frameMenuBar = menuBar;
// We make the assumption that if you're setting the menubar,
// this is the currently active child.
GetMDIParentFrame()->SetChildMenuBar(this);
@@ -495,7 +495,7 @@ void wxMDIChildFrame::SetIcon(const wxIcon& icon)
m_icon = icon;
if (m_icon.Ok())
{
// Not appropriate since there are no icons in
// Not appropriate since there are no icons in
// a tabbed window
}
}
@@ -577,7 +577,7 @@ wxMDIClientWindow::~wxMDIClientWindow()
// By the time this destructor is called, the child frames will have been
// deleted and removed from the notebook/client window.
DestroyChildren();
m_mainWidget = (WXWidget) 0;
}
@@ -585,7 +585,7 @@ bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style)
{
// m_windowParent = parent;
// m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE);
bool success = wxNotebook::Create(parent, wxID_NOTEBOOK_CLIENT_AREA, wxPoint(0, 0), wxSize(100, 100), 0);
if (success)
{
@@ -653,7 +653,7 @@ void wxMDIClientWindow::OnPageChanged(wxNotebookEvent& event)
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, activeChild->GetId());
event.SetEventObject( activeChild );
activeChild->GetEventHandler()->ProcessEvent(event);
if (activeChild->GetMDIParentFrame())
{
activeChild->GetMDIParentFrame()->SetActiveChild(activeChild);