Update contrib.
1 // Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
16 #include "mediaclientwseventobserver.h"
17 #include "mediaclientvideotrace.h"
19 CMediaClientWsEventObserver* CMediaClientWsEventObserver::NewL(MMediaClientWsEventObserverCallback& aCallback)
21 DEBUG_PRINTF("CMediaClientWsEventObserver::NewL +++");
22 CMediaClientWsEventObserver* self = new (ELeave) CMediaClientWsEventObserver(aCallback);
23 CleanupStack::PushL(self);
25 CleanupStack::Pop(self);
26 DEBUG_PRINTF("CMediaClientWsEventObserver::NewL ---");
30 CMediaClientWsEventObserver::CMediaClientWsEventObserver(MMediaClientWsEventObserverCallback& aCallback) :
31 CActive(EPriorityStandard),
34 DEBUG_PRINTF("CMediaClientWsEventObserver::CMediaClientWsEventObserver +++");
35 DEBUG_PRINTF("CMediaClientWsEventObserver::CMediaClientWsEventObserver ---");
38 void CMediaClientWsEventObserver::ConstructL()
40 DEBUG_PRINTF("CMediaClientWsEventObserver::ConstructL +++");
42 DEBUG_PRINTF("CMediaClientWsEventObserver::ConstructL RWsSession Connect");
43 TInt err = iWs.Connect();
46 DEBUG_PRINTF2("CMediaClientWsEventObserver::ConstructL Windows Server unavailable, err %d", err);
50 DEBUG_PRINTF("CMediaClientWsEventObserver::ConstructL RWindowGroup Create");
51 iWindowGroup = RWindowGroup(iWs);
52 User::LeaveIfError(iWindowGroup.Construct((TUint32)this, EFalse));
54 // Send created window to the background and hide it from the
55 // application switcher
56 iWindowGroup.SetOrdinalPosition( -1, -1000 ); // -1000 = ECoeWinPriorityNeverAtFront
58 DEBUG_PRINTF("CMediaClientWsEventObserver::ConstructL RWindowGroup EnableFocusChangeEvents");
59 User::LeaveIfError(iWindowGroup.EnableFocusChangeEvents());
61 UpdateFocusWindowGroupId(ETrue);
62 DEBUG_PRINTF3("CMediaClientWsEventObserver::ConstructL Initial WgId %d Error %d", iWgId, iWgIdError);
64 CActiveScheduler::Add(this);
66 // register with window server to receive focus change notifications
67 DEBUG_PRINTF("CMediaClientWsEventObserver::ConstructL iWs.EventReady()");
68 iWs.EventReady(&iStatus);
70 DEBUG_PRINTF("CMediaClientWsEventObserver::ConstructL SetActive()");
73 DEBUG_PRINTF("CMediaClientWsEventObserver::ConstructL ---");
76 CMediaClientWsEventObserver::~CMediaClientWsEventObserver()
78 DEBUG_PRINTF("CMediaClientWsEventObserver::~CMediaClientWsEventObserver +++");
86 DEBUG_PRINTF("CMediaClientWsEventObserver::~CMediaClientWsEventObserver ---");
89 TInt CMediaClientWsEventObserver::FocusWindowGroupId(TInt& aFocusGroupId)
91 DEBUG_PRINTF("CMediaClientWsEventObserver::FocusWindowGroupId +++");
92 aFocusGroupId = iWgId;
93 DEBUG_PRINTF3("CMediaClientWsEventObserver::FocusWindowGroupId --- WgId %d, Error %d", iWgId, iWgIdError);
97 void CMediaClientWsEventObserver::UpdateFocusWindowGroupId(TBool aConstruction)
99 DEBUG_PRINTF2("CMediaClientWsEventObserver::UpdateFocusWindowGroupId +++, construction %d", aConstruction);
101 TInt wgId = iWs.GetFocusWindowGroup();
102 DEBUG_PRINTF2("CMediaClientWsEventObserver::UpdateFocusWindowGroupId id %d ", wgId);
104 // get the thread that owns windowgroup id
106 iWgIdError = iWs.GetWindowGroupClientThreadId(wgId, threadId);
107 if(iWgIdError != KErrNone)
109 DEBUG_PRINTF2("CMediaClientWsEventObserver::UpdateFocusWindowGroupId --- Get Thread Id error %d", iWgIdError);
114 iWgIdError = thread.Open(threadId);
115 if(iWgIdError != KErrNone)
117 DEBUG_PRINTF2("CMediaClientWsEventObserver::UpdateFocusWindowGroupId --- Open thread error %d", iWgIdError);
121 TSecureId fgThreadId = thread.SecureId();
124 if(iCallback.MmcweoIgnoreProcess(fgThreadId))
126 // If ignore returns ETrue during construction the previous value of iWgId does not contain a valid id. It is 0.
127 // This is an error case so set error flag accordingly.
130 iWgIdError = KErrNotSupported;
138 DEBUG_PRINTF("CMediaClientWsEventObserver::UpdateFocusWindowGroupId --- ");
141 void CMediaClientWsEventObserver::RunL()
143 DEBUG_PRINTF("CMediaClientWsEventObserver::RunL +++");
145 iWs.GetEvent(iEvent);
147 DEBUG_PRINTF("CMediaClientWsEventObserver::RunL EventReady()");
148 iWs.EventReady(&iStatus);
149 DEBUG_PRINTF("CMediaClientWsEventObserver::RunL SetActive()");
152 DEBUG_PRINTF2("CMediaClientWsEventObserver::RunL() Ws event.Type %d", iEvent.Type());
153 if(iEvent.Type() == EEventFocusGroupChanged)
155 DEBUG_PRINTF("CMediaClientWsEventObserver::RunL Received EEventFocusGroupChanged");
157 TInt prevWgId = iWgId;
158 UpdateFocusWindowGroupId(EFalse);
159 if((iWgIdError != KErrNone) || (iWgId != prevWgId))
161 iCallback.MmcweoFocusWindowGroupChanged();
166 DEBUG_PRINTF("CMediaClientWsEventObserver::RunL Event Ignored");
169 DEBUG_PRINTF("CMediaClientWsEventObserver::RunL ---");
172 void CMediaClientWsEventObserver::DoCancel()
174 DEBUG_PRINTF("CMediaClientWsEventObserver::DoCancel +++");
175 iWs.EventReadyCancel();
176 DEBUG_PRINTF("CMediaClientWsEventObserver::DoCancel ---");