--- a/browserutilities/aiwbrowserprovider/Group/AiwBrowserProvider.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/aiwbrowserprovider/Group/AiwBrowserProvider.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -44,6 +44,7 @@
END
START RESOURCE ../data/AiwBrowserProvider.rss
+DEPENDS avkon.rsg
HEADER
TARGET AiwBrowserProvider
TARGETPATH RESOURCE_FILES_DIR
--- a/browserutilities/browserdialogsprovider/Group/browserdialogsprovider.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/browserdialogsprovider/Group/browserdialogsprovider.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -29,6 +29,7 @@
SOURCEPATH ../Src
START RESOURCE ../SrcData/BrowserDialogsProvider.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH RESOURCE_FILES_DIR
#ifdef __S60_32__
--- a/browserutilities/browserdialogsprovider/Src/BrowserDialogsProvider.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/browserdialogsprovider/Src/BrowserDialogsProvider.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -159,19 +159,19 @@
case EHttpTemporaryRedirect:
{
// Id for r_nw_stat_too_many_redirects is -20019, browser errors start at -20000
- msg.Set( textresolver->ResolveErrorString( KErrTooManyRedirects ));
+ msg.Set( textresolver->ResolveErrorString( KErrTooManyRedirects ));
+ DialogNoteL( msg );
break;
}
default:
{
// Handle all others as system error dialog
- msg.Set( textresolver->ResolveErrorString( aErrCode ));
- break;
+ CCoeEnv::Static()->HandleError( aErrCode );
+ break;
}
} // end of switch
- DialogNoteL( msg );
- CleanupStack::PopAndDestroy(); //textresolver
+ CleanupStack::PopAndDestroy(); //textresolver
if ( iObserver )
{
--- a/browserutilities/browsertelservice/group/BrowserTelService.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/browsertelservice/group/BrowserTelService.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -35,6 +35,7 @@
#endif
START RESOURCE ../data/browsertelservice.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH RESOURCE_FILES_DIR
END
--- a/browserutilities/connectionmanager/Group/ConnectionManager.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/connectionmanager/Group/ConnectionManager.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -37,6 +37,7 @@
MW_LAYER_SYSTEMINCLUDE
START RESOURCE ../data/ConnectionManager.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH RESOURCE_FILES_DIR
END
--- a/browserutilities/connectionmanager/Inc/ConnMan.hrh Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/connectionmanager/Inc/ConnMan.hrh Mon Oct 26 08:28:45 2009 +0200
@@ -23,4 +23,5 @@
{
EConnManWaitNote = 8747,
EConnManInfoNote
- };
\ No newline at end of file
+ };
+
\ No newline at end of file
--- a/browserutilities/downloadmgr/DownloadMgrUiLib/Group/DownloadMgrUiLib.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/downloadmgr/DownloadMgrUiLib/Group/DownloadMgrUiLib.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -32,6 +32,7 @@
//#define _DEBUG
START RESOURCE ../Data/DownloadMgrUiLib.rss
+DEPENDS avkon.rsg
HEADER
#ifdef __S60_32__
LANG sc
--- a/browserutilities/feedsengine/group/FeedsApp.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/feedsengine/group/FeedsApp.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -34,6 +34,7 @@
CAPABILITY CAP_APPLICATION NetworkControl -Location
START RESOURCE ../data/FeedsApp.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH APP_RESOURCE_DIR
#ifdef __S60_32__
--- a/browserutilities/schemehandler/SchemeApp/group/SchemeApp.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/schemehandler/SchemeApp/group/SchemeApp.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -45,6 +45,7 @@
START RESOURCE ../data/SchemeApp.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH APP_RESOURCE_DIR
#ifdef __S60_32__
--- a/browserutilities/schemehandler/SchemeDispatcher/group/SchemeDispatcher.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/browserutilities/schemehandler/SchemeDispatcher/group/SchemeDispatcher.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -1,4 +1,4 @@
-/*
+ /*
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
@@ -29,7 +29,8 @@
SOURCEPATH ../data
START RESOURCE SCHEME_DISPATCHER_UID_RSS_NAME
- TARGET SchemeDispatcher.rsc
+DEPENDS avkon.rsg
+TARGET SchemeDispatcher.rsc
END
CAPABILITY CAP_ECOM_PLUGIN
Binary file browserutilities/webutils/conf/webutils.confml has changed
--- a/codhandler/Loc/CodViewer.loc Thu Sep 24 12:53:48 2009 +0300
+++ b/codhandler/Loc/CodViewer.loc Mon Oct 26 08:28:45 2009 +0200
@@ -272,4 +272,3 @@
//r:1.2
//
#define qtn_cd_info_not_enough_mem "Not enough memory available"
-
\ No newline at end of file
--- a/codhandler/codui/group/CodUi.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/codhandler/codui/group/CodUi.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -44,6 +44,7 @@
SOURCE CodConfirm.cpp
START RESOURCE ../data/CodUi.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH RESOURCE_FILES_DIR
#ifdef __S60_32__
--- a/codhandler/codviewer/group/CodViewer.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/codhandler/codviewer/group/CodViewer.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -33,6 +33,7 @@
SOURCE CodViewer.cpp
START RESOURCE ../data/CodViewer.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH APP_RESOURCE_DIR
#ifdef __S60_32__
--- a/codhandler/ddviewer/group/DdViewer.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/codhandler/ddviewer/group/DdViewer.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -33,6 +33,7 @@
SOURCE DdViewer.cpp
START RESOURCE ../data/DdViewer.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH APP_RESOURCE_DIR
#ifdef __S60_32__
--- a/codhandler/roapapp/group/RoapApp.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/codhandler/roapapp/group/RoapApp.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -41,6 +41,8 @@
SOURCE RoapAppLogger.cpp
START RESOURCE ../data/RoapApp.rss
+DEPENDS eikon.rsg
+DEPENDS avkon.rsg
HEADER
TARGETPATH APP_RESOURCE_DIR
#ifdef __S60_32__
--- a/web_plat/browser_platform_api/inc/Browser_platform_variant.hrh Thu Sep 24 12:53:48 2009 +0300
+++ b/web_plat/browser_platform_api/inc/Browser_platform_variant.hrh Mon Oct 26 08:28:45 2009 +0200
@@ -151,6 +151,9 @@
// Defines whether SAPI Security Manager Prompt Enhancement is available
#define BRDO_SEC_MGR_PROMPT_ENHANCEMENT_FF
+// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining)
+//Flag need to be removed after this fix is supplied to Symbian 9.4
+#define BRDO_HTTP_STACK_93
/*
* ===================
* S60 3.23
@@ -270,6 +273,9 @@
#define MW_LAYER_PUSH_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(../push)
#define MW_LAYER_STDAPIS_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(../stdapis)
+// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining)
+//Flag need to be removed after this fix is supplied to Symbian 9.4
+#undef BRDO_HTTP_STACK_93
/*
* ===================
* S60 5.0 PF5250+ / Ivalo / Saga
@@ -306,6 +312,9 @@
#define MW_LAYER_PUSH_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(../push)
#define MW_LAYER_STDAPIS_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(../stdapis)
+// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining)
+//Flag need to be removed after this fix is supplied to Symbian 9.4
+#undef BRDO_HTTP_STACK_93
/*
* ===================
* S60 5.1
@@ -337,6 +346,9 @@
#define MW_LAYER_PUSH_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(push)
#define MW_LAYER_STDAPIS_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(stdapis)
+// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining)
+//Flag need to be removed after this fix is supplied to Symbian 9.4
+#undef BRDO_HTTP_STACK_93
/*
* ===================
* S60 5.2
@@ -355,6 +367,10 @@
// un-comment this line for week21 release
#undef BRDO_MULTIPART_PARSER_FF
+// Defines Symbian HTTP stack parameters specific for symbian 9.3 (e.g. EHttpEnableOptimalPipelining, EHttpOptimalPipelining)
+//Flag need to be removed after this fix is supplied to Symbian 9.4
+#undef BRDO_HTTP_STACK_93
+
#define APP_LAYER_LIBC_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(libc)
#define APP_LAYER_ECOM_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(ecom)
#define APP_LAYER_HTTP_SYSTEMINCLUDE SYSTEMINCLUDE OS_LAYER_PUBLIC_EXPORT_PATH(http)
--- a/web_pub/browser_control_api/inc/BrCtlDefs.h Thu Sep 24 12:53:48 2009 +0300
+++ b/web_pub/browser_control_api/inc/BrCtlDefs.h Mon Oct 26 08:28:45 2009 +0200
@@ -470,6 +470,13 @@
* Browser cursor show mode -- some phone doesn't have cursor inside Browser
*/
ESettingsCursorShowMode,
+
+ /*
+ * Enter key mode - default behavior is like in desktop browser - submit the form
+ * The alternative is to select the link is one is activated.
+ */
+ ESettingsEnterKeyMode,
+
ESettingsMaxEnum ///< Must be last one
};
@@ -825,6 +832,12 @@
ENoCursor = 0,
EDefaultCursor
};
+
+ enum TEnterKeySettings
+ {
+ EEnterKeyDefault = 0,
+ EEnterKeyCanActivateLink
+ };
};
#endif // BRCTLDEFS_H
--- a/web_pub/favourites_engine_api/tsrc/inc/FavouritesEngineTest.h Thu Sep 24 12:53:48 2009 +0300
+++ b/web_pub/favourites_engine_api/tsrc/inc/FavouritesEngineTest.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,22 +1,25 @@
/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Name : FavouritesEngineTest.h
+* Part of : ?Subsystem_name / FavouritesEngineTest
+*
+* Description : FavouritesEngineTest test module.
+* Version: 0.5
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* Copyright (C) 2002 Nokia Corporation.
+* This material, including documentation and any related
+* computer programs, is protected by copyright controlled by
+* Nokia Corporation. All rights are reserved. Copying,
+* including reproducing, storing, adapting or translating, any
+* or all of this material requires the prior written consent of
+* Nokia Corporation. This material also contains confidential
+* information which may not be disclosed to others without the
+* prior written consent of Nokia Corporation.
*
-* Description: FavouritesEngineTest test module.
-*
+* ============================================================================
*/
-
#ifndef FAVOURITESENGINETEST_H
#define FAVOURITESENGINETEST_H
@@ -342,6 +345,24 @@
TInt ItemAssignTestL( TTestResult& aResult );
/**
+ * FavouritesItem Assign(=) operator test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemAssignSelfTestL( TTestResult& aResult );
+
+ /**
+ * FavouritesItem Assign(=) operator test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemAssignCompleteTestL( TTestResult& aResult );
+
+ /**
* FavouritesItem Uid test case.
* @since ?Series60_version
* @param aResult Test case result (PASS/FAIL)
@@ -432,13 +453,32 @@
TInt ItemIsItemTestL( TTestResult& aResult );
/**
- * FavouritesItem IsFolder test case.
+ * FavouritesItem IsItemEFolder test case.
* @since ?Series60_version
* @param aResult Test case result (PASS/FAIL)
* @return Symbian OS error code (test case execution error
* that is not returned as test case result in aResult)
*/
+ TInt ItemIsItemEFolderTestL( TTestResult& aResult );
+
+ /**
+ * FavouritesItem IsFolder test case for type EItem.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+
TInt ItemIsFolderTestL( TTestResult& aResult );
+ /**
+ * FavouritesItem IsFolder test case for type EFolder.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+
+ TInt ItemIsFolderEFolderTestL( TTestResult& aResult );
/**
* FavouritesItem IsFactoryItem test case.
@@ -495,6 +535,15 @@
TInt ItemSetTypeTestL( TTestResult& aResult );
/**
+ * FavouritesItem SetTypeNone test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetTypeNoneTestL( TTestResult& aResult );
+
+ /**
* FavouritesItem SetNameL test case.
* @since ?Series60_version
* @param aResult Test case result (PASS/FAIL)
@@ -504,6 +553,60 @@
TInt ItemSetNameLTestL( TTestResult& aResult );
/**
+ * FavouritesItem ItemSetNameMaxLengthTruncateLTestL test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetNameMaxLengthTruncateLTestL( TTestResult& aResult );
+
+ /**
+ * FavouritesItem ItemSetNameTrimStringLTestL test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetNameTrimStringLTestL( TTestResult& aResult );
+
+ /**
+ * FavouritesItem ItemSetNameRTLMarkLTestL test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetNameRTLMarkLTestL( TTestResult& aResult );
+
+ /**
+ * FavouritesItem ItemSetNameEmptyStringLTestL test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetNameEmptyStringLTestL( TTestResult& aResult );
+
+ /**
+ * FavouritesItem ItemSetNameWhiteSpaceLTestL test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetNameWhiteSpaceLTestL( TTestResult& aResult );
+
+ /**
+ * FavouritesItem SetNameFolderL test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetNameFolderLTestL( TTestResult& aResult );
+
+ /**
* FavouritesItem SetUrlL test case.
* @since ?Series60_version
* @param aResult Test case result (PASS/FAIL)
@@ -529,6 +632,25 @@
* that is not returned as test case result in aResult)
*/
TInt ItemSetUserNameLTestL( TTestResult& aResult );
+
+
+ /**
+ * FavouritesItem ItemSetUserNameMaxLengthLTestL test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetUserNameMaxLengthLTestL( TTestResult& aResult );
+
+ /**
+ * FavouritesItem ItemSetUserNameTruncateLengthLTestL test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetUserNameTruncateLengthLTestL( TTestResult& aResult );
/**
* FavouritesItem SetPasswordL test case.
@@ -984,6 +1106,24 @@
*/
TInt DbDeleteFolderTestL( TTestResult& aResult );
+ /**
+ * FavouritesItem IsHidden test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemIsHiddenTestL( TTestResult& aResult );
+
+ /**
+ * FavouritesItem SetHidden test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt ItemSetHiddenTestL( TTestResult& aResult );
+
private: // Functions to test TFavouritesWapAp interface
/**
@@ -1014,6 +1154,15 @@
TInt WapApAssignWithApIdTest( TTestResult& aResult );
/**
+ * TFavouritesWapAp assign operator using self ApId test case.
+ * @since ?Series60_version
+ * @param aResult Test case result (PASS/FAIL)
+ * @return Symbian OS error code (test case execution error
+ * that is not returned as test case result in aResult)
+ */
+ TInt WapApAssignSelfWithApTest( TTestResult& aResult );
+
+ /**
* TFavouritesWapAp SetNull test case.
* @since ?Series60_version
* @param aResult Test case result (PASS/FAIL)
--- a/web_pub/favourites_engine_api/tsrc/src/FavouritesEngineTest.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/web_pub/favourites_engine_api/tsrc/src/FavouritesEngineTest.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -1,22 +1,25 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Name : FavouritesEngineTest.cpp
+* Part of : ?Subsystem_name / FavouritesEngineTest
+*
+* Description : FavouritesBCTest class member functions
+* Version: 0.5
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* Copyright (C) 2006 Nokia Corporation.
+* This material, including documentation and any related
+* computer programs, is protected by copyright controlled by
+* Nokia Corporation. All rights are reserved. Copying,
+* including reproducing, storing, adapting or translating, any
+* or all of this material requires the prior written consent of
+* Nokia Corporation. This material also contains confidential
+* information which may not be disclosed to others without the
+* prior written consent of Nokia Corporation.
*
-* Description: FavouritesBCTest class member functions
-*
+* ============================================================================
*/
-
// INCLUDE FILES
#include <Stiftestinterface.h>
#include "FavouritesEngineTest.h"
@@ -249,7 +252,9 @@
ENTRY( "Item NewLC test", CFavouritesEngineTest::ItemNewLCTestL ),
ENTRY( "Item NewL test", CFavouritesEngineTest::ItemNewLTestL ),
ENTRY( "Item Destructor test", CFavouritesEngineTest::ItemDestructorTestL ),
- ENTRY( "Item Assign(=) operator test", CFavouritesEngineTest::ItemAssignTestL ),
+ ENTRY( "Item Assign(=) operator basic test", CFavouritesEngineTest::ItemAssignTestL ),
+ ENTRY( "Item Assign(=) to Self test", CFavouritesEngineTest::ItemAssignSelfTestL ),
+ ENTRY( "Item Assign(=) Complete test", CFavouritesEngineTest::ItemAssignCompleteTestL ),
ENTRY( "Item Uid test", CFavouritesEngineTest::ItemUidTestL ),
ENTRY( "Item ParentFolder test", CFavouritesEngineTest::ItemParentFolderTestL ),
ENTRY( "Item Type test", CFavouritesEngineTest::ItemTypeTestL ),
@@ -259,19 +264,30 @@
ENTRY( "Item UserName test", CFavouritesEngineTest::ItemUserNameTestL ),
ENTRY( "Item Password test", CFavouritesEngineTest::ItemPasswordTestL ),
ENTRY( "Item ContextId test", CFavouritesEngineTest::ItemContextIdTestL ),
- ENTRY( "Item IsItem test", CFavouritesEngineTest::ItemIsItemTestL ),
- ENTRY( "Item IsFolder test", CFavouritesEngineTest::ItemIsFolderTestL ),
+ ENTRY( "Item IsItem Default test", CFavouritesEngineTest::ItemIsItemTestL ),
+ ENTRY( "Item IsItem Folder test", CFavouritesEngineTest::ItemIsItemEFolderTestL ),
+ ENTRY( "Item IsFolder Default test", CFavouritesEngineTest::ItemIsFolderTestL ),
+ ENTRY( "Item IsFolder Folder test", CFavouritesEngineTest::ItemIsFolderEFolderTestL ),
ENTRY( "Item IsFactoryItem test", CFavouritesEngineTest::ItemIsFactoryItemTestL ),
ENTRY( "Item IsReadOnly test", CFavouritesEngineTest::ItemIsReadOnlyTestL ),
ENTRY( "Item Modified test", CFavouritesEngineTest::ItemModifiedTestL ),
ENTRY( "Item ClearL test", CFavouritesEngineTest::ItemClearLTestL ),
ENTRY( "Item SetParentFolder test", CFavouritesEngineTest::ItemSetParentFolderTestL ),
- ENTRY( "Item SetType test", CFavouritesEngineTest::ItemSetTypeTestL ),
- ENTRY( "Item SetNameL test", CFavouritesEngineTest::ItemSetNameLTestL ),
- ENTRY( "Item SetUrlL test", CFavouritesEngineTest::ItemSetUrlLTestL ),
+ ENTRY( "Item SetType Default test", CFavouritesEngineTest::ItemSetTypeTestL ),
+ ENTRY( "Item SetType None test", CFavouritesEngineTest::ItemSetTypeNoneTestL ),
+ ENTRY( "Item SetName Default test", CFavouritesEngineTest::ItemSetNameLTestL ),
+ ENTRY( "Item SetName Truncate test", CFavouritesEngineTest::ItemSetNameMaxLengthTruncateLTestL ),
+ ENTRY( "Item SetName TrimString test", CFavouritesEngineTest::ItemSetNameTrimStringLTestL ),
+ ENTRY( "Item SetName RTLMark test", CFavouritesEngineTest::ItemSetNameRTLMarkLTestL ),
+ ENTRY( "Item SetName EmptyString test", CFavouritesEngineTest::ItemSetNameEmptyStringLTestL ),
+ ENTRY( "Item SetName WhiteSpace test", CFavouritesEngineTest::ItemSetNameWhiteSpaceLTestL ),
+ ENTRY( "Item SetName ForFolder test", CFavouritesEngineTest::ItemSetNameFolderLTestL ),
+ ENTRY( "Item SetUrl test", CFavouritesEngineTest::ItemSetUrlLTestL ),
ENTRY( "Item SetWapAp test", CFavouritesEngineTest::ItemSetWapApTestL ),
- ENTRY( "Item SetUserNameL test", CFavouritesEngineTest::ItemSetUserNameLTestL ),
- ENTRY( "Item SetPasswordL test", CFavouritesEngineTest::ItemSetPasswordLTestL ),
+ ENTRY( "Item SetUserName test", CFavouritesEngineTest::ItemSetUserNameLTestL ),
+ ENTRY( "Item SetUserName MaxLengthErr test", CFavouritesEngineTest::ItemSetUserNameMaxLengthLTestL ),
+ ENTRY( "Item SetUserName Truncate test", CFavouritesEngineTest::ItemSetUserNameTruncateLengthLTestL ),
+ ENTRY( "Item SetPassword test", CFavouritesEngineTest::ItemSetPasswordLTestL ),
ENTRY( "Item SetContextId test", CFavouritesEngineTest::ItemSetContextIdTestL ),
ENTRY( "List Constructor test", CFavouritesEngineTest::ListConstructorTestL ),
ENTRY( "List Destructor test", CFavouritesEngineTest::ListDestructorTestL ),
@@ -321,6 +337,7 @@
ENTRY( "WapAp Constructor test", CFavouritesEngineTest::WapApConstructorTest ),
ENTRY( "WapAp Assign with Ap test", CFavouritesEngineTest::WapApAssignWithApTest ),
ENTRY( "WapAp Assign with ApId test", CFavouritesEngineTest::WapApAssignWithApIdTest ),
+ ENTRY( "WapAp Self-Assign with ApId test", CFavouritesEngineTest::WapApAssignSelfWithApTest ),
ENTRY( "WapAp SetNull test", CFavouritesEngineTest::WapApSetNullTest ),
ENTRY( "WapAp SetDefault test", CFavouritesEngineTest::WapApSetDefaultTest ),
ENTRY( "WapAp SetApId test", CFavouritesEngineTest::WapApSetApIdTest ),
@@ -346,7 +363,9 @@
ENTRY( "Notifier constructor test", CFavouritesEngineTest::NotifierConstructorTestL ),
ENTRY( "Notifier destructor test", CFavouritesEngineTest::NotifierDestructorTestL ),
ENTRY( "Notifier Start test", CFavouritesEngineTest::NotifierStartTestL ),
- ENTRY( "Db DeleteFolder test", CFavouritesEngineTest::DbDeleteFolderTestL )
+ ENTRY( "Db DeleteFolder test", CFavouritesEngineTest::DbDeleteFolderTestL ),
+ ENTRY( "Item IsHidden test", CFavouritesEngineTest::ItemIsHiddenTestL ),
+ ENTRY( "Item SetHidden test", CFavouritesEngineTest::ItemSetHiddenTestL )
};
// Verify that case number is valid
--- a/web_pub/favourites_engine_api/tsrc/src/FavouritesItemTestCases.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/web_pub/favourites_engine_api/tsrc/src/FavouritesItemTestCases.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -1,23 +1,26 @@
/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ============================================================================
+* Name: FavouritesItemTestCases.cpp
+* Part of: FavouritesEngineTest class member functions
+*
+* Description:
+*
+* Version: 1.0
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* Copyright (C) 2008 Nokia Corporation.
+* This material, including documentation and any related
+* computer programs, is protected by copyright controlled by
+* Nokia Corporation. All rights are reserved. Copying,
+* including reproducing, storing, adapting or translating, any
+* or all of this material requires the prior written consent of
+* Nokia Corporation. This material also contains confidential
+* information which may not be disclosed to others without the
+* prior written consent of Nokia Corporation.
*
-* Description:
-*
-*
+* ============================================================================
*/
-
// INCLUDE FILES
#include <e32math.h>
#include "FavouritesEngineTest.h"
@@ -260,6 +263,153 @@
Class: CFavouritesEngineTest
+ Method: ItemAssignCompleteTestL
+
+ Description: Assigning one item to another with the Assign(=) method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemAssignCompleteTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Assigning item with Assign(=) operator");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ TFavouritesWapAp accessPoint1;
+ accessPoint1.SetApId( 22 );
+
+ CFavouritesItem* item1 = CFavouritesItem::NewLC();
+ item1->SetNameL( _L("Item1") );
+ item1->SetUrlL( _L("http://www.nokia.com") );
+ item1->SetUserNameL( _L("Name 1"));
+ item1->SetPasswordL( _L("Password 1"));
+ item1->SetParentFolder(3);
+ item1->SetContextId(22);
+ item1->SetHidden(1);
+ item1->SetWapAp( accessPoint1 );
+
+
+ TFavouritesWapAp accessPoint2;
+ accessPoint2.SetApId( 24 );
+
+ CFavouritesItem* item2 = CFavouritesItem::NewLC();
+ item2->SetNameL( _L("Item2") );
+ item2->SetUrlL( _L("http://www.google.com") );
+ item2->SetUserNameL( _L("Name 2"));
+ item2->SetPasswordL( _L("Password 2"));
+ item2->SetParentFolder(4);
+ item2->SetContextId(24);
+ // item2->SetHidden(0);
+ item2->SetWapAp( accessPoint2 );
+
+
+
+
+ *item1 = *item2;
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (
+ (item1->Name() == item2->Name()) &&
+ (item1->Url() == item2->Url()) &&
+ (item1->UserName() == item2->UserName()) &&
+ (item1->Password() == item2->Password()) &&
+ (item1->ContextId() == item2->ContextId()) &&
+ (item1->ParentFolder() == item2->ParentFolder()) &&
+ (item1->Type() == item2->Type()) &&
+ (item1->WapAp().ApId() == item2->WapAp().ApId()) &&
+ (item1->IsItem() == item2->IsItem()) &&
+ (item1->IsFolder() == item2->IsFolder()) &&
+ (item1->IsHidden() == item2->IsHidden()) &&
+ // (item1->Uid() == item2->Uid()) &&
+ (item1->Modified() == item2->Modified())
+
+ )
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( 2 ); // item1, item2
+
+ // Case was executed
+ return KErrNone;
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemAssignSelfTestL
+
+ Description: Assigning one item to self with the Assign(=) method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemAssignSelfTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Assigning item with Assign(=) operator");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item1 = CFavouritesItem::NewLC();
+ item1->SetNameL( _L("Item1") );
+
+ *item1 = *item1; //copy to self, should not affect anything
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (item1->Name() == _L("Item1"))
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item1 );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
Method: ItemUidTestL
Description: Test getting the item's Uid using the Uid method.
@@ -391,7 +541,7 @@
_LIT( KData2 ,"Finished");
TestModuleIf().Printf( 0, KDefinition, KData2 );
- if (itemType == 1)
+ if (itemType == CFavouritesItem::EItem)
{
_LIT( KDescription , "Test case passed");
aResult.SetResult( KErrNone, KDescription );
@@ -769,6 +919,59 @@
return KErrNone;
}
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemIsItemEFolderTestL
+
+ Description: Test if the folder is not an item using the IsItem method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemIsItemEFolderTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Checking if the folder is not an item with IsItem method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ item->SetType(CFavouritesItem::EFolder);
+
+ TBool itemIsItem = item->IsItem();
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (!itemIsItem)
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
/*
-------------------------------------------------------------------------------
@@ -793,7 +996,7 @@
{
/* Simple server connect */
_LIT( KDefinition ,"State");
- _LIT( KData ,"Checking if the item is a folder with IsFolder method");
+ _LIT( KData ,"Checking if the item is not a folder with IsFolder method");
TestModuleIf().Printf( 0, KDefinition, KData );
CFavouritesItem* item = CFavouritesItem::NewLC();
@@ -825,6 +1028,58 @@
Class: CFavouritesEngineTest
+ Method: ItemIsFolderEFolderTestL
+
+ Description: Test if the item of type EFolder is a folder using the IsFolder method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemIsFolderEFolderTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Checking if the folder is a folder with IsFolder method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ /* set item as folder type */
+ item->SetType(CFavouritesItem::EFolder);
+ TBool itemIsFolder = item->IsFolder();
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (itemIsFolder)
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
Method: ItemIsFactoryItemTestL
Description: Test if the item is a factory item using the IsFactoryItem method.
@@ -1084,7 +1339,7 @@
Method: ItemSetTypeTestL
- Description: Test setting the item's type using the SetType method.
+ Description: Test setting the item's type to EFolder using the SetType method.
Parameters: TTestResult& aErrorDescription: out:
Test result and on error case a short description of error
@@ -1101,7 +1356,7 @@
{
/* Simple server connect */
_LIT( KDefinition ,"State");
- _LIT( KData ,"Setting the item's type with SetType method");
+ _LIT( KData ,"Setting the item's type to Folder with SetType method");
TestModuleIf().Printf( 0, KDefinition, KData );
CFavouritesItem* item = CFavouritesItem::NewLC();
@@ -1133,6 +1388,57 @@
Class: CFavouritesEngineTest
+ Method: ItemSetTypeNoneTestL
+
+ Description: Test setting the item's type to ENone using the SetType method. Type should not be affected.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetTypeNoneTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's type to None with SetType method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+
+ item->SetType(CFavouritesItem::ENone);
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (item->Type() != CFavouritesItem::ENone)
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
Method: ItemSetNameLTestL
Description: Test setting the item's name using the SetNameL method.
@@ -1179,11 +1485,319 @@
return KErrNone;
}
+
/*
-------------------------------------------------------------------------------
Class: CFavouritesEngineTest
+ Method: ItemSetNameFolderLTestL
+
+ Description: Test setting the item (folder)'s name using the SetNameL method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetNameFolderLTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's name with SetNameL method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ item->SetType(CFavouritesItem::EFolder);
+ item->SetNameL( _L("Fav Folder") );
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (item->Name() == _L("Fav Folder"))
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemSetNameMaxLengthTruncateLTestL
+
+ Description: Test setting the item's name and maxlength using the SetNameL method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetNameMaxLengthTruncateLTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's name with SetNameL method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ TRAPD(err, item->SetNameL( _L("Item Name longer than KFavouritesMaxName limit which is 50 chars")));
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if ((item->Name().Length() == KFavouritesMaxName)&& (err==KErrOverflow))
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemSetNameTrimStringLTestL
+
+ Description: Test setting the item's name with trim using the SetNameL method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetNameTrimStringLTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's name with SetNameL method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ item->SetNameL( _L(" some name "));
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (item->Name()== _L("some name"))
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemSetNameRTLMarkLTestL
+
+ Description: Test setting the item's name with trim using the SetNameL method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetNameRTLMarkLTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's name with SetNameL method");
+
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ item->SetNameL( _L("\x200F some name \x200F"));
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (item->Name()== _L("some name"))
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemSetNameEmptyStringLTestL
+
+ Description: Test setting the item's name with trim using the SetNameL method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetNameEmptyStringLTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's name with SetNameL method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ TRAPD(err, item->SetNameL( _L(""))); //returns error
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (err!=KErrNone)
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemSetNameWhiteSpaceLTestL
+
+ Description: Test setting the item's name with trim using the SetNameL method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Draft
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetNameWhiteSpaceLTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's name with SetNameL method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ TRAPD(err, item->SetNameL( _L(" "))); //returns error
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (err!=KErrNone)
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+
+/*
+
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
Method: ItemSetUrlLTestL
Description: Test setting the item's url using the SetUrlL method.
@@ -1334,6 +1948,114 @@
return KErrNone;
}
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemSetUserNameMaxLengthLTestL
+
+ Description: Test setting the item's user name using the SetUserNameL method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetUserNameMaxLengthLTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's user name with SetUserNameL method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ // TInt err;
+
+ TRAPD(err, item->SetUserNameL( _L("New User name longer than allowed by the limit of KFavouritesMaxUserName which is 40 chars at this moment") ));
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (err==KErrOverflow)
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemSetUserNameTruncateLengthLTestL
+
+ Description: Test setting the item's user name using the SetUserNameL method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetUserNameTruncateLengthLTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's user name with SetUserNameL method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+ TInt truncLength;
+
+ TRAPD(err, item->SetUserNameL( _L("New User name longer than allowed by the limit of KFavouritesMaxUserName which is 40 chars at this moment") ));
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+ truncLength = item->UserName().Length();
+
+ if ((truncLength==KFavouritesMaxUserName)&& (err==KErrOverflow))
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+
/*
-------------------------------------------------------------------------------
@@ -1436,6 +2158,109 @@
return KErrNone;
}
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemIsHiddenTestL
+
+ Description: Test if the item is hidden using the IsHidden method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+
+TInt CFavouritesEngineTest::ItemIsHiddenTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Checking if the item is hidden item with IsHidden method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+
+ TBool itemIsHidden = item->IsHidden();
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (!itemIsHidden)
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: ItemSetHiddenTestL
+
+ Description: Test setting the item's hidden value using the SetHidden method.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::ItemSetHiddenTestL( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Setting the item's hidden value with SetHidden method");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ CFavouritesItem* item = CFavouritesItem::NewLC();
+
+ item->SetHidden(1);
+
+ _LIT( KData2 ,"Finished");
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if (item->IsHidden() == 1)
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ CleanupStack::PopAndDestroy( item );
+
+ // Case was executed
+ return KErrNone;
+ }
+
// ================= OTHER EXPORTED FUNCTIONS =================================
// End of File
--- a/web_pub/favourites_engine_api/tsrc/src/FavouritesWapApTestCases.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/web_pub/favourites_engine_api/tsrc/src/FavouritesWapApTestCases.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -1,23 +1,26 @@
/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ============================================================================
+* Name: FavouritesWapApTestCases.cpp
+* Part of: FavouritesEngineTest class member functions
+*
+* Description:
+*
+* Version: 0.5
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* Copyright (C) 2002 Nokia Corporation.
+* This material, including documentation and any related
+* computer programs, is protected by copyright controlled by
+* Nokia Corporation. All rights are reserved. Copying,
+* including reproducing, storing, adapting or translating, any
+* or all of this material requires the prior written consent of
+* Nokia Corporation. This material also contains confidential
+* information which may not be disclosed to others without the
+* prior written consent of Nokia Corporation.
*
-* Description:
-*
-*
+* ============================================================================
*/
-
// INCLUDE FILES
#include <e32math.h>
#include "FavouritesEngineTest.h"
@@ -151,6 +154,58 @@
return KErrNone;
}
+
+/*
+-------------------------------------------------------------------------------
+
+ Class: CFavouritesEngineTest
+
+ Method: WapApAssignSelfWithApTest
+
+ Description: Test the WapAp assign(=) operater using a WapAp as the argument.
+
+ Parameters: TTestResult& aErrorDescription: out:
+ Test result and on error case a short description of error
+
+ Return Values: TInt: Always KErrNone to indicate that test was valid
+
+ Errors/Exceptions: None
+
+ Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+TInt CFavouritesEngineTest::WapApAssignSelfWithApTest( TTestResult& aResult )
+ {
+ /* Simple server connect */
+ _LIT( KDefinition ,"State");
+ _LIT( KData ,"Test the WapAp assign(=) operater using the same WapAp as the argument");
+ TestModuleIf().Printf( 0, KDefinition, KData );
+
+ TFavouritesWapAp accessPoint1, accessPoint2;
+
+ accessPoint1 = 222;
+
+ accessPoint1 = accessPoint1;
+
+ _LIT( KData2 ,"Finished" );
+ TestModuleIf().Printf( 0, KDefinition, KData2 );
+
+ if(accessPoint1.ApId() == 222)
+ {
+ _LIT( KDescription , "Test case passed");
+ aResult.SetResult( KErrNone, KDescription );
+ }
+ else
+ {
+ _LIT( KDescription , "Test case failed");
+ aResult.SetResult( KErrGeneral, KDescription );
+ }
+
+ // Case was executed
+ return KErrNone;
+ }
+
/*
-------------------------------------------------------------------------------
--- a/web_pub/settings_api/inc/BrowserUiSDKCRKeys.h Thu Sep 24 12:53:48 2009 +0300
+++ b/web_pub/settings_api/inc/BrowserUiSDKCRKeys.h Mon Oct 26 08:28:45 2009 +0200
@@ -406,4 +406,8 @@
// Cursormode which defines the cursor display supported status depends on phones.
const TUint32 KBrowserCursorShowMode = 0x00000082;
+
+// Controls whether enter key can activate a link, ot just has a default behavior.
+const TUint32 KBrowserEnterKeyMode = 0x00000083;
+
#endif // BROWSERUISDKCRKEYS_H
\ No newline at end of file
--- a/webengine/device/inc/Device.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/device/inc/Device.h Mon Oct 26 08:28:45 2009 +0200
@@ -59,10 +59,8 @@
public:
DevicePrivate(Device* jsobj);
~DevicePrivate();
- void SetUid( const TUint& aValue);
private:
- MDeviceBinding* m_deviceBinding; // Owned
Identifier m_propName;
ExecState* m_exec; // not owned
Device* m_jsobj; // not owned
@@ -162,6 +160,7 @@
private:
DevicePrivate* m_privateData; // private object to hold data
+ MDeviceBinding* m_deviceBinding; // Owned
TBool m_valid; // object is valid or not
};
--- a/webengine/device/src/Device.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/device/src/Device.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -49,14 +49,18 @@
Device::Device( ExecState* exec )
: JSObject()
{
- m_privateData = new DevicePrivate(this);
- if (!m_privateData || !m_privateData->m_deviceBinding )
- m_valid = EFalse;
- else
- m_valid = ETrue;
+ m_valid = EFalse;
+ TRAP_IGNORE(
+ m_deviceBinding = CDeviceLiwBinding::NewL();
+ )
+ if (m_deviceBinding)
+ {
+ m_privateData = new DevicePrivate(this);
+ if (m_privateData)
+ m_valid = ETrue;
+ }
}
-
// ----------------------------------------------------------------------------
// Device::SetUid
//
@@ -64,8 +68,8 @@
//
void Device::SetUid( const TUint& aValue)
{
- if(m_privateData)
- m_privateData->SetUid( aValue);
+ if(m_deviceBinding)
+ m_deviceBinding->SetUid( aValue);
}
// ----------------------------------------------------------------------------
@@ -81,6 +85,8 @@
m_valid = EFalse;
delete m_privateData;
m_privateData = NULL;
+ delete m_deviceBinding;
+ m_deviceBinding = NULL;
}
@@ -141,7 +147,7 @@
{
case getServiceObject:
case listProviders:
- return new DeviceFunc( exec, m_privateData->m_deviceBinding, token );
+ return new DeviceFunc( exec, m_deviceBinding, token );
default:
return throwError(exec, GeneralError);
@@ -222,11 +228,8 @@
// ---------------------------------------------------------------------------
DevicePrivate::DevicePrivate( Device* jsobj )
{
- m_deviceBinding = NULL;
- TRAP_IGNORE(
- m_deviceBinding = CDeviceLiwBinding::NewL();
- m_jsobj = jsobj;
- m_exec = NULL;)
+ m_jsobj = jsobj;
+ m_exec = NULL;
}
// ---------------------------------------------------------------------------
@@ -238,19 +241,6 @@
// invalid the Device
if (m_jsobj)
m_jsobj->m_valid = EFalse;
-
- delete m_deviceBinding;
- m_deviceBinding = NULL;
- }
-
-// ---------------------------------------------------------------------------
-// DevicePrivate SetUid
-//
-// ---------------------------------------------------------------------------
-void DevicePrivate::SetUid( const TUint& aValue)
- {
- if(m_deviceBinding)
- m_deviceBinding->SetUid( aValue);
}
// ----------------------------------------------------------------------------
@@ -338,7 +328,7 @@
MDeviceBinding* Device::GetDeviceBinding()
{
- return m_privateData->m_deviceBinding;
+ return m_deviceBinding;
}
//END OF FILE
--- a/webengine/osswebengine/JavaScriptCore/bindings/c/c_utility.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/JavaScriptCore/bindings/c/c_utility.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -39,6 +39,8 @@
#include "Platform.h"
#if USE(ICU_UNICODE) && !USE(SYMBIAN_UNICODE)
#include <unicode/ucnv.h>
+#elif PLATFORM(SYMBIAN)
+#include <utf.h>
#endif
namespace KJS { namespace Bindings {
@@ -88,22 +90,34 @@
(*UTF16Chars)[i] = UTF8Chars[i] & 0xFF;
}
#elif PLATFORM(SYMBIAN)
-// fixme: this needs to be a little bit more sophisticated
if (UTF8Length == -1)
UTF8Length = strlen(UTF8Chars);
- *UTF16Length = UTF8Length;
-
- *UTF16Chars = (NPUTF16 *)malloc(sizeof(NPUTF16) * (*UTF16Length));
+ *UTF16Length = 0;
+ *UTF16Chars = 0;
- for (unsigned i = 0; i < *UTF16Length; i++)
- (*UTF16Chars)[i] = UTF8Chars[i] & 0xFF;
-
+ TPtrC8 buf8((TUint8*) UTF8Chars, UTF8Length);
+ HBufC *hbuf16 = HBufC::New(UTF8Length+1);
+ if (!hbuf16)
+ return;
+ TPtr16 buf16 = hbuf16->Des();
+ CnvUtfConverter::ConvertToUnicodeFromUtf8(buf16, buf8);
+ *UTF16Chars = new NPUTF16[buf16.Length()+1];
+ if (!(*UTF16Chars)) {
+ delete hbuf16;
+ return;
+ }
+ memcpy((void*)*UTF16Chars, (const char*)(buf16.Ptr()), buf16.Size());
+ *UTF16Length = buf16.Length();
+ (*UTF16Chars)[(*UTF16Length)] = 0;
+ delete hbuf16;
#else
assert(!"Implement me!");
#endif
}
+
+
// Variant value must be released with NPReleaseVariantValue()
void convertValueToNPVariant(ExecState *exec, JSValue *value, NPVariant *result)
{
--- a/webengine/osswebengine/WebCore/dom/Document.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/dom/Document.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -3520,6 +3520,12 @@
void Document::finishedParsing()
{
setParsing(false);
+ if (this->hasListenerType(DOMCONTENTLOADED_LISTENER))
+ {
+ ExceptionCode ec = 0;
+ dispatchEvent(new MutationEvent(DOMContentLoadedEvent, false, false,
+ this, String(), String(), String(), 0), ec);
+ }
if (Frame* f = frame())
f->loader()->finishedParsing();
}
--- a/webengine/osswebengine/WebCore/dom/Document.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/dom/Document.h Mon Oct 26 08:28:45 2009 +0200
@@ -480,7 +480,8 @@
DOMNODEINSERTEDINTODOCUMENT_LISTENER = 0x10,
DOMATTRMODIFIED_LISTENER = 0x20,
DOMCHARACTERDATAMODIFIED_LISTENER = 0x40,
- OVERFLOWCHANGED_LISTENER = 0x80
+ OVERFLOWCHANGED_LISTENER = 0x80,
+ DOMCONTENTLOADED_LISTENER = 0x90
};
bool hasListenerType(ListenerType listenerType) const { return (m_listenerTypes & listenerType); }
--- a/webengine/osswebengine/WebCore/dom/EventNames.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/dom/EventNames.h Mon Oct 26 08:28:45 2009 +0200
@@ -86,6 +86,7 @@
macro(DOMNodeRemoved) \
macro(DOMNodeRemovedFromDocument) \
macro(DOMSubtreeModified) \
+ macro(DOMContentLoaded)\
\
macro(webkitBeforeTextInserted) \
macro(webkitEditableContentChanged) \
--- a/webengine/osswebengine/WebCore/dom/EventTargetNode.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/dom/EventTargetNode.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -108,6 +108,8 @@
type = Document::DOMCHARACTERDATAMODIFIED_LISTENER;
else if (eventType == overflowchangedEvent)
type = Document::OVERFLOWCHANGED_LISTENER;
+ else if (eventType == DOMContentLoadedEvent)
+ type = Document::DOMCONTENTLOADED_LISTENER;
if (type)
document()->addListenerType(type);
--- a/webengine/osswebengine/WebCore/html/HTMLAnchorElement.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/html/HTMLAnchorElement.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -137,15 +137,22 @@
// when pressing Enter in the combo.
if (m_isLink && (evt->type() == clickEvent || (evt->type() == keydownEvent && m_focused))) {
MouseEvent* e = 0;
- if (evt->type() == clickEvent && evt->isMouseEvent())
-
-#if PLATFORM(SYMBIAN)
+
+
+#if PLATFORM(SYMBIAN)
+ if (evt->type() == clickEvent && evt->isMouseEvent()) {
+ e = static_cast<MouseEvent*>(evt);
+
if (m_soundstart) {
m_soundstart->OnClick(document()->frame());
}
+ }
+#else
+ if (evt->type() == clickEvent && evt->isMouseEvent())
+ e = static_cast<MouseEvent*>(evt);
#endif
- e = static_cast<MouseEvent*>(evt);
+
KeyboardEvent* k = 0;
if (evt->type() == keydownEvent && evt->isKeyboardEvent())
--- a/webengine/osswebengine/WebCore/page/ChromeClient.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/page/ChromeClient.h Mon Oct 26 08:28:45 2009 +0200
@@ -107,6 +107,8 @@
#if PLATFORM(SYMBIAN)
virtual void setElementVisibilityChanged(bool visibility) = 0;
virtual bool elementVisibilityChanged() = 0;
+ virtual bool elementVisibilityChangedByMouse() = 0;
+ virtual bool elementVisibilityChangedByKey() = 0;
virtual void focusedElementChanged(Element*) = 0;
#endif
};
--- a/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -325,7 +325,7 @@
}
}
-bool WebCoreFrameBridge::getTypeFromElement(Node* node, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect) const
+bool WebCoreFrameBridge::getTypeFromElement(Node* node, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect, Node*& aRNode) const
{
if(node && m_frame) {
@@ -335,6 +335,7 @@
if( n->isFocusable() ) {
aElType = nodeTypeB(n, m_frame);
aFocusRect = n->getRect();
+ aRNode = n;
return true;
}
else {
@@ -347,6 +348,7 @@
|| etn->getHTMLEventListener(mouseupEvent)) ) {
aFocusRect = n->getRect();
aElType = TBrCtlDefs::EElementMouseButtonListener;
+ aRNode = n;
return true;
}
else if (n->isElementNode() && n->hasTagName(areaTag)) {
@@ -354,6 +356,7 @@
if(!e->getAttribute(hrefAttr).isNull()) {
aElType = TBrCtlDefs::EElementAreaBox;
aFocusRect = n->getRect();
+ aRNode = n;
return true;
}
}
@@ -366,6 +369,7 @@
if(!ep->getAttribute(hrefAttr).isNull()) {
aElType = nodeTypeB(np, m_frame);
aFocusRect = np->getRect();
+ aRNode = np;
return true;
}
}
@@ -386,6 +390,7 @@
}
}
aFocusRect = n->getRect().Rect();
+ aRNode = n;
return true;
}
else if (n->renderer() && n->renderer()->layer()) {
--- a/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/page/symbian/WebCoreFrameBridge.h Mon Oct 26 08:28:45 2009 +0200
@@ -87,7 +87,7 @@
void updateThumbnail();
Vector<WebCore::IntRect>* focusableRectList() { return &m_focusableNodeList; }
bool searchFor(TPtrC string, bool forward, bool caseSensitive, bool wrapFlag, bool startInSelection);
- bool getTypeFromElement(WebCore::Node* node, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect) const;
+ bool getTypeFromElement(WebCore::Node* node, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect, WebCore::Node*& aRNode) const;
virtual ~WebCoreFrameBridge();
--- a/webengine/osswebengine/WebCore/platform/StringImpl.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/StringImpl.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -491,14 +491,13 @@
#if PLATFORM(SYMBIAN)
-StringImpl* StringImpl::secureShowLast(UChar aChar) const
+StringImpl* StringImpl::secureShowOffset(UChar aChar, unsigned offset) const
{
StringImpl* temp = secure(aChar);
if (m_data && temp) {
- temp->remove(m_length-1);
- temp->insert(&(m_data[m_length-1]), 1, m_length-1);
+ temp->remove(offset);
+ temp->insert(&(m_data[offset]), 1, offset);
}
-
return temp;
}
--- a/webengine/osswebengine/WebCore/platform/StringImpl.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/StringImpl.h Mon Oct 26 08:28:45 2009 +0200
@@ -151,7 +151,7 @@
StringImpl(const TDesC&);
StringImpl(const TDesC8&);
TPtrC des() const;
- StringImpl* secureShowLast(UChar aChar) const;
+ StringImpl* secureShowOffset(UChar aChar, unsigned offset) const;
#endif
StringImpl(const DeprecatedString&);
--- a/webengine/osswebengine/WebCore/platform/Widget.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/Widget.h Mon Oct 26 08:28:45 2009 +0200
@@ -118,9 +118,12 @@
// e.g., in overflow:auto sections. The clip rects coordinates are in the containing window's coordinate space.
// This clip includes any clips that the widget itself sets up for its children.
virtual IntRect windowClipRect() const;
-
+#if PLATFORM(SYMBIAN)
+ virtual void handleEvent(Event* event);
+#else
virtual void handleEvent(Event*) { }
-
+#endif
+
#if PLATFORM(WIN)
void setContainingWindow(HWND);
HWND containingWindow() const;
--- a/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/network/symbian/HttpSessionManager.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -98,7 +98,12 @@
RStringF maxToPipeline = strP.StringF(HTTP::EMaxNumTransactionsToPipeline, stringTable );
connInfo.SetPropertyL( maxToPipeline, THTTPHdrVal( KHttpMaxTransactionNumPerConnection ) );
-
+
+#ifdef BRDO_HTTP_STACK_93
+ // Set optimal pipelining
+ RStringF strOptimalPipelineVal = strP.StringF(HTTP::EHttpEnableOptimalPipelining, RHTTPSession::GetTable());
+ connInfo.SetPropertyL(strP.StringF(HTTP::EHttpOptimalPipelining, RHTTPSession::GetTable()), strOptimalPipelineVal);
+#endif
//set HTTP receive Buffer Size property
RStringF receiveBuffSize = strP.StringF(HTTP::ERecvBufferSize, stringTable );
connInfo.SetPropertyL( receiveBuffSize, THTTPHdrVal(KHttpReceiveBuffSize));
--- a/webengine/osswebengine/WebCore/platform/symbian/OOMHandler.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/OOMHandler.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,21 +1,45 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Name : OOMHandler.h
+* Part of : Webcore / Platform
+* Interface :
+* Description :
+* Version : %Version%
+*
+* Copyright (c) 2006, Nokia Corporation
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of the Nokia Corporation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
*
-* Description:
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
*
+*
+* ==============================================================================
*/
-
#ifndef __OOMHANDLER_H__
#define __OOMHANDLER_H__
--- a/webengine/osswebengine/WebCore/platform/symbian/OOMStopper.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/OOMStopper.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,21 +1,45 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Name : OOMHandler.h
+* Part of : Webcore / Platform
+* Interface :
+* Description :
+* Version : %Version%
+*
+* Copyright (c) 2006, Nokia Corporation
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of the Nokia Corporation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
*
-* Description:
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
*
+*
+* ==============================================================================
*/
-
#ifndef __OOMSTOPPER_H__
#define __OOMSTOPPER_H__
--- a/webengine/osswebengine/WebCore/platform/symbian/ScrollViewSymbian.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/ScrollViewSymbian.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -278,9 +278,13 @@
}
}
-void ScrollView::removeChild(Widget*)
+void ScrollView::removeChild(Widget* child)
{
//child->removeFromSuperview();
+ if(child)
+ {
+ child->hide();
+ }
}
void ScrollView::resizeContents(int w, int h)
--- a/webengine/osswebengine/WebCore/platform/symbian/WidgetSymbian.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/WidgetSymbian.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -24,9 +24,12 @@
#include "IntRect.h"
#include "IntPoint.h"
#include "Cursor.h"
+#include "Event.h"
+#include "EventNames.h"
+#include "KeyboardEvent.h"
namespace WebCore {
-
+using namespace EventNames;
static bool deferFirstResponderChanges;
static Widget *deferredFirstResponder;
@@ -239,4 +242,18 @@
return getView()->isFocusable();
return false;
}
+
+void Widget::handleEvent(Event* event)
+{
+ if (event->type() == keydownEvent && event->isKeyboardEvent()) {
+ KeyboardEvent* kevt = static_cast<KeyboardEvent*>(event);
+ if (kevt->keyIdentifier() == "Enter") {
+ MWebCoreWidget* view = getView();
+ if(view && view->isObjectView()) {
+ view->activate();
+ }
+ }
+ }
}
+
+}
--- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -1,21 +1,38 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Copyright (c) 2006, Nokia Corporation
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of the Nokia Corporation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
*
-* Description:
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
*
+* ==============================================================================
*/
-
/*
* This class is a proxy for CAnimationDecoderWrapped
*
--- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,21 +1,38 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Copyright (c) 2006, Nokia Corporation
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of the Nokia Corporation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
*
-* Description:
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
*
+* ==============================================================================
*/
-
#ifndef ANIMATIONDECODER_H
#define ANIMATIONDECODER_H
--- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -1,21 +1,38 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Copyright (c) 2006, Nokia Corporation
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of the Nokia Corporation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
*
-* Description:
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
*
+* ==============================================================================
*/
-
/*
* This class is wrapped by a proxy CAnimationDecoder
*
--- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoderWrapped.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,21 +1,38 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Copyright (c) 2006, Nokia Corporation
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of the Nokia Corporation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
*
-* Description:
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
*
+* ==============================================================================
*/
-
/*
* This class is wrapped by a proxy CAnimationDecoder
*
--- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/SyncDecodeThread.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/SyncDecodeThread.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -252,7 +252,8 @@
void CSynDecodeThread::ConstructL()
{
_LIT(KThreadName, "ImgDecoder");
- User::LeaveIfError(iDecoderThread.Create(KThreadName, CSynDecodeThread::ScaleInThread, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, NULL));
+ RAllocator &allocator = User::Allocator();
+ User::LeaveIfError(iDecoderThread.Create(KThreadName, CSynDecodeThread::ScaleInThread, KDefaultStackSize, &allocator, NULL));
iDecoderThread.SetPriority(EPriorityMore);
TRequestStatus status = KRequestPending;
iDecoderThread.Rendezvous(status);
--- a/webengine/osswebengine/WebCore/rendering/RenderListBox.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/rendering/RenderListBox.h Mon Oct 26 08:28:45 2009 +0200
@@ -89,6 +89,7 @@
#if PLATFORM(SYMBIAN)
IntRect itemRect(int tx, int ty, int index) { return itemBoundingBoxRect(tx, ty, index); }
int indexOffset() {return m_indexOffset;}
+ int getSize() {return size();}
#endif
private:
--- a/webengine/osswebengine/WebCore/rendering/RenderText.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/rendering/RenderText.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -831,6 +831,9 @@
}
m_linesDirty = dirtiedLines;
+#if PLATFORM(SYMBIAN)
+ m_offset = offset;
+#endif
setText(text, force, backspace);
}
@@ -921,19 +924,19 @@
case TSNONE:
break;
case TSCIRCLE:
- m_text = m_text->secureShowLast(whiteBullet);
+ m_text = m_text->secureShowOffset(bullet, m_offset);
break;
case TSDISC:
if(backspace){
m_text = m_text->secure(bullet);
}
else{
- m_text = m_text->secureShowLast(bullet);
+ m_text = m_text->secureShowOffset(bullet, m_offset);
}
break;
case TSSQUARE:
- m_text = m_text->secureShowLast(blackSquare);
+ m_text = m_text->secureShowOffset(blackSquare, m_offset);
}
if (style()->textSecurity() != TSNONE) {
--- a/webengine/osswebengine/WebCore/rendering/RenderText.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebCore/rendering/RenderText.h Mon Oct 26 08:28:45 2009 +0200
@@ -174,7 +174,7 @@
void securityTimerFired(Timer<RenderText>*);
Timer<RenderText> m_securityTimer;
-
+ unsigned m_offset;
#endif //PLATFORM(SYMBIAN)
};
--- a/webengine/osswebengine/WebKit/s60/group/JavaScriptCore/JavaScriptCore.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/group/JavaScriptCore/JavaScriptCore.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -177,5 +177,6 @@
LIBRARY estlib.lib
LIBRARY euser.lib
LIBRARY memman.lib
+LIBRARY charconv.lib
--- a/webengine/osswebengine/WebKit/s60/group/webcore/platform/platform.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/group/webcore/platform/platform.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -26,6 +26,8 @@
VENDORID VID_DEFAULT
START RESOURCE ../../../data/webkit.rss
+DEPENDS avkon.rsg
+DEPENDS eikon.rsg
HEADER
TARGETPATH RESOURCE_FILES_DIR
#ifdef __S60_32__
--- a/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -81,14 +81,6 @@
void WebTabbedNavigation::updateCursorPosition(const TPoint& pos)
{
m_focusPosition = pos;
- WebFrame* frame = StaticObjectsContainer::instance()->webCursor()->getFrameAtPoint(pos);
- TPoint point(frame->frameView()->viewCoordsInFrameCoords(pos));
-
- Element* node = core(frame)->document()->elementFromPoint(point.iX, point.iY);
- if (node->isFocusable() && !node->hasTagName(iframeTag) && !node->hasTagName(frameTag))
- m_webView->page()->focusController()->setFocusedNode(node, core(frame));
- else
- m_webView->page()->focusController()->setFocusedNode(NULL, core(frame));
m_selectedElementRect.SetRect(pos.iX, pos.iY, pos.iX + 1, pos.iY + 1);
}
@@ -101,88 +93,202 @@
m_focusPosition = StaticObjectsContainer::instance()->webCursor()->position();
}
-bool WebTabbedNavigation::navigate(int horizontalDir, int verticalDir)
+
+void WebTabbedNavigation::resetNavigationIfNeeded(TPoint& contentPos, TSize& contentSize,
+ Frame* focusedFrame, int horizontalDir, int verticalDir)
{
- if (handleSelectElementScrolling(m_webView, verticalDir)) {
- StaticObjectsContainer::instance()->webCursor()->cursorUpdate(true);
- return true;
- }
- // DOM can be changed so check if we are still inside the document
- // If not reset tabbed navigation parameters to the closest point in document.
- TSize contentSize = m_webView->mainFrame()->frameView()->contentSize();
- TPoint contentPos = m_webView->mainFrame()->frameView()->contentPos();
- TRect docRect = TRect(contentPos, contentSize - contentPos);
+ TPoint docBrViewCoord = kit(focusedFrame)->frameView()->frameCoordsInViewCoords(
+ TPoint(contentSize.iWidth, contentSize.iHeight));
+ TRect docRect = TRect(TPoint(0,0), docBrViewCoord);
if (!docRect.Contains(m_focusPosition)) {
TInt viewW = m_webView->Rect().Width();
TInt viewH = m_webView->Rect().Height();
- if (m_focusPosition.iX > contentSize.iWidth ||
- m_focusPosition.iX < contentPos.iX) {
+ if (m_focusPosition.iX > contentSize.iWidth) {
m_focusPosition.iX = (horizontalDir == -1) ? contentPos.iX + viewW : contentPos.iX;
}
- if (m_focusPosition.iY > contentSize.iHeight ||
- m_focusPosition.iY < contentPos.iY) {
+ if (m_focusPosition.iY > contentSize.iHeight) {
m_focusPosition.iY = (verticalDir == -1) ? contentPos.iY + viewH : contentPos.iY;
}
-
- m_selectedElementRect.SetRect(m_focusPosition.iX, m_focusPosition.iY, m_focusPosition.iX, m_focusPosition.iY);
+
+ m_selectedElementRect.SetRect(m_focusPosition.iX, m_focusPosition.iY,
+ m_focusPosition.iX, m_focusPosition.iY);
m_node = NULL;
}
+}
+
+
+TPoint WebTabbedNavigation::focusPointFromFocusedNode(Frame* frame, int horizontalDir, int verticalDir)
+{
+ TPoint oldFocusPoint(m_focusPosition);
+ TPoint focusPosition(m_focusPosition);
+ TRect selectedElementRect(m_selectedElementRect);
- bool ret = m_firstNavigationOnPage;
- Frame* focusedFrame = m_webView->page()->focusController()->focusedFrame();
- if (focusedFrame == NULL) focusedFrame = m_webView->page()->mainFrame();
- if (focusedFrame->document()) {
- Node* focusNode = focusedFrame->document()->focusedNode();
- if (focusNode) {
- m_node = focusNode;
- m_selectedElementRect = focusNode->getRect().Rect();
- Frame* frame = focusNode->document()->frame();
- m_selectedElementRect = TRect(kit(frame)->frameView()->frameCoordsInViewCoords(m_selectedElementRect.iTl),
- kit(frame)->frameView()->frameCoordsInViewCoords(m_selectedElementRect.iBr));
+ if (frame->document()) {
+ Node* focusedNode = frame->document()->focusedNode();
+ if (focusedNode) {
+ m_node = focusedNode;
+ selectedElementRect = focusedNode->getRect().Rect();
+ Frame* frame = focusedNode->document()->frame();
+ selectedElementRect = kit(frame)->frameView()->frameCoordsInViewCoords(selectedElementRect);
+
+ // Move the focus to the visible edge of the current object
+ TRect elemVisibleRect = selectedElementRect;
+ if (elemVisibleRect.Intersects(m_webView->Rect())) {
+
+ elemVisibleRect.Intersection(m_webView->Rect());
+ if (horizontalDir == -1) {
+ focusPosition.iX = elemVisibleRect.iTl.iX;
+ }
+ else if (horizontalDir == 1) {
+ focusPosition.iX = elemVisibleRect.iBr.iX;
+ }
+
+ if (verticalDir == -1) {
+ focusPosition.iY = elemVisibleRect.iTl.iY;
+ }
+ else if (verticalDir == 1) {
+ focusPosition.iY = elemVisibleRect.iBr.iY;
+ }
+
+ if ((verticalDir == 0) && (horizontalDir == 0)) {
+ focusPosition = elemVisibleRect.Center();
+ }
+ m_focusPosition = focusPosition;
+ }
+ m_selectedElementRect = selectedElementRect;
}
}
- TPoint oldFocusPoint(m_focusPosition);
- // Move the focus to the edge of the current object
+ return oldFocusPoint;
+}
+
+
+void WebTabbedNavigation::calcSearchViewRect(int horizontalDir, int verticalDir, TRect& view)
+{
+
+ TPoint br;
+ TPoint viewBr = m_webView->Rect().iBr;
+ br.iX = viewBr.iX * KMaxJumpPercent / m_webView->scalingFactor();
+ br.iY = viewBr.iY * KMaxJumpPercent / m_webView->scalingFactor();
+ // define the view rect where we are looking for a match
+ int x, y;
if (horizontalDir == -1) {
- m_focusPosition.iX = m_selectedElementRect.iTl.iX;
+ view.SetRect(m_focusPosition.iX - br.iX, m_focusPosition.iY - br.iY,
+ m_focusPosition.iX , m_focusPosition.iY + br.iY);
}
else if (horizontalDir == 1) {
- m_focusPosition.iX = m_selectedElementRect.iBr.iX;
+ view.SetRect(m_focusPosition.iX, m_focusPosition.iY - br.iY,
+ m_focusPosition.iX + br.iX, m_focusPosition.iY + br.iY);
}
- if (verticalDir == -1) {
- m_focusPosition.iY = m_selectedElementRect.iTl.iY;
+ else if (verticalDir == -1) {
+ view.SetRect(m_focusPosition.iX - br.iX, m_focusPosition.iY - br.iY,
+ m_focusPosition.iX + br.iX, m_focusPosition.iY);
}
else if (verticalDir == 1) {
- m_focusPosition.iY = m_selectedElementRect.iBr.iY;
+ view.SetRect(m_focusPosition.iX - br.iX, m_focusPosition.iY,
+ m_focusPosition.iX + br.iX, m_focusPosition.iY + br.iY);
}
- wkDebug()<<"WebTabbedNavigation::navigate. x = "<<m_focusPosition.iX<<" y = "<<m_focusPosition.iY<<flush;
- wkDebug()<<"x1 = "<<m_selectedElementRect.iTl.iX<<" y1 = "<<m_selectedElementRect.iTl.iY<<" x2 = "<<m_selectedElementRect.iBr.iX<<" y2 = "<<m_selectedElementRect.iBr.iY<<flush;
+}
+
+TPoint WebTabbedNavigation::updateCursorPosAfterScroll(Frame* frame, int horizontalDir, int verticalDir)
+{
+ WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+ TPoint oldPos = cursor->position();
+
+ focusPointFromFocusedNode(frame, horizontalDir, verticalDir);
+ if (m_node && !m_selectedElementRect.Intersects(m_webView->Rect())) {
+ static_cast<Node*>(m_node)->document()->setFocusedNode(NULL);
+ m_node = NULL;
+ }
- // Adjust the move
- TPoint br;
- br.iX = m_webView->Rect().iBr.iX * KMaxJumpPercent / m_webView->scalingFactor();
- br.iY = m_webView->Rect().iBr.iY * KMaxJumpPercent / m_webView->scalingFactor();
+ cursor->setPosition(m_focusPosition - TPoint(horizontalDir, verticalDir));
+ return oldPos;
+}
+
+bool WebTabbedNavigation::navigate(int horizontalDir, int verticalDir)
+{
+ WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+ if (handleSelectElementScrolling(m_webView, verticalDir)) {
+ cursor->cursorUpdate(true);
+ return true;
+ }
+ Frame* mainFrame = core(m_webView->mainFrame());
+ FocusController* focusController = m_webView->page()->focusController();
+ Frame* focusedFrame = focusController->focusedOrMainFrame();
+ TSize contentSize = kit(focusedFrame)->frameView()->contentSize();
+ TPoint contentPos = kit(focusedFrame)->frameView()->contentPos();
+
+ // DOM can be changed so check if we are still inside the document
+ // If not reset tabbed navigation parameters to the closest point in document.
+ resetNavigationIfNeeded(contentPos, contentSize, focusedFrame, horizontalDir, verticalDir);
+
+
+ bool ret = m_firstNavigationOnPage;
+
+ if (focusedFrame == NULL) focusedFrame = mainFrame;
+ TPoint oldFocusPoint = focusPointFromFocusedNode(focusedFrame, horizontalDir, verticalDir);
TRect view;
- // define the view rect where we are looking for a match
- if (horizontalDir == -1) {
- view.SetRect(m_focusPosition.iX - br.iX, m_focusPosition.iY - br.iY, m_focusPosition.iX, m_focusPosition.iY + br.iY);
- }
- else if (horizontalDir == 1) {
- view.SetRect(m_focusPosition.iX, m_focusPosition.iY - br.iY, m_focusPosition.iX + br.iX, m_focusPosition.iY + br.iY);
- }
- else if (verticalDir == -1) {
- view.SetRect(m_focusPosition.iX - br.iX, m_focusPosition.iY - br.iY, m_focusPosition.iX + br.iX, m_focusPosition.iY);
- }
- else if (verticalDir == 1) {
- view.SetRect(m_focusPosition.iX - br.iX, m_focusPosition.iY, m_focusPosition.iX + br.iX, m_focusPosition.iY + br.iY);
- }
- //wkDebug()<<"view x1 = "<<view.iTl.iX<<" y1 = "<<view.iTl.iY<<" x2 = "<<view.iBr.iX<<" y2 = "<<view.iBr.iY<<flush;
- // walk all focusable nodes
- Frame* f = m_webView->page()->mainFrame();
+ calcSearchViewRect(horizontalDir, verticalDir, view);
+
+ // walk all focusable nodes
TPoint selectedPoint(0, 0);
TRect selectedRect(0, 0, 0, 0);
- Node* selectedNode = NULL;
+ Node* selectedNode = bestFitFocusableNode(mainFrame, view, horizontalDir, verticalDir,
+ selectedPoint, selectedRect);
+
+ // Remember new selection
+ contentPos = kit(mainFrame)->frameView()->contentPos();
+ if (selectedNode) {
+ // Found an element to jump to
+ m_selectedElementRect = selectedRect;
+ m_focusPosition = selectedPoint;
+ m_node = selectedNode;
+ selectedNode->document()->setFocusedNode(selectedNode);
+ m_webView->page()->focusController()->setFocusedFrame(selectedNode->document()->frame());
+
+ // And scroll to the selected element
+ RenderLayer *layer = selectedNode->renderer()->enclosingLayer();
+ if (layer) {
+ layer->scrollRectToVisible(selectedNode->getRect(), RenderLayer::gAlignCenterIfNeeded, RenderLayer::gAlignCenterIfNeeded);
+ WebFrameView* fv = kit(selectedNode->document()->frame())->frameView();
+ TRect newRect = fv->frameCoordsInViewCoords(selectedNode->getRect().Rect());
+ selectedRect = newRect;
+ selectedPoint = potentialFocusPoint(horizontalDir, verticalDir, newRect);
+ m_selectedElementRect = selectedRect;
+ m_focusPosition = selectedPoint;
+
+ cursor->updatePositionAndElemType(m_focusPosition);
+ // special handling for Select-Multi
+ if (m_webView->focusedElementType() == TBrCtlDefs::EElementSelectMultiBox) {
+ handleMultiSelect(horizontalDir, verticalDir);
+ }
+
+ m_webView->sendMouseEventToEngine(TPointerEvent::EMove, cursor->position(), mainFrame);
+ ret = true;
+ }
+ }
+ else {
+ if (!m_firstNavigationOnPage) {
+ TInt vWidth = m_webView->Rect().Width();
+ TInt vHeight = m_webView->Rect().Height();
+ kit(mainFrame)->frameView()->scrollTo(contentPos +
+ TPoint(horizontalDir * vWidth / KScrollWhenNotFound,
+ verticalDir * vHeight / KScrollWhenNotFound));
+
+ cursor->updatePositionAndElemType(m_focusPosition - TPoint(horizontalDir, verticalDir));
+ }
+ }
+ cursor->cursorUpdate(true);
+ return ret;
+}
+
+
+
+Node* WebTabbedNavigation::bestFitFocusableNode(Frame* topFrame, TRect& viewRect, int horizontalDir, int verticalDir, //input
+ TPoint& selectedPoint, TRect& selectedRect ) //output
+{
+ Node* selectedNode = NULL;
+ Frame* f = topFrame;
while ( f ) {
PassRefPtr<HTMLCollection> elements = f->document()->all();
TRect frameRect = kit(f)->frameView()->rectInGlobalCoords();
@@ -191,13 +297,11 @@
if (n->isFocusable() && n->isElementNode() && !n->hasTagName(iframeTag) && !n->hasTagName(frameTag)) {
// Does the node intersect with the view rect?
TRect nodeRect = n->getRect().Rect();
- //wkDebug()<<"Each node rect x1 = "<<nodeRect.iTl.iX<<" y1 = "<<nodeRect.iTl.iY<<" x2 = "<<nodeRect.iBr.iX<<" y2 = "<<nodeRect.iBr.iY<<flush;
- nodeRect = TRect(kit(f)->frameView()->frameCoordsInViewCoords(nodeRect.iTl),
- kit(f)->frameView()->frameCoordsInViewCoords(nodeRect.iBr));
- if (nodeRect.Intersects(view)) {
+ nodeRect = kit(f)->frameView()->frameCoordsInViewCoords(nodeRect);
+ if (nodeRect.Intersects(viewRect) &&
+ shouldConsiderRect(nodeRect, viewRect, horizontalDir, verticalDir)) {
// Compare nodes and select the best fit
TPoint newFocusPoint = potentialFocusPoint(horizontalDir, verticalDir, nodeRect);
- wkDebug()<<"Matching node rect x1 = "<<nodeRect.iTl.iX<<" y1 = "<<nodeRect.iTl.iY<<" x2 = "<<nodeRect.iBr.iX<<" y2 = "<<nodeRect.iBr.iY<<flush;
if (selectNode(horizontalDir, verticalDir, selectedRect, nodeRect, selectedPoint, newFocusPoint)) {
// found a better fit
selectedNode = n;
@@ -209,96 +313,55 @@
} // for (Node* n = elements->firstItem(); n; n = elements->nextItem())
f = f->tree()->traverseNext();
} // while ( f )
- // Remember new selection
- contentPos = m_webView->mainFrame()->frameView()->contentPos();
- if (selectedNode) {
- // Found an element to jump to
- m_selectedElementRect = selectedRect;
- m_focusPosition = selectedPoint;
- m_node = selectedNode;
- selectedNode->document()->setFocusedNode(selectedNode);
- m_webView->page()->focusController()->setFocusedFrame(selectedNode->document()->frame());
- // And scroll to the selected element
- RenderLayer *layer = selectedNode->renderer()->enclosingLayer();
- if (layer) {
- layer->scrollRectToVisible(selectedNode->getRect(), RenderLayer::gAlignCenterIfNeeded, RenderLayer::gAlignCenterIfNeeded);
- TRect newRect = TRect(kit(selectedNode->document()->frame())->frameView()->frameCoordsInViewCoords(selectedNode->getRect().Rect().iTl),
- kit(selectedNode->document()->frame())->frameView()->frameCoordsInViewCoords(selectedNode->getRect().Rect().iBr));
- selectedPoint += (newRect.iTl - selectedRect.iTl);
- m_focusPosition = selectedPoint;
- selectedRect = newRect;
- m_selectedElementRect = selectedRect;
+ return selectedNode;
+}
+
- int x, y;
- selectedNode->renderer()->absolutePosition(x, y);
- Vector<IntRect> rects;
- selectedNode->renderer()->absoluteRects(rects, x, y);
- WebFrameView* fv = kit(selectedNode->document()->frame())->frameView();
- if (rects.size() > 0) {
- selectedPoint = TPoint(rects[0].x(), rects[0].y());
- selectedPoint = fv->frameCoordsInViewCoords(selectedPoint);
- }
- StaticObjectsContainer::instance()->webCursor()->updatePositionAndElemType(selectedPoint);
- // special handling for Select-Multi
- if (m_webView->focusedElementType() == TBrCtlDefs::EElementSelectMultiBox) {
- Element* e = static_cast<Element*>(m_node);
- if (e->isControl()) {
- HTMLGenericFormElement* ie = static_cast<HTMLGenericFormElement*>( e );
- if (ie->type() == "select-multiple") {
- RenderListBox* render = static_cast<RenderListBox*>(e->renderer());
- HTMLSelectElement* selectElement = static_cast<HTMLSelectElement*>( e );
- IntRect itemRect = render->itemRect(0, 0, 0);
- TPoint cursorPoint(StaticObjectsContainer::instance()->webCursor()->position());
- int gap = (20 * m_webView->scalingFactor()) / 100;
- cursorPoint.iX = max(m_focusPosition.iX, m_selectedElementRect.iTl.iX + gap);
- cursorPoint.iX = std::min(cursorPoint.iX, m_selectedElementRect.iBr.iX - gap);
- if (verticalDir == -1) {
- cursorPoint.iY -= (itemRect.height() * m_webView->scalingFactor()) / 125;
- }
- if (cursorPoint != StaticObjectsContainer::instance()->webCursor()->position()) {
- StaticObjectsContainer::instance()->webCursor()->setPosition(cursorPoint);
- }
- }
- }
- }
- TPointerEvent event;
- event.iPosition = StaticObjectsContainer::instance()->webCursor()->position();
- event.iModifiers = 0;
- event.iType = TPointerEvent::EMove;
- core(m_webView->mainFrame())->eventHandler()->handleMouseMoveEvent(PlatformMouseEvent(event));
- wkDebug()<<"Focus position x = "<<selectedPoint.iX<<" y = "<<selectedPoint.iY<<flush;
- ret = true;
- }
+bool WebTabbedNavigation::shouldConsiderRect(TRect& rect, TRect& searchRect, int horizontalDir, int verticalDir)
+{
+ bool considerX = false;
+ bool considerY = false;
+
+ if (horizontalDir == 1) {
+ considerX = (rect.iTl.iX >= searchRect.iTl.iX);
+ }
+ else if (horizontalDir == -1) {
+ considerX = (rect.iBr.iX <= searchRect.iBr.iX);
+ }
+
+ if (verticalDir == 1) {
+ considerY = (rect.iTl.iY >= searchRect.iTl.iY);
+ }
+ else if (verticalDir == -1) {
+ considerY = (rect.iBr.iY <= searchRect.iBr.iY);
}
- else {
- if (!m_firstNavigationOnPage) {
- m_webView->mainFrame()->frameView()->scrollTo(contentPos + TPoint(horizontalDir * m_webView->Rect().Width() / KScrollWhenNotFound, verticalDir * m_webView->Rect().Height() / KScrollWhenNotFound));
- TPoint diff(m_webView->mainFrame()->frameView()->contentPos() - contentPos);
- if (diff.iX || diff.iY) {
- Frame* focusedFrame = m_webView->page()->focusController()->focusedFrame();
- if (focusedFrame == NULL) focusedFrame = m_webView->page()->mainFrame();
- Node* focusNode = focusedFrame->document()->focusedNode();
- if (focusNode) {
- TRect selectedRect = focusNode->getRect().Rect();
- selectedRect = TRect(kit(focusedFrame)->frameView()->frameCoordsInViewCoords(selectedRect.iTl),
- kit(focusedFrame)->frameView()->frameCoordsInViewCoords(selectedRect.iBr));
- if (!selectedRect.Intersects(kit(focusedFrame)->frameView()->visibleRect()))
- m_webView->page()->focusController()->setFocusedNode(NULL,0);
- }
- m_selectedElementRect.Move(diff);
- m_focusPosition = oldFocusPoint + diff;
- m_node = NULL;
- StaticObjectsContainer::instance()->webCursor()->updatePositionAndElemType(m_focusPosition - m_webView->mainFrame()->frameView()->contentPos());
- ret = true;
- }
- else
- {
- m_focusPosition = oldFocusPoint;
+
+ return considerX || considerY;
+
+}
+
+void WebTabbedNavigation::handleMultiSelect(int horizontalDir, int verticalDir)
+{
+ WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+ Node* n = static_cast<Node*>(m_node);
+ WebFrameView* fv = kit(n->document()->frame())->frameView();
+ Element* e = static_cast<Element*>(m_node);
+ if (e->isControl()) {
+ HTMLGenericFormElement* ie = static_cast<HTMLGenericFormElement*>( e );
+ if (ie->type() == "select-multiple") {
+ RenderListBox* render = static_cast<RenderListBox*>(e->renderer());
+ HTMLSelectElement* selectElement = static_cast<HTMLSelectElement*>( e );
+ TRect itemRect = render->itemRect(0, 0, render->indexOffset()).Rect();
+ TRect itemRectViewCoord = fv->frameCoordsInViewCoords(itemRect);
+ itemRectViewCoord.Move(m_selectedElementRect.iTl);
+ itemRectViewCoord.Intersection(fv->topView()->Rect());
+
+ TPoint cursorPoint = itemRect.Center() + m_selectedElementRect.iTl;
+ if (cursorPoint != cursor->position()) {
+ cursor->setPosition(cursorPoint);
}
}
}
- StaticObjectsContainer::instance()->webCursor()->cursorUpdate(true);
- return ret;
}
bool WebTabbedNavigation::selectNode(int horizontalDir, int verticalDir, TRect& selectedRect, TRect& newNodeRect, TPoint& selectedPoint, TPoint& newFocusPoint)
@@ -308,7 +371,7 @@
}
int selectedDist = distanceFunction(horizontalDir, verticalDir, selectedRect, selectedPoint);
int newDist = distanceFunction(horizontalDir, verticalDir, newNodeRect, newFocusPoint);
- wkDebug()<<"WebTabbedNavigation::selectNode. selected x = "<<selectedPoint.iX<<" y = "<<selectedPoint.iY<<" new x = "<<newFocusPoint.iX<<" y = "<<newFocusPoint.iY<<"old distance = "<<selectedDist<<" new distance = "<<newDist<<flush;
+
return newDist < selectedDist;
}
@@ -399,3 +462,4 @@
Math::Int(o, sqrt(overlap));
return ed + sameAxisDist + 2 * otherAxisDist - o;
}
+
--- a/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/misc/WebTabbedNavigation.h Mon Oct 26 08:28:45 2009 +0200
@@ -24,6 +24,7 @@
namespace WebCore {
class Element;
class Node;
+ class Frame;
};
class WebTabbedNavigation {
@@ -36,11 +37,19 @@
void initializeForPage();
void updateCursorPosition(const TPoint& pos);
void focusedElementChanged(WebCore::Element* element);
-
+ TPoint updateCursorPosAfterScroll(WebCore::Frame* frame, int horizontalDir, int verticalDir);
private:
bool selectNode(int horizontalDir, int verticalDir, TRect& selectedRect, TRect& newNodeRect, TPoint& selectedPoint, TPoint& newFocusPoint);
TPoint potentialFocusPoint(int horizontalDir, int verticalDir, TRect& newNodeRect);
int distanceFunction(int horizontalDir, int verticalDir, TRect& rect, TPoint& point);
+ WebCore::Node* bestFitFocusableNode(WebCore::Frame* topFrame, TRect& viewRect, int horizontalDir, int verticalDir,
+ TPoint& selectedPoint, TRect& selectedRect );
+ void handleMultiSelect(int horizontalDir, int verticalDir);
+ void resetNavigationIfNeeded(TPoint& contentPos, TSize& contentSize, WebCore::Frame* focusedFrame,
+ int horizontalDir, int verticalDir);
+ TPoint focusPointFromFocusedNode(WebCore::Frame* frame, int horizontalDir, int verticalDir);
+ void calcSearchViewRect(int horizontalDir, int verticalDir, TRect& view);
+ bool shouldConsiderRect(TRect& rect, TRect& searchRect, int horizontalDir, int verticalDir);
private:
TRect m_selectedElementRect;
--- a/webengine/osswebengine/WebKit/s60/misc/WebUtil.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/misc/WebUtil.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -748,12 +748,12 @@
//scroll only for the list which is either multiple or single but with more than one lines
if (isScrollList) {
RenderListBox* render = static_cast<RenderListBox*>(e->renderer());
- if (render->isScrollable()) {
+
HTMLSelectElement* selectElement = static_cast<HTMLSelectElement*>( e );
IntRect r = e->getRect();
int curIndex = render->listIndexAtOffset(point.x() - r.x(), point.y() - r.y());
int topIndex = render->indexOffset();
- int bottomIndex = topIndex + selectElement->size() - 1;
+ int bottomIndex = topIndex + render->getSize() - 1;
TPoint curPointInSelectBox(point.x() - r.x(), point.y() - r.y());
IntRect itemRect = render->itemRect(0, 0, curIndex);
int centerOfRect = itemRect.y() + (itemRect.height() * 1) / 4;
@@ -785,7 +785,7 @@
ret = true;
}
}
- }//isScrollable()
+
}//isScrollList
} //isControl
} //focusedElementType()
--- a/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginSkin.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -474,7 +474,7 @@
{
positionChanged();
// Force the control to be redrawn.
- m_pluginwin->refreshPlugin(*gc);
+ m_pluginwin->refreshPlugin(*gc,newRect);
}
}
--- a/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -341,7 +341,7 @@
// Refresh the plugin. - Called by PluginSkin
// -----------------------------------------------------------------------------
//
-TInt PluginWin::refreshPlugin(CFbsBitGc& bitmapContext)
+TInt PluginWin::refreshPlugin(CFbsBitGc& bitmapContext,TRect aRect)
{
if (m_control && IsVisible() && m_control->DrawableWindow())
m_control->DrawNow();
@@ -352,12 +352,7 @@
if (m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->event) {
m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), static_cast<void*>(&event));
}
- WebFrameView* fv = m_pluginskin->frame()->frameView();
- TRect rect(Rect());
- rect = TRect(fv->viewCoordsInFrameCoords(Rect().iTl), fv->viewCoordsInFrameCoords(Rect().iBr));
- rect = fv->toViewCoords(rect);
- rect.SetSize(m_bitmap->SizeInPixels()); // toViewCoords sometimes grows the rect by 1, which wil cause the bitmap to not draw
- bitmapContext.DrawBitmap(rect, m_bitmap, rect.Size());
+ bitmapContext.DrawBitmap(aRect, m_bitmap);
}
return KErrNone;
}
@@ -758,6 +753,21 @@
static_cast<void*>(&event));
}
}
+ else if(!m_windowedPlugin && m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->event){
+ TRect cliprect = m_pluginskin->getClipRect();
+ TPoint newpos = aEvent.CurrentPos();
+ if(cliprect.Contains(newpos)){
+ TGestureEvent gestEvent(aEvent);
+ NPEvent event;
+ NPEventPointer ev;
+ event.event = ENppEventPointer;
+ ev.reserved = &gestEvent;
+ ev.pointerEvent = NULL;
+ event.param = &ev;
+ ret = m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(),
+ static_cast<void*>(&event));
+ }
+ }
return ret;
}
--- a/webengine/osswebengine/WebKit/s60/plugins/PluginWin.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/PluginWin.h Mon Oct 26 08:28:45 2009 +0200
@@ -104,7 +104,7 @@
* @since 3.1
* @return The error code from the plugin
*/
- TInt refreshPlugin(CFbsBitGc& bitmapContext);
+ TInt refreshPlugin(CFbsBitGc& bitmapContext,TRect aRect);
/**
--- a/webengine/osswebengine/WebKit/s60/webcoresupport/WebChromeClient.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webcoresupport/WebChromeClient.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -357,3 +357,8 @@
m_webView->focusedElementChanged(element);
}
+void WebChromeClient::setElementVisibilityChanged(bool visibility) {
+ m_visibility = visibility;
+ m_visibilityByMouse = m_visibility && m_webView->isMouseEventFired();
+ m_visibilityByKey = m_visibility && m_webView->isKeyEventFired();
+}
--- a/webengine/osswebengine/WebKit/s60/webcoresupport/WebChromeClient.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webcoresupport/WebChromeClient.h Mon Oct 26 08:28:45 2009 +0200
@@ -99,13 +99,20 @@
virtual void setToolTip(const WebCore::String&) {}
virtual void print(WebCore::Frame*) {}
- void setElementVisibilityChanged(bool visibility) {
- m_visibility = visibility;
- }
+ void setElementVisibilityChanged(bool visibility);
bool elementVisibilityChanged() {
return m_visibility;
}
+
+ bool elementVisibilityChangedByMouse() {
+ return m_visibilityByMouse;
+ }
+
+ bool elementVisibilityChangedByKey() {
+ return m_visibilityByKey;
+ }
+
virtual void focusedElementChanged(WebCore::Element*);
protected: // new functions
@@ -115,6 +122,8 @@
WebView *m_webView;
void GetDateAndTimeL(TDes& date, TDes& time) const;
bool m_visibility;
+ bool m_visibilityByMouse;
+ bool m_visibilityByKey;
};
--- a/webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webcoresupport/WebEditorClient.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -384,6 +384,9 @@
frame->selectionController()->end() != endPos) {
event->setDefaultHandled();
}
+ else {
+ m_shouldEndEditing = !m_webView->fepTextEditor()->IsTextAreaFocused();
+ }
break;
case EKeyRightArrow:
@@ -404,6 +407,9 @@
frame->selectionController()->end() != endPos) {
event->setDefaultHandled();
}
+ else {
+ m_shouldEndEditing = !m_webView->fepTextEditor()->IsTextAreaFocused();
+ }
break;
case EKeyUpArrow:
--- a/webengine/osswebengine/WebKit/s60/webcoresupport/WebFrameLoaderClient.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webcoresupport/WebFrameLoaderClient.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -1143,7 +1143,8 @@
{
if (brctl(m_webFrame)->wmlMode()) {
TRAP_IGNORE(
- m_WmlContentListener->CompleteL( 0, 0 );
+ if (m_WmlContentListener)
+ m_WmlContentListener->CompleteL( 0, 0 );
);
return;
}
--- a/webengine/osswebengine/WebKit/s60/webview/BrCtlSoftkeysObserverImpl.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/BrCtlSoftkeysObserverImpl.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,22 +1,46 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Name : BrCtlBrCtlSoftkeysObserverImpl.h
+* Part of : WebKit \ BrowserControl
+* Interface : Browser Control API
+* Description : Handle softkeys updates
+* Version : %Version%
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Handle softkeys updates
-*
+* Copyright (c) 2006, Nokia Corporation
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of the Nokia Corporation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*
+* Please see file patentlicense.txt for further grants.
+* ==============================================================================
*/
-
#ifndef CRCTLSOFTKEYSOBSERVERIMPL_H
#define CRCTLSOFTKEYSOBSERVERIMPL_H
--- a/webengine/osswebengine/WebKit/s60/webview/BrCtlSpecialLoadObserverImpl.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/BrCtlSpecialLoadObserverImpl.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,22 +1,46 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Name : BrCtlSpecialLoadObserverImpl.h
+* Part of : WebKit \ BrowserControl
+* Interface : Browser Control API
+* Description : Handle special load events such as network connection, deal with non-http or non-html requests
+* Version : %Version%
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Handle special load events such as network connection, deal with non-http or non-html requests
-*
+* Copyright (c) 2006, Nokia Corporation
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of the Nokia Corporation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*
+* Please see file patentlicense.txt for further grants.
+* ==============================================================================
*/
-
#ifndef BRCTLSPECIALLOADOBSERVERIMPL_H
#define BRCTLSPECIALLOADOBSERVERIMPL_H
--- a/webengine/osswebengine/WebKit/s60/webview/BrCtlWindowObserverImpl.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/BrCtlWindowObserverImpl.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,22 +1,46 @@
/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ==============================================================================
+* Name : BrCtlWinowObserverImpl.h
+* Part of : WebKit \ BrowserControl
+* Interface : Browser Control API
+* Description : Handle special load events such as network connection, deal with non-http or non-html requests
+* Version : %Version%
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Handle special load events such as network connection, deal with non-http or non-html requests
-*
+* Copyright (c) 2006, Nokia Corporation
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+* * Neither the name of the Nokia Corporation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*
+* Please see file patentlicense.txt for further grants.
+* ==============================================================================
*/
-
#ifndef BRCTLWINDOWOBSERVERIMPL_H
#define BRCTLWINDOWOBSERVERIMPL_H
--- a/webengine/osswebengine/WebKit/s60/webview/SettingsContainer.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/SettingsContainer.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -82,6 +82,8 @@
brctlSettings[TBrCtlDefs::ESettingsToolbarButton7Cmd] = 13;
brctlSettings[TBrCtlDefs::ESettingsScriptLog] = 0;
brctlSettings[TBrCtlDefs::ESettingsCursorShowMode] = 1;
+ brctlSettings[TBrCtlDefs::ESettingsEnterKeyMode] = TBrCtlDefs::EEnterKeyCanActivateLink;
+
updatePageSetting(TBrCtlDefs::ESettingsAutoLoadImages);
updatePageSetting(TBrCtlDefs::ESettingsFontSize);
@@ -249,6 +251,7 @@
case TBrCtlDefs::ESettingsZoomLevelMax:
case TBrCtlDefs::ESettingsCursorShowMode:
case TBrCtlDefs::ESettingsZoomLevelDefault:
+ case TBrCtlDefs::ESettingsEnterKeyMode:
{
retVal = brctlSettings[setting];
break;
--- a/webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebCursor.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -202,7 +202,7 @@
{
m_type = type;
- if (m_visible && (m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeCursor)) {
+ if (m_visible) {
CFbsBitmap* img = NULL;
CFbsBitmap* msk = NULL;
switch( type )
@@ -264,19 +264,22 @@
{
if (!m_view || !m_view->brCtl() || !m_view->brCtl()->settings())
return;
+
+ bool tabbedNavigation = (m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed);
+ bool navigationNone = (m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeNone);
+ bool cursorNavigation = (m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeCursor);
+ TBrCtlDefs::TBrCtlElementType elType = m_view->focusedElementType();
//If cursor show mode defined inside cenrep key is no cursor shown in non-tab navigation mode,
//then no need to update the cursor
- if (m_view->brCtl()->settings()->getNavigationType() != SettingsContainer:: NavigationTypeTabbed &&
- (m_view->brCtl()->settings()->brctlSetting(TBrCtlDefs::ESettingsCursorShowMode) == TBrCtlDefs::ENoCursor))
+ if (!tabbedNavigation &&
+ (m_view->brCtl()->settings()->brctlSetting(TBrCtlDefs::ESettingsCursorShowMode) == TBrCtlDefs::ENoCursor))
return;
- if ( m_view->showCursor() ) {
- m_visible = visible && ((m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeCursor)|| m_view->focusedElementType() == TBrCtlDefs::EElementSelectMultiBox); // check for tabbedNavigation here because it is called from so many places.
- }
+
+ m_visible = visible && ((cursorNavigation && m_view->showCursor()) ||
+ (tabbedNavigation && (elType == TBrCtlDefs::EElementSelectMultiBox)));
resetTransparency();
- CursorTypes type = PointerCursor;
- TBrCtlDefs::TBrCtlElementType elType = m_view->focusedElementType();
-
+ CursorTypes type = PointerCursor;
if (m_visible) {
if ( elType == TBrCtlDefs::EElementNone
|| elType == TBrCtlDefs::EElementImageBox
@@ -285,7 +288,7 @@
else if ( elType == TBrCtlDefs::EElementSmartLinkTel
|| elType == TBrCtlDefs::EElementSmartLinkEmail )
type = IBeamCursor;
- else if ( elType == TBrCtlDefs::EElementSelectMultiBox && m_view->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed)
+ else if ( elType == TBrCtlDefs::EElementSelectMultiBox && tabbedNavigation)
type = SelectMultiCursor;
else
type = HandCursor;
@@ -364,9 +367,22 @@
{
setTransparent(false);
m_transtimer->Cancel();
- m_transtimer->Start(microsecs,0,TCallBack(TransparencyTimerCb,this));
+
+ if (m_visible)
+ {
+ m_transtimer->Start(microsecs,0,TCallBack(TransparencyTimerCb,this));
+ }
}
+void WebCursor::stopTransparencyTimer()
+ {
+ if (m_transtimer && m_transtimer->IsActive())
+ {
+ m_transtimer->Cancel();
+ }
+ }
+
+
// -----------------------------------------------------------------------------
// WebCursor::increaseTransparencyMoveCount
// -----------------------------------------------------------------------------
@@ -503,14 +519,20 @@
pfRect = TRect(ppfv->frameCoordsInViewCoords(pfRect.iTl),
ppfv->frameCoordsInViewCoords(pfRect.iBr));
}
-
+ else {
+ pfRect.SetRect(0, 0, pfRect.iBr.iX * z / 100, pfRect.iBr.iY * z / 100);
+ }
+
WebFrameView* fv = frame->frameView();
TRect framerect = fv ->rect();
if (frame->parentFrame()) {// frame is not a main frame
framerect = TRect(pfv->frameCoordsInViewCoords(framerect.iTl),
pfv->frameCoordsInViewCoords(framerect.iBr));
}
-
+ else {
+ framerect.SetRect(0, 0, framerect.iBr.iX * z / 100, framerect.iBr.iY * z / 100);
+ }
+
TRect pfInnerRect = pfRect;
innerRect(pfInnerRect);
TRect fInnerRect = framerect;
@@ -776,6 +798,9 @@
if (m_view && navigableNodeUnderCursor(*frame, point, elType, r)) {
m_view->setFocusedElementType(elType);
}
+ else {
+ m_view->setFocusedElementType(TBrCtlDefs::EElementNone);
+ }
}
// -----------------------------------------------------------------------------
@@ -881,19 +906,19 @@
}
-// -----------------------------------------------------------------------------
-// WebCursor::navigableNodeUnderCursor
-// -----------------------------------------------------------------------------
-bool WebCursor::navigableNodeUnderCursor(WebFrame& webFrame, TPoint& aPoint, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect) const
+bool WebCursor::navigableNodeUnderCursor(WebFrame& webFrame, TPoint& aPoint, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect)
{
Frame* coreFrame = core(&webFrame);
if (!coreFrame->renderer() )
return false;
Element* node = coreFrame->document()->elementFromPoint(aPoint.iX, aPoint.iY);
-
+ m_elementUnderCursor = node;
if (node) {
- return coreFrame->bridge()->getTypeFromElement(node, aElType, aFocusRect);
+ Node* retNode = 0;
+ bool ret = coreFrame->bridge()->getTypeFromElement(node, aElType, aFocusRect, retNode);
+ m_elementUnderCursor = static_cast<Element *>(retNode);
+ return ret;
}
return false;
--- a/webengine/osswebengine/WebKit/s60/webview/WebCursor.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebCursor.h Mon Oct 26 08:28:45 2009 +0200
@@ -27,6 +27,7 @@
namespace WebCore {
class IntRect;
class IntPoint;
+ class Element;
}
#define KInitialOffset 5
@@ -68,10 +69,12 @@
void scrollAndMoveCursor(int dir, int scrollRange, bool auto);
void simpleScroll(int dir, int scrollRange, bool auto=true);
WebFrame* getFrameUnderCursor();
- bool navigableNodeUnderCursor(WebFrame& webFrame, TPoint& aPoint, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect) const;
+ bool navigableNodeUnderCursor(WebFrame& webFrame, TPoint& aPoint, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect);
WebFrame* getFrameAtPoint(const TPoint& viewPos_);
+ WebCore::Element* getElementUnderCursor() {return m_elementUnderCursor;}
+ void stopTransparencyTimer();
-
+
private:
void moveCursor(int lr,int tb, int scrollRange);
bool determineCursorPosition(WebFrame& webFrame, TBrCtlDefs::TBrCtlElementType& aElType, TRect& aFocusRect, TRect& aSearchRect,
@@ -118,6 +121,7 @@
CursorTypes m_type;
int m_flipCounter;
TPoint m_incrLimit;
+ WebCore::Element* m_elementUnderCursor;
};
#endif
--- a/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebFepTextEditor.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -398,32 +398,18 @@
// The other part of the rather hackish way to check if we are at the end of the editing field
// see WebEditorClient::handleKeypress
Frame* frame = m_webView->page()->focusController()->focusedOrMainFrame();
- if ( frame ) {
- SelectionController* sc = frame->selectionController();
- Node* editNode = sc->base().node();
- if ( IsTextAreaFocused() ) {
- while(editNode && !editNode->isTextNode()){
- editNode = editNode->previousSibling();
- }
- TInt position( aCursorSelection.iAnchorPos );
- TInt offset( 0 );
- TInt extentoffset = 0;
- if ( editNode ) {
- editNode = findTextNodeForCurPos( editNode, position );
- if(aCursorSelection.iAnchorPos >= position) {
- offset = aCursorSelection.iAnchorPos - position;
- extentoffset = aCursorSelection.iCursorPos - position;
- }
- extentoffset = extentoffset < 0 ? 0 : extentoffset;
- Position base( editNode, offset );
- Position extent(editNode,extentoffset);
- sc->moveTo( base, extent, DOWNSTREAM );
- }
+ Node* focusedNode = frame->document()->focusedNode();
+ if ( frame && focusedNode) {
+ TInt lowPos = aCursorSelection.LowerPos();
+ TInt highPos = aCursorSelection.HigherPos();
+ if (focusedNode->hasTagName(HTMLNames::textareaTag)) {
+ HTMLTextAreaElement* textArea = static_cast<HTMLTextAreaElement*>(focusedNode);
+ textArea->setSelectionRange(lowPos, highPos);
}
- else if ( editNode && editNode->isTextNode() ) {
- Position base( sc->baseNode(), aCursorSelection.iAnchorPos );
- Position extent( sc->baseNode(), aCursorSelection.iCursorPos );
- sc->moveTo( base, extent, DOWNSTREAM );
+ else if (focusedNode->hasTagName(HTMLNames::inputTag)) {
+ HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(focusedNode);
+ inputElement->setSelectionStart(lowPos);
+ inputElement->setSelectionEnd(highPos);
}
HandleUpdateCursor();
}
@@ -439,27 +425,21 @@
aCursorSelection.SetSelection(0,0);
Frame* frame = m_webView->page()->focusController()->focusedOrMainFrame();
- if ( frame ) {
- SelectionController* sc = frame->selectionController();
- Node* editNode = sc->base().node();
- if ( frame && frame->document()->focusedNode() ) {
- if ( IsTextAreaFocused() ) {
- HTMLTextAreaElement* ie = static_cast<HTMLTextAreaElement*>(frame->document()->focusedNode());
- while(editNode && !editNode->isTextNode()) {
- editNode = editNode->previousSibling();
- }
- TInt len( 0 );
- if ( editNode ) {
- findPrevSiblingTextLen( editNode, len );
- }
- aCursorSelection.SetSelection( ((sc->baseOffset()+len > ie->value().length()) ? 0 : sc->baseOffset()+len),
- ((sc->extentOffset()+len > ie->value().length()) ? 0 : sc->extentOffset()+len));
- }
- else {
- aCursorSelection.SetSelection(sc->baseOffset(), sc->extentOffset());
- }
- }
- }
+ Node* focusedNode = frame->document()->focusedNode();
+ if (frame && focusedNode) {
+ if (focusedNode->hasTagName(HTMLNames::textareaTag)) {
+ HTMLTextAreaElement* textArea = static_cast<HTMLTextAreaElement*>(focusedNode);
+ TInt anchorPos = textArea->selectionStart();
+ TInt cursorPos = textArea->selectionEnd();
+ aCursorSelection.SetSelection(cursorPos, anchorPos);
+ }
+ else if (focusedNode->hasTagName(HTMLNames::inputTag)) {
+ HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(focusedNode);
+ TInt anchorPos = inputElement->selectionStart();
+ TInt cursorPos = inputElement->selectionEnd();
+ aCursorSelection.SetSelection(cursorPos, anchorPos);
+ }
+ }
}
// -----------------------------------------------------------------------------
--- a/webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebFrame.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -347,8 +347,8 @@
WTF::Vector<WebFrame*> ch = childFrames();
WebFrame* frm = 0;
// Check the children of the frame only if this frame also contains pt_
- // If a child iframe is bigger than the parent, it should not be picked.
- if (m_view->rectInGlobalCoords().Contains(pt_)) {
+ // If a child iframe is bigger than the parent, it should not be picked.
+ if (m_view->isVisible() && m_view->rectInGlobalCoords().Contains(pt_)) {
Vector<WebFrame*>::iterator end = ch.end();
for (Vector<WebFrame*>::iterator itr = ch.begin(); itr != end; itr++) {
WebFrame* f = (*itr);
--- a/webengine/osswebengine/WebKit/s60/webview/WebFrameView.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebFrameView.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -29,12 +29,17 @@
#include "PageScaler.h"
#include "webkitlogger.h"
#include "BrCtl.h"
+#include "SettingsContainer.h"
+#include "StaticObjectsContainer.h"
+#include "WebTabbedNavigation.h"
+
using namespace WebCore;
WebFrameView::WebFrameView() :
m_parent(NULL),
m_hasBorder(true),
- m_refCount(1)
+ m_refCount(1),
+ m_isVisible(ETrue)
{
m_hScrollbar = new WebCore::PlatformScrollbar(this, WebCore::HorizontalScrollbar, WebCore::RegularScrollbar);
m_vScrollbar = new WebCore::PlatformScrollbar(this, WebCore::VerticalScrollbar, WebCore::RegularScrollbar);
@@ -323,7 +328,14 @@
//Update scroll bar , thumb position
m_topView->updateScrollbars(m_contentSize.iHeight, m_contentPos.iY, m_contentSize.iWidth, m_contentPos.iX);
-
+
+ if (m_topView->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed) {
+ int h = (to.iX - from.iX);
+ int v = (to.iY - from.iY);
+ h = (h != 0) ? ((h > 0) ? 1 : -1) : h;
+ v = (v != 0) ? ((v > 0) ? 1 : -1) : v;
+ m_topView->tabbedNavigation()->updateCursorPosAfterScroll(core(m_frame.get()), h, v);
+ }
// trigger painting
m_topView->syncRepaint();
}
@@ -506,6 +518,13 @@
return pt;
}
+TRect WebFrameView::frameCoordsInViewCoords(const TRect &aRect)
+{
+ TSize s = aRect.Size();
+ return TRect(frameCoordsInViewCoords(aRect.iTl), toViewCoords(s));
+}
+
+
TRect WebFrameView::rectInGlobalCoords() const
{
TRect rect(toViewCoords(m_frameRect));
@@ -526,6 +545,7 @@
void WebFrameView::makeVisible(TBool aVisible)
{
+ m_isVisible = aVisible;
}
TBool WebFrameView::isFocused() const
@@ -535,7 +555,7 @@
TBool WebFrameView::isVisible() const
{
- return ETrue;
+ return m_isVisible;
}
TSize WebFrameView::contentSize() const
--- a/webengine/osswebengine/WebKit/s60/webview/WebFrameView.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebFrameView.h Mon Oct 26 08:28:45 2009 +0200
@@ -98,7 +98,8 @@
TPoint frameCoordsInViewCoords(const TPoint& aPoint);
TPoint viewCoordsInFrameCoords(const TPoint& aPoint);
TRect rectInGlobalCoords() const;
-
+ TRect frameCoordsInViewCoords(const TRect &aRect);
+
void checkScrollbarVisibility();
int getBidiWidth();
bool needScroll(const TPoint& aPoint);
@@ -125,6 +126,7 @@
bool m_resizeByEngine;
int m_refCount;
+ TBool m_isVisible;
};
#endif // END OF FILE
--- a/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebPointerEventHandler.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -148,7 +148,9 @@
}
}
updateCursor(aEvent.CurrentPos());
-
+ if (IS_TABBED_NAVIGATION) {
+ m_webview->tabbedNavigation()->updateCursorPosition(m_highlightPos);
+ }
switch (gtype) {
// sent on touch down
case EGestureStart:
@@ -195,7 +197,7 @@
{
m_ignoreTap = false;
if (!IS_NAVIGATION_NONE) {
- handleTouchUp(aEvent);
+ handleTouchUp(aEvent);
}
else {
Frame* frm = m_webview->page()->focusController()->focusedOrMainFrame();
@@ -265,7 +267,7 @@
}
if (!IS_NAVIGATION_NONE) {
- m_webview->pageScrollHandler()->handleTouchDownGH(aEvent);
+ m_webview->pageScrollHandler()->handleTouchDownGH(aEvent);
}
if ( TBrCtlDefs::EElementActivatedObjectBox == elType) {
@@ -305,7 +307,7 @@
PluginHandler* pluginHandler = WebCore::StaticObjectsContainer::instance()->pluginHandler();
pluginHandler->setPluginToActivate(NULL);
if (!IS_NAVIGATION_NONE) {
- m_webview->pageScrollHandler()->handleTouchUpGH(aEvent);
+ m_webview->pageScrollHandler()->handleTouchUpGH(aEvent);
}
}
@@ -360,12 +362,6 @@
else if (aPointerEvent.iType == TPointerEvent::EButton1Up) {
m_webview->GetContainerWindow().DisablePointerMoveBuffer();
}
-
- }
-
-
- if (m_webview->brCtl()->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed) {
- m_webview->tabbedNavigation()->updateCursorPosition(aPointerEvent.iPosition);
}
#ifdef BRDO_USE_GESTURE_HELPER
@@ -412,35 +408,31 @@
TBrCtlDefs::TBrCtlElementType elType = TBrCtlDefs::EElementNone;
Frame* coreFrame = core(m_webview->mainFrame());
WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
- m_webview->page()->chrome()->client()->setElementVisibilityChanged(false);
+
TPointerEvent event;
TPoint pos = cursor->position();
- IntPoint point(pos.iX, pos.iY);
- HitTestResult htresult = coreFrame->eventHandler()->hitTestResultAtPoint(point, true);
- Node* eventNode = htresult.innerNode();
- Frame* frm = eventNode->document()->frame();
- WebFrame* wfrm = kit(frm);
+ WebFrame* wfrm = cursor->getFrameAtPoint(pos);
+ Frame* frm = core(wfrm);
TPoint pt(wfrm->frameView()->viewCoordsInFrameCoords(pos));
TPoint nodePoint;
+ Element* eventNode = frm->document()->elementFromPoint(pos.iX, pos.iY);
+
m_highlightedNode = NULL;
- frm->bridge()->getTypeFromElement(eventNode, elType, elRect);
+ Node* retNode = 0;
+ frm->bridge()->getTypeFromElement(eventNode, elType, elRect, retNode);
+
if (elType == TBrCtlDefs::EElementNone) {
-
Node* n = wfrm->getClosestAnchorElement(cursor->position(), pos);
- if (n) {
- point.setX(pos.iX);
- point.setY(pos.iY);
- htresult = coreFrame->eventHandler()->hitTestResultAtPoint(point, true);
- eventNode = htresult.innerNode();
- frm = eventNode->document()->frame();
- frm->bridge()->getTypeFromElement(eventNode, elType, elRect);
+ if (n) {
+ wfrm = cursor->getFrameAtPoint(pos);
+ frm = core(wfrm);
+ eventNode = frm->document()->elementFromPoint(pos.iX, pos.iY);
+ frm->bridge()->getTypeFromElement(eventNode, elType, elRect, retNode);
TPoint nodePoint = n->getRect().Rect().Center();
m_offset = (pt.iX- nodePoint.iX)*(pt.iX- nodePoint.iX) +
(pt.iY- nodePoint.iY)*(pt.iY- nodePoint.iY);
-
-
}
}
m_highlightedNode = eventNode;
@@ -493,13 +485,17 @@
}
#endif // BRDO_TOUCH_ENABLED_FF
-
- // We assume that if element visibility has been changed
- // between "up" and "down" that means that some node event
- // listener (onMouseOver etc) handling happened and we don't
- // want to send a click (mouse press + mouse release) event.
- if (!IS_NAVIGATION_NONE &&
- m_webview->page()->chrome()->client()->elementVisibilityChanged()) {
+ /*
+ * We assume that if element visibility has been changed
+ * between "up" and "down" that means that some node event
+ * listener (onMouseOver etc) handling happened and we don't
+ * want to send a click (mouse press = mouse release) event.
+ * The exception is editable element, since we want VKB anyway
+ */
+ if (!IS_NAVIGATION_NONE &&
+ elType != TBrCtlDefs::EElementActivatedInputBox &&
+ elType != TBrCtlDefs::EElementTextAreaBox &&
+ m_webview->page()->chrome()->client()->elementVisibilityChangedByMouse()) {
return;
}
@@ -509,12 +505,11 @@
// don't pass the event if the text input is not in valid format
if (isHighlitableElement(elType) || m_webview->fepTextEditor()->validateTextFormat()) {
- // because of scrolling we delay sending EButton1Down till we get EButton1Up event and if the content is not scrolling
- coreFrame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(m_lastTapEvent));
+ m_webview->sendMouseEventToEngine(TPointerEvent::EButton1Up, m_lastTapEvent.iPosition, coreFrame);
}
// special handling for broken image (why is this here??)
- if (m_webview->focusedElementType() == TBrCtlDefs::EElementBrokenImage) {
+ if (elType == TBrCtlDefs::EElementBrokenImage) {
loadFocusedImage(m_webview);
}
else if (elType == TBrCtlDefs::EElementActivatedObjectBox) {
@@ -601,6 +596,21 @@
}
m_isHighlighted = (m_highlightedNode != NULL) && (elType != TBrCtlDefs::EElementNone) ;
+ m_webview->page()->chrome()->client()->setElementVisibilityChanged(false);
+
+ /*
+ * Tabbed navigation might already set the focused node.
+ * If it's the same as m_highlightedNode FocuseController::setFocusedNode()
+ * wouldn't do anything and setEditable won't be called.
+ * So we are setting focused node to NULL here and let mouse event handler
+ * set it through ocuseController::setFocusedNode()
+ */
+ if (IS_TABBED_NAVIGATION &&
+ elType == TBrCtlDefs::EElementInputBox ||
+ elType == TBrCtlDefs::EElementTextAreaBox) {
+ coreFrame->document()->setFocusedNode(NULL);
+ }
+
m_webview->sendMouseEventToEngine(TPointerEvent::EButton1Down, m_highlightPos, coreFrame);
m_webview->sendMouseEventToEngine(TPointerEvent::EMove, m_highlightPos, coreFrame);
--- a/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -143,7 +143,10 @@
: coreFrame->tree()->traversePreviousWithWrap(wrapFlag));
}
-
+#define IS_UP_KEY(keyevent) ((keyevent.iCode == EKeyUpArrow) || (keyevent.iCode == EStdKeyUpArrow))
+#define IS_DOWN_KEY(keyevent) ((keyevent.iCode == EStdKeyDevice12) || (keyevent.iCode == EKeyDownArrow) || (keyevent.iCode == EStdKeyDownArrow))
+#define IS_RIGHT_KEY(keyevent) ((keyevent.iCode == EStdKeyDevice11) || (keyevent.iCode == EKeyRightArrow) || (keyevent.iCode == EStdKeyRightArrow))
+#define IS_LEFT_KEY(keyevent) ((keyevent.iCode == EStdKeyDevice13) || (keyevent.iCode == EKeyLeftArrow) || (keyevent.iCode == EStdKeyLeftArrow))
// -----------------------------------------------------------------------------
// WebView::NewL
@@ -196,11 +199,14 @@
, m_showCursor(false)
, m_allowRepaints(true)
, m_prevEditMode(false)
+, m_firedEvent(0)
{
}
WebView::~WebView()
{
+ StaticObjectsContainer::instance()->webCursor()->stopTransparencyTimer();
+
// the zoom handler is a client of WebView (also owned by
// WebView--a circular dependency) so it must be deleted before
// the WebView object is destroyed because in its destructor it
@@ -782,6 +788,7 @@
m_focusedElementType = TBrCtlDefs::EElementNone;
}
m_brctl->updateDefaultSoftkeys();
+ page()->chrome()->client()->setElementVisibilityChanged(false);
}
void WebView::updatePageScaler()
@@ -898,7 +905,8 @@
event.iPosition = pos;
event.iModifiers = 0;
event.iType = eventType;
-
+
+ setMouseEventFired();
switch (eventType) {
case TPointerEvent::EButton1Down:
{
@@ -918,6 +926,7 @@
break;
}
};
+ clearMouseEventFired();
}
@@ -931,22 +940,21 @@
}
}
-bool WebView::needDeactivateEditable(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
+bool WebView::needDeactivateEditable(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame, bool consumed)
{
- bool upOrDown = ((keyevent.iCode == EKeyUpArrow) ||
- (keyevent.iCode == EStdKeyUpArrow) ||
- (keyevent.iCode == EKeyRightUpArrow) ||
- (keyevent.iCode == EKeyDownArrow) ||
- (keyevent.iCode == EStdKeyDownArrow) ||
- (keyevent.iCode == EKeyLeftDownArrow));
- bool shouldEndEditing = frame->editor()->client()->shouldEndEditing(NULL);
- bool inEditState = (m_isEditable && (m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox));
- bool isSelectBoxActive = (m_focusedElementType == TBrCtlDefs::EElementSelectBox);
- bool deactivateInputBox = (inEditState && upOrDown && m_webfeptexteditor->validateTextFormat());
- bool deactivateSelectBox = (isSelectBoxActive && isNaviKey(keyevent));
-
+ /*
+ * Here we are making an assumption that if element visibility has been changed
+ * than JavaScript used the key event. If this the the case or consumed is tru and
+ * keys are Up or Down we don't want to deactivate an editable element.
+ * Google suggest is examples if such case.
+ */
+ bool upOrDownConsumed = (consumed || //JavaScript consumed event or
+ (m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox && // style of input box
+ page()->chrome()->client()->elementVisibilityChanged())) && // changed
+ (IS_UP_KEY(keyevent) || IS_DOWN_KEY(keyevent));
+ bool shouldEndEditing = frame->editor()->client()->shouldEndEditing(NULL) && !upOrDownConsumed;
bool deactivateEditable = (m_isEditable && shouldEndEditing && m_webfeptexteditor->validateTextFormat());
- return deactivateEditable || deactivateSelectBox;
+ return deactivateEditable;
}
@@ -981,19 +989,12 @@
}
}
else {
- if (keyevent.iCode == EKeyDevice3) { //selection key (MSK)
- // mimic ccb's behavior of onFocus
+ if (keyevent.iCode == EKeyDevice3) { // selection key (MSK)
consumed = handleMSK(keyevent, oldKeyCode, frame);
-
- // Toolbar is activated on long key press only if the element
- // type is EElementNone during EEventKeyDown and EEventKey.
- // This prevents toolbar from popping up in DHTML pages. Also,
- // toolbar is activated when the user is not in fast scroll
- // mode, or in page overview mode, or on wml page.
}
else if (isNaviKey(keyevent)) {
consumed = handleNaviKeyEvent(keyevent, oldKeyCode, frame);
- } // if (m_brctl->settings()->getNavigationType()
+ }
else { // Not an arrow key..
// activate hovered input element by just start typing
consumed = !m_isEditable && handleInputElement(keyevent, eventcode, frame);
@@ -1005,90 +1006,190 @@
return consumed;
}
+
bool WebView::handleMSK(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
{
WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
bool prevEditableState = m_isEditable;
- if (m_focusedElementType != TBrCtlDefs::EElementActivatedInputBox ) {
- sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Down,
- cursor->position(), frame);
+ bool tabbedNavigation = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed);
+ Node* focusedNode = frame->document()->focusedNode();
+ bool multiSelectInTabbed = (m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox) && // multiselect element
+ tabbedNavigation; // in tabbed mode.
+ /*
+ * Avoiding resetting cursor position to top left corner of Select Box
+ * See comment in handleInputElement
+ */
+ if (!multiSelectInTabbed) {
+ setFocusNone();
+ }
+
+ sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Down,
+ cursor->position(), frame);
+ if (!tabbedNavigation) {
+ setFocusedNode(frame); //TODO: Do we need it here?
}
- setFocusedNode(frame);
+ else {
+ /*
+ * Restore focused by tabbed navigation node since mouse event
+ * handler might set it to NULL.
+ */
+ page()->focusController()->setFocusedNode(focusedNode, frame);
+ }
+
+ /*
+ * MSK key event on editable will be interpreted as Enter.
+ * We don't want to send Enter key in case of activated
+ * input box. Also if the text area has been just activated
+ * we also don't want to send Enter since it will cause extra
+ * line feed.
+ */
bool textAreaJustActivated = (!prevEditableState && m_isEditable &&
m_focusedElementType == TBrCtlDefs::EElementTextAreaBox);
+
if (eventcode == EEventKeyDown &&
m_focusedElementType != TBrCtlDefs::EElementActivatedInputBox &&
!textAreaJustActivated) {
+
sendKeyEventToEngine(keyevent, EEventKeyDown, frame);
}
+
+ /*
+ * Toolbar is activated on long key press only if the element
+ * type is EElementNone during EEventKeyDown and EEventKey.
+ * This prevents toolbar from popping up in DHTML pages. Also,
+ * toolbar is activated when the user is not in fast scroll
+ * mode, or in page overview mode, or on wml page.
+ */
if ((m_focusedElementType == TBrCtlDefs::EElementNone ||
m_focusedElementType == TBrCtlDefs::EElementBrokenImage ) &&
keyevent.iRepeats && !m_brctl->wmlMode() ) {
launchToolBarL();
}
+
return true;
}
-bool WebView::handleNaviKeyEvent(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
+
+bool WebView::handleNaviKeyEvent(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
{
bool downEventConsumed = false;
bool consumed = false;
bool tabbedNavigation = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed);
/*
- * For each platform keyDown event EventHandler::keEvent() generates
+ * For each platform keyDown event EventHandler::keEvent() generates
* keydown and keypress.
- * For keypress event we need a char code and since we don't
- * have it at the time of EEventKeyDown we pospond it until EEventKey
+ * For keypress event we need a char code and since we don't
+ * have it at the time of EEventKeyDown we pospond it until EEventKey
* and send it here.
*/
if (eventcode == EEventKeyDown){
downEventConsumed = sendKeyEventToEngine(keyevent, EEventKeyDown, frame);
}
-
- if (!downEventConsumed && needDeactivateEditable(keyevent, eventcode, frame)) {
+ /*
+ * downEventConsumed will be true if JavaScript consumes key event
+ * If we are not in the widget mode we want to deactivate input box
+ * regardless of whether event was consumed by JavaScript or not.
+ * Othrerwise we have a risk to be trapped inside input box.
+ */
+ bool widgetDownEventConsumed = downEventConsumed && (m_widgetextension != NULL);
+
+ if (!widgetDownEventConsumed && needDeactivateEditable(keyevent, eventcode, frame, downEventConsumed)) {
deactivateEditable();
}
if (tabbedNavigation) {
consumed = downEventConsumed || handleTabbedNavigation(m_currentEventKey, m_currentEventCode);
}
- else {
- consumed = (!m_isEditable && //avoid showing the cursor when we are in the input box
+ else {
+ consumed = (!m_isEditable && //avoid showing the cursor when we are in the input box
handleKeyNavigation(keyevent, eventcode, frame)) ||
downEventConsumed;
}
return consumed;
}
-
bool WebView::handleInputElement(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
{
WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+ TBrCtlDefs::TBrCtlElementType elTypeBeforeMouseEvent = m_focusedElementType;
+ bool tabbedNavigation = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed);
+ bool navigationNone = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeNone);
+ bool prevEditableState = m_isEditable;
+ bool enterOnMultiSelectInTabbed = tabbedNavigation && (keyevent.iCode == EKeyEnter) && // EnterKey in case of
+ (m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox); // multiselect eelement in tabbed mode.
+
+
bool sendMousedEvent = false;
if (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
- m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
+ m_focusedElementType == TBrCtlDefs::EElementTextAreaBox ||
+ (tabbedNavigation &&
+ (m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox))) {
sendMousedEvent = true;
}
else if (m_focusedElementType == TBrCtlDefs::EElementSelectBox ||
m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox) {
- if (m_brctl->settings()->getNavigationType() != SettingsContainer::NavigationTypeNone ||
- keyevent.iCode == EKeyDevice3) {
+ if (!navigationNone || keyevent.iCode == EKeyDevice3) {
sendMousedEvent = true;
}
}
+
+ if (m_focusedElementType == TBrCtlDefs::EElementTextAreaBox ||
+ m_focusedElementType == TBrCtlDefs::EElementInputBox ||
+ m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox) {
+ page()->chrome()->client()->setElementVisibilityChanged(false);
+ }
+
if (sendMousedEvent) {
+ /*
+ * Sending mouse event to WebCore will trigger FocusController->setFocusedNode() to be called.
+ * It will do anything only if focused node has been changed. Among other thing it will
+ * trigger the setEditable() call, which we need. The exception is the case when
+ * we have tabbed navigation and EnterKey was hit in MultiSelect Box.
+ * In this case we just want to select item in the select element.
+ * HTMLSelectElement::listBoxDefaultEventHandler() will call focus() which will
+ * set the focused node, which is already set anyway, but this will cause the
+ * reseting cursor position to the top left corner of the select box.
+ * To avoid thos we put the check here before we reset the foocusedNode.
+ */
+ if (!enterOnMultiSelectInTabbed) {
+ frame->document()->setFocusedNode(NULL);
+ }
+
+ /*
+ * Tweek the m_isEditable flag, so setEditable will do something
+ * usefull when it's called from FocusController->setFocusedNode()
+ */
+ if (m_isEditable && tabbedNavigation) {
+ m_isEditable = false;
+ }
+
sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Down, cursor->position(), frame);
sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Up, cursor->position(), frame);
-
- if (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
- m_focusedElementType == TBrCtlDefs::EElementTextAreaBox ||
- m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox) {
+
+ /*
+ * If enter key was pressed to activate an input box we don't want to
+ * send it to WebCore since it may cause immediate form submission.
+ * Same for MultiSelect Box in tabbed mode.
+ */
+ bool inputBoxJustActivated = (!prevEditableState && m_isEditable &&
+ (m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox||
+ m_focusedElementType == TBrCtlDefs::EElementTextAreaBox));
+ bool inputBoxJustActivatedByEnter = inputBoxJustActivated && (keyevent.iCode == EKeyEnter);
+ if (!inputBoxJustActivatedByEnter &&
+ !enterOnMultiSelectInTabbed &&
+ (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
+ m_focusedElementType == TBrCtlDefs::EElementTextAreaBox ||
+ m_focusedElementType == TBrCtlDefs::EElementActivatedInputBox)) {
+
if (!m_fepTimer) {
m_fepTimer = new WebCore::Timer<WebView>(this, &WebView::fepTimerFired);
}
m_fepTimer->startOneShot(0.2f);
- setEditable(true);
+ if (!m_isEditable) {
+ setEditable(true);
+ }
}
+
m_keyevent = keyevent;
m_eventcode = eventcode;
return true;
@@ -1122,6 +1223,16 @@
cursor->scrollAndMoveCursor(keyevent.iCode, m_scrollingSpeed, fastscroll);
}
updateScrollbars();
+ /*
+ * In order to Enter key activate a link the link node has to be focused.
+ * When WebCursor is finding next node to snap it stores it, so here we can
+ * set it to focused.
+ */
+ if (m_brctl->settings()->brctlSetting(TBrCtlDefs::ESettingsEnterKeyMode) ==
+ TBrCtlDefs::EEnterKeyCanActivateLink) {
+ setFocusedNodeUnderCursor(frame);
+ }
+
if (!fastscroll) {
m_fastScrollTimer->Start(KCursorInitialDelay,KCursorUpdateFrquency,TCallBack(&scrollTimerCb,this));
m_scrollingStartTime.HomeTime();
@@ -1138,6 +1249,18 @@
return consumed;
}
+void WebView::setFocusedNodeUnderCursor(Frame* frame)
+{
+ WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+ // focus the node we snapped to
+ if (m_focusedElementType != TBrCtlDefs::EElementNone) {
+ frame->document()->setFocusedNode(cursor->getElementUnderCursor());
+ }
+ // or reset if there is none
+ else if (frame->document()->focusedNode() != NULL) {
+ frame->document()->setFocusedNode(NULL);
+ }
+}
bool WebView::handleMinimapNavigation()
{
@@ -1255,8 +1378,10 @@
}
}
if (m_brctl->settings()->getNavigationType() != SettingsContainer::NavigationTypeNone) {
- if (!sendKeyEventToEngine(correctedKeyEvent, eventcode, frame)) {
- sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Up, cursor->position(), frame);
+ if (!sendKeyEventToEngine(correctedKeyEvent, eventcode, frame)) {
+ if (keyevent.iScanCode == EStdKeyDevice3) { //MSK
+ sendMouseEventToEngineIfNeeded(TPointerEvent::EButton1Up, cursor->position(), frame);
+ }
}
consumed = true;
}
@@ -1301,10 +1426,12 @@
{
bool tabbedNavigation = (m_brctl->settings()->getNavigationType() == SettingsContainer::NavigationTypeTabbed);
Node* targetNode = frame->document()->focusedNode();
- if (!m_isEditable) {
-
-
-
+ /*
+ * we dont want to send key event for navi key to the elements
+ * like select element since it has default key event handling,
+ * which will prevent user to leave the element.
+ */
+ if (!m_isEditable && isNaviKey(keyevent)) {
frame->document()->setFocusedNode(NULL);
}
bool consumed = frame->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode));
--- a/webengine/osswebengine/WebKit/s60/webview/WebView.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebView.h Mon Oct 26 08:28:45 2009 +0200
@@ -67,6 +67,12 @@
class WebFrameView;
class WebFrameBridge;
+
+const TUint KMouseEventFired = 0x00000001;
+const TUint KKeyEventFired = 0x00000002;
+
+
+
class WebView : public CEikBorderedControl, public WebCore::Shared<WebView>, private MPageScalerCallback, public MOOMStopper
{
public:
@@ -459,13 +465,14 @@
bool handleEventKeyUp(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame);
bool handleEditable(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame );
bool isNaviKey(const TKeyEvent& keyevent);
- bool needDeactivateEditable(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame);
+ bool needDeactivateEditable(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame, bool consumed);
bool deactivateEditable();
TUint correctKeyCode();
bool handleNaviKeyEvent(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame);
bool handleMSK(const TKeyEvent& keyevent, TEventCode eventcode, WebCore::Frame* frame);
- void sendMouseEventToEngineIfNeeded(TPointerEvent::TType eventType, TPoint pos, WebCore::Frame* frame);
-
+ void sendMouseEventToEngineIfNeeded(TPointerEvent::TType eventType, TPoint pos, WebCore::Frame* frame);
+ void setFocusedNodeUnderCursor(WebCore::Frame* frame);
+
public:
void sendMouseEventToEngine(TPointerEvent::TType eventType, TPoint pos, WebCore::Frame* frame);
void fepTimerFired(WebCore::Timer<WebView>*);
@@ -478,6 +485,14 @@
void focusedElementChanged(WebCore::Element* element);
void windowObjectCleared() const;
+ bool isMouseEventFired() { return m_firedEvent & KMouseEventFired; }
+ bool isKeyEventFired() { return m_firedEvent & KKeyEventFired; }
+ void setMouseEventFired() { m_firedEvent |= KMouseEventFired; }
+ void setKeyEventFired() { m_firedEvent |= KKeyEventFired; }
+ void clearMouseEventFired() { m_firedEvent &= ~KMouseEventFired; }
+ void clearKeyEventFired() { m_firedEvent &= ~KKeyEventFired; }
+ void clearEventFired() { m_firedEvent = 0; }
+
private:
WebCore::Page* m_page;
WebFrameView* m_frameView;
@@ -559,7 +574,8 @@
//Indicates any plugin is activated/deactivated
bool m_showCursor;
bool m_allowRepaints;
- bool m_prevEditMode;
+ bool m_prevEditMode;
+ int m_firedEvent;
};
#endif
--- a/webengine/osswebengine/cache/cache_check.pl Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/cache/cache_check.pl Mon Oct 26 08:28:45 2009 +0200
@@ -1,18 +1,3 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "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:
-#
#!/usr/bin/perl
#use Encode;
--- a/webengine/osswebengine/cache/filter_emulator_output.bat Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/cache/filter_emulator_output.bat Mon Oct 26 08:28:45 2009 +0200
@@ -1,18 +1,2 @@
-@rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of the License "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description:
-@rem
-
filter_log.pl %tmp%\epocwind.out log.txt"
log.txt
--- a/webengine/osswebengine/cache/filter_log.pl Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/osswebengine/cache/filter_log.pl Mon Oct 26 08:28:45 2009 +0200
@@ -1,18 +1,3 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "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:
-#
#!/usr/bin/perl
open INH,"<",$ARGV[0];
--- a/webengine/widgetengine/group/WidgetEngine.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/widgetengine/group/WidgetEngine.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -116,6 +116,7 @@
SOURCE WidgetEngineBridge.cpp
START RESOURCE ../Src/WidgetMenu.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH RESOURCE_FILES_DIR
#ifdef __S60_32__
--- a/webengine/widgetengine/src/Preferences.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/widgetengine/src/Preferences.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -58,7 +58,7 @@
// ----------------------------------------------------------------------------
WidgetPreferences::~WidgetPreferences()
{
- TRAP_IGNORE( saveL() );
+ //TRAP_IGNORE( saveL() );
if (m_preferences) {
m_preferences->ResetAndDestroy();
m_preferences->Close();
@@ -262,6 +262,9 @@
}
CleanupStack::Pop(); // k
+
+ // Save update to persistent storage
+ saveL();
}
}
@@ -301,6 +304,9 @@
}
CleanupStack::PopAndDestroy(); // k
+
+ // Save update to persistent storage
+ saveL();
}
}
--- a/webengine/widgetinstaller/Inc/WidgetBackupRegistryXml.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/widgetinstaller/Inc/WidgetBackupRegistryXml.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,23 +1,25 @@
/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: This file contains the header file of the CWidgetBackupRegistryXml class.
+* ==============================================================================
+* Name : WidgetRegistryXml.h
+* Part of : Widget Registry
+* Interface : Widget Registry API
+* Description : This file contains the header file of the CWidgetBackupRegistryXml class.
*
* This class processes persistent registry data in XML.
+* Version : %version: 7 %
*
+* Copyright © 2008 Nokia Corporation.
+* This material, including documentation and any related
+* computer programs, is protected by copyright controlled by
+* Nokia Corporation. All rights are reserved. Copying,
+* including reproducing, storing, adapting or translating, any
+* or all of this material requires the prior written consent of
+* Nokia Corporation. This material also contains confidential
+* information which may not be disclosed to others without the
+* prior written consent of Nokia Corporation.
+* ==============================================================================
*/
-
#ifndef WIDGETBACKUPREGISTRYXML_H
#define WIDGETBACKUPREGISTRYXML_H
--- a/webengine/widgetinstaller/Src/WidgetBackupRegistryXml.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/widgetinstaller/Src/WidgetBackupRegistryXml.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -1,20 +1,24 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: Processes registry persistent data in XML.
-*
-*/
+//
+// ==============================================================================
+// Name : WidgetBackupRegistryXml.cpp
+// Part of : WidgetRegistry
+// Interface :
+// Description : Processes registry persistent data in XML.
+// Version : 5.0
+//
+// Copyright © 2008 Nokia Corporation.
+// This material, including documentation and any related
+// computer programs, is protected by copyright controlled by
+// Nokia Corporation. All rights are reserved. Copying,
+// including reproducing, storing, adapting or translating, any
+// or all of this material requires the prior written consent of
+// Nokia Corporation. This material also contains confidential
+// information which may not be disclosed to others without the
+// prior written consent of Nokia Corporation.
+// ==============================================================================
+///
+// INCLUDE FILES
#include <e32base.h>
#include <f32file.h>
--- a/webengine/widgetregistry/Server/inc/WidgetRegistry.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/widgetregistry/Server/inc/WidgetRegistry.h Mon Oct 26 08:28:45 2009 +0200
@@ -24,6 +24,7 @@
#include <e32hashtab.h>
#include <apgcli.h>
#include <Browser_platform_variant.hrh>
+#include <apgnotif.h>
#include "WidgetRegistryData.h"
#include "WidgetRegistryConstants.h"
#include "WidgetPropertyValue.h"
@@ -36,7 +37,6 @@
// FORWARD DECLARATIONS
class RFs;
-class CWidgetMMCHandler;
class CWidgetEntry;
class CWidgetInstaller;
class CWidgetRegistryXml;
@@ -58,7 +58,7 @@
* @since 3.1
*/
-class CWidgetRegistry : public CBase
+class CWidgetRegistry : public CBase, public MApaAppListServObserver
{
public:
/**
@@ -200,7 +200,10 @@
* dirty flag is true only in non leave case and some change
* needs to be written out
*/
- void InternalizeL( TBool& aDirtyFlag );
+ void InternalizeL( TBool aDoConsistency,
+ TBool aIgnoreParseError,
+ TBool& aDirtyFlag,
+ TInt& aParseError );
/**
* Store widget information to a file
@@ -212,6 +215,9 @@
*/
TInt SecurityPolicyId() { return FetchSecurityPolicyIdL(); }
+ //from MApaAppListServObserver
+ void HandleAppListEvent(TInt aEvent);
+
private:
/**
@@ -361,9 +367,9 @@
// map of language code to lproj dir
RPtrHashMap<TInt,HBufC8> iLangDirList;
- CWidgetMMCHandler* iMMCHandler;
TInt iPolicyId;
CWidgetRegistryXml* iXmlProcessor;
+ CApaAppListNotifier* iApaAppListNotifier;
public:
LOG_MEMBER_VARS
};
--- a/webengine/widgetregistry/Server/src/WidgetRegistry.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/widgetregistry/Server/src/WidgetRegistry.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -30,7 +30,6 @@
#include <libxml2_parser.h>
#include <libxml2_tree.h>
#include <xmlengxestd.h>
-#include "WidgetMMCHandler.h"
#include "UidAllocator.h"
#if defined( BRDO_WRT_SECURITY_MGR_FF )
#include <RTSecManager.h>
@@ -189,9 +188,8 @@
iAppArch.Close();
delete iInstaller;
iLangDirList.ResetAndDestroy();
- delete iMMCHandler;
delete iXmlProcessor;
-
+ delete iApaAppListNotifier;
iFs.Close();
LOG_DESTRUCT;
}
@@ -220,8 +218,23 @@
// it should be detected and corrected once the resource limit
// that caused the leave is removed.
TBool dirtyFlag = EFalse;
+ TInt parseError = KErrNone;
iXmlProcessor = CWidgetRegistryXml::NewL();
- TRAP_IGNORE( InternalizeL( dirtyFlag ) );
+ // For first attempt assume usual case that things are consistent
+ // and the registry entry file can be parsed and used.
+ TRAP_IGNORE( InternalizeL( EFalse, // aDoConsistency,
+ EFalse, // aIgnoreParseError
+ dirtyFlag,
+ parseError ) );
+ if ( parseError )
+ {
+ // Special case where we need to do consistency because
+ // the widget registry entry file is corrupt.
+ TRAP_IGNORE( InternalizeL( ETrue, // aDoConsistency,
+ ETrue, // aIgnoreParseError
+ dirtyFlag,
+ parseError ) );
+ }
if ( dirtyFlag )
{
// Basically same reason to ignore leaves here.
@@ -237,9 +250,7 @@
LOG1( "ConstructL internalize done, registry count %d",
iEntries.Count() );
LOG_CLOSE;
-
- iMMCHandler = CWidgetMMCHandler::NewL( *this, iFs );
- iMMCHandler->Start();
+ iApaAppListNotifier = CApaAppListNotifier::NewL(this,CActive::EPriorityStandard);
}
// ============================================================================
@@ -496,7 +507,10 @@
// @since 3.1
// ============================================================================
//
-void CWidgetRegistry::InternalizeL( TBool& aDirtyFlag )
+void CWidgetRegistry::InternalizeL( TBool doConsistency, // in param
+ TBool aIgnoreParseError, // in param
+ TBool& aDirtyFlag, // out param
+ TInt& aParseError )// out param
{
LOG_OPEN;
LOG( "Internalize" );
@@ -520,7 +534,10 @@
CleanupClosePushL( appArchList );
CleanupClosePushL( appArchListFlags );
- TBool doConsistency = AppArchWidgets( appArchList, appArchListFlags );
+ if ( doConsistency )
+ {
+ doConsistency = AppArchWidgets( appArchList, appArchListFlags );
+ }
if ( doConsistency )
{
@@ -622,25 +639,31 @@
// that caused the leave is removed.
if ( xmlExists )
{
- TRAP_IGNORE( InternalizeXmlL( iRegistryXmlFileName,
- driveUnit,
- doConsistency,
- appArchList,
- appArchListFlags,
- installedListForDrive,
- installedListForDriveFlags,
- dirtyFlag ) );
+ TRAP( aParseError,
+ InternalizeXmlL( iRegistryXmlFileName,
+ driveUnit,
+ doConsistency,
+ appArchList,
+ appArchListFlags,
+ installedListForDrive,
+ installedListForDriveFlags,
+ dirtyFlag ) );
}
else if ( binaryExists )
{
- TRAP_IGNORE( InternalizeBinaryL( iRegistryBinaryFileName,
- driveUnit,
- doConsistency,
- appArchList,
- appArchListFlags,
- installedListForDrive,
- installedListForDriveFlags,
- dirtyFlag ) );
+ TRAP( aParseError,
+ InternalizeBinaryL( iRegistryBinaryFileName,
+ driveUnit,
+ doConsistency,
+ appArchList,
+ appArchListFlags,
+ installedListForDrive,
+ installedListForDriveFlags,
+ dirtyFlag ) );
+ }
+ if ( !aIgnoreParseError && aParseError )
+ {
+ User::Leave( aParseError );
}
if ( doConsistency )
@@ -2222,5 +2245,23 @@
LOG( "AppArchListConsistency done" );
}
-
+void CWidgetRegistry::HandleAppListEvent(TInt aEvent)
+ {
+ TBool dirtyFlag = EFalse;
+ TInt parseError = KErrNone;
+ // Assume usual case and things are consistent
+ // and the registry entry file can be parsed and used.
+ TRAPD( error, InternalizeL( EFalse,
+ EFalse,
+ dirtyFlag,
+ parseError ) );
+ if ( KErrNone == error )
+ {
+ // internalize consistency enforcement may have altered registry
+ if ( dirtyFlag )
+ {
+ TRAP_IGNORE( ExternalizeL(); );
+ }
+ }
+ }
// End of File
--- a/webengine/widgetregistry/group/WidgetRegistryServer.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/widgetregistry/group/WidgetRegistryServer.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -41,7 +41,6 @@
SOURCE WidgetRegistrySession.cpp
SOURCE WidgetRegistryServer.cpp
SOURCE UidAllocator.cpp
-SOURCE WidgetMMCHandler.cpp
USERINCLUDE ../Server/inc
USERINCLUDE ../Common/inc
--- a/webengine/wmlengine/src/fbox/src/Epoc32SelectSkin.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/wmlengine/src/fbox/src/Epoc32SelectSkin.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -720,6 +720,7 @@
}
// CAUTION: this eventually calls NW_UI_CreateCard which may remove 'skin' if onpick to intradeck card exists in content
NW_FBox_OptionBox_ChangeState( optionBox );
+ break;
}
}
}
--- a/webengine/wrtharvester/group/wrtharvester.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/wrtharvester/group/wrtharvester.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -40,6 +40,7 @@
END
START RESOURCE ../data/wrtharvester.rss
+DEPENDS avkon.rsg
HEADER
TARGET wrtharvester.rsc
TARGETPATH resource
@@ -65,5 +66,6 @@
LIBRARY cone.lib // CoeControl
LIBRARY CommonEngine.lib
LIBRARY ws32.lib
+LIBRARY PlatformEnv.lib
//end of file
--- a/webengine/wrtharvester/inc/wrtharvester.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/wrtharvester/inc/wrtharvester.h Mon Oct 26 08:28:45 2009 +0200
@@ -32,7 +32,7 @@
class MLiwInterface;
class CLiwGenericParamList;
class CWrtInfo;
-class CWidgetMMCHandler;
+class CWrtUsbHandler;
// CONSTANTS
@@ -271,7 +271,7 @@
* Publish & Subscribe listener
* own
*/
- CWidgetMMCHandler* iWidgetUsbListener;
+ CWrtUsbHandler* iWidgetUsbListener;
/**
*
--- a/webengine/wrtharvester/inc/wrtusbhandler.h Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/wrtharvester/inc/wrtusbhandler.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,21 +1,22 @@
/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* ============================================================================
+* Name : WidgetMMCHandler.h
+* Part of : Widget Registry
+* Description : Acts on MMC card insertion/removal
+* Version : 3.1
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Acts on MMC card insertion/removal
-*
+* Copyright © 2008 Nokia Corporation.
+* This material, including documentation and any related
+* computer programs, is protected by copyright controlled by
+* Nokia Corporation. All rights are reserved. Copying,
+* including reproducing, storing, adapting or translating, any
+* or all of this material requires the prior written consent of
+* Nokia Corporation. This material also contains confidential
+* information which may not be disclosed to others without the
+* prior written consent of Nokia Corporation.
+* =============================================================================
*/
-
#ifndef WIDGETMMCHANDLER_H
#define WIDGETMMCHANDLER_H
@@ -35,16 +36,18 @@
*
* @since 3.1
*/
-class CWidgetMMCHandler : public CActive
+class CWrtUsbHandler : public CActive
{
public:
- static CWidgetMMCHandler* NewL( CWrtHarvester* aHarvester, RFs& aFs );
+ static CWrtUsbHandler* NewL( CWrtHarvester* aHarvester, RFs& aFs );
- virtual ~CWidgetMMCHandler();
+ virtual ~CWrtUsbHandler();
void Start();
void ToggleUSBMode();
+ void DoScanAndUpdate();
+ void DeleteTimer();
protected:
@@ -57,11 +60,11 @@
private:
// no copy constructor
- CWidgetMMCHandler( const CWidgetMMCHandler& );
+ CWrtUsbHandler( const CWrtUsbHandler& );
// no assignment
- CWidgetMMCHandler& operator=( const CWidgetMMCHandler& );
+ CWrtUsbHandler& operator=( const CWrtUsbHandler& );
- CWidgetMMCHandler( CWrtHarvester* aHarvester, RFs& aFs );
+ CWrtUsbHandler( CWrtHarvester* aHarvester, RFs& aFs );
void ConstructL();
@@ -73,6 +76,7 @@
RFs iFs;
TInt iDriveFlags;
+ CPeriodic* iCallBackTimer;
};
--- a/webengine/wrtharvester/rom/wrtharvesterResources.iby Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/wrtharvester/rom/wrtharvesterResources.iby Mon Oct 26 08:28:45 2009 +0200
@@ -1,22 +1,22 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+* =============================================================================
+* Name : wrtharvesterResources.iby
+* Part of :
+* Description : The resource iby file contains resource that needs to be
+* localized for wrtharvester
+* Version : %version: 1 %
*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: The resource iby file contains resource that needs to be
-* localized for wrtharvester
-*
+* Copyright (c) 2009 Nokia. All rights reserved.
+* This material, including documentation and any related computer
+* programs, is protected by copyright controlled by Nokia. All
+* rights are reserved. Copying, including reproducing, storing,
+* adapting or translating, any or all of this material requires the
+* prior written consent of Nokia. This material also contains
+* confidential information which may not be disclosed to others
+* without the prior written consent of Nokia.
+* ============================================================================
*/
-
#ifndef WRTHARVESTERRESOURCES_IBY
#define WRTHARVESTERRESOURCES_IBY
--- a/webengine/wrtharvester/src/wrtharvester.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/wrtharvester/src/wrtharvester.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -224,7 +224,7 @@
iWidgetRegListener = CWrtHarvesterPSNotifier::NewL( this, EWidgetRegAltered );
User::LeaveIfError( iFs.Connect() );
- iWidgetUsbListener = CWidgetMMCHandler::NewL( this, iFs );
+ iWidgetUsbListener = CWrtUsbHandler::NewL( this, iFs );
iWidgetUsbListener->Start();
SetMSMode(0);
--- a/webengine/wrtharvester/src/wrtusbhandler.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/webengine/wrtharvester/src/wrtusbhandler.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -1,45 +1,60 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: Handle notifications of MMC events.
-*
-*
-*
-*/
+//
+// ============================================================================
+// Name : WidgetMMCHandler.cpp
+// Part of : SW Installer UIs / WidgetInstallerUI
+//
+// Description: Handle notifications of MMC events.
+//
+//
+// Version : 3.1
+//
+// Copyright © 2006 Nokia Corporation.
+// This material, including documentation and any related
+// computer programs, is protected by copyright controlled by
+// Nokia Corporation. All rights are reserved. Copying,
+// including reproducing, storing, adapting or translating, any
+// or all of this material requires the prior written consent of
+// Nokia Corporation. This material also contains confidential
+// information which may not be disclosed to others without the
+// prior written consent of Nokia Corporation.
+// ==============================================================================
+///
+// INCLUDE FILES
#include "wrtusbhandler.h"
#include "wrtharvester.h"
#include "wrtusbhandler.h"
+#include <DriveInfo.h>
// CONSTANTS
+static TInt TimerCallBack( TAny* ptr )
+{
+ CWrtUsbHandler* temp = static_cast<CWrtUsbHandler*>(ptr);
+ if(temp)
+ {
+ temp->DeleteTimer();
+ temp->DoScanAndUpdate();
+ }
+ return 0;
+}
// ============================================================================
-// CWidgetMMCHandler::NewL()
+// CWrtUsbHandler::NewL()
// two-phase constructor
//
// @since 3.1
// @param aRegistry - Widget registry for callback.
// @param aFs - file session
-// @return pointer to CWidgetMMCHandler
+// @return pointer to CWrtUsbHandler
// ============================================================================
//
-CWidgetMMCHandler* CWidgetMMCHandler::NewL(
+CWrtUsbHandler* CWrtUsbHandler::NewL(
CWrtHarvester* aHarvester,
RFs& aFs )
{
- CWidgetMMCHandler* self =
- new(ELeave) CWidgetMMCHandler( aHarvester , aFs );
+ CWrtUsbHandler* self =
+ new(ELeave) CWrtUsbHandler( aHarvester , aFs );
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop( self );
@@ -47,13 +62,13 @@
}
// ============================================================================
-// CWidgetMMCHandler::CWidgetMMCHandler()
+// CWrtUsbHandler::CWrtUsbHandler()
// C++ default constructor
//
// @since 3.1
// ============================================================================
//
-CWidgetMMCHandler::CWidgetMMCHandler( CWrtHarvester* aHarvester,
+CWrtUsbHandler::CWrtUsbHandler( CWrtHarvester* aHarvester,
RFs& aFs )
: CActive( CActive::EPriorityUserInput ),
iHarvester( aHarvester ),
@@ -64,159 +79,139 @@
}
// ============================================================================
-// CWidgetMMCHandler::ConstructL()
+// CWrtUsbHandler::ConstructL()
// Symbian default constructor
//
// @since 3.1
// ============================================================================
//
-void CWidgetMMCHandler::ConstructL()
+void CWrtUsbHandler::ConstructL()
{
if ( KErrNone != ScanDrives( iDriveFlags ) )
{
iDriveFlags = 0;
- }
- RDebug::Print(_L("iDriveFlags ConstructL() : %x %d"), iDriveFlags,iDriveFlags);
+ }
}
// ============================================================================
-// CWidgetMMCHandler::~CWidgetMMCHandler()
+// CWrtUsbHandler::~CWrtUsbHandler()
// destructor
//
// @since 3.1
// ============================================================================
-CWidgetMMCHandler::~CWidgetMMCHandler()
+CWrtUsbHandler::~CWrtUsbHandler()
{
Cancel();
-
}
// ============================================================================
-// CWidgetMMCHandler::Start()
+// CWrtUsbHandler::Start()
// Start monitoring.
//
// @since 5.0
// ============================================================================
-void CWidgetMMCHandler::Start()
+void CWrtUsbHandler::Start()
{
iFs.NotifyChange( ENotifyDisk, iStatus );
SetActive();
}
// ============================================================================
-// CWidgetMMCHandler::RunL()
+// CWrtUsbHandler::RunL()
// Handle notifications of MMC events.
//
// @since 3.1
// ============================================================================
-void CWidgetMMCHandler::RunL()
+void CWrtUsbHandler::RunL()
{
if ( iStatus == KErrNone )
- {
- TInt driveFlags = 0;
- TInt deltaDriveFlags = 0;
-
+ {
+ //Call back Timer
+ iCallBackTimer = CPeriodic::NewL(CActive::EPriorityLow);
+ iCallBackTimer->Start(10000000,0,TCallBack(&TimerCallBack,this));
+ }
+ }
- User::After( 10000000 );
-
- if ( KErrNone == ScanDrives( driveFlags ) )
- {
- deltaDriveFlags = iDriveFlags ^ driveFlags;
-
- iDriveFlags = driveFlags;
- }
-
- if ( deltaDriveFlags )
- {
- //Unpluging USB from Mass storage . . .
- if(iHarvester->IsInMSMode() == 1)
- {
- iHarvester->SetMSMode(0);
- iHarvester->ClearAllOperations();
- iHarvester->UpdateL();
-
- iFs.NotifyChange( ENotifyDisk, iStatus );
- SetActive();
- return;
+void CWrtUsbHandler::DoScanAndUpdate()
+ {
+ TInt err = 0;
+ TInt driveFlags = 0;
+ TInt deltaDriveFlags = 0;
+ if ( KErrNone == ScanDrives( driveFlags ) )
+ {
+ deltaDriveFlags = iDriveFlags ^ driveFlags;
+ iDriveFlags = driveFlags;
+ }
+
+ if ( deltaDriveFlags )
+ {
+ //Unpluging USB from Mass storage . . .
+ if(iHarvester->IsInMSMode() == 1)
+ {
+ iHarvester->SetMSMode(0);
+ iHarvester->ClearAllOperations();
+ TRAP(err, iHarvester->UpdateL() );
+ iFs.NotifyChange( ENotifyDisk, iStatus );
+ SetActive();
+ return;
}
- TVolumeInfo volInfo;
- TInt temp = deltaDriveFlags;
- TBool massMemAltered = EFalse;
- TBool mmcAltered = EFalse;
- for(TInt DriveNo = EDriveA+1 ; DriveNo<=EDriveY; DriveNo++ )
- {
-
+ TVolumeInfo volInfo;
+ TInt temp = deltaDriveFlags;
+ TBool massMemAltered = EFalse;
+ for(TInt DriveNo = EDriveA+1 ; DriveNo<=EDriveY; DriveNo++ )
+ {
temp = temp >> 1;
if( temp & 01)
- {
- switch (DriveNo)
- {
- case EDriveE :
- {
- massMemAltered = ETrue;
- break;
- }
- case EDriveF:
- {
-
- mmcAltered = ETrue;
- break;
- }
-
- }
- }
-
+ {
+ TUint status(0);
+ err = DriveInfo::GetDriveStatus( iFs, DriveNo , status );
+ if(!err && (status & DriveInfo::EDriveExternallyMountable) && (status & DriveInfo::EDriveInternal ))
+ {
+ //Internal Memory
+ massMemAltered = ETrue;
+ }
+ }
}
-
- if( !massMemAltered && mmcAltered)
- {
- iHarvester->UpdateL();
- }
- else if( massMemAltered )
- {
- iHarvester->SetMSMode(1);
- iHarvester->UpdateL();
- }
-
+ if( massMemAltered )
+ {
+ iHarvester->SetMSMode(1);
+ }
+
+ TRAP( err, iHarvester->UpdateL() );
}
- }
-
-
iFs.NotifyChange( ENotifyDisk, iStatus );
SetActive();
}
+
// ============================================================================
-// CWidgetMMCHandler::RunError()
+// CWrtUsbHandler::RunError()
// Ignore errors from RunL.
//
// @since 5.0
// ============================================================================
-TInt CWidgetMMCHandler::RunError( TInt /* aError */ )
+TInt CWrtUsbHandler::RunError( TInt /* aError */ )
{
-
return KErrNone; // indicates error was handled
}
// ============================================================================
-// CWidgetMMCHandler::DoCancel()
+// CWrtUsbHandler::DoCancel()
// Cancel the MMC event handler
//
// @since 3.1
// ============================================================================
-void CWidgetMMCHandler::DoCancel()
+void CWrtUsbHandler::DoCancel()
{
-
iFs.NotifyChangeCancel();
}
/* Scans drives and records a bit flag for those that exist and are
* suitable for installing widgets to.
*/
-TInt CWidgetMMCHandler::ScanDrives( TInt& aDriveFlags )
+TInt CWrtUsbHandler::ScanDrives( TInt& aDriveFlags )
{
-
// List all drives in the system
TDriveList driveList;
TInt error = iFs.DriveList( driveList );
@@ -259,3 +254,9 @@
return error;
}
+void CWrtUsbHandler::DeleteTimer()
+ {
+ iCallBackTimer->Cancel();
+ delete iCallBackTimer;
+ iCallBackTimer = NULL;
+ }
--- a/widgets/widgetapp/group/WidgetUi.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/widgets/widgetapp/group/WidgetUi.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -37,6 +37,7 @@
// RESOURCE INFO
START RESOURCE ../Data/WidgetUi.rss
+DEPENDS avkon.rsg
HEADER
TARGETPATH APP_RESOURCE_DIR
#ifdef __S60_32__
@@ -64,6 +65,7 @@
#ifdef BRDO_WRT_HS_FF
SOURCE cpspublisher.cpp
#endif
+
START RESOURCE ../Data/WidgetUi_reg.rss
DEPENDS widgetui.rsg
// Do not change the UID below.
--- a/widgets/widgetapp/inc/WidgetUiNetworkListener.h Thu Sep 24 12:53:48 2009 +0300
+++ b/widgets/widgetapp/inc/WidgetUiNetworkListener.h Mon Oct 26 08:28:45 2009 +0200
@@ -1,20 +1,22 @@
-/*
-* Copyright (c) 2008, 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:
-*
-*/
-
+//
+//==============================================================================
+// Name : WidgetUiNetworkListener.h
+// Part of : WidgetUI
+// Interface :
+// Description :
+// Version : %version: 5 %
+//
+// Copyright 2008, 2009 Nokia Corporation.
+// This material, including documentation and any related
+// computer programs, is protected by copyright controlled by
+// Nokia Corporation. All rights are reserved. Copying,
+// including reproducing, storing, adapting or translating, any
+// or all of this material requires the prior written consent of
+// Nokia Corporation. This material also contains confidential
+// information which may not be disclosed to others without the
+// prior written consent of Nokia Corporation.
+//==============================================================================
+//
#ifndef WIDGETUINETWORKLISTENER_H_
#define WIDGETUINETWORKLISTENER_H_
--- a/widgets/widgetapp/inc/WidgetUiWindowManager.h Thu Sep 24 12:53:48 2009 +0300
+++ b/widgets/widgetapp/inc/WidgetUiWindowManager.h Mon Oct 26 08:28:45 2009 +0200
@@ -382,6 +382,8 @@
*/
void NotifyConnecionChange(TBool aConn);
TBrCtlDefs::TCursorSettings CursorShowMode() {return iWidgetCursorMode;}
+
+ TBrCtlDefs::TEnterKeySettings EnterKeyMode() {return iWidgetEnterKeyMode;}
/**
* AnyWidgetOnHs
@@ -423,7 +425,13 @@
*/
void SetLastWidgetRestartTime(TTime aStartTime){iTimeLastWidgetOpen = aStartTime;}
#endif // OOM_WIDGET_CLOSEALL
-
+ /**
+ * CloseAllWidgets
+ * Basic pre-exit routine to make sure all widgets are closed out
+ * @param none
+ * @return none
+ */
+ void CloseAllWidgets();
protected:
/**
@@ -566,6 +574,8 @@
TNetworkMode iNetworkMode; // unknown mode = 0, online mode = 1, offline mode = 2
TBool iNetworkConnected; // ETrue if there is an active network connection, else EFalse
TBrCtlDefs::TCursorSettings iWidgetCursorMode;
+ TBrCtlDefs::TEnterKeySettings iWidgetEnterKeyMode;
+
#ifdef BRDO_WRT_HS_FF
CCpsPublisher* iCpsPublisher; // Owned, interface to publish bitmap to CPS
#endif
--- a/widgets/widgetapp/src/WidgetUiAppUi.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/widgets/widgetapp/src/WidgetUiAppUi.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -166,6 +166,7 @@
{
case EEikCmdExit:
{
+ iWindowManager->CloseAllWidgets();
Exit();
break;
}
--- a/widgets/widgetapp/src/WidgetUiNetworkListener.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/widgets/widgetapp/src/WidgetUiNetworkListener.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -1,20 +1,22 @@
-/*
-* Copyright (c) 2008, 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:
-*
-*/
-
+//
+//==============================================================================
+// Name : WidgetUiNetworkListener.cpp
+// Part of : WidgetUI
+// Interface :
+// Description :
+// Version : %version: 5 %
+//
+// Copyright 2008, 2009 Nokia Corporation.
+// This material, including documentation and any related
+// computer programs, is protected by copyright controlled by
+// Nokia Corporation. All rights are reserved. Copying,
+// including reproducing, storing, adapting or translating, any
+// or all of this material requires the prior written consent of
+// Nokia Corporation. This material also contains confidential
+// information which may not be disclosed to others without the
+// prior written consent of Nokia Corporation.
+//==============================================================================
+//
#include "WidgetUiNetworkListener.h"
--- a/widgets/widgetapp/src/WidgetUiWindow.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/widgets/widgetapp/src/WidgetUiWindow.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -11,7 +11,7 @@
*
* Contributors:
*
-* Description:
+* Description:
*
*/
@@ -121,7 +121,7 @@
iWidgetUiObserver = CWidgetUiObserver::NewL( *this );
iWidgetUiDialogsProviderProxy = CWidgetUiDialogsProviderProxy::NewL(*(iWindowManager.DialogsProvider()), NULL, *this);
-
+
#ifdef BRDO_WRT_HS_FF
iNetworkModeWait = new(ELeave) CActiveSchedulerWait();
#endif
@@ -157,6 +157,7 @@
iWidgetUiObserver /* download observer */);
//Set the cursor mode inside Widget
iEngine->SetBrowserSettingL(TBrCtlDefs::ESettingsCursorShowMode, iWindowManager.CursorShowMode());
+ iEngine->SetBrowserSettingL(TBrCtlDefs::ESettingsEnterKeyMode, iWindowManager.EnterKeyMode());
iEngine->AddLoadEventObserverL( iWidgetUiObserver );
iEngine->AddStateChangeObserverL( view );
@@ -190,9 +191,9 @@
{
SetWindowStateMiniViewL( EMiniViewNotEnabled );
}
-
+
iDlId = 0;
-
+
// determine initial widget online/offline network state
DetermineNetworkState();
}
@@ -273,7 +274,7 @@
{
switch(widgetMiniViewState)
- {
+ {
case 0: iWidgetWindowState.miniViewState = EMiniViewNotEnabled;
break;
case 1: iWidgetWindowState.miniViewState = EMiniViewEnabled;
@@ -530,7 +531,7 @@
Engine()->MakeVisible(EFalse);// hide the active widget
}
if ( !aCurrent && (EPublishStart != WidgetMiniViewState()) )
- {
+ {
iWidgetExtension->HandleCommandL ( (TInt)TBrCtlDefs::ECommandAppBackground + (TInt)TBrCtlDefs::ECommandIdBase );
if( iWindowManager.AnyWidgetOnHs() )
{
@@ -630,7 +631,7 @@
{
iMiniviewBitmap = new CFbsBitmap();
}
-
+
if ( iMiniviewBitmap && iCpsPublisher)
{
TRAP_IGNORE(
@@ -668,15 +669,16 @@
TBool CWidgetUiWindow::CheckNetworkAccessL()
{
// if widgets in offline mode, deny network access
- if (iWindowManager.GetNetworkMode() == EOfflineMode)
+ if (iWindowManager.GetNetworkMode() == EOfflineMode && !( EMiniViewEnabled == WidgetMiniViewState() ||
+ EMiniViewNotEnabled == WidgetMiniViewState() ))
{
- // if widget is in full view, offer user the option to go to online mode
+ // if widget is in full view, offer user the option to go to online mode.The widget should be in HS else dont ask HS for prompt.
#ifdef BRDO_WRT_HS_FF
if ( WidgetFullViewState() && WidgetMiniViewState() != EPublishStart )
{
iCpsPublisher->NetworkConnectionAllowedL();
+ iNetworkModeWait->Start();
}
- iNetworkModeWait->Start();
#endif
if (iWindowManager.GetNetworkMode() == EOfflineMode)
{
@@ -684,18 +686,18 @@
User::Leave( KErrAccessDenied );
}
}
-
+
// begin info.plist (declare EAllowNetworkAccess or EAllowFullAccess ?)
RWidgetRegistryClientSession& widgetRegistry
= iWindowManager.WidgetUIClientSession();
- CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL(iUid, EAllowNetworkAccess );
+ CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL(iUid, EAllowNetworkAccess );
TInt networkAccess = *propValue;
delete propValue;
propValue = widgetRegistry.GetWidgetPropertyValueL(iUid, EAllowFullAccess );
TInt fullAccess = *propValue;
delete propValue;
-
+
if ( !( networkAccess || fullAccess ) )
{
SetNetworkAccessGrant( EDeny );
@@ -733,7 +735,7 @@
}
delete rep;
}
-
+
if ( prompt )
{
CBrowserDialogsProvider* dialogProvider
@@ -746,7 +748,7 @@
CleanupStack::PopAndDestroy( 3 );
// save prompt result for session
SetNetworkAccessGrant( grant? EAllow : EDeny );
-
+
CheckUserPermissionChanged( grant );
}
else
@@ -779,7 +781,7 @@
// 2.1. deal with access point settings
TInt ask( 1 );
TInt wmlId( KWmlNoDefaultAccessPoint );
- TInt snapId( KWmlNoDefaultSnapId );
+ TInt snapId( KWmlNoDefaultSnapId );
CRepository* rep( NULL );
TRAPD( cenrepError, rep = CRepository::NewL( KCRUidBrowser ) );
if ( KErrNone == cenrepError )
@@ -789,12 +791,12 @@
(void)rep->Get( KBrowserNGDefaultSnapId, snapId );
}
delete rep;
- if ( ask == EBrowserCenRepApSelModeDestination &&
- ( snapId != KWmlNoDefaultSnapId) )
- {
- iWindowManager.GetConnection()->SetRequestedSnap( snapId );
- iWindowManager.GetConnection()->SetConnectionType( CMManager::EDestination );
- }
+ if ( ask == EBrowserCenRepApSelModeDestination &&
+ ( snapId != KWmlNoDefaultSnapId) )
+ {
+ iWindowManager.GetConnection()->SetRequestedSnap( snapId );
+ iWindowManager.GetConnection()->SetConnectionType( CMManager::EDestination );
+ }
if ( !ask && (KWmlNoDefaultAccessPoint != wmlId) )
{
@@ -840,7 +842,7 @@
// kicks in and sets a EDeny.
User::Leave( connFailure );
}
- *aNewConn = ETrue;
+ *aNewConn = ETrue;
}
}
@@ -933,7 +935,7 @@
aTypeArray,
aDesArray,
paramFound );
-
+
HBufC8* contentType8 = 0;
if ( !paramFound )
{
@@ -945,7 +947,7 @@
// 16 bit buffer copied into 8 bit buffer.
contentType8->Des().Copy( contentType );
}
-
+
//Get the download Id of the transaction.
//Because, resource loader will not delete the download
//So after handling the download, it will be cleared.
@@ -954,16 +956,16 @@
aTypeArray,
aDesArray,
paramFound );
-
+
TLex lex(dlId);
- User::LeaveIfError(lex.Val(iDlId));
-
+ User::LeaveIfError(lex.Val(iDlId));
+
TDataType dataType( *contentType8 );
CAiwGenericParamList* genericParamList =
BrCtlParamList2GenericParamListL( aTypeArray, aDesArray );
CleanupStack::PushL( genericParamList );
RFile tempFile;
-
+
iWindowManager.DocHandler().SetExitObserver(this);
iWindowManager.DocHandler().OpenTempFileL( fileName, tempFile );
CleanupClosePushL( tempFile );
@@ -1120,10 +1122,10 @@
TNetworkState currNetState;
RWidgetRegistryClientSession& widgetRegistry = iWindowManager.WidgetUIClientSession();
TInt inMiniView = widgetRegistry.IsWidgetInMiniView( iUid);
- CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL( iUid, EAllowNetworkAccess );
+ CWidgetPropertyValue* propValue = widgetRegistry.GetWidgetPropertyValueL( iUid, EAllowNetworkAccess );
TInt netAccessWdgtProp = *propValue; // AllowNetworkAccess in the info.plist file
-
- if ( netAccessWdgtProp && ((inMiniView && (iWindowManager.GetNetworkMode() == (TInt)EOnlineMode))
+
+ if ( netAccessWdgtProp && ((inMiniView && (iWindowManager.GetNetworkMode() == (TInt)EOnlineMode))
|| (!inMiniView && iUserPermission)) )
{
if ( iWindowManager.GetNetworkConn() )
@@ -1139,7 +1141,7 @@
{
currNetState = ENetworkNotAllowed;
}
-
+
if ( iNetworkState != currNetState )
{
iNetworkState = currNetState;
@@ -1173,7 +1175,7 @@
//Check if the container rect needs change and then call setRect
if(clientRect != iWindowManager.View()->Container()->Rect())
iWindowManager.View()->Container()->SetRect(clientRect);
-
+
if (!aTextBoxUpdate)
{
// status pane always off unless in text box
--- a/widgets/widgetapp/src/WidgetUiWindowManager.cpp Thu Sep 24 12:53:48 2009 +0300
+++ b/widgets/widgetapp/src/WidgetUiWindowManager.cpp Mon Oct 26 08:28:45 2009 +0200
@@ -146,6 +146,8 @@
{
TInt strictMode;
TInt cursorMode = -1;
+ TInt enterKeyMode = -1;
+
if (cenRep->Get( KWidgetInstallerStrictMode, strictMode ) == KErrNone)
{
iStrictMode = strictMode;
@@ -154,6 +156,12 @@
{
iWidgetCursorMode = (TBrCtlDefs::TCursorSettings) cursorMode;
}
+
+ if (cenRep->Get( KWidgetEnterKeyMode, enterKeyMode ) == KErrNone)
+ {
+ iWidgetEnterKeyMode = (TBrCtlDefs::TEnterKeySettings) enterKeyMode;
+ }
+
delete cenRep;
}
@@ -1286,6 +1294,16 @@
}
#endif //OOM_WIDGET_CLOSEALL
+void CWidgetUiWindowManager::CloseAllWidgets()
+ {
+ TInt nWidgetsCount = iWindowList.Count();
+ for ( TInt i = (nWidgetsCount-1); i >= 0; i-- )
+ {
+ CWidgetUiWindow* window = iWindowList[i];
+ delete window;
+ }
+ iWindowList.Reset();
+ }
void CWidgetUiWindowManager::SendAppToBackground()
{
Binary file widgets/widgetinstaller/conf/widgetinstaller.confml has changed
Binary file widgets/widgetinstaller/conf/widgetinstaller_1028281F.crml has changed
--- a/widgets/widgetinstaller/group/WidgetInstallerUI.mmp Thu Sep 24 12:53:48 2009 +0300
+++ b/widgets/widgetinstaller/group/WidgetInstallerUI.mmp Mon Oct 26 08:28:45 2009 +0200
@@ -37,6 +37,7 @@
END
START RESOURCE ../data/WidgetInstallerUI.rss
+DEPENDS avkon.rsg
DEPENDS swinstcommonui.rsg
HEADER
TARGETPATH Resource
--- a/widgets/widgetinstaller/inc/WidgetInstallerInternalCRKeys.h Thu Sep 24 12:53:48 2009 +0300
+++ b/widgets/widgetinstaller/inc/WidgetInstallerInternalCRKeys.h Mon Oct 26 08:28:45 2009 +0200
@@ -40,4 +40,9 @@
// The setting to define the cursor show mode inside widgets
// Valid values: 0 = not showing the cursor, 1 = cursor shown
const TUint32 KWidgetCursorShowMode = 0x00000005;
+
+// Controls whether enter key can activate a link or just has a default behavior.
+const TUint32 KWidgetEnterKeyMode = 0x00000006;
+
+
#endif