X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/de6185e212ebc37ff11ff70278e3c4f68419b097..4a32fcf1555f9a52a6970e52ad0191a0ee69dbf9:/src/motif/listbox.cpp diff --git a/src/motif/listbox.cpp b/src/motif/listbox.cpp index 8b956b96ef..74b891b293 100644 --- a/src/motif/listbox.cpp +++ b/src/motif/listbox.cpp @@ -20,6 +20,8 @@ #include "wx/dynarray.h" #include "wx/log.h" #include "wx/utils.h" + #include "wx/settings.h" + #include "wx/arrstr.h" #endif #ifdef __VMS @@ -27,9 +29,6 @@ #define XtDisplay XTDISPLAY #endif -#include "wx/settings.h" -#include "wx/arrstr.h" - #ifdef __VMS__ #pragma message disable nosimpint #endif @@ -53,21 +52,23 @@ static void wxListBoxCallback(Widget w, class wxSizeKeeper { int m_x, m_y; - wxWindow* m_w; + int m_w, m_h; + wxWindow* m_wnd; public: wxSizeKeeper( wxWindow* w ) - : m_w( w ) + : m_wnd( w ) { - m_w->GetSize( &m_x, &m_y ); + m_wnd->GetSize( &m_w, &m_h ); + m_wnd->GetPosition( &m_x, &m_y ); } void Restore() { int x, y; - m_w->GetSize( &x, &y ); + m_wnd->GetSize( &x, &y ); if( x != m_x || y != m_y ) - m_w->SetSize( -1, -1, m_x, m_y ); + m_wnd->SetSize( m_x, m_y, m_w, m_h ); } }; @@ -92,9 +93,9 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, if( !wxControl::CreateControl( parent, id, pos, size, style, validator, name ) ) return false; + PreCreation(); m_noItems = (unsigned int)n; - m_backgroundColour = * wxWHITE; Widget parentWidget = (Widget) parent->GetClientWidget(); Display* dpy = XtDisplay(parentWidget); @@ -121,7 +122,7 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, Widget listWidget = XmCreateScrolledList(parentWidget, - wxConstCast(name.c_str(), char), args, count); + wxConstCast(name.mb_str(), char), args, count); m_mainWidget = (WXWidget) listWidget; @@ -150,11 +151,10 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, (XtCallbackProc) wxListBoxCallback, (XtPointer) this); + PostCreation(); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, best.x, best.y); - ChangeBackgroundColour(); - return true; } @@ -210,33 +210,18 @@ void wxListBox::DoSetFirstItem( int N ) void wxListBox::Delete(unsigned int n) { - wxSizeKeeper sk( this ); Widget listBox = (Widget) m_mainWidget; - bool managed = XtIsManaged(listBox); - - if (managed) - XtUnmanageChild (listBox); - XmListDeletePos (listBox, n + 1); - if (managed) - XtManageChild (listBox); - - sk.Restore(); m_clientDataDict.Delete(n, HasClientObjectData()); m_noItems --; } int wxListBox::DoAppend(const wxString& item) { - wxSizeKeeper sk( this ); Widget listBox = (Widget) m_mainWidget; - bool managed = XtIsManaged(listBox); - - if (managed) - XtUnmanageChild (listBox); int n; XtVaGetValues (listBox, XmNitemCount, &n, NULL); wxXmString text( item ); @@ -247,10 +232,6 @@ int wxListBox::DoAppend(const wxString& item) // selection policy!! SetSelectionPolicy(); - if (managed) - XtManageChild (listBox); - - sk.Restore(); m_noItems ++; return GetCount() - 1; @@ -258,16 +239,11 @@ int wxListBox::DoAppend(const wxString& item) void wxListBox::DoSetItems(const wxArrayString& items, void** clientData) { - wxSizeKeeper sk( this ); Widget listBox = (Widget) m_mainWidget; if( HasClientObjectData() ) m_clientDataDict.DestroyData(); - bool managed = XtIsManaged(listBox); - - if (managed) - XtUnmanageChild (listBox); XmString *text = new XmString[items.GetCount()]; unsigned int i; for (i = 0; i < items.GetCount(); ++i) @@ -286,11 +262,6 @@ void wxListBox::DoSetItems(const wxArrayString& items, void** clientData) // selection policy!! SetSelectionPolicy(); - if (managed) - XtManageChild (listBox); - - sk.Restore(); - m_noItems = items.GetCount(); } @@ -302,11 +273,10 @@ int wxDoFindStringInList(Widget w, const wxString& s) bool success = XmListGetMatchPos (w, str(), &positions, &no_positions); - if (success) + if (success && positions) { int pos = positions[0]; - if (positions) - XtFree ((char *) positions); + XtFree ((char *) positions); return pos - 1; } else @@ -488,14 +458,8 @@ wxString wxListBox::GetString(unsigned int n) const void wxListBox::DoInsertItems(const wxArrayString& items, unsigned int pos) { - wxSizeKeeper sk( this ); Widget listBox = (Widget) m_mainWidget; - bool managed = XtIsManaged(listBox); - - if (managed) - XtUnmanageChild(listBox); - XmString *text = new XmString[items.GetCount()]; unsigned int i; // Steve Hammes: Motif 1.1 compatibility @@ -521,11 +485,6 @@ void wxListBox::DoInsertItems(const wxArrayString& items, unsigned int pos) // selection policy!! SetSelectionPolicy(); - if (managed) - XtManageChild(listBox); - - sk.Restore(); - m_noItems += items.GetCount(); }