uifw/EikStd/coctlsrc/EIKEDWIN.CPP
branchRCL_3
changeset 13 a8834a2e9a96
parent 12 941195f2d488
child 15 c52421ed5f07
--- a/uifw/EikStd/coctlsrc/EIKEDWIN.CPP	Tue May 25 12:58:19 2010 +0300
+++ b/uifw/EikStd/coctlsrc/EIKEDWIN.CPP	Wed Jun 09 09:58:37 2010 +0300
@@ -653,9 +653,9 @@
     {
     TInt length( Min( aLengthToRetrieve, iEdwin.TextLength() - aDocumentPosition ) );
     iEdwin.iText->Extract( aEditorContent, aDocumentPosition, length );
-    if ( iEdwin.IsSmileyEnabled() )
-        {
-        CSmileyManager* smiley( iEdwin.iEdwinExtension->iSmiley );
+    CSmileyManager* smiley( iEdwin.iEdwinExtension->iSmiley );
+    if ( smiley && smiley->HasSmileyIconsInText() )
+        {        
         CAknEdwinState* state( iEdwin.EditorState() );
         if ( state )
             {
@@ -663,17 +663,22 @@
             if ( aDocumentPosition >= inlineText.LowerPos() && 
                 aDocumentPosition + length <= inlineText.HigherPos() )
                 {
-                smiley->ConvertTextForSmileyL( aDocumentPosition, aEditorContent, 
-                    EFalse );
+                TRAP_IGNORE( smiley->ConvertTextForSmileyL( aDocumentPosition, aEditorContent, 
+                    EFalse ); )
                 }
             }
+        TInt smileyEndPos( 0 );
         for ( TInt i( 0 ); i < length; i++ )
             {
-            if ( smiley->SmileyCodeByPos( aDocumentPosition + i ) > 0 &&
-                !CSmileyManager::IsSmileyCode( aEditorContent[i] ) )
+            if ( aEditorContent[i] == CSmileyManager::KCompensateChar && 
+                i < smileyEndPos )
                 {
                 aEditorContent[i] = CSmileyManager::KPlaceHolder;
                 }
+            else if ( smiley->IsSmileyCode( aEditorContent[i] ) )
+                {
+                smileyEndPos = i + smiley->SmileyLength( aDocumentPosition + i );
+                }
             }
         }
     }
@@ -8510,9 +8515,7 @@
         checkPos--;
         checkPos = checkPos >= 0 ? checkPos : 0;
         }
-    if ( CSmileyManager::IsSmileyCode( iEdwinExtension->iSmiley->
-        SmileyCodeByPos( checkPos ) ) && 
-        !iEdwinExtension->iSmiley->IsDisabledSmileyIcon( checkPos ) )
+    if ( iEdwinExtension->iSmiley->SmileyCodeByPos( checkPos ) > 0 )
         {
         TInt codeLength( iEdwinExtension->iSmiley->SmileyLength( checkPos ) );
         iEdwinExtension->iSmiley->DisableSmileyIcon( checkPos );
@@ -8940,7 +8943,6 @@
 		}
     }
 
-
 // ---------------------------------------------------------------------------
 // CEikEdwin::SkipBackgroundDrawer
 // ---------------------------------------------------------------------------