uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp
changeset 21 6ce30188c5bf
parent 19 f5bac0badc7e
child 25 f7f1ae431f74
--- a/uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp	Mon May 03 13:22:43 2010 +0300
+++ b/uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp	Fri May 14 16:46:13 2010 +0300
@@ -148,30 +148,42 @@
     void RunL()
         {
         iSema.Wait();
+        TInt position = iPosition;
+        TInt parentId = iParentIdentifier;
+        iSema.Signal();
+        TBool goOn = EFalse;
         if (iStatus.Int() == KErrNone)
             {
-            TRAPD(err, DoAdjustPositionL());
-            if (err)
-                {
-                __ALFLOGSTRING1("ALF: WG Parent not found, err %d", err);
-                }
-            }
+            do {
+                TRAPD(err, DoAdjustPositionL(position, parentId));
+                if (err)
+                    {
+                    __ALFLOGSTRING1("ALF: WG Parent not found, err %d", err);
+                    }
+                iSema.Wait();        
+                goOn = (iPosition != position || iParentIdentifier != parentId);
+                position = iPosition;
+                parentId = iParentIdentifier;
+                iSema.Signal();
+                } while(goOn);
+    		}
+        iSema.Wait();
         DoActivate();
         iSema.Signal();
         }
 
-    void DoAdjustPositionL()
+    void DoAdjustPositionL(TInt aPosition, TInt aParentIdentifier)
         {
-         __ALFLOGSTRING1("ALF: DoAdjustPositionL() %d", iPosition);
+         __ALFLOGSTRING1("ALF: DoAdjustPositionL() %d", aPosition);
                   
-        if (iPosition == CAlfAppServer::EAbsoluteBackground) // just for convenience
+        if (aPosition == CAlfAppServer::EAbsoluteBackground) // just for convenience
             {
             __ALFLOGSTRING("CAlfEventCatcher::DoAdjustPositionL - CAlfAppServer::EAbsoluteBackground");
             iWindowGroup.SetOrdinalPosition(-1,ECoeWinPriorityNeverAtFront);
             iWsSession.Flush();
             return;
             }
-        else if (iPosition == CAlfAppServer::EAlfWindowSize ) // just for developer convenience
+        else if (aPosition == CAlfAppServer::EAlfWindowSize ) // just for developer convenience
             {
             __ALFLOGSTRING("CAlfEventCatcher::DoAdjustPositionL - CAlfAppServer::EAlfWindowSize");
              // update window size when layout changes    
@@ -183,7 +195,7 @@
      
             
         TInt parentPriority = 
-            iWsSession.GetWindowGroupOrdinalPriority(iParentIdentifier);
+            iWsSession.GetWindowGroupOrdinalPriority(aParentIdentifier);
 
         // perhaps we should maintain wg-list elsewhere
         CArrayFixFlat<TInt>* wgs = new (ELeave) CArrayFixFlat<TInt>(1); 
@@ -195,9 +207,9 @@
         TInt wgCount = wgs->Count();
         for (TInt i = 0; i < wgCount; i++)
             {
-            if (iParentIdentifier == wgs->At(i))
+            if (aParentIdentifier == wgs->At(i))
                 {
-                if ( iPosition == CAlfAppServer::EOnTopOfParent )
+                if ( aPosition == CAlfAppServer::EOnTopOfParent )
                     {
                     pos = i;
                     }