Professional UI Solutions
Site Map   /  Register
 
 

Forum

Please Log In to post a new message or reply to an existing one. If you are not registered, please register.

NOTE: Some forums may be read-only if you are not currently subscribed to our technical support services.

Forums » Prof-UIS General Discussion » Ribbonbar: hover animation recursion under modal dialog Collapse All
Subject Author Date
Oliver Rau Mar 16, 2010 - 11:24 AM

Dear ProfUIS-Team,

we discovered the following strange behaviour:

1. open the demo application RibbonBarMDI with decreased height

2. click the info ("i") button on the upper right to open the "About"-Dialog within the range of the ribbon bar

3. immediately move mouse pointer within this dialog and then quickly go to a ribbon button



4. this leads to intermittent hover-highlighting (blinking) of button while leaving mouse pointer over it

5. after moving the mouse pointer back to the dialog and leaving it still for a short while the dialog becomes real modal, i.e. no more animations

This means, that there must be some animations running under a modal dialog, something that can produce problems, for example if this dialog contains a combobox (e.g. the options dialog under the file button). If the user clicks to open the combobox it will be closed automatically as long there are background animations running.

Best regards,

Martin

Technical Support Mar 17, 2010 - 2:14 PM

Thank you for reporting this issue. This can be fixed by updating the following two methods:

void CExtToolControlBar::AnimationSite_OnProgressShutdownTimer( UINT nTimerID )
{
            ASSERT_VALID( this);
HWND hWndOwn = GetSafeHwnd();
            CExtControlBar::AnimationSite_OnProgressShutdownTimer( nTimerID );
            if( hWndOwn != NULL && ::IsWindow( hWndOwn ) )
            {
                        bool bUpdateHB = true;
                        if( ! ( m_pDockSite->GetSafeHwnd() != NULL && m_pDockSite->IsWindowEnabled() ) )
                                    bUpdateHB = false;
                        else if( ! IsWindowEnabled() )
                                    bUpdateHB = false;
                        else
                        {
                                    CWnd * pWndOwner = GetOwner();
                                    if( ! ( pWndOwner->GetSafeHwnd() != NULL && pWndOwner->IsWindowEnabled() ) )
                                                bUpdateHB = false;
                        }
                        if( bUpdateHB )
                                    _UpdateHoverButton( CPoint(-1,-1), false );
            }
}

void CExtBarButton::OnDeliverCmd()
{
            ASSERT_VALID( this );
CExtToolControlBar * pBar = GetBar();
            ASSERT_VALID( pBar );
INT nAcIndex, nAcCount = pBar->AnimationSite_ClientGetCount();
            for( nAcIndex = 0; nAcIndex < nAcCount; nAcIndex ++ )
            {
                        CExtAnimationClient * pAC = pBar->AnimationSite_ClientGetAt( nAcIndex );
                        pBar->AnimationSite_ClientProgressStop( pAC );
            }
            if( pBar->OnDeliverCmd( this ) )
                        return;
            if( ! CExtCmdManager::IsCommand( GetCmdID(false) ) )
                        return;
CExtCmdItem * pCmdItem =
                        g_CmdManager->CmdGetPtr(
                                    g_CmdManager->ProfileNameFromWnd( pBar->GetSafeHwnd() ),
                                    GetCmdID(true)
                                    );
            if( pCmdItem == NULL )
                        return;
            // the command may be undelivered (i.e. pCmdItem->Deliver() will
            // return "false") because there is no command handler found for it
            pCmdItem->Deliver( pBar, true );
}
This fix will be available in the next release so you can use it now.