diff -r 000000000000 -r 5d03bc08d59c windowing/windowserver/nonnga/SERVER/PASSWORD.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/nonnga/SERVER/PASSWORD.CPP Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,112 @@ +// Copyright (c) 1997-2009 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: +// Password handling +// +// + +#include +#include +#include "server.h" +#include "rootwin.h" +#include "windowgroup.h" +#include "password.h" + +TBool CWsPassword::iPasswordModeActive=EFalse; +TPasswordMode CWsPassword::iPasswordMode=EPasswordCancel; +CWsClientWindow *CWsPassword::iPasswordWindow=NULL; +TInt CWsPassword::iPrevPasswordDay=-1; + +void CWsPassword::WindowDestroyed(CWsClientWindow *aWindow) + { + if (aWindow==iPasswordWindow) + CancelPasswordWindow(); + } + +void CWsPassword::CancelPasswordWindow() + { + iPasswordWindow=NULL; + iPasswordModeActive=EFalse; + } + +void CWsPassword::SetPasswordWindowL(CWsClientWindow *aWindow, TPasswordMode aPasswordMode) + { + TBool triggerNow=EFalse; + if (aPasswordMode==EPasswordAlwaysTriggerNow || aPasswordMode==EPasswordOnceADayTriggerNow) + { + triggerNow=ETrue; + if (aPasswordMode==EPasswordOnceADayTriggerNow) + aPasswordMode=EPasswordOnceADay; + else + aPasswordMode=EPasswordAlways; + } + if (aPasswordMode==EPasswordCancel) + { + if (aWindow!=iPasswordWindow) + aWindow->OwnerPanic(EWservPanicPassword); + CancelPasswordWindow(); + } + else + { + if (iPasswordWindow && iPasswordWindow!=aWindow) + User::Leave(KErrInUse); + if (aPasswordMode!=EPasswordAlways && aPasswordMode!=EPasswordOnceADay && aPasswordMode!=EPasswordNone) + aWindow->OwnerPanic(EWservPanicPassword); + iPasswordWindow=aWindow; + } + iPasswordMode=aPasswordMode; + if (iPasswordMode==EPasswordOnceADay) + iPrevPasswordDay=-1; // Force a password to be displayed on the this switch on + if (triggerNow) + SwitchOn(); + } + +TInt CWsPassword::Day() +// +// Return the current day taking into account the password midnight offset +// + { + TTime now; + now.HomeTime(); + now-=TTimeIntervalHours(EPasswordMidnightOffset); + return(now.DateTime().Day()); + } + +void CWsPassword::SwitchOn() + { + if (!iPasswordModeActive && iPasswordWindow && iPasswordMode!=EPasswordNone) + { + if (iPasswordMode==EPasswordOnceADay) + { + TInt oldDay=iPrevPasswordDay; + iPrevPasswordDay=Day(); + if (iPrevPasswordDay==oldDay) + return; // No password display needed + } + iPasswordModeActive=ETrue; + iPasswordWindow->WinGroup()->QueueEvent(EEventPassword); + iPasswordWindow->WinGroup()->SetOrdinalPriority(0,KPasswordWindowGroupPriority); + iPasswordWindow->SetOrdinalPosition(0); + iPasswordWindow->SetVisible(ETrue); +// + iPasswordWindow->RootWindow()->InvalidateWholeScreen(); + iPasswordWindow->RootWindow()->ClearDisplay(); + } + } + +void CWsPassword::PasswordEntered(CWsClient *aClient) + { + if (!iPasswordWindow || aClient!=iPasswordWindow->WsOwner()) + aClient->PPanic(EWservPanicPassword); + iPasswordModeActive=EFalse; + }