Commit 7399fdc3 authored by dickelbeck's avatar dickelbeck
Browse files

improved focus handling, still need to handle the tab change

parent 7ab4a9bf
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@

#include <wx/wx.h>
#include <wx/statbmp.h>
#include <wx/notebook.h>

#include "macros.h"
#include "common.h"
@@ -350,6 +351,15 @@ void LAYER_WIDGET::OnRenderCheckBox( wxCommandEvent& event )
}


void LAYER_WIDGET::OnTabChange( wxNotebookEvent& event )
{
//    printf("OnTabChange\n");
//    passOnFocus();        // this segfaults, cannot enable it.
    // maybe we need to find a way to call the stock tab change event handler
    // first, then call passOnFocus() before we consider this event done.
}


wxWindow* LAYER_WIDGET::getLayerComp( int aSizerNdx )
{
    if( (unsigned) aSizerNdx < m_LayersFlexGridSizer->GetChildren().GetCount() )
@@ -456,19 +466,16 @@ void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec )

void LAYER_WIDGET::passOnFocus()
{
    wxWindow* parent = GetParent();
    parent->SetFocus();

//    printf( "passOnFocus() %p %p\n", parent, m_OriginalParent );
    m_FocusOwner->SetFocus();
}


//-----<public>-------------------------------------------------------

LAYER_WIDGET::LAYER_WIDGET( wxWindow* parent ) :
    LAYER_PANEL_BASE( parent )
LAYER_WIDGET::LAYER_WIDGET( wxWindow* aParent, wxWindow* aFocusOwner ) :
    LAYER_PANEL_BASE( aParent )
{
    m_OriginalParent = parent;
    m_FocusOwner = aFocusOwner;

    m_CurrentRow = -1;

@@ -486,6 +493,10 @@ LAYER_WIDGET::LAYER_WIDGET( wxWindow* parent ) :
    Connect( ID_SHOW_ALL_COPPERS, ID_SHOW_NO_COPPERS,
            wxEVT_COMMAND_MENU_SELECTED,
        wxCommandEventHandler( LAYER_WIDGET::OnPopupSelection ), NULL, this );

    // trap the tab changes so that we can call passOnFocus().
    m_notebook->Connect( -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,
        wxNotebookEventHandler( LAYER_WIDGET::OnTabChange ) );
}


+9 −3
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public:

protected:

    wxWindow*       m_OriginalParent;
    wxWindow*       m_FocusOwner;
    wxBitmap*       m_BlankBitmap;
    wxBitmap*       m_RightArrowBitmap;
    wxSize          m_BitmapSize;
@@ -116,6 +116,9 @@ protected:

    void OnRenderCheckBox( wxCommandEvent& event );

    void OnTabChange( wxNotebookEvent& event );


    /**
     * Function getLayerComp
     * returns the component within the m_LayersFlexGridSizer at aSizerNdx or
@@ -148,8 +151,11 @@ protected:

public:

    /** Constructor */
    LAYER_WIDGET( wxWindow* parent );
    /** Constructor
     * @param aFocusOwner is the window that should be sent the focus after
     * every operation.
     */
    LAYER_WIDGET( wxWindow* aParent, wxWindow* aFocusOwner );

    /**
     * Function GetBestSize
+1 −1
Original line number Diff line number Diff line
@@ -228,7 +228,7 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
    m_show_microwave_tools = false;
    m_show_layer_manager_tools = true;

    m_Layers = new LYRS( this );
    m_Layers = new LYRS( this, DrawPanel );

    SetBoard( new BOARD( NULL, this ) );