190 const TUint handle( aEvent.Handle() ); |
190 const TUint handle( aEvent.Handle() ); |
191 |
191 |
192 CCoeControl* destination = reinterpret_cast< CCoeControl* >( handle ); |
192 CCoeControl* destination = reinterpret_cast< CCoeControl* >( handle ); |
193 |
193 |
194 TPointerEvent& event( *aEvent.Pointer() ); |
194 TPointerEvent& event( *aEvent.Pointer() ); |
|
195 |
|
196 // Store event |
|
197 iPointerEvent = *aEvent.Pointer(); |
195 |
198 |
196 if ( iCbaContainer ) |
199 if ( iCbaContainer ) |
197 { |
200 { |
198 CEikCba* cba = |
201 CEikCba* cba = |
199 static_cast< CEikCba* >( iCbaContainer->ButtonGroup() ); |
202 static_cast< CEikCba* >( iCbaContainer->ButtonGroup() ); |
223 } |
226 } |
224 } |
227 } |
225 } |
228 } |
226 |
229 |
227 // ----------------------------------------------------------------------------- |
230 // ----------------------------------------------------------------------------- |
|
231 // CXnKeyEventDispatcher::PointerEvent() |
|
232 // |
|
233 // ----------------------------------------------------------------------------- |
|
234 // |
|
235 const TPointerEvent& CXnKeyEventDispatcher::PointerEvent() const |
|
236 { |
|
237 return iPointerEvent; |
|
238 } |
|
239 |
|
240 // ----------------------------------------------------------------------------- |
228 // CXnKeyEventDispatcher::OfferKeyEventL |
241 // CXnKeyEventDispatcher::OfferKeyEventL |
229 // Handles key events. |
242 // Handles key events. |
230 // ----------------------------------------------------------------------------- |
243 // ----------------------------------------------------------------------------- |
231 // |
244 // |
232 TKeyResponse CXnKeyEventDispatcher::OfferKeyEventL( |
245 TKeyResponse CXnKeyEventDispatcher::OfferKeyEventL( |
233 const TKeyEvent& aKeyEvent, |
246 const TKeyEvent& aKeyEvent, |
234 TEventCode aType ) |
247 TEventCode aType ) |
235 { |
248 { |
236 TKeyResponse resp( EKeyWasNotConsumed ); |
249 TKeyResponse resp( EKeyWasNotConsumed ); |
237 |
250 |
238 iEventCode = aType; |
|
239 |
|
240 CXnNode* node( NULL ); |
251 CXnNode* node( NULL ); |
241 |
252 |
242 TBool keyYesNoApps( EFalse ); |
253 TBool keyYesNoApps( EFalse ); |
243 |
254 |
244 if ( iUiEngine.IsMenuDisplaying() || |
255 if ( iUiEngine.IsMenuDisplaying() || |
247 { |
258 { |
248 iFocusChanged = EFalse; |
259 iFocusChanged = EFalse; |
249 // When menu is focused or LSK/RSK is pressed, |
260 // When menu is focused or LSK/RSK is pressed, |
250 // then forward events to menuadapter. |
261 // then forward events to menuadapter. |
251 // Note that MSK is handled directly in the base class as it used only |
262 // Note that MSK is handled directly in the base class as it used only |
252 // for activating |
263 // for activation |
253 node = iMenuNode; |
264 node = iMenuNode; |
254 } |
265 } |
255 else if ( aKeyEvent.iScanCode == EStdKeyApplication0 || |
266 else if ( aKeyEvent.iScanCode == EStdKeyApplication0 || |
256 aKeyEvent.iScanCode == EStdKeyYes || |
267 aKeyEvent.iScanCode == EStdKeyYes || |
257 aKeyEvent.iScanCode == EStdKeyNo ) |
268 aKeyEvent.iScanCode == EStdKeyNo ) |
258 { |
269 { |
259 keyYesNoApps = ETrue; |
270 keyYesNoApps = ETrue; |
260 |
271 |
261 iFocusChanged = EFalse; |
272 iFocusChanged = EFalse; |
|
273 |
262 // AppsKey, YesKey, NoKey events must be always handled, and if we don't |
274 // AppsKey, YesKey, NoKey events must be always handled, and if we don't |
263 // have a focused node, then let the view node do the job |
275 // have a focused node, then let the view handle the event |
264 node = ( !iNode ) ? iUiEngine.ActiveView() : iNode; |
276 node = ( !iNode ) ? iUiEngine.ActiveView() : iNode; |
265 } |
277 } |
266 else |
278 else |
267 { |
279 { |
268 CXnAppUiAdapter& appui( iUiEngine.AppUiAdapter() ); |
280 CXnAppUiAdapter& appui( iUiEngine.AppUiAdapter() ); |
307 |
319 |
308 CCoeControl* editmode( iUiEngine.EditMode() ); |
320 CCoeControl* editmode( iUiEngine.EditMode() ); |
309 |
321 |
310 if ( editmode->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed ) |
322 if ( editmode->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed ) |
311 { |
323 { |
|
324 iFocusChanged = EFalse; |
|
325 iKeyEventNode = NULL; |
|
326 iEventCode = EEventNull; |
|
327 |
312 return EKeyWasConsumed; |
328 return EKeyWasConsumed; |
313 } |
329 } |
314 |
330 |
315 // Offer keyevent to the focused node |
331 // Offer keyevent to the focused node |
316 node = iNode; |
332 node = iNode; |
322 iKeyEventNode = iNode; |
338 iKeyEventNode = iNode; |
323 } |
339 } |
324 |
340 |
325 if ( iFocusChanged && ( aType == EEventKeyUp ) ) |
341 if ( iFocusChanged && ( aType == EEventKeyUp ) ) |
326 { |
342 { |
327 // Pass keyup event to |
343 // Pass keyup event to the previously focused node |
328 // previously focused node |
|
329 node = iKeyEventNode; |
344 node = iKeyEventNode; |
330 } |
345 } |
331 } |
346 } |
332 |
347 |
333 if ( !keyYesNoApps ) |
348 if ( !keyYesNoApps ) |
334 { |
349 { |
335 if ( iEventCode == EEventNull && aType != EEventKeyDown ) |
350 if ( iEventCode == EEventNull && aType != EEventKeyDown ) |
336 { |
351 { |
337 // We are waiting for down event |
352 // We are waiting for down event |
338 return resp; |
353 return resp; |
339 } |
354 } |
|
355 |
|
356 iEventCode = aType; |
340 } |
357 } |
341 |
358 |
342 if ( !node ) |
359 if ( !node ) |
343 { |
360 { |
344 return resp; |
361 return resp; |