diff -r f966699dea19 -r ff572dfe6d86 idlehomescreen/xmluirendering/uiengine/src/xnlistquerydialogadapter.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnlistquerydialogadapter.cpp Fri Feb 19 22:42:37 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnlistquerydialogadapter.cpp Fri Mar 12 15:41:49 2010 +0200 @@ -35,7 +35,9 @@ #include "xndomlist.h" #include "xndomattribute.h" + // ======== LOCAL FUNCTIONS ======== + // --------------------------------------------------------------------------- // Finds recursively node by type // @return returns pointer to desired node, NULL if nothing found @@ -225,9 +227,17 @@ // ----------------------------------------------------------------------------- // void CXnListQueryDialogAdapter::ReplaceItemL(const TDesC& aText, TInt aIndex ) - { + { + if ( iDialog ) + { + iDialog->DismissQueryL(); + } + + iDialog = NULL; + aIndex += iStaticItems.Count(); TInt count( iItemArray->Count()); + if( aIndex >= count ) { iItemArray->AppendL( aText ); @@ -236,7 +246,7 @@ { iItemArray->Delete( aIndex ); iItemArray->InsertL( aIndex, aText ); - } + } } // ----------------------------------------------------------------------------- @@ -244,13 +254,22 @@ // ----------------------------------------------------------------------------- // void CXnListQueryDialogAdapter::InsertItemL(const TDesC& aText, TInt aIndex ) - { + { + if ( iDialog ) + { + iDialog->DismissQueryL(); + } + + iDialog = NULL; + aIndex += iStaticItems.Count(); TInt count( iItemArray->Count()); + if( count < aIndex ) { aIndex = count; } + iItemArray->InsertL( aIndex, aText ); } @@ -260,11 +279,19 @@ // void CXnListQueryDialogAdapter::DeleteItem( TInt aIndex ) { + if ( iDialog ) + { + TRAP_IGNORE( iDialog->DismissQueryL() ); + } + + iDialog = NULL; + aIndex += iStaticItems.Count(); + if( aIndex < iItemArray->Count()) { iItemArray->Delete( aIndex ); - } + } } // ----------------------------------------------------------------------------- @@ -273,16 +300,23 @@ // void CXnListQueryDialogAdapter::TryDisplayingDialogL( ) { + if ( iDialog ) + { + iDialog->DismissQueryL(); + } + + iDialog = NULL; + CXnAppUiAdapter& appui( static_cast< CXnAppUiAdapter& >( *iAvkonAppUi ) ); appui.HideFocus(); TInt selectedIndex( 0 ); - CAknListQueryDialog* query = - new ( ELeave ) CAknListQueryDialog( &selectedIndex ); - - query->PrepareLC( R_XML_LISTQUERY ); + CAknListQueryDialog* dialog = + new ( ELeave ) CAknListQueryDialog( &selectedIndex ); + dialog->PrepareLC( R_XML_LISTQUERY ); + /* Not tested CAknPopupHeadingPane* heading( query->QueryHeading() ); if ( heading ) @@ -303,13 +337,17 @@ } } */ - query->SetItemTextArray( iItemArray ); - query->SetOwnershipType( ELbmDoesNotOwnItemArray ); - - if ( query->RunLD() ) + dialog->SetItemTextArray( iItemArray ); + dialog->SetOwnershipType( ELbmDoesNotOwnItemArray ); + + iDialog = dialog; + + if ( dialog->RunLD() ) { ActivateItemL( selectedIndex ); - } + } + + iDialog = NULL; } // ----------------------------------------------------------------------------- @@ -346,6 +384,11 @@ CXnDomAttribute* attribute = static_cast (eventNode->AttributeList().FindByName( XnPropertyNames::action::event::KName )); + if ( !attribute ) + { + return; + } + HBufC8* nameStr( attribute->Value().AllocLC()); TPtr8 namePtr = nameStr->Des();