- wxASSERT_MSG( !m_Selecting || event.ShiftDown(),
- "m_Selecting is normally reset in OnKeyUp() when Shift "
- "goes up!" );
-
- if ( !m_Selecting && m_llist->HasSelection() )
- {
- // pressing any non-arrow key replaces the selection
- if ( !IsDirectionKey(keyCode) )
- {
- m_llist->DeleteSelection();
- }
- else if ( !event.ShiftDown() )
- {
- m_llist->DiscardSelection();
- }
- }
-
+ // Force m_Selecting to be false if shift is no longer
+ // pressed. OnKeyUp() cannot catch all Shift-Up events.
+ if(!event.ShiftDown())
+ m_Selecting = false;
+
+ // pressing any non-arrow key optionally replaces the selection:
+ if(m_AutoDeleteSelection
+ && !m_Selecting
+ && m_llist->HasSelection()
+ && ! IsDirectionKey(keyCode)
+ && ! (event.AltDown() || ctrlDown)
+ )
+ m_llist->DeleteSelection();
+