← Back to team overview

kicad-developers team mailing list archive

Re: UI only updates on mouse move


Hi Jon,

Thanks, for the pointer.


From: Jon Evans <jon@xxxxxxxxxxxxx>
Sent: Thursday, March 25, 2021 10:13 PM
To: Markus Bonk <markus_bonk@xxxxxxxxxxxxxxx>
Cc: kicad-developers@xxxxxxxxxxxxxxxxxxx
Subject: Re: [Kicad-developers] UI only updates on mouse move

Hi Markus,

I assume NL_3D_VIEWER_PLUGIN_IMPL is all your custom code as it doesn't exist in KiCad's codebase.

Refreshing the display is a separate action that can be called when needed.
Some of the other actions do the refresh for you, but some do not.

It looks like you can send a EDA_3D_CONTROLLER::ZoomRedraw event to do the refresh on the 3D viewer canvas


On Thu, Mar 25, 2021 at 10:32 AM Markus Bonk <markus_bonk@xxxxxxxxxxxxxxx<mailto:markus_bonk@xxxxxxxxxxxxxxx>> wrote:

I am calling the following code:

long NL_3D_VIEWER_PLUGIN_IMPL::SetActiveCommand( std::string commandId )
    if( commandId.empty() )
        return 0;

    std::list<TOOL_ACTION*> actions = ACTION_MANAGER::GetActionList();
    TOOL_ACTION*            context = nullptr;

    for( std::list<TOOL_ACTION*>::const_iterator it = actions.begin(); it != actions.end(); it++ )
        TOOL_ACTION* action = *it;
        std::string  nm = action->GetName();

        if( commandId == nm )
            context = action;

    if( context != nullptr )
        wxWindow* parent = m_viewport3D->GetParent();

        // Only allow command execution if the window is enabled. i.e. there is not a modal dialog
        // currently active.
        if( parent->IsEnabled() )
            TOOL_MANAGER* tool_manager = static_cast<PCB_BASE_FRAME*>( parent )->GetToolManager();

            if( tool_manager == nullptr )
                return navlib::make_result_code( navlib::navlib_errc::invalid_operation );

            // Get the selection to use to test if the action is enabled
            SELECTION& sel = tool_manager->GetToolHolder()->GetCurrentSelection();

            bool runAction = true;

            if( const ACTION_CONDITIONS* aCond =
                        tool_manager->GetActionManager()->GetCondition( *context ) )
                runAction = aCond->enableCondition( sel );

            if( runAction )
                tool_manager->RunAction( *context, true );
            return navlib::make_result_code( navlib::navlib_errc::invalid_operation );

    return 0;

The issue I am experiencing is with tool_manager->RunAction( *context, true );
If instead of true, false is specified then the action is not run until the 2D mouse is moved. Or if true then the action is run immediately, however the UI is not updated until the 2D mouse is moved (for example in the 3D-viewer when orthographic/perspective is toggled). This is on windows.

Can anyone let me know what I need to do to get the UI to update as I would expect?



Markus Bonk
Senior Software Engineer


Clarita-Bernhard-Str. 18
81249 München

Geschäftsführer: Antonio Pascucci
Sitz der Gesellschaft: München
Registergericht: München HRB 99232

This email and any files transmitted with are from 3Dconnexion GmbH. The contents of this email and any attachments are confidential to the intended recipient. They may not be disclosed to or used by or copied in any way by anyone other than the intended recipient. If this email is received in error, please contact 3Dconnexion GmbH by calling +49 89 8974542-0 and then delete it. Please note that neither 3Dconnexion GmbH nor the sender accepts any responsibility for viruses and it is your responsibility to scan or otherwise check this email and any attachments. Any opinion expressed in this email are those of the individual and not necessarily those of 3Dconnexion GmbH.
3Dconnexion GmbH processes and stores for commercial purposes your personal data, collected upon your consent, in accordance with its privacy policy available at https://www.3dconnexion.eu/privacy.html, which has been drafted in accordance with Regulation (EU) no. 679/2016 and all applicable local data protection laws and regulations of the countries where the company operates. To revoke your consent or exercise all your rights with regards to personal data, please contact us at privacy@xxxxxxxxxxxxxxx<mailto:privacy@xxxxxxxxxxxxxxx>.
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx<mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

GIF image

GIF image