Try out our own tabbing logic.
Fixes: lp:1840991 * https://bugs.launchpad.net/kicad/+bug/1840991
This commit is contained in:
parent
77488e379c
commit
c85d1fa00c
|
@ -490,12 +490,43 @@ void DIALOG_SHIM::OnCharHook( wxKeyEvent& aEvt )
|
||||||
{
|
{
|
||||||
// shift-return (Mac default) or Ctrl-Return (GTK) for OK
|
// shift-return (Mac default) or Ctrl-Return (GTK) for OK
|
||||||
if( aEvt.GetKeyCode() == WXK_RETURN && ( aEvt.ShiftDown() || aEvt.ControlDown() ) )
|
if( aEvt.GetKeyCode() == WXK_RETURN && ( aEvt.ShiftDown() || aEvt.ControlDown() ) )
|
||||||
|
{
|
||||||
wxPostEvent( this, wxCommandEvent( wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ) );
|
wxPostEvent( this, wxCommandEvent( wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ) );
|
||||||
else
|
return;
|
||||||
aEvt.Skip();
|
}
|
||||||
|
else if( aEvt.GetKeyCode() == WXK_TAB && !aEvt.ControlDown() )
|
||||||
|
{
|
||||||
|
wxWindow* currentWindow = wxWindow::FindFocus();
|
||||||
|
int currentIdx = -1;
|
||||||
|
int delta = aEvt.ShiftDown() ? -1 : 1;
|
||||||
|
|
||||||
|
for( size_t i = 0; i < m_tabOrder.size(); ++i )
|
||||||
|
{
|
||||||
|
if( m_tabOrder[i] == currentWindow )
|
||||||
|
{
|
||||||
|
currentIdx = (int) i + delta;
|
||||||
|
|
||||||
|
if( currentIdx < 0 )
|
||||||
|
currentIdx = m_tabOrder.size() - 1;
|
||||||
|
else if ( currentIdx >= m_tabOrder.size() )
|
||||||
|
currentIdx = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( currentIdx >= 0 )
|
||||||
|
{
|
||||||
|
m_tabOrder[ currentIdx ]->SetFocus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aEvt.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_SHIM::OnGridEditorShown( wxGridEvent& event )
|
void DIALOG_SHIM::OnGridEditorShown( wxGridEvent& event )
|
||||||
{
|
{
|
||||||
SetEscapeId( wxID_NONE );
|
SetEscapeId( wxID_NONE );
|
||||||
|
|
|
@ -62,7 +62,7 @@ DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN( LIB_EDIT_FRAME* parent, LIB_PIN* aPin
|
||||||
for ( unsigned ii = 0; ii < orientationNames.GetCount(); ii++ )
|
for ( unsigned ii = 0; ii < orientationNames.GetCount(); ii++ )
|
||||||
m_choiceOrientation->Insert( orientationNames[ii], KiBitmap( orientationBitmaps[ii] ), ii );
|
m_choiceOrientation->Insert( orientationNames[ii], KiBitmap( orientationBitmaps[ii] ), ii );
|
||||||
|
|
||||||
KIUI::SetControlsTabOrder( {
|
m_tabOrder = {
|
||||||
m_textPinName,
|
m_textPinName,
|
||||||
m_textPinNumber,
|
m_textPinNumber,
|
||||||
m_choiceElectricalType,
|
m_choiceElectricalType,
|
||||||
|
@ -73,7 +73,7 @@ DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN( LIB_EDIT_FRAME* parent, LIB_PIN* aPin
|
||||||
m_pinLengthCtrl,
|
m_pinLengthCtrl,
|
||||||
m_nameSizeCtrl,
|
m_nameSizeCtrl,
|
||||||
m_numberSizeCtrl
|
m_numberSizeCtrl
|
||||||
} );
|
};
|
||||||
|
|
||||||
m_sdbSizerButtonsOK->SetDefault();
|
m_sdbSizerButtonsOK->SetDefault();
|
||||||
SetInitialFocus( m_textPinName );
|
SetInitialFocus( m_textPinName );
|
||||||
|
|
|
@ -172,19 +172,21 @@ protected:
|
||||||
*/
|
*/
|
||||||
int VertPixelsFromDU( int y );
|
int VertPixelsFromDU( int y );
|
||||||
|
|
||||||
EDA_UNITS_T m_units; // userUnits for display and parsing
|
EDA_UNITS_T m_units; // userUnits for display and parsing
|
||||||
std::string m_hash_key; // alternate for class_map when classname re-used
|
std::string m_hash_key; // alternate for class_map when classname re-used
|
||||||
|
|
||||||
// On MacOS (at least) SetFocus() calls made in the constructor will fail because a
|
// On MacOS (at least) SetFocus() calls made in the constructor will fail because a
|
||||||
// window that isn't yet visible will return false to AcceptsFocus(). So we must delay
|
// window that isn't yet visible will return false to AcceptsFocus(). So we must delay
|
||||||
// the initial-focus SetFocus() call to the first paint event.
|
// the initial-focus SetFocus() call to the first paint event.
|
||||||
bool m_firstPaintEvent;
|
bool m_firstPaintEvent;
|
||||||
wxWindow* m_initialFocusTarget;
|
wxWindow* m_initialFocusTarget;
|
||||||
|
|
||||||
// variables for quasi-modal behavior support, only used by a few derivatives.
|
WX_EVENT_LOOP* m_qmodal_loop; // points to nested event_loop, NULL means not qmodal
|
||||||
WX_EVENT_LOOP* m_qmodal_loop; // points to nested event_loop, NULL means not qmodal and dismissed
|
// and dismissed
|
||||||
bool m_qmodal_showing;
|
bool m_qmodal_showing;
|
||||||
WDO_ENABLE_DISABLE* m_qmodal_parent_disabler;
|
WDO_ENABLE_DISABLE* m_qmodal_parent_disabler;
|
||||||
|
|
||||||
|
std::vector<wxWindow*> m_tabOrder;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void OnGridEditorShown( wxGridEvent& event );
|
void OnGridEditorShown( wxGridEvent& event );
|
||||||
|
|
Loading…
Reference in New Issue