diff -r e5618cc85d74 -r 6c158198356e javauis/lcdui_akn/lcdui/src/CMIDCustomItem.cpp --- a/javauis/lcdui_akn/lcdui/src/CMIDCustomItem.cpp Thu Jul 15 18:31:06 2010 +0300 +++ b/javauis/lcdui_akn/lcdui/src/CMIDCustomItem.cpp Thu Aug 19 09:48:13 2010 +0300 @@ -54,6 +54,17 @@ it needs to draw bitmaps with these sizes. @see KMaxScreenSizeFactor */ const TInt KCIMaxScreenSizeFactor = 2; +// --------------------------------------------------------------------------- +// TLcduiEvent +// --------------------------------------------------------------------------- +// +enum TLcduiEvent +{ + EFixUIOrientation, + EUnFixUIOrientation +}; + + CMIDCustomItem* CMIDCustomItem::NewL( MMIDEnv& aEnv, const TDesC& aLabel, CMIDUIManager* aUIManager) { @@ -78,6 +89,8 @@ , iRestoreDirectContentWhenUnfaded(EFalse) , iPreviousVisibility(EFalse) , iConsumerWaitingForDSAResourcesCallback(NULL) + , iUiFixed(EFalse) + , iUiToBeFixedLater(EFalse) { iMMidItem = this; @@ -246,6 +259,12 @@ { iDirectContent->MdcContainerDestroyed(); } + + if (iUiFixed && iForm) + { + iForm->CurrentDisplayable().ReleaseOrientation(); + iUiFixed = EFalse; + } #ifndef RD_JAVA_NGA_ENABLED if (iDirectAccess) @@ -1328,10 +1347,24 @@ { ChangeDirectContainerVisibility(ETrue); } + + if (iUiToBeFixedLater && iForm) + { + iForm->CurrentDisplayable().FixOrientation(); + iUiFixed = ETrue; + iUiToBeFixedLater = EFalse; + } } void CMIDCustomItem::ItemRemovedFromForm() { + if (iUiFixed && iForm) + { + iForm->CurrentDisplayable().ReleaseOrientation(); + iUiFixed = EFalse; + iUiToBeFixedLater = EFalse; + } + CMIDItem::ItemRemovedFromForm(); ChangeDirectContainerVisibility(EFalse); @@ -1524,6 +1557,52 @@ } // --------------------------------------------------------------------------- +// From class MDirectContainer. +// CMIDCustomItem::MdcFixUIOrientation(TBool aEnableFix) +// --------------------------------------------------------------------------- +// + +void CMIDCustomItem::MdcFixUIOrientation(TBool aEnableFix) +{ + if (aEnableFix) + { + iEnv.ToLcduiObserver().InvokeLcduiEvent(*this, EFixUIOrientation); + } + else + { + iEnv.ToLcduiObserver().InvokeLcduiEvent(*this, EUnFixUIOrientation); + } +} + +void CMIDCustomItem::HandleLcduiEvent(int aType) +{ + switch (aType) + { + case EFixUIOrientation: + if (!iUiFixed) + { + if (iForm) + { + iForm->CurrentDisplayable().FixOrientation(); + iUiFixed = ETrue; + iUiToBeFixedLater = EFalse; + } + else + { + iUiToBeFixedLater = ETrue; + } + } + break; + case EUnFixUIOrientation: + if (iForm && iUiFixed) + { + iForm->CurrentDisplayable().ReleaseOrientation(); + iUiFixed = EFalse; + iUiToBeFixedLater = EFalse; + } + break; + } +} // // --------------------------------------------------------------------------- //