Applied Motif patches from Ian Brown
[ 609894 ] motif staticbox improvement [ 611042 ] fix for motif crash Everything looks fine with Lesstif from Debian 3.0 (emulated Motif version is 1.2). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17321 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -55,20 +55,11 @@ public:
|
||||
|
||||
// Implementation
|
||||
virtual void ChangeFont(bool keepOriginalSize = TRUE);
|
||||
virtual void ChangeBackgroundColour();
|
||||
virtual void ChangeForegroundColour();
|
||||
WXWidget GetTopWidget() const { return m_formWidget; }
|
||||
WXWidget GetLabelWidget() const { return m_labelWidget; }
|
||||
|
||||
protected:
|
||||
// Motif-specific
|
||||
WXWidget m_formWidget;
|
||||
WXWidget m_labelWidget;
|
||||
|
||||
virtual void DoSetSize(int x, int y,
|
||||
int width, int height,
|
||||
int sizeFlags = wxSIZE_AUTO);
|
||||
|
||||
|
||||
private:
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
@@ -383,6 +383,12 @@ wxFrame::~wxFrame()
|
||||
m_frameStatusBar = NULL;
|
||||
}
|
||||
|
||||
if (m_frameToolBar)
|
||||
{
|
||||
delete m_frameToolBar;
|
||||
m_frameToolBar = NULL;
|
||||
}
|
||||
|
||||
DestroyChildren();
|
||||
|
||||
if (m_workArea)
|
||||
@@ -392,6 +398,11 @@ wxFrame::~wxFrame()
|
||||
XtDestroyWidget ((Widget) m_workArea);
|
||||
}
|
||||
|
||||
// We need to destroy the base class icons here before we stop
|
||||
// the event loop. This is a hack until we have a real top level
|
||||
// window (which would be responsible for killing the event loop).
|
||||
m_icons.m_icons.Empty();
|
||||
|
||||
if (m_frameWidget)
|
||||
{
|
||||
wxDeleteWindowFromTable((Widget) m_frameWidget);
|
||||
|
@@ -48,7 +48,6 @@ END_EVENT_TABLE()
|
||||
|
||||
wxStaticBox::wxStaticBox()
|
||||
{
|
||||
m_formWidget = (WXWidget) 0;
|
||||
m_labelWidget = (WXWidget) 0;
|
||||
}
|
||||
|
||||
@@ -59,8 +58,6 @@ bool wxStaticBox::Create(wxWindow *parent, wxWindowID id,
|
||||
long style,
|
||||
const wxString& name)
|
||||
{
|
||||
m_formWidget = (WXWidget) 0;
|
||||
m_labelWidget = (WXWidget) 0;
|
||||
m_backgroundColour = parent->GetBackgroundColour();
|
||||
m_foregroundColour = parent->GetForegroundColour();
|
||||
m_font = parent->GetFont();
|
||||
@@ -76,59 +73,35 @@ bool wxStaticBox::Create(wxWindow *parent, wxWindowID id,
|
||||
|
||||
m_windowStyle = style;
|
||||
|
||||
bool hasLabel = (!label.IsNull() && !label.IsEmpty()) ;
|
||||
|
||||
Widget parentWidget = (Widget) parent->GetClientWidget();
|
||||
|
||||
Widget formWidget = XtVaCreateManagedWidget ((char*) (const char*) name,
|
||||
xmFormWidgetClass, parentWidget,
|
||||
XmNmarginHeight, 0,
|
||||
XmNmarginWidth, 0,
|
||||
NULL);
|
||||
|
||||
|
||||
if (hasLabel)
|
||||
{
|
||||
XmFontList fontList = (XmFontList) m_font.GetFontList(1.0, XtDisplay(parentWidget));
|
||||
|
||||
wxString label1(wxStripMenuCodes(label));
|
||||
XmString text = XmStringCreateSimple ((char*) (const char*) label1);
|
||||
m_labelWidget = (WXWidget) XtVaCreateManagedWidget ((char*) (const char*) label1,
|
||||
xmLabelWidgetClass, formWidget,
|
||||
XmNfontList, fontList,
|
||||
XmNlabelString, text,
|
||||
NULL);
|
||||
XmStringFree (text);
|
||||
}
|
||||
|
||||
Widget frameWidget = XtVaCreateManagedWidget ("frame",
|
||||
xmFrameWidgetClass, formWidget,
|
||||
m_mainWidget = XtVaCreateManagedWidget ("staticboxframe",
|
||||
xmFrameWidgetClass, parentWidget,
|
||||
XmNshadowType, XmSHADOW_IN,
|
||||
//XmNmarginHeight, 0,
|
||||
//XmNmarginWidth, 0,
|
||||
NULL);
|
||||
|
||||
bool hasLabel = (!label.IsNull() && !label.IsEmpty()) ;
|
||||
if (hasLabel)
|
||||
XtVaSetValues ((Widget) m_labelWidget,
|
||||
XmNtopAttachment, XmATTACH_FORM,
|
||||
XmNleftAttachment, XmATTACH_FORM,
|
||||
XmNrightAttachment, XmATTACH_FORM,
|
||||
XmNalignment, XmALIGNMENT_BEGINNING,
|
||||
{
|
||||
XmFontList fontList = (XmFontList) m_font.GetFontList(1.0, XtDisplay(parentWidget));
|
||||
wxString label1(wxStripMenuCodes(label));
|
||||
wxXmString text(label1);
|
||||
m_labelWidget = (WXWidget) XtVaCreateManagedWidget (label1.c_str(),
|
||||
xmLabelWidgetClass, (Widget)m_mainWidget,
|
||||
XmNfontList, fontList,
|
||||
XmNlabelString, text(),
|
||||
#if (XmVersion > 1200)
|
||||
XmNframeChildType, XmFRAME_TITLE_CHILD,
|
||||
#else
|
||||
XmNchildType, XmFRAME_TITLE_CHILD,
|
||||
#endif
|
||||
NULL);
|
||||
|
||||
XtVaSetValues (frameWidget,
|
||||
XmNtopAttachment, hasLabel ? XmATTACH_WIDGET : XmATTACH_FORM,
|
||||
XmNtopWidget, hasLabel ? (Widget) m_labelWidget : formWidget,
|
||||
XmNbottomAttachment, XmATTACH_FORM,
|
||||
XmNleftAttachment, XmATTACH_FORM,
|
||||
XmNrightAttachment, XmATTACH_FORM,
|
||||
NULL);
|
||||
|
||||
m_mainWidget = (WXWidget) frameWidget;
|
||||
m_formWidget = (WXWidget) formWidget;
|
||||
|
||||
}
|
||||
|
||||
SetCanAddEventHandler(TRUE);
|
||||
AttachWidget (parent, (WXWidget) frameWidget, (WXWidget) formWidget, pos.x, pos.y, size.x, size.y);
|
||||
AttachWidget (parent, m_mainWidget, NULL, pos.x, pos.y, size.x, size.y);
|
||||
ChangeBackgroundColour();
|
||||
|
||||
return TRUE;
|
||||
@@ -136,16 +109,11 @@ bool wxStaticBox::Create(wxWindow *parent, wxWindowID id,
|
||||
|
||||
wxStaticBox::~wxStaticBox()
|
||||
{
|
||||
DetachWidget(m_formWidget);
|
||||
DetachWidget(m_mainWidget);
|
||||
XtDestroyWidget((Widget) m_mainWidget);
|
||||
if (m_labelWidget)
|
||||
XtDestroyWidget((Widget) m_labelWidget);
|
||||
XtDestroyWidget((Widget) m_formWidget);
|
||||
|
||||
m_mainWidget = (WXWidget) 0;
|
||||
m_labelWidget = (WXWidget) 0;
|
||||
m_formWidget = (WXWidget) 0;
|
||||
}
|
||||
|
||||
void wxStaticBox::SetLabel(const wxString& label)
|
||||
@@ -157,12 +125,11 @@ void wxStaticBox::SetLabel(const wxString& label)
|
||||
{
|
||||
wxString label1(wxStripMenuCodes(label));
|
||||
|
||||
XmString text = XmStringCreateSimple ((char*) (const char*) label1);
|
||||
wxXmString text(label1);
|
||||
XtVaSetValues ((Widget) m_labelWidget,
|
||||
XmNlabelString, text,
|
||||
XmNlabelString, text(),
|
||||
XmNlabelType, XmSTRING,
|
||||
NULL);
|
||||
XmStringFree (text);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,40 +159,9 @@ wxString wxStaticBox::GetLabel() const
|
||||
}
|
||||
}
|
||||
|
||||
void wxStaticBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
wxControl::DoSetSize (x, y, width, height, sizeFlags);
|
||||
|
||||
if (m_labelWidget)
|
||||
{
|
||||
Dimension xx, yy;
|
||||
XtVaGetValues ((Widget) m_labelWidget, XmNwidth, &xx, XmNheight, &yy, NULL);
|
||||
|
||||
if (width > -1)
|
||||
XtVaSetValues ((Widget) m_mainWidget, XmNwidth, width,
|
||||
NULL);
|
||||
if (height > -1)
|
||||
XtVaSetValues ((Widget) m_mainWidget, XmNheight, height - yy,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void wxStaticBox::ChangeFont(bool keepOriginalSize)
|
||||
{
|
||||
wxWindow::ChangeFont(keepOriginalSize);
|
||||
}
|
||||
|
||||
void wxStaticBox::ChangeBackgroundColour()
|
||||
{
|
||||
wxWindow::ChangeBackgroundColour();
|
||||
if (m_labelWidget)
|
||||
DoChangeBackgroundColour(m_labelWidget, m_backgroundColour);
|
||||
}
|
||||
|
||||
void wxStaticBox::ChangeForegroundColour()
|
||||
{
|
||||
wxWindow::ChangeForegroundColour();
|
||||
if (m_labelWidget)
|
||||
DoChangeForegroundColour(m_labelWidget, m_foregroundColour);
|
||||
}
|
||||
|
||||
|
@@ -164,9 +164,8 @@ wxToolBarTool::~wxToolBarTool()
|
||||
{
|
||||
if ( m_widget )
|
||||
XtDestroyWidget(m_widget);
|
||||
if ( m_pixmap )
|
||||
XmDestroyPixmap(DefaultScreenOfDisplay((Display*)wxGetDisplay()),
|
||||
m_pixmap);
|
||||
// note: do not delete m_pixmap here because it will be deleted
|
||||
// by the base class when the bitmap is destroyed.
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user