}
else if (unicode>0)
{
- keychar = unicode;
+ keychar = unicode;
}
if ( keycode == WXK_DOWN || keycode == WXK_RIGHT )
// now search through the values to see if this is found
int found = -1;
- unsigned int length=m_partialCompletionString.Length();
+ unsigned int length=m_partialCompletionString.length();
int i;
for (i=0; i<itemCount; i++)
{
wxString item=GetString(i);
- if (( item.Length() >=length) && (! m_partialCompletionString.CmpNoCase(item.Left(length))))
+ if (( item.length() >= length) && (! m_partialCompletionString.CmpNoCase(item.Left(length))))
{
found=i;
break;
void wxVListBoxComboPopup::OnKey(wxKeyEvent& event)
{
- // Select item if ENTER is pressed
- if ( event.GetKeyCode() == WXK_RETURN || event.GetKeyCode() == WXK_NUMPAD_ENTER )
- {
- DismissWithEvent();
- }
- // Hide popup if ESC is pressed
- else if ( event.GetKeyCode() == WXK_ESCAPE )
+ // Hide popup if certain key or key combination was pressed
+ if ( m_combo->IsKeyPopupToggle(event) )
{
StopPartialCompletion();
Dismiss();
}
+ else if ( event.AltDown() )
+ {
+ // On both wxGTK and wxMSW, pressing Alt down seems to
+ // completely freeze things in popup (ie. arrow keys and
+ // enter won't work).
+ return;
+ }
+ // Select item if ENTER is pressed
+ else if ( event.GetKeyCode() == WXK_RETURN || event.GetKeyCode() == WXK_NUMPAD_ENTER )
+ {
+ DismissWithEvent();
+ }
else
{
int comboStyle = m_combo->GetWindowStyle();
if ( (int)item == m_widestItem )
m_findWidest = true;
+ int sel = GetSelection();
+
if ( IsCreated() )
wxVListBox::SetItemCount( wxVListBox::GetItemCount()-1 );
+
+ // Fix selection
+ if ( (int)item < sel )
+ SetSelection(sel-1);
+ else if ( (int)item == sel )
+ SetSelection(wxNOT_FOUND);
}
int wxVListBoxComboPopup::FindString(const wxString& s, bool bCase) const
if ( GetVListBoxComboPopup()->IsCurrent((size_t)item) ||
(flags & wxODCB_PAINTING_CONTROL) )
{
- DrawFocusBackground(dc,
- rect,
- (flags&wxODCB_PAINTING_CONTROL?0:wxCONTROL_ISSUBMENU) |
- wxCONTROL_SELECTED);
+ int bgFlags = wxCONTROL_SELECTED;
+
+ if ( (flags & wxODCB_PAINTING_CONTROL) != wxODCB_PAINTING_CONTROL )
+ {
+ bgFlags |= wxCONTROL_ISSUBMENU;
+ PrepareBackground(dc, rect, bgFlags);
+ }
+ else if ( HasFlag(wxCB_READONLY) )
+ PrepareBackground(dc, rect, bgFlags);
}
//else: do nothing for the normal items
}