diff -r 0e652f8f1fbd -r 24fd82631616 camerauis/cameraxui/cxui/src/cxuicapturekeyhandler.cpp --- a/camerauis/cameraxui/cxui/src/cxuicapturekeyhandler.cpp Thu Jul 15 01:55:05 2010 +0300 +++ b/camerauis/cameraxui/cxui/src/cxuicapturekeyhandler.cpp Fri Jul 23 11:35:41 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2009-2010 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" @@ -14,171 +14,66 @@ * Description: * */ -#include + #include #include -#include -#include -#include // for EKeyCamera - #include "cxuicapturekeyhandler.h" +#ifdef Q_OS_SYMBIAN +#include "cxuicapturekeyhandler_symbian_p.h" +#else +#include "cxuicapturekeyhandler_desktop_p.h" +#endif + #include "cxutils.h" #include "cxeengine.h" #include "cxenamespace.h" #include "cxefeaturemanager.h" -const int CXUI_KEY_PRIORITY = 100; + CxuiCaptureKeyHandler::CxuiCaptureKeyHandler(CxeEngine &aEngine) : - mAutofocusKeyPressed(false), mCaptureKeyPressed(false), mEngine(aEngine), mWsSession(CCoeEnv::Static()->WsSession()), - mWindowGroup(CCoeEnv::Static()->RootWin()) + d_ptr(NULL) { - CX_DEBUG_ENTER_FUNCTION(); - - // Autofocus key - mEngine.featureManager().configuredValues(CxeRuntimeKeys::PRIMARY_CAMERA_AUTOFOCUS_KEYS, - mPrimaryCameraAutofocusKeys); - - // Capture keys for primary camera - mEngine.featureManager().configuredValues(CxeRuntimeKeys::PRIMARY_CAMERA_CAPTURE_KEYS, - mPrimaryCameraCaptureKeys); - - listenKeys(true); - CX_DEBUG_EXIT_FUNCTION(); + d_ptr = new CxuiCaptureKeyHandlerPrivate(aEngine, this); + + d_ptr->listenKeys(true); } CxuiCaptureKeyHandler::~CxuiCaptureKeyHandler() -{ +{ CX_DEBUG_ENTER_FUNCTION(); - listenKeys(false); + + Q_D(CxuiCaptureKeyHandler); + d->listenKeys(false); + + delete d; + CX_DEBUG_EXIT_FUNCTION(); } -/*! -* Start or stop listening key events. -* @param listen Should we start (true) or stop (false) listening key events. -*/ void CxuiCaptureKeyHandler::listenKeys(bool listen) { - CX_DEBUG_ENTER_FUNCTION(); - - if (listen) { - // Protect from multiple calls - if (mCapturedKeyUpDownHandles.empty() && mCapturedKeyHandles.empty()) { - - int key(0); - foreach (key, mPrimaryCameraAutofocusKeys) { - CX_DEBUG(("CxuiCaptureKeyHandler - hooking autofocus key with scan / key code: %d", key)); - listenKey(key); - } - foreach (key, mPrimaryCameraCaptureKeys) { - CX_DEBUG(("CxuiCaptureKeyHandler - hooking capture key with scan / key code: %d", key)); - listenKey(key); - } - } - } else { - - int handle(0); - foreach (handle, mCapturedKeyUpDownHandles) { - mWindowGroup.CancelCaptureKeyUpAndDowns(handle); - } - mCapturedKeyUpDownHandles.clear(); - - foreach (handle, mCapturedKeyHandles) { - mWindowGroup.CancelCaptureKey(handle); - } - mCapturedKeyHandles.clear(); - } - CX_DEBUG_EXIT_FUNCTION(); + Q_D(CxuiCaptureKeyHandler); + d->listenKeys(listen); } bool CxuiCaptureKeyHandler::isAutofocusKeyPressed() { - return mAutofocusKeyPressed; + Q_D(CxuiCaptureKeyHandler); + return d->isAutofocusKeyPressed(); } bool CxuiCaptureKeyHandler::isCaptureKeyPressed() { - return mCaptureKeyPressed; + Q_D(CxuiCaptureKeyHandler); + return d->isCaptureKeyPressed(); } bool CxuiCaptureKeyHandler::handleKeyEvent(QEvent *event) { - CX_DEBUG_ENTER_FUNCTION(); - bool eventWasConsumed = false; - - if (event->type() == QEvent::KeyPress) { - QKeyEvent *keyEvent = static_cast (event); - CX_DEBUG(("CxuiCaptureKeyHandler - key press with nativeVirtualKey(): %d", keyEvent->nativeVirtualKey())); - CX_DEBUG(("CxuiCaptureKeyHandler - key press with nativeScanCode(): %d", keyEvent->nativeScanCode())); - - if ( mPrimaryCameraAutofocusKeys.contains(keyEvent->nativeScanCode()) - && !mAutofocusKeyPressed ) { - - mAutofocusKeyPressed = true; - eventWasConsumed = true; - emit autofocusKeyPressed(); - - } else if (mPrimaryCameraCaptureKeys.contains(keyEvent->nativeScanCode()) - && !mCaptureKeyPressed) { - mCaptureKeyPressed = true; - eventWasConsumed = true; - emit captureKeyPressed(); - } - } else if (event->type() == QEvent::KeyRelease) { - QKeyEvent *keyEvent = static_cast (event); - CX_DEBUG(("CxuiCaptureKeyHandler - key press with nativeVirtualKey(): %d", keyEvent->nativeVirtualKey())); - CX_DEBUG(("CxuiCaptureKeyHandler - key press with nativeScanCode(): %d", keyEvent->nativeScanCode())); - - if ( mPrimaryCameraAutofocusKeys.contains(keyEvent->nativeScanCode()) - && mAutofocusKeyPressed ) { - - mAutofocusKeyPressed = false; - eventWasConsumed = true; - emit autofocusKeyReleased(); - - } else if (mPrimaryCameraCaptureKeys.contains(keyEvent->nativeScanCode()) - && mCaptureKeyPressed) { - - mCaptureKeyPressed = false; - eventWasConsumed = true; - emit captureKeyReleased(); - } - } - CX_DEBUG_EXIT_FUNCTION(); - return eventWasConsumed; + Q_D(CxuiCaptureKeyHandler); + return d->handleKeyEvent(event); } -/*! -* Helper method to listen to given key (key code or scan code). -* We need to listen to both "key up", "key down" and "key pressed" events to -* get all the necessary events to handleKeyEvent(). If we e.g. just listen -* to up/down events, the way native events are translated to QKeyEvents, -* we only get QEvent::KeyRelease event when partially in background. -* @param key Keycode or scancode for the key to listen. Both should be listened. -*/ -void CxuiCaptureKeyHandler::listenKey(int key) -{ - // Capture key down and up events - int handle = mWindowGroup.CaptureKeyUpAndDowns(key, 0, 0, CXUI_KEY_PRIORITY); - - // Handle < 0 means error. - if (handle >= 0) { - mCapturedKeyUpDownHandles.append(handle); - } else { - CX_DEBUG(("[WARNING] CxuiCaptureKeyHandler - Problem hooking to key-up/key-down with code: %d", key)); - } - - // Capture key press events - handle = mWindowGroup.CaptureKey(key, 0, 0, CXUI_KEY_PRIORITY); - - if (handle >= 0) { - mCapturedKeyHandles.append(handle); - } else { - CX_DEBUG(("[WARNING] CxuiCaptureKeyHandler - Problem hooking to key-press with code: %d", key)); - } -} - - // end of file