X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/321db4b6bf15df209942b9c0e6c744c8e7074d1b..184b5d99a5382cd7a19888c85aff11f8a21af2f6:/src/motif/choice.cpp diff --git a/src/motif/choice.cpp b/src/motif/choice.cpp index 1c34cb25db..566dc1ea49 100644 --- a/src/motif/choice.cpp +++ b/src/motif/choice.cpp @@ -50,7 +50,7 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id, { SetName(name); SetValidator(validator); - m_noStrings = n; + m_noStrings = 0; // Starts off with none, incremented in Append m_windowStyle = style; m_buttonWidget = (WXWidget) 0; m_menuWidget = (WXWidget) 0; @@ -66,6 +66,7 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id, m_backgroundColour = parent->GetBackgroundColour(); m_foregroundColour = parent->GetForegroundColour(); + m_windowFont = parent->GetFont(); Widget parentWidget = (Widget) parent->GetClientWidget(); @@ -84,7 +85,7 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id, */ m_menuWidget = (WXWidget) XmCreatePulldownMenu ((Widget) m_formWidget, "choiceMenu", NULL, 0); - int i; +// int i; if (n > 0) { int i; @@ -125,9 +126,10 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id, XtVaSetValues((Widget) m_formWidget, XmNresizePolicy, XmRESIZE_NONE, NULL); + ChangeFont(FALSE); + AttachWidget (parent, m_buttonWidget, m_formWidget, pos.x, pos.y, size.x, size.y); - SetFont(* parent->GetFont()); ChangeBackgroundColour(); return TRUE; @@ -143,14 +145,17 @@ wxChoice::~wxChoice() if (m_widgetList) delete[] m_widgetList; - DetachWidget(GetMainWidget()); // Removes event handlers + if (GetMainWidget()) + { + DetachWidget(GetMainWidget()); // Removes event handlers - XtDestroyWidget((Widget) m_formWidget); - m_formWidget = (WXWidget) 0; + XtDestroyWidget((Widget) m_formWidget); + m_formWidget = (WXWidget) 0; - // Presumably the other widgets have been deleted now, via the form - m_mainWidget = (WXWidget) 0; - m_buttonWidget = (WXWidget) 0; + // Presumably the other widgets have been deleted now, via the form + m_mainWidget = (WXWidget) 0; + m_buttonWidget = (WXWidget) 0; + } } void wxChoice::Append(const wxString& item) @@ -173,9 +178,12 @@ void wxChoice::Append(const wxString& item) WXWidget *new_widgetList = new WXWidget[m_noStrings + 1]; int i; - for (i = 0; i < m_noStrings; i++) - new_widgetList[i] = m_widgetList[i]; + if (m_widgetList) + for (i = 0; i < m_noStrings; i++) + new_widgetList[i] = m_widgetList[i]; + new_widgetList[m_noStrings] = (WXWidget) w; + if (m_widgetList) delete[] m_widgetList; m_widgetList = new_widgetList; @@ -202,7 +210,7 @@ void wxChoice::Append(const wxString& item) m_noStrings ++; } -void wxChoice::Delete(int n) +void wxChoice::Delete(int WXUNUSED(n)) { wxFAIL_MSG( "Sorry, wxChoice::Delete isn't implemented yet. Maybe you'd like to volunteer? :-)" ); @@ -399,8 +407,7 @@ void wxChoice::Command(wxCommandEvent & event) ProcessCommand (event); } -void wxChoiceCallback (Widget w, XtPointer clientData, - XtPointer ptr) +void wxChoiceCallback (Widget w, XtPointer clientData, XtPointer WXUNUSED(ptr)) { wxChoice *item = (wxChoice *) clientData; if (item) @@ -412,7 +419,8 @@ void wxChoiceCallback (Widget w, XtPointer clientData, XtVaGetValues (w, XmNuserData, &s, NULL); if (s) { - wxCommandEvent event (wxEVT_COMMAND_CHOICE_SELECTED); + wxCommandEvent event (wxEVT_COMMAND_CHOICE_SELECTED, item->GetId()); + event.SetEventObject(item); event.m_commandInt = item->FindString (s); // event.m_commandString = s; item->ProcessCommand (event); @@ -420,7 +428,7 @@ void wxChoiceCallback (Widget w, XtPointer clientData, } } -void wxChoice::ChangeFont() +void wxChoice::ChangeFont(bool keepOriginalSize) { // Note that this causes the widget to be resized back // to its original size! We therefore have to set the size @@ -434,11 +442,13 @@ void wxChoice::ChangeFont() XtVaSetValues ((Widget) m_mainWidget, XmNfontList, fontList, NULL); XtVaSetValues ((Widget) m_buttonWidget, XmNfontList, fontList, NULL); + /* TODO: why does this cause a crash in XtWidgetToApplicationContext? int i; for (i = 0; i < m_noStrings; i++) XtVaSetValues ((Widget) m_widgetList[i], XmNfontList, fontList, NULL); + */ GetSize(& width1, & height1); - if (width != width1 || height != height1) + if (keepOriginalSize && (width != width1 || height != height1)) { SetSize(-1, -1, width, height); }