uifw/AvKon/src/AknQueryDialog.cpp
branchRCL_3
changeset 25 941195f2d488
parent 4 8ca85d2f0db7
child 51 fcdfafb36fe7
--- a/uifw/AvKon/src/AknQueryDialog.cpp	Tue May 11 16:27:42 2010 +0300
+++ b/uifw/AvKon/src/AknQueryDialog.cpp	Tue May 25 12:58:19 2010 +0300
@@ -1025,35 +1025,47 @@
     }
 
 EXPORT_C void CAknQueryDialog::HandlePointerEventL(const TPointerEvent& aPointerEvent) 
-    { 
-    if ( AknLayoutUtils::PenEnabled() )
+    {
+    CAknAppUi *appUi = iAvkonAppUi;
+    CCoeControl *redirectControl = NULL;
+    TRect rectToScreenOfControl;
+ 
+    if (!Rect().Contains(aPointerEvent.iPosition))
         {
-
-        CAknTouchPane* touchPane = iAvkonAppUi->TouchPane();
-        
-        if ( !Rect().Contains( aPointerEvent.iPosition ) && touchPane
-            && touchPane->IsVisible() )
+        CAknTouchPane* touchPane = appUi->TouchPane();
+        CEikStatusPane *statusPane = appUi->StatusPane();
+ 
+        if ( touchPane && touchPane->IsVisible() )
             {
             // touchpane is a window-owning control -> Rect() cannot be used
-            TRect touchPaneRect( touchPane->Position(), touchPane->Size() );
-                
-            if ( touchPaneRect.Contains( aPointerEvent.iParentPosition ) )
+            rectToScreenOfControl.SetRect( touchPane->Position(), touchPane->Size() );
+            redirectControl = touchPane;
+            }
+        else if ( statusPane && statusPane->IsVisible() && 
+                Layout_Meta_Data::IsLandscapeOrientation() && 
+                !IsFocused())
+            {
+            CCoeControl* cbControl = statusPane->ControlL(TUid::Uid(EEikStatusPaneUidCombined));
+            if ( cbControl && !statusPane->IsFaded() )
                 {
-                TPointerEvent pointerEvent( aPointerEvent );
-                   
-                // make event's coordinates touch pane relative
-                pointerEvent.iPosition = aPointerEvent.iParentPosition - 
-                    touchPaneRect.iTl;
-                    
-                static_cast<CCoeControl*>( touchPane )->HandlePointerEventL( 
-                    pointerEvent );
+                rectToScreenOfControl.SetRect( cbControl->PositionRelativeToScreen(), cbControl->Size() );
+                redirectControl = cbControl;
                 }
             }
-        else
-            {
-            // Forward also those pointerevents that the dialog rect does not contain
-            CAknDialog::HandlePointerEventL( aPointerEvent );
-            }
+        }
+ 
+    if ( redirectControl && rectToScreenOfControl.Contains(aPointerEvent.iParentPosition) )
+        {
+        // make event's coordinates relative to new control.
+        TPointerEvent pointerEvent( aPointerEvent );
+        pointerEvent.iPosition = aPointerEvent.iParentPosition - rectToScreenOfControl.iTl;
+ 
+        redirectControl->HandlePointerEventL( pointerEvent );
+        }
+    else
+        {
+        // Forward also those pointerevents that the dialog rect does not contain
+        CAknDialog::HandlePointerEventL( aPointerEvent );
         }
     }