if( size.x != -1 ) best.x = size.x;
if( size.y != -1 ) best.y = size.y;
- SetCanAddEventHandler(true);
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, best.x, best.y);
{
m_inSetValue = true;
+ // Fix crash; probably an OpenMotif bug
+ const char* val = value.c_str() ? value.c_str() : "";
XtVaSetValues( GetXmText(this),
- XmNvalue, wxConstCast(value.c_str(), char),
+ XmNvalue, wxConstCast(val, char),
NULL);
m_inSetValue = false;
return GetCount() - 1;
}
+int wxComboBox::DoInsert(const wxString& item, int pos)
+{
+ wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+ wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+ if (pos == GetCount())
+ return DoAppend(item);
+
+ wxXmString str( item.c_str() );
+ XmComboBoxAddItem((Widget) m_mainWidget, str(), pos+1, False);
+ m_noStrings ++;
+ AdjustDropDownListSize();
+
+ return GetCount() - 1;
+}
+
void wxComboBox::Delete(int n)
{
#ifdef LESSTIF_VERSION
void wxComboBox::SetSelection (int n)
{
+ m_inSetSelection = true;
+
#if wxCHECK_LESSTIF()
XmListSelectPos (GetXmList(this), n + 1, false);
SetValue(GetString(n));
XmNselectedPosition, n,
NULL );
#endif
+
+ m_inSetSelection = false;
}
int wxComboBox::GetSelection (void) const
{
wxComboBox *item = (wxComboBox *) clientData;
+ if( item->m_inSetSelection ) return;
+
switch (cbs->reason)
{
case XmCR_SELECT:
{
wxCommandEvent event (wxEVT_COMMAND_COMBOBOX_SELECTED,
item->GetId());
- int idx = cbs->item_position - 1;
+ int idx = cbs->item_position;
event.m_commandInt = idx;
event.m_commandString = item->GetString (idx);
if ( item->HasClientObjectData() )
event.SetClientData( item->GetClientData(idx) );
event.m_extraLong = true;
event.SetEventObject(item);
- item->ProcessCommand (event);
+ item->GetEventHandler()->ProcessEvent(event);
break;
}
case XmCR_VALUE_CHANGED:
event.m_commandString = item->GetValue();
event.m_extraLong = true;
event.SetEventObject(item);
- item->ProcessCommand (event);
+ item->GetEventHandler()->ProcessEvent(event);
break;
}
default: