--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AknGlobalUI/AknCapServer/clientsrc/AknCapServerClient.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,699 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <eiknotapi.h>
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <uikon.hrh>
+#else
+#include <uikon.hrh>
+#include <uiklaf/private/pluginuid.hrh>
+#endif
+#include "AknCapServerClient.h"
+#include "AknCapServerDefs.h"
+#include <eiksrvs.h>
+#include <apgcli.h>
+#include <apasvst.h>
+#include <aknconsts.h>
+#include <AknNotifierControllerUtilities.h>
+
+// For global note.
+#include <AknGlobalNote.h>
+#include <avkon.rsg>
+
+#include "akndiscreetpopupdata.h"
+
+_LIT(KAknCapServerExecutable, "z:\\sys\\bin\\akncapserver.exe");
+_LIT(KAknNfySrvThreadName, "aknnfysrv");
+
+TInt RAknUiServer::ConnectAknServer()
+ {
+#ifdef _DEBUG
+ RThread me;
+ TName name = me.Name();
+ RDebug::Print( _L( "RAknUiServer::ConnectAknServer(), handle %d, %S" ), Handle(), &name );
+#endif
+ TInt err = KErrNone;
+ if (Handle() == NULL)
+ {
+ _LIT(KServerNameFormat, "%08x_%08x_AppServer");
+ TFullName serverName;
+
+ serverName.Format(
+ KServerNameFormat,
+ KUikonUidPluginInterfaceNotifiers,
+ KAknCapServerUid.iUid);
+
+ TRAP(err, ConnectExistingByNameL(serverName));
+ if (err == KErrNotFound) // This should be never true when starter is in use!
+ {
+ TRAP_IGNORE(StartAknCapserverL());
+ User::After(500000); // No problem to wait synchronously as pure RnD support.
+ TRAP(err,ConnectExistingByNameL(serverName));
+ }
+ }
+#ifdef _DEBUG
+ RDebug::Print(_L("RAknUiServer::ConnectAknServer() end"));
+#endif
+ return err;
+ }
+
+// This method must be able to connest eikon server always, used by notifiers running inside
+// eikon server.
+EXPORT_C TInt RAknUiServer::ConnectAndSendAppsKeySuppress(TBool aSuppress)
+ {
+ TInt ret = ConnectAknServer();
+ if (ret == KErrNone)
+ {
+ TInt param = aSuppress ? EAknAppsKeyBlockAddCount : EAknAppsKeyBlockDecreaseCount;
+ ret = SendReceive(EAknSSuppressAppsKey, TIpcArgs( param ));
+ }
+ return ret;
+ }
+
+EXPORT_C TInt RAknUiServer::HideApplicationFromFsw(TBool aHide, TInt aMyUid)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ TInt ret = ConnectAknServer();
+ if (ret == KErrNone)
+ {
+ ret = SendReceive(EAknSHideApplicationFromFWS, TIpcArgs( aMyUid, aHide ));
+ }
+ return ret;
+ }
+
+EXPORT_C void RAknUiServer::UnlockMedia(TInt aDrive, TBool aStore, TRequestStatus& aStatus)
+ {
+ TInt ret = ConnectAknServer();
+ if (ret == KErrNone)
+ {
+ SendReceive(EAknSUnlockMedia, TIpcArgs( EFalse, aDrive, aStore ), aStatus);
+ }
+ else
+ {
+ TRequestStatus* ptr = &aStatus;
+ User::RequestComplete(ptr, ret);
+ }
+ }
+
+EXPORT_C void RAknUiServer::CancelUnlockMedia()
+ {
+ TInt ret = ConnectAknServer();
+ if (ret == KErrNone)
+ {
+ ret = SendReceive(EAknSUnlockMedia, TIpcArgs( ETrue ));
+ }
+ }
+
+EXPORT_C TInt RAknUiServer::EnableTaskList(TBool aEnable)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ TInt ret = ConnectAknServer();
+ if (ret == KErrNone)
+ {
+ ret = SendReceive(EAknSEnableTaskList, TIpcArgs( aEnable ));
+ }
+ return ret;
+ }
+
+EXPORT_C TInt RAknUiServer::MakeTaskListVisible(TBool aShow)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ TInt ret = ConnectAknServer();
+ if (ret == KErrNone)
+ {
+ ret = SendReceive(EAknsLaunchTaskList, TIpcArgs( aShow));
+ }
+ return ret;
+ }
+
+EXPORT_C TInt RAknUiServer::UpdateTaskList()
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ TInt ret = ConnectAknServer();
+ if (ret == KErrNone)
+ {
+ Send(EAknSRefreshTaskList);
+ }
+ return ret;
+ }
+
+EXPORT_C TInt RAknUiServer::SetSgcParams(TInt aWgId, TBitFlags aAppFlags, TInt aSpLayout,
+ TInt aSpFlags)
+ {
+ return SetSgcParams(aWgId, aAppFlags, aSpLayout, aSpFlags, KAknScreenModeUnset);
+ }
+
+EXPORT_C TInt RAknUiServer::SetSgcParams(TInt aWgId, TBitFlags aAppFlags, TInt aSpLayout,
+ TInt aSpFlags, TInt aAppScreenMode)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ SAknCapServerSetSgcParams params;
+ params.iWgId = aWgId;
+ params.iAppFlags = aAppFlags;
+ params.iSpLayout = aSpLayout;
+ params.iSpFlags = aSpFlags;
+ params.iAppScreenMode = aAppScreenMode;
+ TPckg<SAknCapServerSetSgcParams> pack(params);
+
+ TIpcArgs args(&pack);
+ return SendReceive(EAknEikAppUiSetSgcParams, args);
+ }
+
+EXPORT_C TInt RAknUiServer::BlockServerStatusPaneRedraws()
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknEikAppUiBlockServerStatusPaneRedraws,TIpcArgs());
+ }
+
+EXPORT_C TInt RAknUiServer::RedrawServerStatusPane()
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknEikAppUiRedrawServerStatusPane,TIpcArgs());
+ }
+
+EXPORT_C TInt RAknUiServer::PrepareForAppExit(TInt aWgId)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ TIpcArgs args( aWgId );
+ return SendReceive(EAknEikAppUiPrepareForAppExit, args);
+ }
+
+EXPORT_C TInt RAknUiServer::SetSystemFaded(TBool aFade)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ TIpcArgs args( aFade );
+ return SendReceive(EAknEikAppUiSetSystemFaded, args);
+ }
+
+EXPORT_C TInt RAknUiServer::IsSystemFaded(TBool& aFade) const
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ TPckg<TBool> pckg(aFade);
+ TIpcArgs args( &pckg );
+ return SendReceive(EAknEikAppUiIsSystemFaded, args);
+ }
+
+EXPORT_C TInt RAknUiServer::Connect()
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ return ConnectAknServer();
+ }
+
+EXPORT_C TInt RAknUiServer::RelinquishPriorityToForegroundApp()
+ {
+ if (!Handle())
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknEikAppUiRelinquishPriorityToForegroundApp);
+ }
+
+EXPORT_C TInt RAknUiServer::SetStatusPaneFlags(TInt aFlags) const
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknSSetStatusPaneFlags,TIpcArgs(aFlags));
+ }
+
+EXPORT_C TInt RAknUiServer::SetStatusPaneLayout(TInt aLayoutResId) const
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknSSetStatusPaneLayout,TIpcArgs(aLayoutResId));
+ }
+
+EXPORT_C TInt RAknUiServer::BlankScreen() const
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ if ( thread.Name() == KAknNfySrvThreadName )
+ //Notifier Server should not blank the screen, if not, flickers show
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknSBlankScreen,TIpcArgs());
+ }
+
+EXPORT_C TInt RAknUiServer::UnblankScreen() const
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ if ( thread.Name() == KAknNfySrvThreadName )
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknSUnblankScreen,TIpcArgs());
+ }
+
+EXPORT_C TUid RAknUiServer::ServiceUid() const
+ {
+ return KAknCapServiceUid;
+ }
+
+EXPORT_C TInt RAknUiServer::SetKeyboardRepeatRate(TAknDefaultKeyboardRepeatRate aRate)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknSSetKeyboardRepeatRate,TIpcArgs(aRate));
+ }
+
+EXPORT_C TInt RAknUiServer::SetKeyblockMode(TAknKeySoundOpcode aMode)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknSUpdateKeyBlockMode,TIpcArgs(aMode));
+ }
+
+EXPORT_C TInt RAknUiServer::DoEikonServerConnect()
+ {
+ return ConnectAknServer();
+ }
+
+EXPORT_C TInt RAknUiServer::ShowKeysLockedNote(TBool& aIsKeyPadLocked)
+ {
+ TInt ret = SendReceive(EAknSShowLockedNote);
+ if (ret >= 0) // no error
+ {
+ aIsKeyPadLocked = ret;
+ ret = KErrNone;
+ }
+ return ret;
+ }
+
+EXPORT_C void RAknUiServer::ShutdownApps(const TUid aRequesterUID,
+ const TInt aTimeoutInMicroseconds, TRequestStatus& aStatus) const
+ {
+ TIpcArgs args( aRequesterUID.iUid, aTimeoutInMicroseconds );
+ SendReceive(EAknSShutdownApps, args, aStatus);
+ }
+
+EXPORT_C void RAknUiServer::CancelShutdownApps()
+ {
+ SendReceive(EAknSCancelShutdownApps);
+ }
+
+EXPORT_C TInt RAknUiServer::ShowGlobalNoteL(const TDesC& aNoteText, TInt aGlobalNoteType)
+ {
+ if (!Handle())
+ {
+ return KErrNotReady;
+ }
+
+ CBufFlat* buffer = CBufFlat::NewL(128);
+ CleanupStack::PushL(buffer);
+
+ CAknGlobalNote::DoGlobaNoteBufferL(
+ aGlobalNoteType,
+ 0,
+ R_AVKON_SOFTKEYS_OK_EMPTY,
+ -1,
+ -1,
+ -1,
+ -1,
+ EFalse,
+ ETrue,
+ aNoteText,
+ buffer
+ );
+
+ TPtrC8 bufferPtr;
+ bufferPtr.Set(buffer->Ptr(0));
+ TPckgBuf<SAknGlobalNoteReturnParams> retPckg;
+ TInt ret = SendReceive(EStartNotifier, TIpcArgs(KAknGlobalNoteUid.iUid, &bufferPtr, &retPckg));
+ CleanupStack::PopAndDestroy(); // buffer
+ return ret;
+ }
+
+EXPORT_C TInt RAknUiServer::StatusPaneResourceId()
+ {
+ if (!Handle()) // either eikon server has not yet connected to aknserver or we are in aknserver
+ {
+ return 0; // zero is invalid resource id -> indicates problem accessing sp
+ }
+
+ TInt ret = 0;
+ TPckg<TInt> pckg(ret);
+ TInt err = SendReceive(EAknSStatusPaneResourceId, TIpcArgs(&pckg));
+ return ((err == KErrNone)?ret:0);
+ }
+
+EXPORT_C TInt RAknUiServer::CreateActivateViewEventL(const TVwsViewId& aViewId,
+ TUid aCustomMessageId, const TDesC8& aCustomMessage)
+ {
+ return SendReceive(EAknSLaunchView, TIpcArgs(
+ aViewId.iAppUid.iUid,
+ aViewId.iViewUid.iUid,
+ aCustomMessageId.iUid,
+ &aCustomMessage));
+ }
+
+EXPORT_C HBufC8* RAknUiServer::GetPackedConfigL() const
+ {
+ TInt size = 0;
+ TPckg<TInt> pckg(size);
+ User::LeaveIfError(SendReceive(EAknEikAppUiLayoutConfigSize, TIpcArgs(&pckg)));
+
+ HBufC8* buf = HBufC8::NewMaxLC(size);
+ TPtr8 ptr = buf->Des();
+ User::LeaveIfError(SendReceive(EAknEikAppUiGetLayoutConfig, TIpcArgs(&ptr)));
+
+ CleanupStack::Pop(buf);
+ return buf;
+ }
+
+EXPORT_C TInt RAknUiServer::CurrentAppStatuspaneResource()
+ {
+ if (!Handle()) // either eikon server has not yet connected to aknserver or we are in aknserver
+ {
+ return 0; // zero is invalid resource id -> indicates problem accessing sp
+ }
+
+ TInt ret = 0;
+ TPckg<TInt> pckg(ret);
+ TInt err = SendReceive(EAknSStatusPaneAppResourceId, TIpcArgs(&pckg));
+ return ((err == KErrNone)?ret:0);
+ }
+
+EXPORT_C TInt RAknUiServer::SetCurrentAppStatuspaneResource(TInt aResourceId)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+
+ return SendReceive(EAknSSetStatusPaneAppResourceId,TIpcArgs(aResourceId));
+ }
+
+EXPORT_C TInt RAknUiServer::RotateScreen()
+ {
+ return SendReceive(EAknSRotateScreen, TIpcArgs());
+ }
+
+EXPORT_C TBool RAknUiServer::TaskSwitchingSupressed()
+ {
+ if (ConnectAknServer() == KErrNone)
+ {
+ // Mimics also boolean EFalse, in any error or posivite value we assume that appswitch is
+ // forbidden.
+ return !(SendReceive(EAknSAppsKeyBlocked) == KErrNone);
+ }
+ else
+ {
+ return ETrue; // Capserver not available -> no app switching allowed either
+ }
+ }
+
+EXPORT_C TInt RAknUiServer::ShowLongTapAnimation( const TPointerEvent& aEvent)
+ {
+ if ( !Handle() )
+ {
+ return KErrCouldNotConnect;
+ }
+
+ return SendReceive(
+ EAknSShowLongTapAnimation,
+ TIpcArgs(aEvent.iParentPosition.iX, aEvent.iParentPosition.iY));
+ }
+
+EXPORT_C TInt RAknUiServer::HideLongTapAnimation()
+ {
+ if ( !Handle() )
+ {
+ return KErrCouldNotConnect;
+ }
+
+ return SendReceive(EAknSHideLongTapAnimation, TIpcArgs());
+ }
+
+EXPORT_C TInt RAknUiServer::GetAliasKeyCode(TUint& aCode, const TKeyEvent& aKeyEvent,
+ TEventCode aType)
+ {
+ TPckgC<TKeyEvent> buf(aKeyEvent);
+ TPckg<TUint> pckg(aCode);
+
+ return SendReceive(EAknGetAliasKeyCode, TIpcArgs(&pckg, &buf, aType));
+ }
+
+EXPORT_C TInt RAknUiServer::GetPhoneIdleViewId( TVwsViewId& aViewId )
+ {
+ TPckg<TVwsViewId> pckg(aViewId);
+ return SendReceive(EAknSGetPhoneIdleViewId, TIpcArgs(&pckg));
+ }
+
+EXPORT_C void RAknUiServer::StartAknCapserverL()
+ {
+ AknStartupApaServerProcess();
+
+ RApaLsSession apa;
+ User::LeaveIfError(apa.Connect());
+ CleanupClosePushL(apa);
+
+ CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+ cmdLine->SetExecutableNameL( KAknCapServerExecutable );
+ cmdLine->SetServerRequiredL(KUikonUidPluginInterfaceNotifiers);
+ cmdLine->SetCommandL(EApaCommandBackground);
+ TThreadId dummy;
+
+ TRequestStatus requestStatusForRendezvous;
+ User::LeaveIfError(apa.StartApp(*cmdLine, dummy, &requestStatusForRendezvous));
+ User::WaitForRequest(requestStatusForRendezvous);
+ User::LeaveIfError(requestStatusForRendezvous.Int());
+ CleanupStack::PopAndDestroy(2, &apa); // cmdLine and apa
+ }
+
+
+/* Copied from \common\generic\app-framework\apparc\apgrfx\apscli.cpp
+ * so that a command line can be passed to apparc.
+ */
+EXPORT_C TInt AknStartupApaServerProcess()
+ {
+ _LIT(KNameApaImage,"APSEXE");
+ const TUid KServerUid3 = { 0x10003A3F };
+ const TUidType uidType(KNullUid, KNullUid, KServerUid3);
+
+ _LIT(KApaCommandLine, "-IDLE_TIMEOUT_PERIODIC_DELAY_5000");
+ RProcess server;
+ TInt r = server.Create(KNameApaImage, KApaCommandLine, uidType);
+
+ if (r != KErrNone)
+ {
+ return r;
+ }
+ TRequestStatus stat;
+ server.Rendezvous(stat);
+ if (stat != KRequestPending)
+ {
+ server.Kill(0); // abort startup
+ }
+ else
+ {
+ server.Resume(); // logon OK - start the server
+ }
+ User::WaitForRequest(stat); // wait for start or death
+ server.Close();
+ return stat.Int();
+ }
+
+EXPORT_C TInt RAknUiServer::DoNotifierControllerCommand(TInt aNotifierControllerCommand)
+ {
+ return Send(KDoNotifierControllerCommand, TIpcArgs(aNotifierControllerCommand));
+ }
+
+EXPORT_C TInt RAknUiServer::SetFgSpDataSubscriberId(TInt aId)
+ {
+ RThread thread;
+ if (!Handle() && thread.Name() == EIKAPPUI_SERVER_THREAD_NAME)
+ {
+ return KErrNone;
+ }
+ return SendReceive(EAknSetFgSpDataSubscriberId, TIpcArgs(aId));
+ }
+
+EXPORT_C TInt RAknUiServer::PreAllocateDynamicSoftNoteEvent(TInt aNoteId)
+ {
+ return SendReceive(EAknSPreAllocateDynamicSoftNoteEvent, TIpcArgs(aNoteId));
+ }
+
+EXPORT_C void RAknUiServer::NotifyDynamicSoftNoteEvent(TRequestStatus& aStatus, TDes8& aActionId)
+ {
+ TIpcArgs args(&aActionId);
+ SendReceive(EAknSNotifyDynamicSoftNoteEvent, args, aStatus);
+ }
+
+EXPORT_C void RAknUiServer::CancelDynamicSoftNoteEventNotification()
+ {
+ SendReceive(EAknSCancelDynamicSoftNoteEventNotification, TIpcArgs());
+ }
+
+EXPORT_C TInt RAknUiServer::MoveAppInZOrder(TInt aAppWindowGroupId, TBool aBackgroundOrForeground)
+ {
+ return Send(EAknEikAppUiMoveAppInZOrder, TIpcArgs(aAppWindowGroupId, aBackgroundOrForeground));
+ }
+
+
+EXPORT_C void RAknUiServer::DoDiscreetPopupAction(
+ TAknDiscreetPopupData* aData, TRequestStatus* aStatus )
+ {
+ if ( !aData || !Handle() )
+ {
+ return;
+ }
+
+ switch ( aData->Type() )
+ {
+ // Launch global popup with params
+ case ( TAknDiscreetPopupData::EAknPopupTypeParam ):
+ {
+ TPckg<TAknDiscreetPopupParamData> pkg(
+ *( static_cast<TAknDiscreetPopupParamData*>( aData ) ) );
+ SendReceive( EAknSDiscreetPopupAction, TIpcArgs( &pkg ), *aStatus );
+ break;
+ }
+ // Launch global popup from resources
+ case ( TAknDiscreetPopupData::EAknPopupTypeResource ):
+ {
+ TPckg<TAknDiscreetPopupResourceData> pkg(
+ *( static_cast<TAknDiscreetPopupResourceData*>( aData ) ) );
+ SendReceive( EAknSDiscreetPopupAction, TIpcArgs( &pkg ), *aStatus );
+ break;
+ }
+ // All request cancellation
+ case ( TAknDiscreetPopupData::EAknPopupTypeCancelRequest ):
+ {
+ TPckg<TAknDiscreetPopupCancelRequestData> pkg(
+ *( static_cast<TAknDiscreetPopupCancelRequestData*>( aData ) ) );
+ SendReceive( EAknSDiscreetPopupAction, TIpcArgs( &pkg ) );
+ break;
+ }
+ // Id request
+ case ( TAknDiscreetPopupData::EAknPopupTypeUndefined ):
+ {
+ TPckg<TAknDiscreetPopupData> pkg(
+ *( static_cast<TAknDiscreetPopupData*>( aData ) ) );
+ SendReceive( EAknSDiscreetPopupAction, TIpcArgs( &pkg ) );
+ break;
+ }
+ // Query the rect of global discreet popup in use
+ case ( TAknDiscreetPopupData::EAknPopupTypeQueryInUseRect ):
+ {
+ TPckg<TAknDiscreetPopupRectData> pkg(
+ *( static_cast<TAknDiscreetPopupRectData*>( aData ) ) );
+ SendReceive( EAknSDiscreetPopupAction, TIpcArgs( &pkg ) );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// RAknUiServer::GetInUseGlobalDiscreetPopupRect
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TRect RAknUiServer::GetInUseGlobalDiscreetPopupRect()
+ {
+ TAknDiscreetPopupRectData rectData(TRect::EUninitialized);
+ DoDiscreetPopupAction( static_cast<TAknDiscreetPopupData*>(&rectData),NULL);
+ return rectData.Rect();
+ }
+
+// End of file