Revision: 201031
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 18 Aug 2010 09:37:05 +0300
changeset 10 232fbd5a2dcb
parent 6 1c3b8676e58c
child 13 491a1d15372f
Revision: 201031 Kit: 201033
browsercore/appfw/Api/Bookmarks/Bookmarks.pri
browsercore/appfw/Api/Bookmarks/HtmlTxtParser.cpp
browsercore/appfw/Api/Common/UiUtil.cpp
browsercore/appfw/Api/Common/wrtBrowserUtils.cpp
browsercore/appfw/Api/Common/wrtBrowserUtils.h
browsercore/appfw/Api/Dialogs/WebDialogProvider.h
browsercore/appfw/Api/Managers/BookmarksManager.cpp
browsercore/appfw/Api/Managers/BookmarksManager.h
browsercore/appfw/Api/Managers/BookmarksManager_p.h
browsercore/appfw/Api/Managers/webpagecontroller.cpp
browsercore/appfw/Api/Managers/webpagecontroller.h
browsercore/appfw/Api/Views/mostvisitedpagestore.cpp
browsercore/core/core.pri
browsercore/core/core.pro
browsercore/core/network/SchemeHandlerBr.cpp
browsercore/core/network/WebNetworkConnectionManager.cpp
browsercore/core/network/WebNetworkConnectionManager.h
browsercore/core/network/WebNetworkSession.cpp
browsercore/core/network/WebNetworkSession.h
browsercore/core/network/networkdiskcache.cpp
browsercore/core/network/networkdiskcache.h
browsercore/core/network/networkdiskcache_p.h
browsercore/core/network/networkerrorreply.cpp
browsercore/core/network/webnetworkaccessmanager.cpp
browsercore/core/network/webnetworkaccessmanager.h
browserui.pri
ginebra2/Application.cpp
ginebra2/Application.h
ginebra2/Charms/ExternalEventCharm.cpp
ginebra2/Charms/ExternalEventCharm.h
ginebra2/Charms/ObjectCharm.cpp
ginebra2/Charms/ObjectCharm.h
ginebra2/ChromeView.cpp
ginebra2/ChromeView.h
ginebra2/ChromeWidget.cpp
ginebra2/ChromeWidget.h
ginebra2/ContentViews/GWebContentView.cpp
ginebra2/ContentViews/GWebContentView.h
ginebra2/ContentViews/GWebContentViewJSObject.h
ginebra2/ContentViews/GWebContentViewWidget.cpp
ginebra2/ContentViews/ScrollableWebContentView.cpp
ginebra2/ContentViews/ScrollableWebContentView.h
ginebra2/ContentViews/WebContentViewWidget.cpp
ginebra2/ContentViews/WebContentViewWidget.h
ginebra2/EditorSnippet.cpp
ginebra2/EditorWidget.cpp
ginebra2/EditorWidget.h
ginebra2/GGraphicsWebView.cpp
ginebra2/Gestures/GestureEvent.cpp
ginebra2/Gestures/GestureEvent.h
ginebra2/Gestures/GestureListener.h
ginebra2/Gestures/GestureRecognizer.cpp
ginebra2/Gestures/GestureRecognizer.h
ginebra2/Gestures/GestureRecognizer_p.h
ginebra2/Kinetics/KineticScrollable.h
ginebra2/Kinetics/KineticScroller.cpp
ginebra2/Kinetics/KineticScroller.h
ginebra2/LocaleDelegate.cpp
ginebra2/UrlSearchSnippet.cpp
ginebra2/WebChromeItem.h
ginebra2/chrome/bedrockchrome/bookmarkview.superpage/bookmarkview.js
ginebra2/chrome/bedrockchrome/chrome.html
ginebra2/chrome/bedrockchrome/chrome.js
ginebra2/chrome/bedrockchrome/contextmenu.snippet/ViewContextMenu.js
ginebra2/chrome/bedrockchrome/settingsview.superpage/LegalNotice.html
ginebra2/chrome/bedrockchrome/urlsearch.snippet/icons/com.svg
ginebra2/chrome/js/LongPress.js
ginebra2/emulator/FileService.cpp
ginebra2/emulator/FileService.h
ginebra2/emulator/browser.cpp
ginebra2/emulator/browser.h
ginebra2/emulator/main.cpp
ginebra2/ginebra2.pro
ginebra2/ginebra2.qrc
ginebra2/linearflowsnippet.cpp
ginebra2/mostvisitedpageview.cpp
ginebra2/mostvisitedpageview.h
ginebra2/service_conf.xml
ginebra2/sym_iap_util.h
ginebra2/translations/Browser.xls
ginebra2/translations/browserLoc.ts
rom/browser.iby
--- a/browsercore/appfw/Api/Bookmarks/Bookmarks.pri	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Bookmarks/Bookmarks.pri	Wed Aug 18 09:37:05 2010 +0300
@@ -20,16 +20,18 @@
 
 HEADERS += \
     $$PWD/bookmarks.h \
-    $$PWD/UnicodeFile.h \
     $$PWD/xbel.h
 
 SOURCES += \
     $$PWD/bookmarks.cpp \
-    $$PWD/HtmlTxtParser.cpp \
-    $$PWD/UnicodeFile.cpp \  
-    $$PWD/BookmarkDumpMain.cpp \  
     $$PWD/xbel.cpp
 
-symbian: {   
-LIBS +=  -lFavouritesEngine  
-}
\ No newline at end of file
+CONFIG (maemo) {
+    HEADERS += \
+        $$PWD/UnicodeFile.h
+
+    SOURCES += \
+        $$PWD/HtmlTxtParser.cpp \
+        $$PWD/UnicodeFile.cpp \  
+        $$PWD/BookmarkDumpMain.cpp
+}
--- a/browsercore/appfw/Api/Bookmarks/HtmlTxtParser.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Bookmarks/HtmlTxtParser.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -172,7 +172,7 @@
           out << "<title>" << title << "</title>\n";
       }
       else if (line.contains("</DL>", Qt::CaseInsensitive)){ // End of Folder
-          if (folderStarted == true);
+          if (folderStarted == true)
             out << "</folder>  \n";
           folderStarted = false;
       }
@@ -192,7 +192,6 @@
   bool res = file.open(QIODevice::ReadOnly | QIODevice::Text);
   QTextStream rs( &file );
   QString line, line2, url, title;
-  bool folderStarted = false;
 
   if(!res)
       return -1;
--- a/browsercore/appfw/Api/Common/UiUtil.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Common/UiUtil.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -41,6 +41,8 @@
 	QUrl url(QLatin1String(GOOGLE_SEARCH_ENGINE) + urlStr, QUrl::TolerantMode);
     if(url.isValid())
 		return url;
+    else
+        return QUrl();
 }
 
 QUrl UiUtil::guessUrlFromString(const QString &string)
--- a/browsercore/appfw/Api/Common/wrtBrowserUtils.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Common/wrtBrowserUtils.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -19,85 +19,74 @@
 *
 */
 
+#include <QWebHitTestResult>
 #include "wrtBrowserUtils.h"
 
-
-wrtBrowserUtils::wrtBrowserUtils()
-{
-}
-
-wrtBrowserUtils::~wrtBrowserUtils()
-{
-}
-wrtBrowserDefs::BrowserElementType wrtBrowserUtils::ElementType(QWebElement* node)
-{
-	if( !node || node->isNull())
-        return wrtBrowserDefs::EElementNone;
-
-    wrtBrowserDefs::BrowserElementType elType(wrtBrowserDefs::EElementNone);
-   
-    // get the right element type
-	if ( !node->tagName().compare(LINK_TAG,Qt::CaseInsensitive) ){
-        elType = wrtBrowserDefs::EElementAnchor;
-    }
-	if ( !node->tagName().compare(INPUT_TAG,Qt::CaseInsensitive) ){
-        elType = wrtBrowserDefs::EElementInputBox;
-    }
-	else if ( !node->tagName().compare(A_TAG,Qt::CaseInsensitive) ){
-		elType = wrtBrowserDefs::EElementAnchor;        
-        QString href = node->attribute( HREF_ATTR );
-		if( !node->tagName().compare(AREA_TAG,Qt::CaseInsensitive) ){
-			elType = wrtBrowserDefs::EElementAreaBox;                        
-        }
-    }
-	if (!node->tagName().compare(TEXT_AREA_TAG,Qt::CaseInsensitive))
-        elType = wrtBrowserDefs::EElementTextAreaBox;  
-	if (!node->tagName().compare(SELECT_TAG,Qt::CaseInsensitive))
-        elType = wrtBrowserDefs::EElementSelectBox;  
-	if (!node->tagName().compare(BUTTON_TAG,Qt::CaseInsensitive))
-        elType = wrtBrowserDefs::EElementButton; 
-	if (!node->tagName().compare(FORM_TAG,Qt::CaseInsensitive))
-        elType = wrtBrowserDefs::EElementForm;  
-	if (!node->tagName().compare(LI_TAG,Qt::CaseInsensitive)||!node->tagName().compare(OL_TAG,Qt::CaseInsensitive)||!node->tagName().compare(DL_TAG,Qt::CaseInsensitive))
-        elType = wrtBrowserDefs::EElementListBox;  
-	else if( !node->tagName().compare(OBJECT_TAG,Qt::CaseInsensitive) || !node->tagName().compare(EMBED_TAG,Qt::CaseInsensitive) ){
-		elType = wrtBrowserDefs::EElementObjectBox;        
-    }
-    return elType;
-}
+static const QString s_LinkTag = "link";
+static const QString s_InputTag = "input";
+static const QString s_ATag = "a";
+static const QString s_HrefTag = "href";
+static const QString s_AreaTag = "area";
+static const QString s_TextAreaTag = "textarea";
+static const QString s_ButtonTag = "button";
+static const QString s_ObjectTag = "object";
+static const QString s_EmbedTag = "embed";
+static const QString s_ImgTag = "img";
+static const QString s_SelectTag = "select";
+static const QString s_LiTag = "li";
+static const QString s_OlTag = "ol";
+static const QString s_DlTag = "dl";
+static const QString s_FormTag = "form";
+static const QString s_HtmlTag = "html";
 
 wrtBrowserDefs::BrowserElementType wrtBrowserUtils::getTypeFromElement(QWebHitTestResult htRes) 
 {
-	QWebElement* node = &htRes.element();
+	QWebElement node = htRes.element();
 	wrtBrowserDefs::BrowserElementType elType = wrtBrowserDefs::EElementNone;
-	if(node){
-		
-			if(node->localName() == HTML_TAG){
-				elType = wrtBrowserDefs::EElementNone;
-			}
-			else if(node->tagName().isEmpty()){
-				//check whether hit test returns a navigatable element				
-				if(!htRes.linkElement().isNull()){
-					elType = wrtBrowserDefs::EElementAnchor;
-				}
-			}
-			else if (!node->tagName().compare(AREA_TAG,Qt::CaseInsensitive)){
-				if(!node->attribute(HREF_ATTR).isNull()){
-                        elType = wrtBrowserDefs::EElementAreaBox;
-                    }
-				else{
-                        elType = wrtBrowserDefs::EElementAnchor;
-				}
-            }
-			else if (!node->tagName().compare(IMAGE_TAG,Qt::CaseInsensitive)){
-				 elType = wrtBrowserDefs::EElementImageBox;
-				 if(!htRes.linkElement().isNull()){
-				        elType = wrtBrowserDefs::EElementAnchor;
-				 }
-             }
-			 else{
-				 elType = ElementType(node);
-             }
-	}
+
+    if (node.isNull())
+        return wrtBrowserDefs::EElementNone;
+
+    if (node.localName().compare(s_HtmlTag, Qt::CaseInsensitive)) {
+        elType = wrtBrowserDefs::EElementNone;
+    } else if (node.tagName().isEmpty()) {
+        // check whether hit test returns a navigatable element				
+        if(!htRes.linkElement().isNull()) {
+            elType = wrtBrowserDefs::EElementAnchor;
+        }
+    } else if (!node.tagName().compare(s_AreaTag, Qt::CaseInsensitive)) {
+        if(!node.attribute(s_HrefTag).isNull()) {
+            elType = wrtBrowserDefs::EElementAreaBox;
+        } else {
+            elType = wrtBrowserDefs::EElementAnchor;
+        }
+    } else if (!node.tagName().compare(s_ImgTag, Qt::CaseInsensitive)) {
+        elType = wrtBrowserDefs::EElementImageBox;
+        if(!htRes.linkElement().isNull()) {
+            elType = wrtBrowserDefs::EElementAnchor;
+        }
+    } else if (!node.tagName().compare(s_LinkTag, Qt::CaseInsensitive)) {
+        elType = wrtBrowserDefs::EElementAnchor;
+	} else if (!node.tagName().compare(s_InputTag, Qt::CaseInsensitive)) {
+        elType = wrtBrowserDefs::EElementInputBox;
+    } else if (!node.tagName().compare(s_ATag, Qt::CaseInsensitive)) {
+		elType = wrtBrowserDefs::EElementAnchor;        
+    } else if (!node.tagName().compare(s_TextAreaTag, Qt::CaseInsensitive)) {
+        elType = wrtBrowserDefs::EElementTextAreaBox;  
+	} else if (!node.tagName().compare(s_SelectTag, Qt::CaseInsensitive)) {
+        elType = wrtBrowserDefs::EElementSelectBox;  
+	} else if (!node.tagName().compare(s_ButtonTag, Qt::CaseInsensitive)) {
+        elType = wrtBrowserDefs::EElementButton; 
+	} else if (!node.tagName().compare(s_FormTag, Qt::CaseInsensitive)) {
+        elType = wrtBrowserDefs::EElementForm;  
+	} else if (!node.tagName().compare(s_LiTag, Qt::CaseInsensitive) ||
+	           !node.tagName().compare(s_OlTag, Qt::CaseInsensitive) ||
+	           !node.tagName().compare(s_DlTag, Qt::CaseInsensitive)) {
+        elType = wrtBrowserDefs::EElementListBox;
+	} else if( !node.tagName().compare(s_ObjectTag, Qt::CaseInsensitive) ||
+	           !node.tagName().compare(s_EmbedTag, Qt::CaseInsensitive)) {
+		elType = wrtBrowserDefs::EElementObjectBox;        
+    }
+
 	return elType;
 }
--- a/browsercore/appfw/Api/Common/wrtBrowserUtils.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Common/wrtBrowserUtils.h	Wed Aug 18 09:37:05 2010 +0300
@@ -23,35 +23,13 @@
 #define __wrtBrowserUtils_H__
 
 #include <QWebElement>
-#include <QWebFrame>
 #include "wrtBrowserDefs.h"
 #include "brtglobal.h"
 
-#define LINK_TAG      "link"
-#define INPUT_TAG     "input"
-#define A_TAG         "a"
-#define HREF_ATTR     "href"
-#define AREA_TAG      "area"
-#define TEXT_AREA_TAG "textarea"
-#define BUTTON_TAG    "button"
-#define OBJECT_TAG    "object"
-#define EMBED_TAG     "embed"
-#define IMAGE_TAG     "img"
-#define SELECT_TAG    "select"
-#define LI_TAG        "li"
-#define OL_TAG        "ol"
-#define DL_TAG        "dl"
-#define FORM_TAG      "form"
-#define HTML_TAG      "html"
-
 class WRT_BROWSER_EXPORT wrtBrowserUtils
 {
 public:
-	wrtBrowserUtils();
-	~wrtBrowserUtils();
 	static wrtBrowserDefs::BrowserElementType getTypeFromElement(QWebHitTestResult htRes);
-private:
-	static wrtBrowserDefs::BrowserElementType ElementType(QWebElement* node);
 };
 
-#endif //__wrtBrowserUtils_H__
\ No newline at end of file
+#endif //__wrtBrowserUtils_H__
--- a/browsercore/appfw/Api/Dialogs/WebDialogProvider.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Dialogs/WebDialogProvider.h	Wed Aug 18 09:37:05 2010 +0300
@@ -206,7 +206,7 @@
         const QString &title,
         const QString &label, 
         int value = 0,
-        int minValue = -2147483648, // 0x80000000 
+        int minValue = 0x80000000, // -2147483648
         int maxValue = 0x7FFFFFFF,
         int step = 1, 
         bool *ok = 0, 
--- a/browsercore/appfw/Api/Managers/BookmarksManager.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Managers/BookmarksManager.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -42,20 +42,22 @@
 
 namespace WRT {
 
-BookmarksManagerPrivate::BookmarksManagerPrivate(BookmarksManager * mgr, QWidget *parent) :
+BookmarksManagerPrivate::BookmarksManagerPrivate(BookmarksManager * mgr) :
     q(mgr),
     m_connectedToBookmarks(false),
     m_maxUrls(10) // TODO: read from settings
 {
-    m_import = false;
     QFileInfo dbFile("browserContent.db");
-    
+
+#ifdef Q_WS_MAEMO_5
+    m_import = false;    
     if (dbFile.exists()){
       m_import = false;
     }
     else {
       m_import = true;
     }
+#endif
 
     m_bookmarkSession=new BrowserContent("Bedrock");
     if (m_bookmarkSession) {
@@ -96,10 +98,14 @@
  * @param parent : parent widget (Defaulted to NULL ) if not specified
  */
 BookmarksManager::BookmarksManager(QWidget *parent) :
-    d(new BookmarksManagerPrivate(this, parent))
+    QObject(parent),
+    d(new BookmarksManagerPrivate(this))
 {
+
+#ifdef Q_WS_MAEMO_5    
     if (d->m_import)
        importNativeBookmarks();
+#endif
     
     m_isBookmarkDbreadRequired=true;
     //connect(d->m_actionClearHistory, SIGNAL(triggered()), this, SIGNAL(historyCleared()));
@@ -133,13 +139,14 @@
  }
 }
 
+
+#ifdef Q_WS_MAEMO_5
 /*!
  * Import the bookmarks grom Native Browser
  * Ignores errors (just exists)
  */
 void BookmarksManager::importNativeBookmarks()
 {
-#ifdef Q_OS_SYMBIAN
              
       int error = ::MainImport();
       
@@ -165,7 +172,7 @@
             addBookmark(node->title,node->url,0);
         
     } 
-#endif
+
     // add local bookmarks
     QString localPagesBaseDir(BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsString("LocalPagesBaseDirectory"));
     QString indexStr;
@@ -185,6 +192,7 @@
         }
     }
 }
+#endif
 
 QString BookmarksManager::getBookmarksJSON()
     {
--- a/browsercore/appfw/Api/Managers/BookmarksManager.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Managers/BookmarksManager.h	Wed Aug 18 09:37:05 2010 +0300
@@ -70,7 +70,10 @@
 
     public slots:
 
+#ifdef Q_WS_MAEMO_5
     void importNativeBookmarks();
+#endif
+
     //javascript APIS
     QString getBookmarksJSON();
     int addBookmark(const QString &title,const QString &url,int index=0);
--- a/browsercore/appfw/Api/Managers/BookmarksManager_p.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Managers/BookmarksManager_p.h	Wed Aug 18 09:37:05 2010 +0300
@@ -34,7 +34,7 @@
     class BookmarksManagerPrivate
     {
     public:
-        BookmarksManagerPrivate(BookmarksManager * qq, QWidget *parent = 0);
+        BookmarksManagerPrivate(BookmarksManager * qq);
         ~BookmarksManagerPrivate();
 
     public: // public actions available for this manager
@@ -46,8 +46,11 @@
         //! flag to indicate bookmarks are loaded from data base
         int m_maxUrls;
         BrowserContent* m_bookmarkSession;
+
+#ifdef Q_WS_MAEMO_5        
         //flag to indicate importing bookmarks
         bool m_import;
+#endif
         
         QAction * m_actionClearHistory;
         QObject* m_actionsParent; 
--- a/browsercore/appfw/Api/Managers/webpagecontroller.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Managers/webpagecontroller.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -147,12 +147,12 @@
     m_networkError (false),
     m_networkErrorMsg("No network error"),           
     m_networkErrorUrl("No Url"),
+    m_bErrorUrlMatches(false),
     m_promptMsg("No message"),           
     m_promptReserved(""),
     m_memoryHandler(new LowMemoryHandler(this)),
     d(new WebPageControllerPrivate(this)),
-    m_settingsLoaded(0),
-    m_bErrorUrlMatches(false)
+    m_settingsLoaded(0)
 {
     // Register a new MetaType WebPageData. It is needed to serialize history (starage)
     qRegisterMetaTypeStreamOperators<WebPageData> ("WebPageData");
@@ -244,7 +244,7 @@
 WRT::WrtBrowserContainer* WebPageController::openPage()
 {
 	WRT::WrtBrowserContainer* page = NULL;
-	
+
 	page = openPage(this, 0);
 	page->setPageFactory(this);
 	
@@ -457,8 +457,14 @@
     if (!ok)
         return;
     WRT::WrtBrowserContainer* page = qobject_cast<WRT::WrtBrowserContainer*> (sender());
-    if (page)
+    if (page){
         page->setUpdateThumbnail(true);
+        // Current page is handled in onLoadFinished() so skip this case here
+        if(page != currentPage()){
+			BookmarksManager::getSingleton()->addHistory(page->mainFrame()->url().toString(), page->pageTitle());	
+			emit (loadFinishedForBackgroundWindow(true,page));
+        }
+	}
 }
 
 void WebPageController::updateHistory()
@@ -951,15 +957,16 @@
 
 void WebPageController::loadInitialUrlFromOtherApp(QString url)
 {
-    m_bRestoreSession = FALSE;
-    currentLoad(url);
+    m_bRestoreSession = false;
+    
+    // open in current window
+    currentLoad(guessUrlFromString(url));
 }
 
 void WebPageController::loadFromHistory() 
 {
-
    int count = historyWindowCount();
-        
+   
    if(!count)
    {
    	    m_bRestoreSession = FALSE;
@@ -1672,6 +1679,13 @@
 */
 
 /*!
+  \fn void WebPageController::void loadFinishedForBackgroundWindow(const bool ok, WRT::WrtBrowserContainer *page);
+  emitted to indicate load progress of the page in the background window
+  \a ok indicates whether load was successful
+  \a page is the background page that completed loading
+*/
+
+/*!
   \fn void WebPageController::currentPageIconChanged();
   emitted when the favicon of the current page has changed
 */
--- a/browsercore/appfw/Api/Managers/webpagecontroller.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Managers/webpagecontroller.h	Wed Aug 18 09:37:05 2010 +0300
@@ -246,6 +246,7 @@
     void initialLayoutCompleted();
     void loadProgress( const int progress );
     void loadFinished( const bool ok );
+    void loadFinishedForBackgroundWindow(const bool ok, WRT::WrtBrowserContainer *page);
     void databaseQuotaExceeded (QWebFrame *,QString);  
 
     void currentPageIconChanged();
--- a/browsercore/appfw/Api/Views/mostvisitedpagestore.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/appfw/Api/Views/mostvisitedpagestore.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -146,7 +146,8 @@
             // move it up if needed
             int j = i;
             // '<=' is for the last access sorting, recently used items move up
-            while (--j >= 0 && page->m_pageRank >= m_pageList.at(j)->m_pageRank);
+            while (--j >= 0 && page->m_pageRank >= m_pageList.at(j)->m_pageRank)
+                ;
             // position adjusting and check whether we really moved
             if (++j != i) 
                 m_pageList.move(i, j);
@@ -158,7 +159,8 @@
     if (found == -1) {
         // insert to the top of the 1 refcount items. recently used sort
         int i = -1;
-        while (++i < m_pageList.size() && m_pageList.at(i)->m_pageRank > pageRank);
+        while (++i < m_pageList.size() && m_pageList.at(i)->m_pageRank > pageRank)
+            ;
         
         //if this page is not fitting in MV list, delete thumbnail passed
         if (i == m_pageList.size()) {
--- a/browsercore/core/core.pri	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/core.pri	Wed Aug 18 09:37:05 2010 +0300
@@ -23,8 +23,6 @@
     $$PWD/network/webcookiejar.h \
     $$PWD/network/webnetworkaccessmanager.h \
     $$PWD/network/SchemeHandlerBr.h \
-#    $$PWD/network/networkdiskcache.h \
-#    $$PWD/network/networkdiskcache_p.h \
     $$PWD/actionjsobject.h \
     $$PWD/browserpagefactory.h \
     $$PWD/brtglobal.h \
@@ -38,7 +36,6 @@
     $$PWD/network/webcookiejar.cpp \
     $$PWD/network/webnetworkaccessmanager.cpp \
     $$PWD/network/SchemeHandlerBr.cpp \
-#    $$PWD/network/networkdiskcache.cpp \
     $$PWD/actionjsobject.cpp \
     $$PWD/wrtbrowsercontainer.cpp
     
--- a/browsercore/core/core.pro	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/core.pro	Wed Aug 18 09:37:05 2010 +0300
@@ -106,8 +106,10 @@
 }
 
 contains(br_mobility_bearer, yes) {
-    CONFIG += mobility
-    MOBILITY = bearer
+    lessThan(QT_VERSION, 4.7.0) {
+        CONFIG += mobility
+        MOBILITY = bearer
+    }
     DEFINES += QT_MOBILITY_BEARER_MANAGEMENT
 }
 
--- a/browsercore/core/network/SchemeHandlerBr.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/network/SchemeHandlerBr.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -96,7 +96,7 @@
  * HandleUrlEmbedded
  * @return true/false
  */
-bool SchemeHandler::HandleUrlEmbedded( const QUrl &url, bool confirmDTMF )
+bool SchemeHandler::HandleUrlEmbedded( const QUrl &url, bool /*confirmDTMF*/ )
 {
     QString path = url.path();
     QString scheme = url.scheme().toLower();
@@ -321,4 +321,4 @@
     return str.Alloc();
 }
 #endif
-};
+}
--- a/browsercore/core/network/WebNetworkConnectionManager.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/network/WebNetworkConnectionManager.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -20,6 +20,7 @@
 */
 #include "WebNetworkConnectionManager.h"
 #include "WebNetworkSession.h"
+#include "webpagecontroller.h"
 
 namespace WRT {
 
@@ -27,7 +28,7 @@
     Constructs a WebNetworkConfigurationManager with the given \a parent.
 */
 WebNetworkConnectionManager::WebNetworkConnectionManager(QObject *parent)
-    : QObject(parent), m_WebNetworkSession(0), m_offlined(false)
+    : QObject(parent), m_WebNetworkSession(0), m_offlined(false), m_roamingRejected(false)
 { 
     // set up handlers for Network Configuration Manager signals
     connect(&m_NetworkConfigurationManager, SIGNAL(updateCompleted()), 
@@ -40,6 +41,10 @@
             this, SLOT(handleOnlineStateChanged(bool)));
     connect(&m_NetworkConfigurationManager, SIGNAL(configurationChanged(const QNetworkConfiguration&)),
             this, SLOT(handleConfigurationChanged(const QNetworkConfiguration&)));
+            
+    // listen to the signal when the secure page is no longer secure
+    connect(WebPageController::getSingleton(), SIGNAL(hideSecureIcon()),
+    	      this, SLOT(handleHideSecureIcon()));
 
 #ifdef QT_MOBILITY_SYSINFO 
     // initialize the mapping between network mode string and SystemNetworkInfo::NetworkMode
@@ -117,6 +122,8 @@
     // set up handlers for the WebNetworkSession signals
     connect(m_WebNetworkSession, SIGNAL(sessionConfigurationChanged(const QNetworkConfiguration &)),
             this, SLOT(handleSessionConfigurationChanged(const QNetworkConfiguration &)));
+    connect(m_WebNetworkSession, SIGNAL(sessionRoamingRejected(void)), 
+            this, SLOT(handleSessionRoamingRejected(void)));
 }
 
 /*! 
@@ -136,13 +143,14 @@
 */
 void WebNetworkConnectionManager::handleConfigurationUpdateCompleted()
 {
-	  qDebug() << "configurationUpdateCompleted: create new network connection session";
+	  qDebug() << "configurationUpdateCompleted:";
 	  if (m_WebNetworkSession)
 	  {
 	  	  qDebug() << "Delete old network connection session";
 	  	  deleteSession();
 	  }
 	  
+	  qDebug() << "Create new network connection session";
     createSession(defaultConfiguration());
 }
 
@@ -248,6 +256,24 @@
 #endif // QT_MOBILITY_SYSINFO
 }
 
+void WebNetworkConnectionManager::handleSessionRoamingRejected(void)
+{
+	  qDebug() << "roaming is rejected";
+	  m_roamingRejected = true;
+}
+
+void WebNetworkConnectionManager::handleHideSecureIcon(void)
+{
+	  qDebug() << "Switch to non-secure page";
+	  // Update the configuration and restart session if the roaming has been
+	  // rejected and the page become unsecure.
+	  if (m_roamingRejected)
+	  {
+	  	  m_NetworkConfigurationManager.updateConfigurations();
+	  	  m_roamingRejected = false;
+	  }
+}
+
 #ifdef QT_MOBILITY_SYSINFO
 void WebNetworkConnectionManager::initializeMapString(void)
 {
--- a/browsercore/core/network/WebNetworkConnectionManager.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/network/WebNetworkConnectionManager.h	Wed Aug 18 09:37:05 2010 +0300
@@ -61,6 +61,8 @@
     virtual void handleOnlineStateChanged(bool isOnline);
     virtual void handleConfigurationChanged(const QNetworkConfiguration& config);
     virtual void handleSessionConfigurationChanged(const QNetworkConfiguration &config);
+    virtual void handleSessionRoamingRejected();
+    virtual void handleHideSecureIcon();
        
 private:
 #ifdef QT_MOBILITY_SYSINFO
@@ -72,6 +74,7 @@
     QNetworkConfigurationManager m_NetworkConfigurationManager;
     WebNetworkSession *m_WebNetworkSession;
     bool m_offlined;
+    bool m_roamingRejected;
 };
 
 } // namesspace WRT
--- a/browsercore/core/network/WebNetworkSession.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/network/WebNetworkSession.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -20,6 +20,7 @@
 */
 
 #include "WebNetworkSession.h"
+#include "webpagecontroller.h"
 
 namespace WRT {
 	
@@ -64,7 +65,8 @@
 */
 void WebNetworkSession::handlePreferredConfigurationChanged(const QNetworkConfiguration &config, bool isSeamless)
 {
-    bool isSelected = TRUE;
+    bool isSelected = true;
+    QNetworkConfiguration activeConfig = activeConfiguration();
     
     if (isSeamless)
     {
@@ -74,7 +76,18 @@
     }
     else
     {
-        // Dialog Box to select
+    	  qDebug() << "active: " << activeConfig.bearerName() << "new: " <<  config.bearerName();
+    	  // Is it upgrade ? Upgrade is defined as the cellular -> wireless LAN 
+    	  if (((activeConfig.bearerName() == "2G") || (activeConfig.bearerName() == "CDMA2000")
+    	  	  || (activeConfig.bearerName() == "WCDMA") || (activeConfig.bearerName() == "HSPA"))
+    	  	  && (config.bearerName() == "WLAN"))
+    	  {
+    	  	  if (WebPageController::getSingleton()->secureState()) 
+    	  	      isSelected = false;
+    	  	      
+    	  	  qDebug() << "secureState: " << WebPageController::getSingleton()->secureState();
+    	  }
+    	  	  
         if (isSelected)
         {
             m_NetworkSession->migrate();
@@ -85,6 +98,7 @@
         {
             m_NetworkSession->ignore();
             qDebug() << "Ignore new Network Connection: " << config.name();
+            emit sessionRoamingRejected();
         }
     }
 }
@@ -97,7 +111,7 @@
 */
 void WebNetworkSession::handleNewConfigurationActivated()
 {
-    bool isConnected = TRUE;
+    bool isConnected = true;
     
     // isConnectionGood = testConnection();
     if (isConnected)
--- a/browsercore/core/network/WebNetworkSession.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/network/WebNetworkSession.h	Wed Aug 18 09:37:05 2010 +0300
@@ -24,7 +24,9 @@
 #include "brtglobal.h"
 #include <qnetworksession.h>
 
+#if (QT_VERSION < 0x040700)
 QTM_USE_NAMESPACE
+#endif
 
 namespace WRT {
 
@@ -43,6 +45,7 @@
 	  void sessionConfigurationChanged(const QNetworkConfiguration &config);
 	  void sessionStateChanged(const QNetworkConfiguration &config, 
 	  	       QNetworkSession::State state);
+	  void sessionRoamingRejected();
         
 protected Q_SLOTS:
     virtual void handlePreferredConfigurationChanged(const QNetworkConfiguration &config, bool isSeamless);
--- a/browsercore/core/network/networkdiskcache.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,789 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtNetwork module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//#define QNETWORKDISKCACHE_DEBUG
-
-#ifndef QT_NO_NETWORKDISKCACHE
-
-#include "networkdiskcache.h"
-#include "networkdiskcache_p.h"
-#include "QtCore/qscopedpointer.h"
-
-#include <qfile.h>
-#include <qdir.h>
-#include <qdatetime.h>
-#include <qdiriterator.h>
-#include <qurl.h>
-
-#include <qdebug.h>
-
-
-#define MAX_COMPRESSION_SIZE (1024 * 1024 * 3)
-#define CACHE_SUBDIR_COUNT 16
-
-QT_BEGIN_NAMESPACE
-
-/*!
-    \class QNetworkDiskCache
-    \since 4.5
-    \inmodule QtNetwork
-
-    \brief The QNetworkDiskCache class provides a very basic disk cache.
-
-    QNetworkDiskCache stores each url in its own file inside of the
-    cacheDirectory using QDataStream.  Files with a text MimeType
-    are compressed using qCompress.  Each cache file starts with "cache_"
-    and ends in ".cache".  Data is written to disk only in insert()
-    and updateMetaData().
-
-    Currently you can not share the same cache files with more then
-    one disk cache.
-
-    QNetworkDiskCache by default limits the amount of space that the cache will
-    use on the system to 50MB.
-
-    Note you have to set the cache directory before it will work.
-
-    A network disk cache can be enabled by:
-
-    \snippet doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp 0
-
-    When sending requests, to control the preference of when to use the cache
-    and when to use the network, consider the following:
-
-    \snippet doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp 1
-
-    To check whether the response came from the cache or from the network, the
-    following can be applied:
-
-    \snippet doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp 2
-*/
-
-/*!
-    Creates a new disk cache. The \a parent argument is passed to
-    QAbstractNetworkCache's constructor.
- */
-NetworkDiskCache::NetworkDiskCache(QObject *parent)
-    : QAbstractNetworkCache(*new NetworkDiskCachePrivate, parent)
-{
-}
-
-/*!
-    Destroys the cache object.  This does not clear the disk cache.
- */
-NetworkDiskCache::~NetworkDiskCache()
-{
-    Q_D(NetworkDiskCache);
-    QHashIterator<QIODevice*, QCacheItem*> it(d->inserting);
-    while (it.hasNext()) {
-        it.next();
-        delete it.value();
-    }
-}
-
-/*!
-    Returns the location where cached files will be stored.
-*/
-QString NetworkDiskCache::cacheDirectory() const
-{
-    Q_D(const NetworkDiskCache);
-    return d->cacheDirectory;
-}
-
-/*!
-    Sets the directory where cached files will be stored to \a cacheDir
-
-    QNetworkDiskCache will create this directory if it does not exists.
-
-    Prepared cache items will be stored in the new cache directory when
-    they are inserted.
-
-    \sa QDesktopServices::CacheLocation
-*/
-void NetworkDiskCache::setCacheDirectory(const QString &cacheDir)
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::setCacheDirectory()" << cacheDir;
-#endif
-    Q_D(NetworkDiskCache);
-    if (cacheDir.isEmpty())
-        return;
-    d->cacheDirectory = cacheDir;
-    QDir cDir(d->cacheDirectory);
-    d->cacheDirectory = cDir.absolutePath();
-    if (!d->cacheDirectory.endsWith(QLatin1Char('/')))
-        d->cacheDirectory += QLatin1Char('/');
-
-    QDir dir;
-    // Setup and create directories
-    if (!QFile::exists(d->cacheDirectory)) 
-    {
-        // ### make a static QDir function for this...
-        dir.mkpath(d->cacheDirectory);
-    }
-
-    QString subDirectory;
-    for (int i = 0; i < CACHE_SUBDIR_COUNT; i++)
-    {
-        subDirectory = d->cacheDirectory + QString("%1").arg(i, 0, 16) + QLatin1Char('/');
-        if (!QFile::exists(subDirectory)) 
-        {
-    	    dir.mkpath(subDirectory);
-        }
-    }
-
-    // For Temporary Prepared Directory
-    dir.mkpath(d->cacheDirectory + QLatin1String("prepared/"));
-}
-
-/*!
-    \reimp
-*/
-qint64 NetworkDiskCache::cacheSize() const
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::cacheSize()";
-#endif
-    Q_D(const NetworkDiskCache);
-    if (d->cacheDirectory.isEmpty())
-        return 0;
-    if (d->currentCacheSize < 0) {
-        NetworkDiskCache *that = const_cast<NetworkDiskCache*>(this);
-        that->d_func()->currentCacheSize = that->expire();
-    }
-    return d->currentCacheSize;
-}
-
-/*!
-    \reimp
-*/
-QIODevice *NetworkDiskCache::prepare(const QNetworkCacheMetaData &metaData)
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::prepare()" << metaData.url();
-#endif
-    Q_D(NetworkDiskCache);
-    if (!metaData.isValid() || !metaData.url().isValid() || !metaData.saveToDisk())
-        return 0;
-
-    if (d->cacheDirectory.isEmpty()) {
-        qWarning() << "NetworkDiskCache::prepare() The cache directory is not set";
-        return 0;
-    }
-
-    foreach (QNetworkCacheMetaData::RawHeader header, metaData.rawHeaders()) {
-        if (header.first.toLower() == "content-length") {
-            qint64 size = header.second.toInt();
-            if (size > (maximumCacheSize() * 3)/4)
-                return 0;
-            break;
-        }
-    }
-    QScopedPointer<QCacheItem> cacheItem(new QCacheItem);
-    cacheItem->metaData = metaData;
-
-    QIODevice *device = 0;
-    if (cacheItem->canCompress()) {
-        cacheItem->data.open(QBuffer::ReadWrite);
-        device = &(cacheItem->data);
-    } else {
-        QString templateName = d->tmpCacheFileName();
-        QT_TRY {
-            cacheItem->file = new QTemporaryFile(templateName, &cacheItem->data);
-        } QT_CATCH(...) {
-            cacheItem->file = 0;
-        }
-        if (!cacheItem->file || !cacheItem->file->open()) {
-            qWarning() << "NetworkDiskCache::prepare() unable to open temporary file";
-            cacheItem.reset();
-            return 0;
-        }
-        cacheItem->writeHeader(cacheItem->file);
-        device = cacheItem->file;
-    }
-    d->inserting[device] = cacheItem.take();
-    return device;
-}
-
-/*!
-    \reimp
-*/
-void NetworkDiskCache::insert(QIODevice *device)
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::insert()" << device;
-#endif
-    Q_D(NetworkDiskCache);
-    QHash<QIODevice*, QCacheItem*>::iterator it = d->inserting.find(device);
-    if (it == d->inserting.end()) {
-        qWarning() << "NetworkDiskCache::insert() called on a device we don't know about" << device;
-        return;
-    }
-
-    d->storeItem(it.value());
-    delete it.value();
-    d->inserting.erase(it);
-}
-
-// CRC32 implementation.
-// Could be made into new API QByteArray:qChecksum32()
-static const quint32 crc_tbl32[256] = {
-	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
-	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
-	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
-	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
-	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
-	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
-	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
-	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
-	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
-	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
-	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
-	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
-	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
-	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
-	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
-	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
-	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
-	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
-	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
-	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
-	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
-	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
-	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
-	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
-	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
-	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
-	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
-	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
-	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
-	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
-	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
-	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
-	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
-	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
-	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
-	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
-	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
-	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
-	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
-};
-	
-quint32 NetworkDiskCachePrivate::crc32(const char *data, uint len)
-{
-	const uchar *p = reinterpret_cast<const uchar *>(data);
-	const uchar *q = p + len;
-	const quint32 init = 0xFFFFFFFFL;
-	
-	quint32 crc32 = init;
-	while (p < q) {
-	    crc32 = (crc32 >> 8) ^ crc_tbl32[(crc32 ^ *p++) & 0xffL];
-	}
-	return crc32 ^ init ;
-}
-
-void NetworkDiskCachePrivate::storeItem(QCacheItem *cacheItem)
-{
-    Q_Q(NetworkDiskCache);
-    
-    // just an idea of not caching anything more than 15k
-    //if (cacheItem->size() > (15*1024)) return;
-    
-    Q_ASSERT(cacheItem->metaData.saveToDisk());
-
-    QString fileName = cacheFileName(cacheItem->metaData.url());
-    Q_ASSERT(!fileName.isEmpty());
-
-    if (QFile::exists(fileName)) {
-        if (!QFile::remove(fileName)) {
-            qWarning() << "NetworkDiskCache: couldn't remove the cache file " << fileName;
-            return;
-        }
-    }
-
-    if (currentCacheSize > 0)
-        currentCacheSize += 1024 + cacheItem->size();
-    currentCacheSize = q->expire();
-    if (!cacheItem->file) {
-        QString templateName = tmpCacheFileName();
-        cacheItem->file = new QTemporaryFile(templateName, &cacheItem->data);
-        if (cacheItem->file->open()) {
-            cacheItem->writeHeader(cacheItem->file);
-            cacheItem->writeCompressedData(cacheItem->file);
-        }
-    }
-
-    if (cacheItem->file
-        && cacheItem->file->isOpen()
-        && cacheItem->file->error() == QFile::NoError) {
-        cacheItem->file->setAutoRemove(false);
-        // ### use atomic rename rather then remove & rename
-        if (cacheItem->file->rename(fileName))
-            currentCacheSize += cacheItem->file->size();
-        else
-            cacheItem->file->setAutoRemove(true);
-    }
-    if (cacheItem->metaData.url() == lastItem.metaData.url())
-        lastItem.reset();
-}
-
-/*!
-    \reimp
-*/
-bool NetworkDiskCache::remove(const QUrl &url)
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::remove()" << url;
-#endif
-    Q_D(NetworkDiskCache);
-
-    // remove is also used to cancel insertions, not a common operation
-    QHashIterator<QIODevice*, QCacheItem*> it(d->inserting);
-    while (it.hasNext()) {
-        it.next();
-        QCacheItem *item = it.value();
-        if (item && item->metaData.url() == url) {
-            delete item;
-            d->inserting.remove(it.key());
-            return true;
-        }
-    }
-
-    if (d->lastItem.metaData.url() == url)
-        d->lastItem.reset();
-    return d->removeFile(d->cacheFileName(url));
-}
-
-/*!
-    Put all of the misc file removing into one function to be extra safe
- */
-bool NetworkDiskCachePrivate::removeFile(const QString &file)
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::removeFile()" << file;
-#endif
-    if (file.isEmpty())
-        return false;
-    QFileInfo info(file);
-    QString fileName = info.fileName();
-    qint64 size = info.size();
-    if (QFile::remove(file)) {
-        currentCacheSize -= size;
-        return true;
-    }
-    return false;
-}
-
-/*!
-    \reimp
-*/
-QNetworkCacheMetaData NetworkDiskCache::metaData(const QUrl &url)
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::metaData()" << url;
-#endif
-    Q_D(NetworkDiskCache);
-    if (d->lastItem.metaData.url() == url)
-        return d->lastItem.metaData;
-    return fileMetaData(d->cacheFileName(url));
-}
-
-/*!
-    Returns the QNetworkCacheMetaData for the cache file \a fileName.
-
-    If \a fileName is not a cache file QNetworkCacheMetaData will be invalid.
- */
-QNetworkCacheMetaData NetworkDiskCache::fileMetaData(const QString &fileName) const
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::fileMetaData()" << fileName;
-#endif
-    Q_D(const NetworkDiskCache);
-    QFile file(fileName);
-    if (!file.open(QFile::ReadOnly))
-        return QNetworkCacheMetaData();
-    if (!d->lastItem.read(&file, false)) {
-        file.close();
-        NetworkDiskCachePrivate *that = const_cast<NetworkDiskCachePrivate*>(d);
-        that->removeFile(fileName);
-    }
-    return d->lastItem.metaData;
-}
-
-/*!
-    \reimp
-*/
-QIODevice *NetworkDiskCache::data(const QUrl &url)
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::data()" << url;
-#endif
-    Q_D(NetworkDiskCache);
-    QScopedPointer<QBuffer> buffer;
-    if (!url.isValid())
-        return 0;
-    if (d->lastItem.metaData.url() == url && d->lastItem.data.isOpen()) {
-        buffer.reset(new QBuffer);
-        buffer->setData(d->lastItem.data.data());
-    } else {
-        QScopedPointer<QFile> file(new QFile(d->cacheFileName(url)));
-        if (!file->open(QFile::ReadOnly | QIODevice::Unbuffered))
-            return 0;
-
-        if (!d->lastItem.read(file.data(), true)) {
-            file->close();
-            remove(url);
-            return 0;
-        }
-        if (d->lastItem.data.isOpen()) {
-            // compressed
-            buffer.reset(new QBuffer);
-            buffer->setData(d->lastItem.data.data());
-        } else {
-            buffer.reset(new QBuffer);
-            // ### verify that QFile uses the fd size and not the file name
-            qint64 size = file->size() - file->pos();
-            const uchar *p = 0;
-#ifndef Q_OS_WINCE
-            p = file->map(file->pos(), size);
-#endif
-            if (p) {
-                buffer->setData((const char *)p, size);
-                file.take()->setParent(buffer.data());
-            } else {
-                buffer->setData(file->readAll());
-            }
-        }
-    }
-    buffer->open(QBuffer::ReadOnly);
-    return buffer.take();
-}
-
-/*!
-    \reimp
-*/
-void NetworkDiskCache::updateMetaData(const QNetworkCacheMetaData &metaData)
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::updateMetaData()" << metaData.url();
-#endif
-    QUrl url = metaData.url();
-    QIODevice *oldDevice = data(url);
-    if (!oldDevice) {
-#if defined(QNETWORKDISKCACHE_DEBUG)
-        qDebug() << "NetworkDiskCache::updateMetaData(), no device!";
-#endif
-        return;
-    }
-
-    QIODevice *newDevice = prepare(metaData);
-    if (!newDevice) {
-#if defined(QNETWORKDISKCACHE_DEBUG)
-        qDebug() << "NetworkDiskCache::updateMetaData(), no new device!" << url;
-#endif
-        return;
-    }
-    char data[1024];
-    while (!oldDevice->atEnd()) {
-        qint64 s = oldDevice->read(data, 1024);
-        newDevice->write(data, s);
-    }
-    delete oldDevice;
-    insert(newDevice);
-}
-
-/*!
-    Returns the current maximum size for the disk cache.
-
-    \sa setMaximumCacheSize()
- */
-qint64 NetworkDiskCache::maximumCacheSize() const
-{
-    Q_D(const NetworkDiskCache);
-    return d->maximumCacheSize;
-}
-
-/*!
-    Sets the maximum size of the disk cache to be \a size.
-
-    If the new size is smaller then the current cache size then the cache will call expire().
-
-    \sa maximumCacheSize()
- */
-void NetworkDiskCache::setMaximumCacheSize(qint64 size)
-{
-    Q_D(NetworkDiskCache);
-    bool expireCache = (size < d->maximumCacheSize);
-    d->maximumCacheSize = size;
-    if (expireCache)
-        d->currentCacheSize = expire();
-}
-
-/*!
-    Cleans the cache so that its size is under the maximum cache size.
-    Returns the current size of the cache.
-
-    When the current size of the cache is greater than the maximumCacheSize()
-    older cache files are removed until the total size is less then 90% of
-    maximumCacheSize() starting with the oldest ones first using the file
-    creation date to determine how old a cache file is.
-
-    Subclasses can reimplement this function to change the order that cache
-    files are removed taking into account information in the application
-    knows about that QNetworkDiskCache does not, for example the number of times
-    a cache is accessed.
-
-    Note: cacheSize() calls expire if the current cache size is unknown.
-
-    \sa maximumCacheSize(), fileMetaData()
- */
-qint64 NetworkDiskCache::expire()
-{
-    Q_D(NetworkDiskCache);
-    if (d->currentCacheSize >= 0 && d->currentCacheSize < maximumCacheSize())
-        return d->currentCacheSize;
-
-    if (cacheDirectory().isEmpty()) {
-        qWarning() << "NetworkDiskCache::expire() The cache directory is not set";
-        return 0;
-    }
-
-    QDir::Filters filters = QDir::AllDirs | QDir:: Files | QDir::NoDotAndDotDot;
-    QDirIterator it(cacheDirectory(), filters, QDirIterator::Subdirectories);
-
-    QMultiMap<QDateTime, QString> cacheItems;
-    qint64 totalSize = 0;
-    while (it.hasNext()) {
-        QString path = it.next();
-        QFileInfo info = it.fileInfo();
-        QString fileName = info.fileName();
-        cacheItems.insert(info.created(), path);
-        totalSize += info.size();
-    }
-
-    int removedFiles = 0;
-    qint64 goal = (maximumCacheSize() * 9) / 10;
-    QMultiMap<QDateTime, QString>::const_iterator i = cacheItems.constBegin();
-    while (i != cacheItems.constEnd()) {
-        if (totalSize < goal)
-            break;
-        QString name = i.value();
-        QFile file(name);
-        qint64 size = file.size();
-        file.remove();
-        totalSize -= size;
-        ++removedFiles;
-        ++i;
-    }
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    if (removedFiles > 0) {
-        qDebug() << "NetworkDiskCache::expire()"
-                << "Removed:" << removedFiles
-                << "Kept:" << cacheItems.count() - removedFiles;
-    }
-#endif
-    if (removedFiles > 0)
-        d->lastItem.reset();
-    return totalSize;
-}
-
-/*!
-    \reimp
-*/
-void NetworkDiskCache::clear()
-{
-#if defined(QNETWORKDISKCACHE_DEBUG)
-    qDebug() << "NetworkDiskCache::clear()";
-#endif
-    Q_D(NetworkDiskCache);
-    qint64 size = d->maximumCacheSize;
-    d->maximumCacheSize = 0;
-    d->currentCacheSize = expire();
-    d->maximumCacheSize = size;
-}
-
-QByteArray NetworkDiskCachePrivate::generateId(const QUrl &url) const
-{
-    QUrl cleanUrl = url;
-    cleanUrl.setPassword(QString());
-    cleanUrl.setFragment(QString());
-    QByteArray blob = cleanUrl.toEncoded();
-
-    QByteArray hash;
-    hash.setNum(crc32(blob.data(), blob.length()), 16);
-    return hash;
-}
-
-QString NetworkDiskCachePrivate::tmpCacheFileName() const
-{
-    return cacheDirectory + QLatin1String("prepared/") + QLatin1String("XXXXXX");
-}
-
-QString NetworkDiskCachePrivate::cacheFileName(const QUrl &url) const
-{
-    if (!url.isValid())
-        return QString();
-
-    // Directories were already created during setup phase.
-    QString subDirectory;
-    QByteArray filenameID;
-    filenameID = generateId(url);
-    subDirectory = cacheDirectory + QLatin1Char(filenameID.at(0)) + QLatin1Char('/');
-
-    return  subDirectory + QLatin1String(filenameID);
-}
-
-/*!
-    We compress small text and JavaScript files.
- */
-bool QCacheItem::canCompress() const
-{
-    bool sizeOk = false;
-    bool typeOk = false;
-    foreach (QNetworkCacheMetaData::RawHeader header, metaData.rawHeaders()) {
-        if (header.first.toLower() == "content-length") {
-            qint64 size = header.second.toLongLong();
-            if (size > MAX_COMPRESSION_SIZE)
-                return false;
-            else
-                sizeOk = true;
-        }
-
-        if (header.first.toLower() == "content-type") {
-            QByteArray type = header.second;
-            if (type.startsWith("text/")
-                    || (type.startsWith("application/")
-                        && (type.endsWith("javascript") || type.endsWith("ecmascript"))))
-                typeOk = true;
-            else
-                return false;
-        }
-        if (sizeOk && typeOk)
-            return true;
-    }
-    return false;
-}
-
-enum
-{
-    CacheMagic = 0xe8,
-    CurrentCacheVersion = 7
-};
-
-void QCacheItem::writeHeader(QFile *device) const
-{
-    QDataStream out(device);
-
-    out << qint32(CacheMagic);
-    out << qint32(CurrentCacheVersion);
-    out << metaData;
-    bool compressed = canCompress();
-    out << compressed;
-}
-
-void QCacheItem::writeCompressedData(QFile *device) const
-{
-    QDataStream out(device);
-
-    out << qCompress(data.data());
-}
-
-/*!
-    Returns false if the file is a cache file,
-    but is an older version and should be removed otherwise true.
- */
-bool QCacheItem::read(QFile *device, bool readData)
-{
-    reset();
-
-    QDataStream in(device);
-
-    qint32 marker;
-    qint32 v;
-    in >> marker;
-    in >> v;
-    if (marker != CacheMagic)
-        return true;
-
-    // If the cache magic is correct, but the version is not we should remove it
-    if (v != CurrentCacheVersion)
-        return false;
-
-    bool compressed;
-    QByteArray dataBA;
-    in >> metaData;
-    in >> compressed;
-    if (readData && compressed) {
-        in >> dataBA;
-        data.setData(qUncompress(dataBA));
-        data.open(QBuffer::ReadOnly);
-    }
-    return metaData.isValid();
-}
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_NETWORKDISKCACHE
--- a/browsercore/core/network/networkdiskcache.h	Tue Jul 06 14:03:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtNetwork module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef NETWORKDISKCACHE_H
-#define NETWORKDISKCACHE_H
-
-#include <QtNetwork/qabstractnetworkcache.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-QT_MODULE(Network)
-
-#ifndef QT_NO_NETWORKDISKCACHE
-
-class NetworkDiskCachePrivate;
-class NetworkDiskCache : public QAbstractNetworkCache
-{
-    Q_OBJECT
-
-public:
-    explicit NetworkDiskCache(QObject *parent = 0);
-    ~NetworkDiskCache();
-
-    QString cacheDirectory() const;
-    void setCacheDirectory(const QString &cacheDir);
-
-    qint64 maximumCacheSize() const;
-    void setMaximumCacheSize(qint64 size);
-
-    qint64 cacheSize() const;
-    QNetworkCacheMetaData metaData(const QUrl &url);
-    void updateMetaData(const QNetworkCacheMetaData &metaData);
-    QIODevice *data(const QUrl &url);
-    bool remove(const QUrl &url);
-    QIODevice *prepare(const QNetworkCacheMetaData &metaData);
-    void insert(QIODevice *device);
-
-    QNetworkCacheMetaData fileMetaData(const QString &fileName) const;
-
-public Q_SLOTS:
-    void clear();
-
-protected:
-    virtual qint64 expire();
-
-private:
-    Q_DECLARE_PRIVATE(NetworkDiskCache)
-    Q_DISABLE_COPY(NetworkDiskCache)
-};
-
-#endif // QT_NO_NETWORKDISKCACHE
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // NETWORKDISKCACHE_H
--- a/browsercore/core/network/networkdiskcache_p.h	Tue Jul 06 14:03:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtNetwork module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef NETWORKDISKCACHE_P_H
-#define NETWORKDISKCACHE_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists purely as an
-// implementation detail.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qabstractnetworkcache_p.h"
-
-#include <qbuffer.h>
-#include <qhash.h>
-#include <qtemporaryfile.h>
-
-QT_BEGIN_NAMESPACE
-
-class QFile;
-
-class QCacheItem
-{
-public:
-    QCacheItem() : file(0)
-    {
-    }
-    ~QCacheItem()
-    {
-        reset();
-    }
-
-    QNetworkCacheMetaData metaData;
-    QBuffer data;
-    QTemporaryFile *file;
-    inline qint64 size() const
-        { return file ? file->size() : data.size(); }
-
-    inline void reset() {
-        metaData = QNetworkCacheMetaData();
-        data.close();
-        delete file;
-        file = 0;
-    }
-    void writeHeader(QFile *device) const;
-    void writeCompressedData(QFile *device) const;
-    bool read(QFile *device, bool readData);
-
-    bool canCompress() const;
-};
-
-class NetworkDiskCachePrivate : public QAbstractNetworkCachePrivate
-{
-public:
-    NetworkDiskCachePrivate()
-        : QAbstractNetworkCachePrivate()
-        , maximumCacheSize(1024 * 1024 * 50)
-        , currentCacheSize(-1)
-        {}
-
-    QByteArray generateId(const QUrl &url) const;
-    QString cacheFileName(const QUrl &url) const;
-    QString tmpCacheFileName() const;
-    bool removeFile(const QString &file);
-    void storeItem(QCacheItem *item);
-    static quint32 crc32(const char *data, uint len);
-
-    mutable QCacheItem lastItem;
-    QString cacheDirectory;
-    qint64 maximumCacheSize;
-    qint64 currentCacheSize;
-
-    QHash<QIODevice*, QCacheItem*> inserting;
-    Q_DECLARE_PUBLIC(NetworkDiskCache)
-};
-
-QT_END_NAMESPACE
-
-#endif // NETWORKDISKCACHE_P_H
--- a/browsercore/core/network/networkerrorreply.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/network/networkerrorreply.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -50,7 +50,7 @@
     
   }
   
-  qint64 NetworkErrorReply::readData(char* data, qint64 size){
+    qint64 NetworkErrorReply::readData(char* /*data*/, qint64 /*size*/){
     return 0;
   }
 }
--- a/browsercore/core/network/webnetworkaccessmanager.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/network/webnetworkaccessmanager.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -25,7 +25,7 @@
 #include <QNetworkInterface>
 #if QT_VERSION >= 0x040500
 #include <QNetworkDiskCache>
-// #include "networkdiskcache.h"
+
 #endif
 
 #include "bedrockprovisioning.h"
@@ -216,7 +216,7 @@
 
 #if QT_VERSION >= 0x040500
     qDiskCache = new QNetworkDiskCache(this);
-//    qDiskCache = new NetworkDiskCache(this);
+
     
     if ( !BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->value("DiskCacheEnabled").toBool() ) 
 		return;
--- a/browsercore/core/network/webnetworkaccessmanager.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/browsercore/core/network/webnetworkaccessmanager.h	Wed Aug 18 09:37:05 2010 +0300
@@ -28,7 +28,7 @@
 
 #if QT_VERSION >= 0x040500
 #include <QNetworkDiskCache>
-// #include "networkdiskcache.h"
+
 #endif
 
 namespace WRT {
@@ -71,7 +71,7 @@
 
 #if QT_VERSION >= 0x040500
     QNetworkDiskCache *qDiskCache;
-//    NetworkDiskCache *qDiskCache;
+
 #endif
 
 signals:
--- a/browserui.pri	Tue Jul 06 14:03:49 2010 +0300
+++ b/browserui.pri	Wed Aug 18 09:37:05 2010 +0300
@@ -77,6 +77,7 @@
     br_default_iap=no
     br_orbit_ui=no
     br_openurl=no
+    br_qthighway=no
     br_tiled_backing_store=no
     
     # For now Symbian only, Windows, Maemo will use the defaults    
@@ -99,6 +100,7 @@
           br_mobility_bearer=yes
           br_orbit_ui=yes
           br_openurl=yes
+          br_qthighway=yes
        }
     }
 }
--- a/ginebra2/Application.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/Application.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -22,6 +22,11 @@
 #include <QtGui>
 #include "Application.h"
 
+#ifdef Q_OS_SYMBIAN
+#include <eikenv.h>
+#include <apgtask.h>                // TApaTaskList, TApaTask
+#endif
+
 /* Application wraps the QApplication class to provide a JS interface. This could be implemented
  * as a derived class, but this would force the application developer to use this class instead
  * of QApplication.
@@ -47,6 +52,16 @@
   m_app->quit();
 }
 
+void GinebraApplication::sendToBackground()
+{
+    //qDebug() << "GinebraApplication::goToBackground()";
+#ifdef Q_OS_SYMBIAN
+    TApaTask task(CEikonEnv::Static()->WsSession());
+    task.SetWgId(CEikonEnv::Static()->RootWin().Identifier());
+    task.SendToBackground();
+#endif
+}
+
 void GinebraApplication::debug(const QString &msg) {
       qDebug() << msg;
 }
--- a/ginebra2/Application.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/Application.h	Wed Aug 18 09:37:05 2010 +0300
@@ -51,6 +51,7 @@
     void quit();
     void debug(const QString &msg);
     QString ui() const { return UI_FRAMEWORK; }
+    void sendToBackground();
   signals:
     void aboutToQuit();
   private:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Charms/ExternalEventCharm.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*/
+
+#include "ExternalEventCharm.h"
+
+namespace GVA {
+
+const QString ExternalEventCharm::s_mouseClick = "MouseClick";
+static const int KLongPressThreshold = 30;
+
+inline QGraphicsScene *ExternalEventCharm::scene() {
+    QGraphicsObject *item = static_cast<QGraphicsObject*>(m_object);
+    return item->scene();
+}
+
+ExternalEventCharm::ExternalEventCharm(QGraphicsObject *object)
+  : ObjectCharm(object),
+    m_pressed(false)
+{
+}
+
+bool ExternalEventCharm::eventFilter(QObject *object, QEvent *event) {
+    checkForExternalEvent(this, event);
+
+    switch (event->type()) {
+      case QEvent::Show:
+      {
+          scene()->installEventFilter(this);
+          break;
+      }
+      case QEvent::Hide:
+      {
+          scene()->removeEventFilter(this);
+          break;
+      }
+      default: break;
+    }
+
+    // standard event processing
+    return object->eventFilter(object, event);
+}
+
+void ExternalEventCharm::checkForExternalEvent(QObject * o, QEvent * e)
+{
+    Q_UNUSED(o);
+    bool emitClick = false;
+
+    switch (e->type()) {
+        case QEvent::GraphicsSceneMousePress: {
+            QGraphicsSceneMouseEvent * me = static_cast<QGraphicsSceneMouseEvent*>(e);
+            m_pressPos = me->scenePos();
+            m_pressed = true;
+            break;
+        }
+        case QEvent::GraphicsSceneMouseRelease: {
+            // See if we need to send a mouse-click signal.
+            // TODO: When gesture handling is implemented this should be replaced.
+            if(m_pressed) {
+                QGraphicsSceneMouseEvent * me = static_cast<QGraphicsSceneMouseEvent*>(e);
+                QPointF diff = m_pressPos - me->scenePos();
+                if(diff.manhattanLength() < KLongPressThreshold) {
+                    emitClick = true;
+                }
+                m_pressed = false;
+            }
+            break;
+        }
+        case QEvent::GraphicsSceneMouseDoubleClick:
+            m_pressed = false;
+            break;
+        default:
+            // Ignore other events.
+            return;
+    }
+
+    QGraphicsSceneMouseEvent * me = static_cast<QGraphicsSceneMouseEvent*>(e);
+    QGraphicsObject *item = static_cast<QGraphicsObject*>(m_object);
+    QRectF itemGeometry = item->sceneBoundingRect();
+
+    if (!itemGeometry.contains(me->scenePos())) {
+        if(emitClick)
+            emit externalMouseEvent(me, s_mouseClick, "");
+        else
+            emitExternalEvent(e);
+    }
+}
+
+void ExternalEventCharm::emitExternalEvent(QEvent * e)
+{
+    QString description;
+
+    QDebug stream(&description);
+    stream << e;
+
+    QString name = description;
+    name.truncate(name.indexOf('('));
+
+    emit externalMouseEvent(e, name, description.trimmed());
+}
+
+
+}   // end GVA namepace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Charms/ExternalEventCharm.h	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*/
+
+#ifndef EXTERNALEVENTCHAR_H
+#define EXTERNALEVENTCHAR_H
+
+#include "ObjectCharm.h"
+
+namespace GVA {
+
+/*!
+ * This class emits a signal when the user clicks outside of the given graphics object.
+ */
+class ExternalEventCharm : public ObjectCharm {
+    Q_OBJECT
+  public:
+    ExternalEventCharm(QGraphicsObject *object);
+
+    static const QString s_mouseClick;
+
+  signals:
+    /*! This signal is emitted when the user clicks outside of the object.
+     * \param type The Qt event type.
+     * \param name The Qt event name (or "MouseClick" if click gesture is detected).
+     * \param description The Qt event description.
+     */
+    void externalMouseEvent(
+            QEvent * ev,
+            const QString & name,
+            const QString & description);
+  private:
+    void checkForExternalEvent(QObject * o, QEvent * e);
+    void emitExternalEvent(QEvent * e);
+    bool eventFilter(QObject *object, QEvent *event);
+    QGraphicsScene *scene();
+
+  private:
+    QPointF m_pressPos;
+    bool m_pressed;
+};
+
+}   // end GVA namepace
+
+#endif // EXTERNALEVENTCHAR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Charms/ObjectCharm.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*/
+
+#include "ObjectCharm.h"
+#include "Utilities.h"
+
+#include <QtGui>
+#include <QDebug>
+#include <QApplication>
+#include <QTimer>
+
+
+namespace GVA {
+
+// ----------------------------
+// ObjectCharm
+// ----------------------------
+
+ObjectCharm::ObjectCharm(QObject *object)
+  : m_object(object)
+{
+    m_object->installEventFilter(this);
+    connect(m_object, SIGNAL(destroyed()), this, SLOT(onObjectDestroyed()));
+}
+
+void ObjectCharm::onObjectDestroyed() {
+    deleteLater();
+}
+
+// ----------------------------
+// TouchCircleCharm
+// ----------------------------
+
+TouchCircleCharm::TouchCircleCharm(QObject *object, QGraphicsItem *parent)
+    : ObjectCharm(object),
+      m_timer(new QTimer())
+{
+    m_item = new QGraphicsEllipseItem(QRect(0,0,20,20), parent);
+    m_item->hide();
+    m_item->setPen(QPen(QColor(Qt::black)));
+    m_item->setBrush(QBrush(QColor(200, 0, 0)));
+    m_item->setOpacity(0.7);
+    m_item->setZValue(100);  // make sure it isn't obscured
+
+    m_timer->setSingleShot(true);
+    connect(m_timer, SIGNAL(timeout()), this, SLOT(onTimer()));
+}
+
+TouchCircleCharm::~TouchCircleCharm() {
+    delete m_item;
+    delete m_timer;
+}
+
+bool TouchCircleCharm::eventFilter(QObject *object, QEvent *event) {
+    switch (event->type()) {
+        case QEvent::GraphicsSceneMousePress: {
+            // Show the item.
+            QGraphicsSceneMouseEvent * me = static_cast<QGraphicsSceneMouseEvent*>(event);
+            m_item->setPos(me->scenePos().x() - m_item->rect().width()/2,
+                           me->scenePos().y() - m_item->rect().height()/2);
+
+            // Change the color to indicate click.
+            m_item->setBrush(QBrush(QColor(0, 200, 0)));
+
+            m_item->show();
+            m_timer->stop();
+            break;
+        }
+        case QEvent::GraphicsSceneMouseMove: {
+            if(m_item->isVisible()) {
+                // Move it to new position.
+                QGraphicsSceneMouseEvent * me = static_cast<QGraphicsSceneMouseEvent*>(event);
+                m_item->setPos(me->scenePos().x() - m_item->rect().width()/2,
+                               me->scenePos().y() - m_item->rect().height()/2);
+
+                // Change the color to indicate drag.
+                m_item->setBrush(QBrush(QColor(255, 255, 0)));
+            }
+            break;
+        }
+        case QEvent::GraphicsSceneMouseDoubleClick: {
+            if(m_item->isVisible()) {
+                // Change the color to indicate double click.
+                m_item->setBrush(QBrush(QColor(0, 0, 200)));
+
+                m_timer->stop();
+            }
+            break;
+        }
+        case QEvent::GraphicsSceneMouseRelease: {
+            if(m_item->isVisible()) {
+                // Change the color to indicate release.
+                m_item->setBrush(QBrush(QColor(200, 0, 0)));
+
+                // Start timer to hide it.
+                m_timer->start(2000);
+            }
+            break;
+        }
+//        case QEvent::GraphicsSceneContextMenu: {
+//            if(m_item->isVisible()) {
+//                // Change the color to indicate context event.
+//                m_item->setBrush(QBrush(QColor(0, 200, 200)));
+//            }
+//            break;
+//        }
+        default:
+            break;
+    }
+    return object->eventFilter(object, event);
+}
+
+void TouchCircleCharm::onTimer() {   // slot
+    m_item->hide();
+}
+
+}   // namespace GVA
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Charms/ObjectCharm.h	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*/
+
+#ifndef OBJECTCHARM_H_
+#define OBJECTCHARM_H_
+
+#include <QtGui>
+
+namespace GVA {
+
+// -------------------------------
+
+/*!
+ * Base class for object "charms".  Charms set an event filter on a particular
+ * object and perform some action in response to the events sent to the object.
+ * ObjectCharms automatically destroy themselves when the target object is
+ * destroyed.
+ */
+class ObjectCharm : public QObject {
+    Q_OBJECT
+  public:
+    ObjectCharm(QObject *object);
+
+  private slots:
+    virtual void onObjectDestroyed();
+
+  protected:
+    QObject *m_object;  // not owned
+};
+
+// -------------------------------
+
+/*!
+ * This class draws a circle in response to mouse click events on the given object.  Intended
+ * for testing purposes only.
+ */
+class TouchCircleCharm : public ObjectCharm {
+    Q_OBJECT
+  public:
+    TouchCircleCharm(QObject *object, QGraphicsItem *parent = 0);
+    ~TouchCircleCharm();
+
+  private slots:
+    void onTimer();
+
+  private:
+    bool eventFilter(QObject *object, QEvent *event);
+
+    class QGraphicsEllipseItem * m_item;
+    class QTimer * m_timer;
+};
+
+}
+
+#endif /* OBJECTCHARM_H_ */
--- a/ginebra2/ChromeView.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ChromeView.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -22,6 +22,11 @@
 #include <QtGui>
 #include <QWebPage>
 
+#ifdef ORBIT_UI
+#include <hbview.h>
+#include <hbaction.h>
+#endif
+
 #include "ChromeView.h"
 #include "ChromeWidget.h" //TODO: get rid of this, refer directly to layout
 #include "ChromeLayout.h" 
@@ -29,12 +34,6 @@
 #include "qstmgestureevent.h"
 #endif
 
-#ifdef Q_OS_SYMBIAN
-#ifdef SET_DEFAULT_IAP
-#include "sym_iap_util.h"
-#endif //SET_DEFAULT_IAP
-#endif //Q_OS_SYMBIAN
-
 #ifdef ENABLE_PERF_TRACE
 #include "wrtperftracer.h"
 #endif
@@ -83,12 +82,13 @@
   ungrabGesture(Qt::SwipeGesture);
 #endif
 
-#ifdef Q_OS_SYMBIAN
-#ifdef SET_DEFAULT_IAP
-    QTimer::singleShot(0, this, SLOT(setDefaultIap()));
-  //setDefaultIap();
-#endif //SET_DEFAULT_IAP
-#endif //Q_OS_SYMBIAN
+
+#ifdef ORBIT_UI
+  HbView * view = currentView();
+  HbAction *backAction = new HbAction(Hb::BackNaviAction, this);
+  connect(backAction, SIGNAL(triggered()), m_chrome, SIGNAL(goToBackground()));
+  view->setNavigationAction(backAction);
+#endif
 }
 
 ChromeView::~ChromeView()
@@ -165,17 +165,6 @@
     return QGraphicsView::event(event);
 }
 
-#ifdef Q_OS_SYMBIAN
-#ifdef SET_DEFAULT_IAP
-void ChromeView::setDefaultIap()
-{
-#ifdef ENABLE_PERF_TRACE
-    PERF_DEBUG() << "Setting up default IAP.\n";
-#endif
 
-    qt_SetDefaultIap();
-}
-#endif // SET_DEFAULT_IAP
-#endif // Q_OS_SYMBIAN
 
 } // namespace GVA
--- a/ginebra2/ChromeView.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ChromeView.h	Wed Aug 18 09:37:05 2010 +0300
@@ -46,13 +46,6 @@
   //protected:
   //bool eventFilter(QObject * obj, QEvent * ev);
 
-#ifdef Q_OS_SYMBIAN
-#ifdef SET_DEFAULT_IAP
-  public slots:
-  void setDefaultIap();
-#endif
-#endif
-
  private:
   QGraphicsWidget * m_topWidget;
   ChromeWidget * m_chrome; //TODO: get rid of this
--- a/ginebra2/ChromeWidget.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ChromeWidget.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -118,6 +118,7 @@
     //addJSObjectToEngine(this);
 
     m_app = new GinebraApplication();
+    QObject::connect(this, SIGNAL(goToBackground()), m_app, SLOT(sendToBackground()));
 
     //addJSObjectToEngine(m_app);
 
@@ -345,7 +346,7 @@
     QList <QWebElement> initialSnippets = m_dom->getInitialElements();
     foreach(QWebElement element, initialSnippets) {
       ChromeSnippet * s = getSnippet(element.attribute("id"));
-      if (s->initiallyVisible())
+      if (s && s->initiallyVisible())
         s->setVisible(true);
     }
   }
--- a/ginebra2/ChromeWidget.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ChromeWidget.h	Wed Aug 18 09:37:05 2010 +0300
@@ -119,6 +119,7 @@
     void symbianCarriageReturn();
     void popupShown(const QString &id);
     void popupHidden(const QString &id);
+    void goToBackground();
 
   public:
     Q_PROPERTY(QObjectList snippets READ getSnippets)
--- a/ginebra2/ContentViews/GWebContentView.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ContentViews/GWebContentView.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -245,6 +245,26 @@
 }
 
 #endif
+
+
+bool GWebContentView::gesturesEnabled() const 
+{ 
+#ifndef BEDROCK_TILED_BACKING_STORE
+    return m_touchNavigation->enabled(); 
+#else	
+    return m_widget->gesturesEnabled();
+#endif
+}
+
+void GWebContentView::setGesturesEnabled(bool value) 
+{ 
+#ifndef BEDROCK_TILED_BACKING_STORE		  
+    m_touchNavigation->setEnabled(value); 
+#else
+    m_widget->setGesturesEnabled(value);
+#endif
+}
+
   void GWebContentView::connectAll() {
     //qDebug() << "GWebContentView::connectAll: " << widget();
 
@@ -267,6 +287,13 @@
                  , SIGNAL(viewScrolled(QPoint&, QPoint&))
                  , this
                  , SLOT(handleViewScrolled(QPoint&, QPoint&)));
+
+    safe_connect(m_widget
+                 , SIGNAL(mouseEvent(QEvent::Type)) 
+                 , this
+                 , SIGNAL(contentViewMouseEvent(QEvent::Type)));
+
+    
 #endif
     QObject::connect(webWidget(), SIGNAL(titleChanged(const QString &)), m_jsObject, SIGNAL(titleChanged(const QString &)));
     QObject::connect(webWidget(), SIGNAL(loadStarted()), m_jsObject, SIGNAL(loadStarted()));
@@ -282,11 +309,14 @@
     QObject::connect(this, SIGNAL(forwardEnabled(bool)), m_jsObject, SIGNAL(forwardEnabled(bool)));
     QObject::connect(this, SIGNAL(loadFinished(bool)), m_jsObject, SIGNAL(loadFinished(bool)));
     QObject::connect(this, SIGNAL(secureConnection(bool)), m_jsObject, SIGNAL(secureConnection(bool)));
+
 #ifndef BEDROCK_TILED_BACKING_STORE
     connect(m_touchNavigation, SIGNAL(startingPanGesture(int)), m_jsObject, SIGNAL(startingPanGesture(int)));
+#else
+    connect(this, SIGNAL(startingPanGesture(int)), m_jsObject, SIGNAL(startingPanGesture(int)));
 #endif
-	QObject::connect(this, SIGNAL(superPageShown(const QString&)), m_jsObject, SIGNAL(superPageShown(const QString&)));    
-     
+
+	QObject::connect(this, SIGNAL(superPageShown(const QString&)), m_jsObject, SIGNAL(superPageShown(const QString&)));         
 #endif
     connect(WebPageController::getSingleton(), SIGNAL(pageCreated(WRT::WrtBrowserContainer*)),
             this, SLOT(pageCreated(WRT::WrtBrowserContainer*)));
@@ -762,14 +792,6 @@
 
   void GWebContentView::showNormalPage() {
     if (webWidget()) {
-#ifndef BEDROCK_TILED_BACKING_STORE
-      webWidget()->showNormalPage();
-      webWidget()->setViewportSize();
-      m_touchNavigation->setPage(currentPage());
-      m_touchNavigation->setWantSlideViewCalls(true);
-#else
-        m_widget->showPage(false);
-#endif
       //TODO: Further testing is needed to show if the following is a net benefit.
       if (currentPageIsSuperPage()) {
           if(currentSuperPage()->page() == m_sharedPage){
@@ -783,6 +805,14 @@
           currentSuperPage()->onHidden();
           m_currentPageIsSuperPage =false;
       }
+#ifndef BEDROCK_TILED_BACKING_STORE
+    webWidget()->showNormalPage();
+    webWidget()->setViewportSize();
+    m_touchNavigation->setPage(currentPage());
+    m_touchNavigation->setWantSlideViewCalls(true);
+#else
+    m_widget->showPage(false);
+#endif
     }
   }
 
@@ -940,8 +970,11 @@
   }
 void GWebContentView::handleViewScrolled(QPoint& scrollPos, QPoint& delta)
 {
-    if (delta.manhattanLength() && scrollPos.y() <= 5 && !currentPageIsSuperPage())
+    if (delta.manhattanLength() && (delta.y() > 0  || scrollPos.y() + delta.y() <= 40) 
+        && !currentPageIsSuperPage())
         m_chrome->layout()->slideView(-delta.y());
+    
+    emit startingPanGesture(1);
 }
 
 #endif
--- a/ginebra2/ContentViews/GWebContentView.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ContentViews/GWebContentView.h	Wed Aug 18 09:37:05 2010 +0300
@@ -127,18 +127,8 @@
            widget()->hide();
       }
 
-      bool gesturesEnabled() const { 
-#ifndef BEDROCK_TILED_BACKING_STORE
-		return m_touchNavigation->enabled(); 
-#endif	
-		return false;
-	  }
-
-      void setGesturesEnabled(bool value) { 
-#ifndef BEDROCK_TILED_BACKING_STORE		  
-		  m_touchNavigation->setEnabled(value); 
-#endif
-	  	}
+      bool gesturesEnabled() const;
+      void setGesturesEnabled(bool value);
 
       bool enabled() const;
       void setEnabled(bool value);
--- a/ginebra2/ContentViews/GWebContentViewJSObject.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ContentViews/GWebContentViewJSObject.h	Wed Aug 18 09:37:05 2010 +0300
@@ -54,17 +54,11 @@
     Q_PROPERTY(bool gesturesEnabled READ getGesturesEnabled WRITE setGesturesEnabled)
     bool getGesturesEnabled() const
     {
-#ifdef BEDROCK_TILED_BACKING_STORE
-        return false;
-#else
         return webContentViewConst()->gesturesEnabled();
-#endif
     }
     void setGesturesEnabled(bool value)
     {
-#ifndef BEDROCK_TILED_BACKING_STORE
         webContentView()->setGesturesEnabled(value);
-#endif
     }
 
     Q_PROPERTY(bool enabled WRITE setEnabled READ enabled)
--- a/ginebra2/ContentViews/GWebContentViewWidget.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ContentViews/GWebContentViewWidget.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -337,6 +337,11 @@
 
   if ( m_dirtyZoomFactor != zoom ) {
       m_dirtyZoomFactor = zoom;
+      #if QT_VERSION < 0x040600
+		  page()->setFixedContentsSize(QSize(m_viewportWidth, m_viewportHeight/zoom));
+	  #else
+	  	  page()->setPreferredContentsSize(QSize((int)m_viewportWidth, (int)m_viewportHeight/zoom));
+	  #endif
   }
 
   QGraphicsWebView::setZoomFactor( zoom );
@@ -693,13 +698,13 @@
     }
 
     m_initialScale = qBound(m_minimumScale, m_initialScale, m_maximumScale);
-
-#if QT_VERSION < 0x040600
-    page()->setFixedContentsSize(QSize(m_viewportWidth, m_viewportHeight));
-#else
-    page()->setPreferredContentsSize(QSize((int)m_viewportWidth, (int)m_viewportHeight));
-#endif
-
+#ifdef NO_RESIZE_ON_LOAD  
+	#if QT_VERSION < 0x040600
+		page()->setFixedContentsSize(QSize(m_viewportWidth, m_viewportHeight));
+	#else
+		page()->setPreferredContentsSize(QSize((int)m_viewportWidth, (int)m_viewportHeight));
+	#endif
+#endif //NO_RESIZE_ON_LOAD
 #ifndef NO_RESIZE_ON_LOAD
   qreal zoomF = 0.0;
   QString str;
--- a/ginebra2/ContentViews/ScrollableWebContentView.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ContentViews/ScrollableWebContentView.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -77,6 +77,8 @@
     m_zoomAnimator = new QPropertyAnimation(webAnimationItem, "geometry");
     m_zoomAnimator->setDuration(ZoomAnimationDuration);
     connect(m_zoomAnimator, SIGNAL(stateChanged(QAbstractAnimation::State,QAbstractAnimation::State)), this, SLOT(zoomAnimationStateChanged(QAbstractAnimation::State,QAbstractAnimation::State)));
+    
+    m_gesturesEnabled = true;
 }
 
 ScrollableWebContentView::~ScrollableWebContentView()
@@ -266,8 +268,13 @@
     Q_UNUSED(item);
 
     bool handled = false;
-    if (!isVisible())
-        return handled;
+    
+    if (!isVisible() || !m_gesturesEnabled) {
+        if (event->type() == QEvent::GraphicsSceneContextMenu)
+            return true;
+        else
+            return handled;
+    }
 
     //Pass all events to recognizer
     handled  = m_gestureRecognizer.mouseEventFilter(static_cast<QGraphicsSceneMouseEvent *>(event));
@@ -310,9 +317,12 @@
 
 void ScrollableWebContentView::handleRelease(GestureEvent* gestureEvent)
 {
+    //FIX ME:
+    emit mouseEvent(QEvent::GraphicsSceneMousePress);
     //Cache release event to send on release
     QPointF pos = gestureEvent->position();
     sendEventToWebKit(QEvent::GraphicsSceneMouseRelease, pos);
+    emit mouseEvent(QEvent::GraphicsSceneMouseRelease);
 }
 
 void ScrollableWebContentView::handleDoubleTap(GestureEvent* gestureEvent)
@@ -511,7 +521,6 @@
     event.setButton(Qt::LeftButton);
     event.setButtons(Qt::LeftButton);
     event.setModifiers(Qt::NoModifier);
-
     viewportWidget()->webView()->page()->event(&event);
 }
 
--- a/ginebra2/ContentViews/ScrollableWebContentView.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ContentViews/ScrollableWebContentView.h	Wed Aug 18 09:37:05 2010 +0300
@@ -52,10 +52,13 @@
     ZoomMetaData defaultZoomData();
     void updatePreferredContentSize();
     void setSuperPage();
+    void setGesturesEnabled(bool value) { m_gesturesEnabled = value; } 
+    bool gesturesEnabled() { return m_gesturesEnabled; }
 
 Q_SIGNALS:
     void contextEventObject(QWebHitTestResult* eventTarget);
     void viewScrolled(QPoint& scrollPos, QPoint& delta);
+    void mouseEvent(QEvent::Type type);
 
 public Q_SLOTS:
     void reset();
@@ -99,6 +102,7 @@
     QPropertyAnimation* m_zoomAnimator;          //Animates zooming transitions
     ViewportMetaData* m_viewportMetaData;
     QTimer m_tileUpdateEnableTimer;
+    bool m_gesturesEnabled;
 }; //ScrollableWebContentView
 
 } //namespace GVA
--- a/ginebra2/ContentViews/WebContentViewWidget.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ContentViews/WebContentViewWidget.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -70,6 +70,11 @@
             , SIGNAL(viewScrolled(QPoint&, QPoint&))
             , this
             , SIGNAL(viewScrolled(QPoint&, QPoint&)));
+
+    connect(m_webViewport
+            , SIGNAL(mouseEvent(QEvent::Type))
+            , this
+            , SIGNAL(mouseEvent(QEvent::Type)));
 }
 
 WebContentViewWidget::~WebContentViewWidget()
@@ -140,7 +145,17 @@
 
 void WebContentViewWidget::updatePreferredContentSize()
 {
-   m_webViewport->updatePreferredContentSize();
+    m_webViewport->updatePreferredContentSize();
+}
+
+void WebContentViewWidget::setGesturesEnabled(bool value)
+{
+    m_webViewport->setGesturesEnabled(value);
+}
+    
+bool WebContentViewWidget::gesturesEnabled()
+{
+    return m_webViewport->gesturesEnabled();
 }
 
 } // namespace GVA
--- a/ginebra2/ContentViews/WebContentViewWidget.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ContentViews/WebContentViewWidget.h	Wed Aug 18 09:37:05 2010 +0300
@@ -56,11 +56,14 @@
     ZoomMetaData defaultZoomData();
     void showPage(bool isSuperPage);
     void updatePreferredContentSize();
+    void setGesturesEnabled(bool value);
+    bool gesturesEnabled();
 
 Q_SIGNALS:
     void updateZoomActions(bool enableZoomIn, bool enableZoomOut);
     void contextEventObject(QWebHitTestResult* eventTarget);
     void viewScrolled(QPoint& scrollPos, QPoint& delta);
+    void mouseEvent(QEvent::Type type);
 
 private:
     WebView* m_webView;
--- a/ginebra2/EditorSnippet.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/EditorSnippet.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -59,7 +59,7 @@
       emit lostFocus();
   }
 
-  void EditorSnippet::onTapped(QPointF& pos){
+  void EditorSnippet::onTapped(QPointF& /*pos*/){
     emit gainedFocus();
   }
 
--- a/ginebra2/EditorWidget.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/EditorWidget.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -18,6 +18,15 @@
  * Description:
  *
  */
+#include <QIcon>
+
+#ifdef ORBIT_UI
+#include <hbaction.h>
+#include <hbicon.h>
+#include <hbinputmethod.h>
+#include <hbinputeditorinterface.h>
+#include <hbinputsettingproxy.h>
+#endif
 
 #include "EditorWidget.h"
 #include "Utilities.h"
@@ -25,13 +34,9 @@
 
 // FIXME ;;; Must address the following issues:
 //
-// * On Symbian, when focus is outside editor and user clicks inside editor, the editor
-//   receives FocusIn event but does not make the blinking cursor visible until
-//   the user starts to type or presses arrow keys.
+// * Clean ORBIT_UI flag by creating new class for orbit ui
+// * Replace QGraphicsTextItem with HbTextItem for orbit ui
 //
-// * Edit selection is not visible.
-//
-
 
 namespace GVA {
 
@@ -44,6 +49,7 @@
   : QGraphicsTextItem(parent)
   , m_maxTextLength(0)
   , m_hints(Qt::ImhNoPredictiveText) // disable the predictive text
+  , m_setSpecificBtn(false)
   {
     // Disable wrapping, force text to be stored and displayed
     // as a single line.
@@ -88,6 +94,12 @@
     }
     m_maxTextLength = length;
   }
+  
+  void GTextLineItem::setSpecificButton(QString& commitString, QString& buttonIconPath) {
+    m_spBtnCommitString = commitString;
+    m_spBtnIconPath = buttonIconPath;
+    m_setSpecificBtn = true;
+  }
 
   void GTextLineItem::contentsChange(int position, int charsRemoved, int charsAdded)
   {
@@ -101,6 +113,18 @@
     }
   }
 
+  void GTextLineItem::specificBtnTriggered(bool checked)
+  {
+#ifdef ORBIT_UI
+    QInputContext *ic = qApp->inputContext();
+    QInputMethodEvent *imEvent = new QInputMethodEvent();
+    imEvent->setCommitString(QString(m_spBtnCommitString));
+    if (ic)
+      ic->sendEvent(*imEvent);
+    delete imEvent;
+#endif
+  }
+
   // Get the pixel offset of the cursor. Needed to implement scrolling.
 
   qreal GTextLineItem::cursorX()
@@ -181,10 +205,35 @@
     QGraphicsTextItem::mouseReleaseEvent(event);
     QPointF pos = event->pos();
     emit tapped(pos);
+
+    // add specific button
+#ifdef ORBIT_UI
+    if (m_setSpecificBtn) { 
+      HbEditorInterface editorInterface(this);
+      QList<HbAction*> actionsList = editorInterface.actions();
+      for (int i = 0; i < actionsList.size(); ++i) {
+        editorInterface.removeAction(actionsList.at(i));
+      }
+      QIcon icon(m_spBtnIconPath);
+      HbAction* action = new HbAction(HbIcon(icon), QString(""), this);
+      connect(action, SIGNAL(triggered(bool)), this, SLOT(specificBtnTriggered(bool)));
+
+      editorInterface.addAction(action);
+      m_setSpecificBtn = false;
+    }
+#endif
+
     // open vkb by single tap
     QWidget * widget = event->widget();
     QEvent vkbEvent(QEvent::RequestSoftwareInputPanel);
     QApplication::sendEvent(widget, &vkbEvent);
+
+    // disable prediction
+#ifdef ORBIT_UI
+    HbInputSettingProxy* hbISProxy = HbInputSettingProxy::instance();
+    if (hbISProxy->predictiveInputStatusForActiveKeyboard())
+      hbISProxy->togglePrediction();
+#endif
   }
 
   void GTextLineItem::keyPressEvent(QKeyEvent * event)
@@ -212,10 +261,12 @@
     QApplication::setStartDragDistance(1000);
     QGraphicsTextItem::focusInEvent(event);
 
+#ifndef ORBIT_UI
     QWidget* fw = QApplication::focusWidget();
     Qt::InputMethodHints hints = fw->inputMethodHints();
     if (hints != m_hints)
       fw->setInputMethodHints(m_hints);
+#endif
 
     if (event->reason() != Qt::PopupFocusReason) // to fix the special char issue on VKB
       emit focusChanged(true);
@@ -519,6 +570,7 @@
 
     painter->save();
     painter->setRenderHint(QPainter::Antialiasing);
+    painter->fillRect(boundingRect(), m_backgroundColor);
     painter->fillRect(progressRect, m_progressColor);
     paintBorder(painter);
     painter->restore();
--- a/ginebra2/EditorWidget.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/EditorWidget.h	Wed Aug 18 09:37:05 2010 +0300
@@ -54,6 +54,7 @@
     bool hasSelection() { return (cursorX()!= anchorX()); }
     Qt::InputMethodHints inputMethodHints() const { return m_hints; }
     void setInputMethodHints(Qt::InputMethodHints hints);
+    void setSpecificButton(QString& commitString, QString& buttonIconPath);
 
   protected:
     virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget);
@@ -68,6 +69,7 @@
 
   private slots:
     void contentsChange(int position, int charsRemoved, int charsAdded);
+    void specificBtnTriggered(bool checked);
 
   signals:
     void cursorXChanged(qreal newx);
@@ -80,6 +82,9 @@
     int m_defaultStartDragDistance;
     int m_maxTextLength;
     Qt::InputMethodHints m_hints;
+    bool m_setSpecificBtn;
+    QString m_spBtnCommitString;
+    QString m_spBtnIconPath;
   };
 
   class GLineEditor : public QGraphicsWidget
@@ -110,6 +115,7 @@
     // Calling this function will overwrite the existing hints
     void setInputMethodHints(Qt::InputMethodHints hints) { m_editor->setInputMethodHints(hints); }
     void setMaxTextLength(int length) { m_editor->setMaxTextLength(length); }
+    void setSpecificButton(QString commitString, QString buttonIcon) { m_editor->setSpecificButton(commitString, buttonIcon);}
 
   protected:
     virtual bool eventFilter(QObject * object, QEvent * event);
--- a/ginebra2/GGraphicsWebView.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/GGraphicsWebView.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -50,7 +50,7 @@
     m_loadTime.start();
   }
 
-  void GGraphicsWebView::onLoadFinished(bool ok)
+  void GGraphicsWebView::onLoadFinished(bool /*ok*/)
   {
     m_loading = false;
     update();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Gestures/GestureEvent.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+/*
+ W A R N I N G
+ -------------
+ THIS IS A TEMPORARY GESTURE CODE. WOULD BE REPLACED WHEN BROWSER HAS ITS OWN GESTURE FRAMEWORK
+ */
+
+#include "GestureEvent.h"
+
+namespace GVA {
+
+GestureEvent::GestureEvent()
+    : m_type(GestureEvent::None)
+    , m_pos(QPoint(-1,-1))
+    , m_delta(QPoint(-1,-1))
+    , m_velocity(QPointF(0,0))
+{}
+
+GestureEvent::GestureEvent(const GestureEvent& gesture)
+{
+    m_type = gesture.m_type;
+    m_pos = gesture.m_pos;
+    m_delta = gesture.m_delta;
+    m_velocity = gesture.m_velocity;
+}
+
+GestureEvent& GestureEvent::operator=(const GestureEvent& gesture)
+{
+    m_type = gesture.m_type;
+    m_pos = gesture.m_pos;
+    m_delta = gesture.m_delta;
+    m_velocity = gesture.m_velocity;
+
+    return *this;
+}
+
+GestureEvent::~GestureEvent()
+{ }
+
+GestureEvent::Type GestureEvent::type() const
+{
+    return m_type;
+}
+
+void GestureEvent::setType(GestureEvent::Type type)
+{
+    m_type = type;
+}
+
+QPointF GestureEvent::position() const
+{
+    return m_pos;
+}
+
+void GestureEvent::setPosition(const QPointF& pos)
+{
+    m_pos = pos;
+}
+
+
+QPoint GestureEvent::delta() const
+{
+    return m_delta;
+}
+
+void GestureEvent::setDelta(const QPoint& delta)
+{
+    m_delta = delta;
+}
+
+QPointF GestureEvent::velocity() const
+{
+    return m_velocity;
+}
+
+void GestureEvent::setVelocity(const QPointF& velocity)
+{
+    m_velocity = velocity;
+}
+
+} //namespace GVA
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Gestures/GestureEvent.h	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+/*
+ W A R N I N G
+ -------------
+ THIS IS A TEMPORARY GESTURE CODE. WOULD BE REPLACED WHEN BROWSER HAS ITS OWN GESTURE FRAMEWORK
+ */
+
+#ifndef GestureEvent_h
+#define GestureEvent_h
+
+#include <QObject>
+#include <QPoint>
+#include <QPointF>
+
+namespace GVA {
+
+class GestureEvent : public QObject {
+    Q_OBJECT
+    Q_PROPERTY(GestureEvent::Type type READ type WRITE setType)
+    Q_PROPERTY(QPointF position READ position WRITE setPosition)
+    Q_PROPERTY(QPoint delta READ delta WRITE setDelta)
+    Q_PROPERTY(QPointF velocity READ velocity WRITE setVelocity)
+
+public:
+    enum Type {
+        //FIX ME : We can use Tap for Touch & Release
+        //But at present ginebra chrome elements such as
+        //Bookmark/History needs separate touch and release
+        //for drag and drop handling.
+        None,
+        Touch,
+        Release,
+        Pan,
+        Flick,
+        DoubleTap,
+        LongTap
+    };
+
+    GestureEvent();
+    GestureEvent(const GestureEvent&);
+    GestureEvent& operator=(const GestureEvent&);
+    ~GestureEvent();
+
+    GestureEvent::Type type() const;
+    void setType(GestureEvent::Type type);
+
+    QPointF position() const;
+    void setPosition(const QPointF& p);
+
+    QPoint delta() const;
+    void setDelta(const QPoint& p);
+
+    QPointF velocity() const;
+    void setVelocity(const QPointF& p);
+
+private:
+    GestureEvent::Type m_type;
+    QPointF m_pos;
+    QPoint m_delta;
+    QPointF m_velocity;
+};
+
+} //namespace GVA
+#endif //GestureEvent_h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Gestures/GestureListener.h	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+/*
+ W A R N I N G
+ -------------
+ THIS IS A TEMPORARY GESTURE CODE. WOULD BE REPLACED WHEN BROWSER HAS ITS OWN GESTURE FRAMEWORK
+ */
+
+#ifndef GestureListener_h
+#define GestureListener_h
+
+namespace GVA {
+
+class GestureEvent;
+
+class GestureListener
+{
+public:
+    virtual void handleGesture(GestureEvent*) = 0;
+};
+
+} //namespace GVA
+
+#endif //GestureListener_h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Gestures/GestureRecognizer.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,398 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+/*
+ W A R N I N G
+ -------------
+  THIS IS A TEMPORARY GESTURE CODE. WOULD BE REPLACED WHEN BROWSER HAS ITS OWN GESTURE FRAMEWORK
+ */
+
+#include "GestureRecognizer.h"
+
+#include "GestureListener.h"
+#include "GestureRecognizer_p.h"
+
+#include <QtGui>
+
+static const int DoubleClickFilterDuration = 300;
+static const int LongClickFilterDuration = 1000;
+static const int MinTimeHoldForClick = 50;
+static const int ThresholdForMove = 30;
+
+namespace GVA {
+
+GestureRecognizer::GestureRecognizer(GestureListener* gestureListener)
+    : d_ptr(new GestureRecognizerPrivate(gestureListener))
+{
+    Q_D(GestureRecognizer);
+    d->q_ptr = this;
+}
+
+GestureRecognizer::~GestureRecognizer()
+{ }
+
+bool GestureRecognizer::mouseEventFilter(QGraphicsSceneMouseEvent* event)
+{
+    Q_D(GestureRecognizer);
+    bool handled = false;
+
+    switch(event->type()) {
+    case QEvent::GraphicsSceneMouseDoubleClick:
+        handled = d->mouseDoubleClickEvent(event);
+        break;
+    case QEvent::GraphicsSceneMouseMove:
+        handled = d->mouseMoveEvent(event);
+        break;
+    case QEvent::GraphicsSceneMousePress:
+        handled = d->mousePressEvent(event);
+        break;
+    case QEvent::GraphicsSceneMouseRelease:
+        handled = d->mouseReleaseEvent(event);
+        break;
+    case QEvent::GraphicsSceneContextMenu:
+        //Swallow context menu event.
+        //Since we have own way of handling it
+        handled = true;
+    default:
+        break;
+    }
+    return handled;
+}
+
+qreal GestureRecognizer::dragInertia() const
+{
+    Q_D(const GestureRecognizer);
+    return d->m_dragInertia;
+}
+
+void GestureRecognizer::setDragInertia(qreal inertia)
+{
+    Q_D(GestureRecognizer);
+    d->m_dragInertia = inertia;
+}
+
+int GestureRecognizer::directionErrorMargin() const
+{
+    Q_D(const GestureRecognizer);
+    return d->m_directionErrorMargin;
+}
+
+void GestureRecognizer::setDirectionErrorMargin(int errorMargin)
+{
+    Q_D(GestureRecognizer);
+    d->m_directionErrorMargin = errorMargin;
+}
+
+qreal GestureRecognizer::axisLockThreshold() const
+{
+    Q_D(const GestureRecognizer);
+    return d->m_axisLockThreshold;
+}
+
+void GestureRecognizer::setAxisLockThreshold(qreal threshold)
+{
+    Q_D(GestureRecognizer);
+    d->m_axisLockThreshold = threshold;
+}
+
+qreal GestureRecognizer::maximumVelocity() const
+{
+    Q_D(const GestureRecognizer);
+    return d->m_maxVelocity;
+}
+
+void GestureRecognizer::setMaximumVelocity(qreal v)
+{
+    Q_D(GestureRecognizer);
+    d->m_maxVelocity = v;
+}
+
+qreal GestureRecognizer::minimumVelocity() const
+{
+    Q_D(const GestureRecognizer);
+    return d->m_minVelocity;
+}
+
+void GestureRecognizer::setMinimumVelocity(qreal v)
+{
+    Q_D(GestureRecognizer);
+    d->m_minVelocity = v;
+}
+
+int GestureRecognizer::panningThreshold() const
+{
+    Q_D(const GestureRecognizer);
+    return d->m_panningThreshold;
+}
+
+void GestureRecognizer::setPanningThreshold(int threshold)
+{
+    Q_D(GestureRecognizer);
+    d->m_panningThreshold = threshold;
+}
+
+qreal GestureRecognizer::fastVelocityFactor() const
+{
+    Q_D(const GestureRecognizer);
+    return d->m_fastVelocityFactor;
+}
+
+void GestureRecognizer::setFastVelocityFactor(qreal v)
+{
+    Q_D(GestureRecognizer);
+    d->m_fastVelocityFactor = v;
+}
+
+int GestureRecognizer::scrollsPerSecond() const
+{
+    Q_D(const GestureRecognizer);
+    return d->m_fastVelocityFactor;
+}
+
+void GestureRecognizer::setScrollsPerSecond(int sps)
+{
+    Q_D(GestureRecognizer);
+    d->m_scrollsPerSecond = sps;
+}
+
+//
+//GestureRecognizerPrivate DIFINITION
+//
+GestureRecognizerPrivate::GestureRecognizerPrivate(GestureListener* gestureListener)
+    : m_gestureListener(gestureListener)
+    , m_state(GestureRecognizerPrivate::Inactive)
+    , m_dragInertia(0.85)
+    , m_directionErrorMargin(10)
+    , m_axisLockThreshold(0)
+    , m_maxVelocity(3500)
+    , m_minVelocity(10)
+    , m_panningThreshold(25)
+    , m_fastVelocityFactor(0.01)
+    , m_scrollsPerSecond(20)
+    , m_velocity(QPointF(0, 0))
+    , m_position(QPointF(-1, -1))
+    , m_initialPos(QPointF(-1, -1))
+
+{ }
+
+GestureRecognizerPrivate::~GestureRecognizerPrivate()
+{ }
+
+bool GestureRecognizerPrivate::mousePressEvent(QGraphicsSceneMouseEvent* event)
+{
+    if (event->button() != Qt::LeftButton)
+        return false;
+
+    if (m_state == GestureRecognizerPrivate::Inactive) {
+        //First mouse press.
+        m_position = event->scenePos();
+        m_initialPos = m_position;
+
+        changeState(GestureRecognizerPrivate::Press);
+
+        GestureEvent gesture = gestureEvent(m_initialPos, GestureEvent::Touch);
+        m_gestureListener->handleGesture(&gesture);
+
+        m_lastTime.start();
+        m_delayedPressMoment.start();
+        m_timer.start(LongClickFilterDuration, this);
+    } else if(m_state == GestureRecognizerPrivate::Release) {
+        //This press is for double tap.
+        changeState(GestureRecognizerPrivate::DoublePress);
+    }
+    event->setAccepted(true);
+    return true;
+}
+
+bool GestureRecognizerPrivate::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
+{
+    if (event->button() != Qt::LeftButton)
+        return true;
+
+    if (m_state == GestureRecognizerPrivate::Inactive) {
+        //Release event cannot be generated in gesture recognizer is in active!
+        event->setAccepted(true);
+        resetTouchPositions();
+        return true;
+    }
+
+    if (m_state == GestureRecognizerPrivate::Press) {
+        if (m_delayedPressMoment.elapsed() > MinTimeHoldForClick) {
+            //Waiting for MinTimeHoldForClick to make sure use has actually pressed.
+            //Removes accidentall press
+            changeState(GestureRecognizerPrivate::Release);
+            m_timer.start(DoubleClickFilterDuration, this);
+        } else
+            resetTouchPositions();
+    } else if (m_state == GestureRecognizerPrivate::Move) {
+        if (qAbs(m_velocity.x()) > m_minVelocity
+            || qAbs(m_velocity.y()) > m_minVelocity) {
+            GestureEvent gesture = gestureEvent(m_position, GestureEvent::Flick);
+            gesture.setVelocity(m_velocity);
+            m_gestureListener->handleGesture(&gesture);
+        }
+        m_velocity = QPointF(0,0);
+        resetTouchPositions();
+    } else if (m_state == GestureRecognizerPrivate::DoublePress) {
+        //Stop double tap timer
+        m_timer.stop();
+        GestureEvent gesture = gestureEvent(m_initialPos, GestureEvent::DoubleTap);
+        m_gestureListener->handleGesture(&gesture);
+        resetTouchPositions();
+    }
+    event->setAccepted(true);
+    return true;
+}
+
+bool GestureRecognizerPrivate::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
+{
+    QPoint delta;
+    if (m_state == GestureRecognizerPrivate::Press) {
+        delta = (event->scenePos() - m_initialPos).toPoint();
+        QPoint absDelta;
+        absDelta.setX(qAbs(delta.x()));
+        absDelta.setY(qAbs(delta.y()));
+
+        if ((absDelta.x() > ThresholdForMove) || (absDelta.y() > ThresholdForMove)) {
+            //Stop long tap timer
+            m_timer.stop();
+
+            changeState(GestureRecognizerPrivate::Move);
+            m_position = event->scenePos();
+        } else {
+            //Ignore until user has actually moved
+            return true;
+        }
+    } else if (m_state == GestureRecognizerPrivate::Move) {
+        delta = (event->scenePos() - m_position).toPoint();
+        m_position = event->scenePos();
+    } else {
+        resetTouchPositions();
+        return true;
+    }
+
+    //Aplly if axis stickiness is specified.
+    if (m_axisLockThreshold) {
+        int dx = qAbs(delta.x());
+        int dy = qAbs(delta.y());
+
+        if (dx || dy) {
+            bool vertical = (dy > dx);
+            qreal alpha = qreal(vertical ? dx : dy) / qreal(vertical ? dy : dx);
+            if (alpha <= m_axisLockThreshold) {
+                if (vertical)
+                    delta.setX(0);
+                else
+                    delta.setY(0);
+            }
+        }
+    }
+
+    m_velocity = calculateVelocity(delta, m_lastTime.elapsed());
+
+    //Send pan gesture
+    GestureEvent gesture = gestureEvent(m_position, GestureEvent::Pan);
+    gesture.setDelta(delta);
+    m_gestureListener->handleGesture(&gesture);
+    m_lastTime.restart();
+
+    event->setAccepted(true);
+    return true;
+}
+
+bool GestureRecognizerPrivate::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
+{
+    if (m_state == GestureRecognizerPrivate::Release) {
+        m_timer.stop();
+        GestureEvent gesture = gestureEvent(m_initialPos, GestureEvent::DoubleTap);
+        m_gestureListener->handleGesture(&gesture);
+    }
+    resetTouchPositions();
+    event->setAccepted(true);
+    return true;
+}
+
+void GestureRecognizerPrivate::changeState(GestureRecognizerPrivate::State state)
+{
+    m_state = state;
+}
+
+GestureEvent GestureRecognizerPrivate::gestureEvent(const QPointF& pos, GestureEvent::Type type)
+{
+    GestureEvent gestureEvent;
+    gestureEvent.setType(type);
+    gestureEvent.setPosition(pos);
+    return gestureEvent;
+}
+
+void GestureRecognizerPrivate::timerEvent(QTimerEvent* event)
+{
+    if (event->timerId() != m_timer.timerId())
+        return;
+
+    m_timer.stop();
+
+    QPointF position;
+    GestureEvent::Type gestureType;
+
+    if (m_state == GestureRecognizerPrivate::Press) {
+        //Long press
+        position = m_position;
+        gestureType = GestureEvent::LongTap;
+    } else if (m_state == GestureRecognizerPrivate::Release) {
+        //Actual release event
+        position = m_initialPos;
+        gestureType = GestureEvent::Release;
+    } else {
+        resetTouchPositions();
+        changeState(GestureRecognizerPrivate::Inactive);
+        return;
+    }
+
+    resetTouchPositions();
+    GestureEvent gesture = gestureEvent(position, gestureType);
+    m_gestureListener->handleGesture(&gesture);
+    return;
+}
+
+void GestureRecognizerPrivate::resetTouchPositions()
+{
+    m_position = QPointF(-1, -1);
+    m_initialPos = m_position;
+    changeState(GestureRecognizerPrivate::Inactive);
+}
+
+QPointF GestureRecognizerPrivate::calculateVelocity(const QPointF& delta, int time)
+{
+    QPointF newVelocity = m_velocity;
+
+    if ((delta / qreal(time)).manhattanLength() < 25) {
+        QPointF rawVelocity = delta / qreal(time) * qreal(1000) / qreal(m_scrollsPerSecond);
+        newVelocity = newVelocity * (qreal(1) - m_dragInertia) + rawVelocity * m_dragInertia;
+    }
+
+    newVelocity.setX(delta.x() ? qBound(-m_maxVelocity, newVelocity.x(), m_maxVelocity) : m_velocity.x());
+    newVelocity.setY(delta.y() ? qBound(-m_maxVelocity, newVelocity.y(), m_maxVelocity) : m_velocity.y());
+    return newVelocity;
+}
+
+} // namespace GVA
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Gestures/GestureRecognizer.h	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+/*
+ W A R N I N G
+ -------------
+ THIS IS A TEMPORARY GESTURE CODE. WOULD BE REPLACED WHEN BROWSER HAS ITS OWN GESTURE FRAMEWORK
+ */
+
+#ifndef GestureRecognizer_h
+#define GestureRecognizer_h
+
+#include "GestureEvent.h"
+
+class QGraphicsSceneMouseEvent;
+
+namespace GVA {
+
+class GestureListener;
+class GestureRecognizerPrivate;
+
+class GestureRecognizer : public QObject {
+    Q_OBJECT
+    Q_PROPERTY(qreal dragInertia READ dragInertia WRITE setDragInertia)
+    Q_PROPERTY(int directionErrorMargin READ directionErrorMargin WRITE setDirectionErrorMargin)
+    Q_PROPERTY(qreal axisLockThreshold READ axisLockThreshold WRITE setAxisLockThreshold)
+    Q_PROPERTY(qreal maximumVelocity READ maximumVelocity WRITE setMaximumVelocity)
+    Q_PROPERTY(qreal minimumVelocity READ minimumVelocity WRITE setMinimumVelocity)
+    Q_PROPERTY(qreal panningThreshold READ panningThreshold WRITE setPanningThreshold)
+    Q_PROPERTY(qreal fastVelocityFactor READ fastVelocityFactor WRITE setFastVelocityFactor)
+    Q_PROPERTY(qreal scrollsPerSecond READ scrollsPerSecond WRITE setScrollsPerSecond)
+
+public:
+    GestureRecognizer(GestureListener*);
+    ~GestureRecognizer();
+
+    bool mouseEventFilter(QGraphicsSceneMouseEvent *);
+
+    qreal dragInertia() const;
+    void setDragInertia(qreal inertia);
+
+    int directionErrorMargin() const;
+    void setDirectionErrorMargin(int errorMargin);
+
+    qreal axisLockThreshold() const;
+    void setAxisLockThreshold(qreal threshold);
+
+    qreal maximumVelocity() const;
+    void setMaximumVelocity(qreal v);
+
+    qreal minimumVelocity() const;
+    void setMinimumVelocity(qreal v);
+
+    int panningThreshold() const;
+    void setPanningThreshold(int threshold);
+
+    qreal fastVelocityFactor() const;
+    void setFastVelocityFactor(qreal f);
+
+    int scrollsPerSecond() const;
+    void setScrollsPerSecond(int sps);
+
+    QScopedPointer<GestureRecognizerPrivate> d_ptr;
+
+private:
+    Q_DECLARE_PRIVATE(GestureRecognizer)
+};
+
+} //namespace GVA
+#endif //GestureRecognizer_h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Gestures/GestureRecognizer_p.h	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+/*
+ W A R N I N G
+ -------------
+ THIS IS A TEMPORARY GESTURE CODE. WOULD BE REPLACED WHEN BROWSER HAS ITS OWN GESTURE FRAMEWORK
+ */
+
+#ifndef GestureRecognizer_p_h
+#define GestureRecognizer_p_h
+
+#include "GestureEvent.h"
+
+#include <QBasicTimer>
+#include <QObject>
+#include <QTime>
+
+class QGraphicsSceneMouseEvent;
+class QPoint;
+class QPointF;
+
+namespace GVA {
+
+class GestureListener;
+class GestureRecognizer;
+
+class GestureRecognizerPrivate : public QObject {
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(GestureRecognizer)
+
+public:
+    //States of gesture recognizer
+    enum State {
+        Inactive,
+        Press,
+        Release,
+        Move,
+        DoublePress,
+        LongPress
+    };
+
+    GestureRecognizerPrivate(GestureListener*);
+    ~GestureRecognizerPrivate();
+
+    bool mousePressEvent(QGraphicsSceneMouseEvent* event);
+    bool mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
+    bool mouseMoveEvent(QGraphicsSceneMouseEvent* event);
+    bool mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event);
+
+protected:
+    void changeState(State state);
+    GestureEvent gestureEvent(const QPointF& pos, GestureEvent::Type type);
+    void timerEvent(QTimerEvent* event);
+    void resetTouchPositions();
+    QPointF calculateVelocity(const QPointF& delta, int time);
+
+private:
+    GestureRecognizer* q_ptr;
+    GestureListener* m_gestureListener;
+
+    // state
+    State m_state;
+
+    //last moved time
+    QTime m_lastTime;
+    //time elapsed since last press
+    QTime m_delayedPressMoment;
+    //common timer for long tap or double tap recognition
+    QBasicTimer m_timer;
+
+    //Velocity factors
+    qreal m_dragInertia;
+    int m_directionErrorMargin;
+    qreal m_axisLockThreshold;
+    qreal m_maxVelocity;
+    qreal m_minVelocity;
+    int m_panningThreshold;
+    qreal m_fastVelocityFactor;
+    int m_scrollsPerSecond;
+
+    QPointF m_velocity;
+
+    //Touch positions
+    QPointF m_position;
+    QPointF m_initialPos;
+
+    QGraphicsSceneMouseEvent* m_delayedReleaseEvent;
+}; //GestureRecognizerPrivate
+
+} //namespace GVA
+#endif //GestureRecognizer_p_h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Kinetics/KineticScrollable.h	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+#ifndef KineticScrollable_h
+#define KineticScrollable_h
+
+#include <QSize>
+#include <QPoint>
+
+namespace GVA {
+
+class KineticScrollable {
+
+public:
+    enum State {
+        Inactive,
+        Pushing,
+        AutoScrolling
+    };
+
+    virtual QSize viewportSize() const = 0;
+    virtual QPoint maximumScrollPosition() const = 0;
+    virtual QPoint scrollPosition() const = 0;
+    virtual void setScrollPosition(const QPoint& pos, const QPoint& overshootDelta) = 0;
+    virtual void stateChanged(KineticScrollable::State oldState, KineticScrollable::State newState) = 0;
+};
+
+} //namespace GVA
+
+#endif //KineticScrollable_h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Kinetics/KineticScroller.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,300 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+#include "KineticScroller.h"
+
+#include <QTimerEvent>
+
+namespace GVA {
+
+KineticScroller::KineticScroller(KineticScrollable* scrollableView)
+    : m_scrollableView(scrollableView)
+    , m_mode(KineticScroller::AutoMode)
+    , m_state(KineticScrollable::Inactive)
+    , m_overshootPolicy(KineticScroller::OvershootWhenScrollable)
+    , m_motion(QPoint(0,0))
+    , m_move(false)
+    , m_bounceSteps(3)
+    , m_maxOvershoot(150, 150)
+    , m_vmaxOvershoot(130)
+    , m_overshootDist(0, 0)
+    , m_overshooting(0)
+    , m_minVelocity(10)
+    , m_maxVelocity(3500)
+    , m_deceleration(0.85)
+    , m_scrollsPerSecond(20)
+    , m_idleTimerId(0)
+    , m_scrollTimerId(0)
+    , m_inactivityTimerId(0)
+{}
+
+KineticScroller::~KineticScroller()
+{}
+
+KineticScroller::OvershootPolicy KineticScroller::overshootPolicy() const
+{
+    return m_overshootPolicy;
+}
+
+void KineticScroller::setOvershootPolicy(KineticScroller::OvershootPolicy policy)
+{
+    m_overshootPolicy  = policy;
+}
+
+qreal KineticScroller::decelerationFactor() const
+{
+    return m_deceleration;
+}
+
+void KineticScroller::setDecelerationFactor(qreal f)
+{
+    m_deceleration = f;
+}
+
+int KineticScroller::scrollsPerSecond() const
+{
+    return m_scrollsPerSecond;
+}
+
+void KineticScroller::setScrollsPerSecond(int sps)
+{
+    m_scrollsPerSecond = qBound(1, sps, 100);
+}
+
+void KineticScroller::doPan(QPoint delta)
+{
+    //stop inactivity timer 
+    if (m_inactivityTimerId) {
+        killTimer(m_inactivityTimerId);
+        m_inactivityTimerId = 0;
+    }
+
+    //overshoot only if OvershootAlwaysOn is set
+    QPoint maxPos = m_scrollableView->maximumScrollPosition();
+    bool alwaysOvershoot = (overshootPolicy() == KineticScroller::OvershootAlwaysOn);
+
+    if (!maxPos.x() && !alwaysOvershoot) {
+        delta.setX(0);
+    }
+    if (!maxPos.y() && !alwaysOvershoot) {
+        delta.setY(0);
+    }
+
+    if (m_scrollTimerId)
+        m_motion += delta;
+    else {
+        m_mode = KineticScroller::PushMode;
+        changeState(KineticScrollable::Pushing);
+        // we do not delay the first event but the next ones
+        setScrollPositionHelper(m_scrollableView->scrollPosition() - m_overshootDist - delta);
+        m_motion = QPoint(0, 0);
+        m_scrollTimerId = startTimer(1000 / KineticScroller::MotionEventsPerSecond);
+    }
+}
+
+void KineticScroller::doFlick(QPointF velocity)
+{
+    //stop inactivity timer 
+    if (m_inactivityTimerId) {
+        killTimer(m_inactivityTimerId);
+        m_inactivityTimerId = 0;
+    }
+
+    m_motion = QPoint(0,0);
+    m_mode = KineticScroller::AutoMode;
+    changeState(KineticScrollable::AutoScrolling);
+    m_velocity = velocity;
+    m_idleTimerId = startTimer(1000 / m_scrollsPerSecond);
+}
+
+void KineticScroller::stop()
+{
+    if (m_inactivityTimerId) {
+        killTimer(m_inactivityTimerId);
+        m_inactivityTimerId = 0;
+    }
+
+    if (m_scrollTimerId) {
+        killTimer(m_scrollTimerId);
+        m_scrollTimerId = 0;
+        setScrollPositionHelper(m_scrollableView->scrollPosition() - m_overshootDist - m_motion);
+    }
+
+    if (m_idleTimerId) {
+        killTimer(m_idleTimerId);
+        m_idleTimerId = 0;
+    }
+    
+    if (m_overshootDist.x()) {
+        m_overshooting = m_bounceSteps; 
+        m_velocity.setX(-m_overshootDist.x() * qreal(0.8));
+    }
+    if (m_overshootDist.y()) {
+        m_overshooting = m_bounceSteps; 
+        m_velocity.setY(-m_overshootDist.y() * qreal(0.8));
+    }
+
+    //if page is overshoot doFlick() to switch back
+    if (!m_overshootDist.isNull()) {    
+        doFlick(m_velocity);
+        return;
+    }
+    
+    m_motion = QPoint(0, 0);
+    m_velocity = QPointF(0,0);
+    m_mode = KineticScroller::AutoMode;
+    changeState(KineticScrollable::Inactive);
+}
+
+void KineticScroller::changeState(KineticScrollable::State newState)
+{
+    if (newState != m_state) {
+        KineticScrollable::State oldState = m_state;
+        m_state = newState;
+        m_scrollableView->stateChanged(oldState, newState);
+    }
+}
+
+void KineticScroller::reset()
+{
+    changeState(KineticScrollable::Inactive);
+
+    if (m_idleTimerId)
+        killTimer(m_idleTimerId);
+
+    m_idleTimerId = 0;
+
+    if (m_scrollTimerId)
+        killTimer(m_scrollTimerId);
+
+    m_scrollTimerId = 0;
+
+    if (m_inactivityTimerId)
+        killTimer(m_inactivityTimerId);
+    m_inactivityTimerId = 0;
+
+    m_velocity = QPointF(0, 0);
+    m_overshootDist = QPoint(0, 0);
+    m_overshooting = 0;
+}
+
+void KineticScroller::setScrollPositionHelper(const QPoint &pos)
+{
+    QPoint maxPos = m_scrollableView->maximumScrollPosition();
+
+    QPoint clampedPos;
+    clampedPos.setX(qBound(0, pos.x(), maxPos.x()));
+    clampedPos.setY(qBound(0, pos.y(), maxPos.y()));
+
+    bool alwaysOvershoot = (m_overshootPolicy == KineticScroller::OvershootAlwaysOn);
+    int overshootX = (maxPos.x() || alwaysOvershoot) ? clampedPos.x() - pos.x() : 0;
+    int overshootY = (maxPos.y() || alwaysOvershoot) ? clampedPos.y() - pos.y() : 0;
+
+    m_overshootDist.setX(qBound(-m_maxOvershoot.x(), overshootX, m_maxOvershoot.x()));
+    m_overshootDist.setY(qBound(-m_maxOvershoot.y(), overshootY, m_maxOvershoot.y()));
+
+    m_scrollableView->setScrollPosition(clampedPos
+                                        , m_overshootPolicy == KineticScroller::OvershootAlwaysOff
+                                                               ? QPoint()
+                                                               : m_overshootDist);
+}
+
+void KineticScroller::handleScrollTimer()
+{
+    if (!m_motion.isNull())
+        setScrollPositionHelper(m_scrollableView->scrollPosition() - m_overshootDist - m_motion);
+
+    killTimer(m_scrollTimerId);
+    m_scrollTimerId = 0;
+
+    m_inactivityTimerId = startTimer(300);
+}
+
+void KineticScroller::handleIdleTimer()
+{
+    if (m_mode == KineticScroller::PushMode && m_overshootDist.isNull()) {
+        stop();
+        return;
+    }
+ 
+    setScrollPositionHelper(m_scrollableView->scrollPosition() - m_overshootDist - m_velocity.toPoint());
+
+    if (!m_overshootDist.isNull()) {
+        m_overshooting++;
+       
+        /* When the overshoot has started we continue for
+         * PROP_BOUNCE_STEPS more steps into the overshoot before we
+         * reverse direction. The deceleration factor is calculated
+         * based on the percentage distance from the first item with
+         * each iteration, therefore always returning us to the
+         * top/bottom most element
+         */
+        if (m_overshooting < m_bounceSteps) {
+            m_velocity.setX( m_overshootDist.x() / m_maxOvershoot.x() * m_velocity.x() );
+            m_velocity.setY( m_overshootDist.y() / m_maxOvershoot.y() * m_velocity.y() );
+        } else {
+            m_velocity.setX( -m_overshootDist.x() * 0.8 );
+            m_velocity.setY( -m_overshootDist.y() * 0.8 );
+
+            // ensure a minimum speed when scrolling back or else we might never return
+            if (m_velocity.x() > -1.0 && m_velocity.x() < 0.0)
+                m_velocity.setX(-1.0);
+            if (m_velocity.x() <  1.0 && m_velocity.x() > 0.0)
+                m_velocity.setX( 1.0);
+            if (m_velocity.y() > -1.0 && m_velocity.y() < 0.0)
+                m_velocity.setY(-1.0);
+            if (m_velocity.y() <  1.0 && m_velocity.y() > 0.0)
+                m_velocity.setY( 1.0);
+        }
+
+        m_velocity.setX( qBound((qreal)-m_vmaxOvershoot, m_velocity.x(), (qreal)m_vmaxOvershoot));
+        m_velocity.setY( qBound((qreal)-m_vmaxOvershoot, m_velocity.y(), (qreal)m_vmaxOvershoot));
+
+    } else if (m_state == KineticScrollable::AutoScrolling) {
+        // Decelerate gradually when pointer is raised
+        m_overshooting = 0;
+
+        if (qAbs(m_velocity.x()) < qreal(0.8) * m_maxVelocity)
+            m_velocity.rx() *= m_deceleration;
+        if (qAbs(m_velocity.y()) < qreal(0.8) * m_maxVelocity)
+            m_velocity.ry() *= m_deceleration;
+
+        if ((qAbs(m_velocity.x()) < qreal(1.0)) && (qAbs(m_velocity.y()) < qreal(1.0))) 
+            stop();
+      
+    } else if (m_mode == KineticScroller::AutoMode) 
+          stop();
+}
+
+void KineticScroller::timerEvent(QTimerEvent *ev)
+{
+    if (ev->timerId() == m_idleTimerId)
+        handleIdleTimer();
+    else if (ev->timerId() == m_scrollTimerId)
+        handleScrollTimer();
+    else if (ev->timerId() == m_inactivityTimerId) {
+        //Do not move to inactive state if page is still moving  
+        if (!m_idleTimerId && !m_scrollTimerId)
+            stop();
+    }
+}
+
+}//namespace GVA
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/Kinetics/KineticScroller.h	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+#ifndef KineticScroller_h
+#define KineticScroller_h
+
+#include "KineticScrollable.h"
+
+#include <QObject>
+
+namespace GVA {
+
+class KineticScroller : public QObject {
+    Q_OBJECT
+
+public :
+    enum OvershootPolicy {
+        OvershootWhenScrollable,
+        OvershootAlwaysOff,
+        OvershootAlwaysOn,
+    };
+
+    enum Mode {
+        AutoMode,
+        PushMode
+    };
+
+    enum {
+        MotionEventsPerSecond =  25
+    };
+
+    KineticScroller(KineticScrollable* scrollableView);
+    ~KineticScroller();
+
+    OvershootPolicy overshootPolicy() const;
+    void setOvershootPolicy(OvershootPolicy policy);
+
+    qreal decelerationFactor() const;
+    void setDecelerationFactor(qreal f);
+
+    int scrollsPerSecond() const;
+    void setScrollsPerSecond(int sps);
+
+    void reset();
+    void doPan(QPoint delta);
+    void doFlick(QPointF velocity);
+    void stop();
+
+protected:
+    void changeState(KineticScrollable::State newState);
+    void setScrollPositionHelper(const QPoint& point);
+
+    void handleScrollTimer();
+    void handleIdleTimer();
+    void timerEvent(QTimerEvent* ev);
+
+private:
+    KineticScrollable* m_scrollableView;
+
+    Mode m_mode;
+    KineticScrollable::State m_state;
+
+    QPoint m_motion;
+    bool m_move;
+
+    // overshoot
+    OvershootPolicy m_overshootPolicy;
+    int m_bounceSteps;
+    QPoint m_maxOvershoot;
+    int m_vmaxOvershoot;
+    QPoint m_overshootDist;
+    int m_overshooting; // the overshooting time in idleTimer steps
+
+    // velocity
+    QPointF m_velocity;
+    qreal m_minVelocity;
+    qreal m_maxVelocity;
+    qreal m_deceleration;
+    int m_scrollsPerSecond;
+
+    // timer
+    int m_idleTimerId;
+    int m_scrollTimerId;
+    int m_inactivityTimerId;
+};//KineticScroller
+
+}//namespace GVA
+
+#endif //KineticScroller_h
--- a/ginebra2/LocaleDelegate.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/LocaleDelegate.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -25,7 +25,7 @@
 #include <QDebug>
 
 namespace GVA {
-LocaleDelegate::LocaleDelegate(ChromeWidget* chrome)
+LocaleDelegate::LocaleDelegate(ChromeWidget* /*chrome*/)
 {
     setObjectName("localeDelegate");
 }
--- a/ginebra2/UrlSearchSnippet.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/UrlSearchSnippet.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -41,6 +41,8 @@
 #define GO_BUTTON_ICON ":/chrome/bedrockchrome/urlsearch.snippet/icons/go_btn.png"
 #define STOP_BUTTON_ICON ":/chrome/bedrockchrome/urlsearch.snippet/icons/stop_btn.png"
 #define REFRESH_BUTTON_ICON ":/chrome/bedrockchrome/urlsearch.snippet/icons/refresh_btn.png"
+#define SPECIFIC_BUTTON_ICON ":/chrome/bedrockchrome/urlsearch.snippet/icons/com.svg"
+#define SPECIFIC_BUTTON_STRING ".com"
 #define BETWEEN_ENTRY_AND_BUTTON_SPACE 4
 
 GUrlSearchItem::GUrlSearchItem(ChromeSnippet * snippet, ChromeWidget * chrome, QGraphicsItem * parent)
@@ -99,6 +101,7 @@
     m_urlSearchEditor->setBorderColor(m_borderColor);
     m_urlSearchEditor->setPadding(0.1); // draw the Rounded Rect
     m_urlSearchEditor->setInputMethodHints(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
+    m_urlSearchEditor->setSpecificButton(SPECIFIC_BUTTON_STRING, SPECIFIC_BUTTON_ICON);
     safe_connect(m_urlSearchEditor, SIGNAL(textMayChanged()), this, SLOT(updateLoadStateAndSuggest()));
     safe_connect(m_urlSearchEditor, SIGNAL(activated()),this, SLOT(urlSearchActivatedByEnterKey()));
     safe_connect(m_urlSearchEditor, SIGNAL(focusChanged(bool)),this, SLOT(focusChanged(bool)));
--- a/ginebra2/WebChromeItem.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/WebChromeItem.h	Wed Aug 18 09:37:05 2010 +0300
@@ -50,9 +50,9 @@
     void grabFocus();
     bool event(QEvent* event);
     ChromeWidget * chrome() { return m_chrome; }
-    QWebElement element() { return m_element; }
     inline bool isPainting() { return m_painting; }
   public slots:
+    QWebElement element() { return m_element; }
     //inline void setCacheMode(bool mode) {m_cacheMode = mode;};
   signals:
     void contextMenu(QGraphicsSceneContextMenuEvent * ev);
--- a/ginebra2/chrome/bedrockchrome/bookmarkview.superpage/bookmarkview.js	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/chrome/bedrockchrome/bookmarkview.superpage/bookmarkview.js	Wed Aug 18 09:37:05 2010 +0300
@@ -177,7 +177,11 @@
 		li.className = 'no-sort';
     ul.insertBefore(li, ul.childNodes[0]);
     ul.childNodes[0].focus();
-		new LongPress(li.id, _longPress, _longPressStarted);
+    
+    if (!window.views.WebView.bedrockTiledBackingStoreEnabled())
+        new LongPress(li.id, _longPress, _longPressStarted, 250);
+    else
+        new LongPress(li.id, _longPress, _longPressStarted, 550);
 
     $('html, body').animate({
                         scrollTop: 0}, 1000);
@@ -310,8 +314,11 @@
                 li.className = 'no-sort';
                 ul.appendChild(li);
                 ul.childNodes[0].focus();
-
-                new LongPress(li.id, _longPress, _longPressStarted);
+                if (!window.views.WebView.bedrockTiledBackingStoreEnabled())
+                    new LongPress(li.id, _longPress, _longPressStarted, 250);
+                else
+                    new LongPress(li.id, _longPress, _longPressStarted, 550);
+                		
                 __bookmarkCount = x;
             }
         } catch(E) { alert(E); }
--- a/ginebra2/chrome/bedrockchrome/chrome.html	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/chrome/bedrockchrome/chrome.html	Wed Aug 18 09:37:05 2010 +0300
@@ -51,7 +51,7 @@
   <div class="GinebraSnippet"
        id="UrlSearchChromeId"
        name="urlsearch"
-       style="padding-top: 5px; border-top-width: 0px; border-top-color: #646f85; background-color: white; border-bottom-color: #b0c4de"
+       style="padding-top: 5px; border-top-width: 0px; border-top-color: #646f85; color:black; background-color: white; border-bottom-color: #b0c4de"
        data-GinebraNativeClass="UrlSearchSnippet"
        data-GinebraVisible="true">
   </div>
--- a/ginebra2/chrome/bedrockchrome/chrome.js	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/chrome/bedrockchrome/chrome.js	Wed Aug 18 09:37:05 2010 +0300
@@ -177,6 +177,7 @@
     chrome.popupShown.connect(onPopupShown);
     chrome.popupHidden.connect(onPopupHidden);
     window.pageController.loadFinished.connect(_updateHistory);
+    window.pageController.loadFinishedForBackgroundWindow.connect(_updateHistory);
     window.bookmarksManager.bookmarksCleared.connect(_updateBookmarks);
     window.bookmarksManager.historyCleared.connect(_updateHistory);
 }
--- a/ginebra2/chrome/bedrockchrome/contextmenu.snippet/ViewContextMenu.js	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/chrome/bedrockchrome/contextmenu.snippet/ViewContextMenu.js	Wed Aug 18 09:37:05 2010 +0300
@@ -111,7 +111,7 @@
                {
                  "text": window.localeDelegate.translateText("txt_browser_content_view_menu_page_add_bookmark"), // "Add Bookmark",
                  "onclick": function() {
-                   launchBookmarkDialog(pageController.currentDocTitle, pageController.currentDocUrl,0),
+                   launchBookmarkDialog(pageController.currentDocTitle, pageController.currentDocUrl,0);
                  },
                },
                {
@@ -151,18 +151,22 @@
 
     var linkMenuItems = new Array();
 
+	// Get link related menu items.
+    if (isLink || !isLinkOrImage)
+        linkMenuItems = linkMenuItems.concat(viewMenu_getLinkItems(linkUrl));
+
     // Get image related menu items.
     if (isImage || !isLinkOrImage)
         linkMenuItems = linkMenuItems.concat(viewMenu_getImageItems(imageUrl));
 
-    // Get link related menu items.
-    if (isLink || !isLinkOrImage)
-        linkMenuItems = linkMenuItems.concat(viewMenu_getLinkItems(linkUrl));
-
+   
     linkMenuItems = linkMenuItems.concat(
          [
              {
-                 "text": window.localeDelegate.translateText("txt_browser_content_view_menu_link_share_link"), // "Share"
+             	// Show "Share" for Image or empty area, "Share Link" for link in the menu item.
+		     	"text": (isImage || !isLinkOrImage) ?
+                	window.localeDelegate.translateText("txt_browser_content_view_menu_page_share"): 
+                    window.localeDelegate.translateText("txt_browser_content_view_menu_link_share_link"),//Share Link	
                  "onclick": function() {
                   if ( isImage || !isLinkOrImage)
                       {
--- a/ginebra2/chrome/bedrockchrome/settingsview.superpage/LegalNotice.html	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/chrome/bedrockchrome/settingsview.superpage/LegalNotice.html	Wed Aug 18 09:37:05 2010 +0300
@@ -1,22 +1,16 @@
 <html>
-									Nokia and Nokia Connection People are trademarks
-									or registered trademarks of Nokia Corporation.
-									
-									<p> Copyright 2009 Nokia. All rights reserved. 
-																			
-									<p> This product is based on Symbia n OS S60 5th Edition software. 
-									
-									<p> Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. 
-									
-									<p> This product includes certain open source software. The exact terms of the licenses, 
-									disclaimers, acknolwegements and notices are provided below. Nokia offers to provide you
-									with the source code as defined in the applicable license. Plase send an e-mail 
-									to sourcecode.request@nokia.com or written request to:
-									
-									<p>Source Code Requests
-									<p>Nokia Corporation
-									<p>P.O.BOX 407
-									<p>FI-00045 Nokia Group
-									<p>Finland 
-	
+Nokia and Nokia Connecting People are trademarks or registered trademarks of Nokia Corporation.<br/>
+Copyright 2010 Nokia. All rights reserved.<br/>
+<br/>
+This product is based on Symbian OS S60 5th Edition software.<br/>
+<br/>
+Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc.<br/>
+<br/>
+This product includes certain open source software. The exact terms of the licenses, disclaimers, acknowledgements and notices are provided below. Nokia offers to provide you with the source code as defined in the applicable license. Please send an e-mail to <b>sourcecode.request@nokia.com</b> or written request to:<br/>
+<br/>									
+Source Code Requests<br/>
+Nokia Corporation<br/>
+P.O. BOX 407<br/>
+FI-00045 Nokia Group<br/>
+Finland<br/>
 </html>	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/chrome/bedrockchrome/urlsearch.snippet/icons/com.svg	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg3606"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="New document 4">
+  <defs
+     id="defs3608">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective3614" />
+    <inkscape:perspective
+       id="perspective3600"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3635"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.5"
+     inkscape:cx="32"
+     inkscape:cy="47.305906"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1440"
+     inkscape:window-height="825"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata3611">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <text
+       xml:space="preserve"
+       style="font-size:25.76272964px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol Bold"
+       x="2.772336"
+       y="36.114693"
+       id="text2816"
+       transform="scale(0.89862512,1.1128111)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2818"
+         x="2.772336"
+         y="36.114693">.com</tspan></text>
+  </g>
+</svg>
--- a/ginebra2/chrome/js/LongPress.js	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/chrome/js/LongPress.js	Wed Aug 18 09:37:05 2010 +0300
@@ -4,6 +4,7 @@
 //      elementId: id string of the element
 //      callback: the function to be called when the long-press fires
 //      mouseDownCallback: the function to be called on mouse-down
+//      timerValue : timeout value for long press
 //   Example:
 //        <javascript ...>
 //          new LongPress("btnId", function(el) { alert("hello"); });
@@ -14,13 +15,14 @@
 var gInitialX = 0;
 var gInitialY = 0;
     
-function LongPress(elementId, callback, mouseDownCallback) {
+function LongPress(elementId, callback, mouseDownCallback, timerValue) {
     this.el = document.getElementById(elementId);
     this.callback = callback;
     this.initialX = 0;
     this.initialY = 0;
     this.mouseDownCallback = mouseDownCallback;
-
+    this.timerValue = timerValue;
+		
     if (!this.el) {
         //window.app.debug("LongPress: element " + elementId + " not found");
         return;
@@ -35,7 +37,7 @@
 
     this.startTimer = function() {
         this.cancelTimer();
-        this.timer = window.setTimeout(createDelegate(this, this.onTimerFired), 250);
+        this.timer = window.setTimeout(createDelegate(this, this.onTimerFired), timerValue);
     }
 
     this.cancelTimer = function() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/emulator/FileService.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not, 
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+#include <QDebug>
+
+#include "FileService.h"
+#include <xqserviceutil.h>
+#include "webpagecontroller.h"
+#include "Utilities.h"
+
+
+FileService::FileService(QObject* parent)
+    : XQServiceProvider(QLatin1String("NokiaBrowser.com.nokia.symbian.IFileView"), parent)
+{
+    qDebug("FileService::FileService");
+    publishAll();
+}
+
+
+FileService::~FileService()
+{
+    qDebug("FileService::~FileService");
+}
+
+
+// Handles loadFinished signal emitted by WebPageController. This signal
+// indicates the completion of the request.
+void FileService::completeAsyncRequest(bool ok)
+{
+    qDebug() << "FileService::complete: ok=" << ok;
+    // Complete all
+    foreach (quint32 reqId, mAsyncReqIds) {
+        qDebug("FileService::complete %d", reqId);
+        completeRequest(reqId, QVariant(ok));
+    }
+    
+    // disconnect slots connected to WebPageController signals
+    disconnect(WebPageController::getSingleton(), 0, this, 0);
+}
+
+
+// View operation / slot for non-data-caged file.
+bool FileService::view(QString file)
+{
+    XQRequestInfo info = requestInfo();
+    qDebug() << "FileService::view(" << file << ")";
+
+    if (!info.isSynchronous()) {
+        qDebug() << "FileService::view: Asynchronous Request";
+        mAsyncReqIds.insertMulti(info.clientSecureId(), setCurrentRequestAsync());
+        safe_connect(this, SIGNAL(returnValueDelivered()), this, SLOT(handleAnswerDelivered()));
+        safe_connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnect()));
+        safe_connect(WebPageController::getSingleton(), SIGNAL(loadFinished(bool)), this, SLOT(completeAsyncRequest(bool)));
+    }
+    
+    // Load specified file.
+    file.prepend("file:///"); // create full URL from file path
+    WebPageController::getSingleton()->loadInitialUrlFromOtherApp(file);
+    
+    return true;
+}
+
+
+// Handles clientDisconnected signal emitted by base class, XQServiceProvider.
+// It's emitted if client accessing a service application terminates. 
+void FileService::handleClientDisconnect()
+{
+    XQRequestInfo info = requestInfo();
+    
+    // Output some debug info.
+    qDebug("FileService::handleClientDisconnect");
+    qDebug("\tRequest info: id=%d,sid=%X,vid=%X", info.id(),info.clientSecureId(), info.clientVendorId());
+
+    // Remove request from asynchronous IDs.
+    mAsyncReqIds.remove(info.clientSecureId());
+    
+    // Disconnect signal from this slot if no more asynchronous requests.
+    if (!asyncAnswer()) {
+        // Disconnect all signals from this object to slots in this object.
+        disconnect(this, 0, this, 0);
+    }
+}
+
+
+// Handles returnValueDelivered signal emitted by base class, XQServiceProvider.
+// It's emitted when asynchronous request has been completed and its return 
+// value has been delivered to the service client.
+void FileService::handleAnswerDelivered()
+{
+    XQRequestInfo info = requestInfo();
+    
+    // Output some debug info.
+    qDebug("FileService::handleAnswerDelivered");
+    qDebug("\tRequest info: sid=%X,vid=%X", info.clientSecureId(), info.clientVendorId());
+    
+    // Done servicing request, remove it from asynchronous IDs.
+    mAsyncReqIds.remove(info.clientSecureId());
+    
+    // Disconnect signal from this slot if no more asynchronous requests.
+    if (!asyncAnswer()) {
+        // Disconnect all signals from this object to slots in this object.
+        disconnect(this, 0, this, 0);
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/emulator/FileService.h	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not, 
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+#ifndef FILESERVICE_H
+#define FILESERVICE_H
+
+#include <QMap>
+#include <xqserviceprovider.h>
+
+
+class FileService : public XQServiceProvider
+{
+    Q_OBJECT
+    public:
+        FileService(QObject *parent = 0);
+        ~FileService();
+        bool asyncAnswer() {return mAsyncReqIds.count() > 0;}
+    
+    public slots:
+        bool view(QString file);
+    
+    private slots:
+        void handleClientDisconnect();
+        void handleAnswerDelivered();
+        void completeAsyncRequest(bool ok);
+    
+    private:
+        QMap<quint32,int> mAsyncReqIds;
+        bool mRetValue;
+};
+
+
+#endif
--- a/ginebra2/emulator/browser.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/emulator/browser.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -25,6 +25,7 @@
 #endif
 #include "../ChromeLayout.h"
 #include "../ChromeWidget.h"
+#include "../ChromeDOM.h"
 #include "HistoryFlowView.h"
 #include "WindowFlowView.h"
 #include "webpagecontroller.h"
@@ -45,10 +46,17 @@
 #endif
 
 GinebraBrowser::GinebraBrowser(QObject * parent, QString *url)
-  : QObject(parent),
-    m_scene(new QGraphicsScene()),
-    m_splashScreen(NULL)
+  : QObject(parent)
+    , m_scene(new QGraphicsScene())
+#ifdef Q_WS_MAEMO_5
+    , m_mainWindow(0)
+    , m_splashScreenM5(0)
+#else
+    , m_splashScreen(0)
+#endif
 {
+  platformSpecificInit();
+
   // The initial url to go to when the browser is called from another app
   if (url != 0) {
       m_initialUrl = *url;
@@ -85,8 +93,15 @@
   inspector->show();
   connect(m_chrome->page(), SIGNAL(webInspectorTriggered(QWebElement)), inspector, SLOT(show()));
 #endif
+
   //Create a view onto the chrome
+#ifdef Q_WS_MAEMO_5
+  m_view = new GVA::ChromeView(m_scene, m_chrome, m_mainWindow);
+  m_mainWindow->setCentralWidget(m_view);
+#else
   m_view = new GVA::ChromeView(m_scene, m_chrome);
+#endif
+
 #ifndef NO_QSTM_GESTURE
   WebGestureHelper* gh = new WebGestureHelper(m_view);
   browserApp->setGestureHelper(gh);
@@ -129,6 +144,9 @@
   delete m_view;
   destroySplashScreen();
   delete m_scene;
+#ifdef Q_WS_MAEMO_5
+  delete m_mainWindow;
+#endif
 
 #ifndef NO_QSTM_GESTURE
   WebGestureHelper* gh = browserApp->gestureHelper();
@@ -136,6 +154,21 @@
 #endif
 }
 
+void GinebraBrowser::platformSpecificInit() {
+#ifdef Q_WS_MAEMO_5
+    m_mainWindow = new QMainWindow();
+    m_mainWindow->show();
+
+    QMenu *menu = m_mainWindow->menuBar()->addMenu(tr("Menu"));
+    menu->addAction("Bookmarks", this, SLOT(onBookmarksAction()));
+    menu->addAction("History", this, SLOT(onHistoryAction()));
+#else
+
+    // Add initialization code for other platforms here...
+
+#endif
+}
+
 /*
 QDir GinebraBrowser::getHomeDir()
 {
@@ -189,16 +222,19 @@
 
   bool enabled = (bool) BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsInt("SaveSession");
 
+  // Load the previous page from history (if that option is enabled)
+  if (enabled) {
+    qDebug() << "GinebraBrowser::onChromeComplete: load from history";
+    WebPageController::getSingleton()->loadFromHistory();
+  }
+  
   // If the browser was launched by some other app calling QDesktopServices.openUrl, go to that url
   if (!m_initialUrl.isEmpty()) {
-      openUrl(m_initialUrl);
+  	 qDebug() << "GinebraBrowser::onChromeComplete: url=" << m_initialUrl;
+    openUrl(m_initialUrl);
   }
-  // Otherwise, load the previous page from history (if that option is enabled)
-  else if (enabled && m_initialUrl.isEmpty()) {
-    WebPageController::getSingleton()->loadFromHistory();
-  }
-  // Otherwise, load the start page
-  else {
+  // Otherwise, if load from history not enabled, load the start page
+  else if (!enabled) {
     content->loadUrlToCurrentPage(startPage);
   }
 
@@ -261,6 +297,11 @@
   QString baseDir = BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsString("ChromeBaseDirectory");
   QString imagePath =   baseDir + splashImage;
 
+#ifdef Q_WS_MAEMO_5
+  m_splashScreenM5 = new QSplashScreen(m_mainWindow, QPixmap(imagePath));
+  m_splashScreenM5->show();
+#else
+
   if (!imagePath.isNull()) {
     m_splashScreen = new QLabel(NULL);
     m_splashScreen->setAlignment(Qt::AlignCenter);
@@ -270,24 +311,31 @@
         ;//qDebug() << "ChromeView::chromeLoaded: ERROR splashscreen creation failed. " << imagePath;
     }
     else {
+#ifdef Q_OS_SYMBIAN
+        m_splashScreen->showFullScreen();
+        m_view->showFullScreen();
+#else
+        m_splashScreen->setGeometry(0,0,360,640);
         m_splashScreen->show();
-            #ifdef Q_OS_SYMBIAN
-                m_splashScreen->showFullScreen();
-                m_view->showFullScreen();
-                #else
-                m_splashScreen->setGeometry(0,0,360,640);
-                #endif
+#endif
     }
   }
+#endif
 }
 
 void GinebraBrowser::destroySplashScreen()
 {
-  if (m_splashScreen)
-  {
-    delete m_splashScreen;
-    m_splashScreen = NULL;
-  }
+#ifdef Q_WS_MAEMO_5
+    if(m_splashScreenM5) {
+        delete m_splashScreenM5;
+        m_splashScreenM5 = 0;
+    }
+#else
+    if (m_splashScreen) {
+        delete m_splashScreen;
+        m_splashScreen = NULL;
+    }
+#endif
 }
 
 void GinebraBrowser::setApplicationNameVersion()
@@ -296,3 +344,17 @@
   QString browserAppVersion = BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsString("BedrockVersion");
   QCoreApplication::setApplicationVersion(browserAppVersion);
 }
+
+#ifdef Q_WS_MAEMO_5
+void GinebraBrowser::onBookmarksAction() {
+    // Note: Need a way to open Bookmarks window natively?
+    if(m_chrome->dom())
+        m_chrome->dom()->evalInChromeContext("chrome_showBookmarksView()");
+}
+
+void GinebraBrowser::onHistoryAction() {
+    // Note: Need a way to open History window natively?
+    if(m_chrome->dom())
+        m_chrome->dom()->evalInChromeContext("chrome_showHistoryView()");
+}
+#endif
--- a/ginebra2/emulator/browser.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/emulator/browser.h	Wed Aug 18 09:37:05 2010 +0300
@@ -38,11 +38,6 @@
   void showSplashScreen();
   void destroySplashScreen();
   void setApplicationNameVersion();
-  /*
-private:
-  QDir getHomeDir();
-  void removeFaviconDir();
-*/
   void queueOpenUrl(QString url);
 
  signals:
@@ -52,6 +47,15 @@
   void onChromeComplete();
   void openUrl(QString);
 
+#ifdef Q_WS_MAEMO_5
+ private slots:
+  void onBookmarksAction();
+  void onHistoryAction();
+#endif
+
+ private:
+  void platformSpecificInit();
+
  private:
   QString m_install;
   QString m_chromeUrl;
@@ -60,8 +64,13 @@
   GVA::ChromeWidget * m_chrome;
   GVA::ChromeView * m_view;
   QGraphicsScene *m_scene;
+  QString m_initialUrl;
+#ifdef Q_WS_MAEMO_5
+  QMainWindow *m_mainWindow;
+  QSplashScreen *m_splashScreenM5;
+#else
   QLabel *m_splashScreen;  // Owned
-  QString m_initialUrl;
+#endif
 };
 
 #endif
--- a/ginebra2/emulator/main.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/emulator/main.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -38,6 +38,11 @@
 
 #include <QDebug>
 
+#ifdef QTHIGHWAY
+#include <xqserviceutil.h>
+#include "FileService.h"
+#endif
+
 //#define HARDWARE_DEBUG_TRACE
 
 #ifdef ENABLE_PERF_TRACE
@@ -236,6 +241,14 @@
 #endif
 #endif // ORBIT_UI
 
+#ifdef QTHIGHWAY
+    //qDebug() << "ServiceInfo:" << (XQServiceUtil::isService() ? "Service" : "Normal") << "launch";
+    //qDebug() << "  Embedded=" << XQServiceUtil::isEmbedded() << "Interface=" << XQServiceUtil::interfaceName() << "Operation=" << XQServiceUtil::operationName();
+    
+    // provide service for html mime type
+    FileService *fileServiceProvider = new FileService();
+#endif
+
 //  qDebug() << "main - after app";
 #ifdef Q_OS_SYMBIAN
     //Object cache settings. NB: these need to be tuned per device
@@ -301,9 +314,6 @@
 #if defined(__gva_no_chrome__)
     PERF_TRACE_OUT() << "__gva_no_chrome__\n";
 #endif
-#if defined(SET_DEFAULT_IAP)
-    PERF_TRACE_OUT() << "SET_DEFAULT_IAP\n";
-#endif
 #if defined(NO_HISTORY)
     PERF_TRACE_OUT() << "NO_HISTORY\n";
 #endif
@@ -314,6 +324,10 @@
     res = app.exec();
     delete browser;
 
+#ifdef QTHIGHWAY
+    delete fileServiceProvider;
+#endif
+
 #ifdef ENABLE_PERF_TRACE
       WrtPerfTracer::tracer()->close();
 #endif //ENABLE_PERF_TRACE
--- a/ginebra2/ginebra2.pro	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ginebra2.pro	Wed Aug 18 09:37:05 2010 +0300
@@ -153,12 +153,6 @@
     EditorWidget.h \
     EditorSnippet.h
 
-symbian: {
-  contains(br_default_iap, yes) {
-    DEFINES += SET_DEFAULT_IAP
-    HEADERS += sym_iap_util.h
-  }
-}
 
 contains(br_tiled_backing_store, yes) {
     DEFINES += BEDROCK_TILED_BACKING_STORE
@@ -301,7 +295,7 @@
     TARGET.EPOCALLOWDLLDATA = 1
     TARGET.EPOCSTACKSIZE = 0x14000
     
-    lessThan(QT_MAJOR_VERSION, 4) | lessThan(QT_MINOR_VERSION, 6) | lessThan(QT_PATCH_VERSION, 3) {
+    lessThan(QT_VERSION, 4.6.3) {
         TARGET.EPOCHEAPSIZE = 0x20000 \
             0x4000000 \
             // \
@@ -334,8 +328,31 @@
     }
     LIBS += -lcommdb
     LIBS += -lesock -lconnmon -linsock
-    LIBS += -lavkon -lapparc -leikcore -lcone
+    LIBS += -lavkon -lapparc -leikcore -lcone -lws32 -lapgrfx 
+
+# QtHighway is used in TB10.1 for Application Interworking (AIW) support.
+contains(br_qthighway, yes) {
+    DEFINES += QTHIGHWAY
+    LIBS += -lxqservice -lxqserviceutil
+    CONFIG += service
+    SERVICE.FILE = service_conf.xml
+    SERVICE.OPTIONS = embeddable
     
+    # Browser provides service for html files.
+    RSS_RULES += \
+        "datatype_list = " \
+        "      {" \
+        "      DATATYPE" \
+        "          {" \
+        "          priority = EDataTypePriorityNormal;" \
+        "          type = \"text/html\";" \  
+        "          }" \
+        "      };"
+
+        HEADERS += emulator/FileService.h
+        SOURCES += emulator/FileService.cpp
+}
+
 contains(br_openurl, yes) {
     DEFINES += OPENURL
 }
@@ -385,6 +402,6 @@
 dox.target = docs
 dox.commands = doxygen ./doc/Doxyfile
 dox.depends = $$SOURCES $$HEADERS
-QMAKE_EXTRA_UNIX_TARGETS += dox
+QMAKE_EXTRA_TARGETS += dox
 
 #INCLUDEPATH += $$PWD/../../mw/bedrockProvisioning
--- a/ginebra2/ginebra2.qrc	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/ginebra2.qrc	Wed Aug 18 09:37:05 2010 +0300
@@ -45,6 +45,7 @@
     <file>chrome/bedrockchrome/urlsearch.snippet/icons/go_btn.png</file>
     <file>chrome/bedrockchrome/urlsearch.snippet/icons/refresh_btn_pressed.png</file>
     <file>chrome/bedrockchrome/urlsearch.snippet/icons/go_btn_pressed.png</file>
+    <file>chrome/bedrockchrome/urlsearch.snippet/icons/com.svg</file>
     <file>chrome/bedrockchrome/prompt.snippet/prompt.js</file>
     <file>chrome/bedrockchrome/prompt.snippet/prompt.css</file>
     <file>chrome/bedrockchrome/prompt.snippet/icons/button_dialog_ok_wait.png</file>
--- a/ginebra2/linearflowsnippet.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/linearflowsnippet.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -813,10 +813,7 @@
     qreal step = ANIMATION_MAX_FRAME;
     qreal cy = m_filmstripFlowData->m_centerTopSpace;
 
-    qreal stepx = cx / step;
     qreal stepy = cy / step;
-    qreal stepx2 = -stepx;
-    qreal stepy2 = (cy + ch - h) / step;
 
     QRectF startRect = QRectF(0, 0, w, h);
     QRectF endRect = QRectF(cx, cy, cw, ch);
@@ -1206,7 +1203,6 @@
     int h = s.height() * FILM_HEIGHT;
 
     qreal ix;
-    qreal ratio = ((qreal) w) / h;
 
     d->m_buffer = new QImage (w, h , QImage::Format_RGB32);
     d->m_titleBuffer = new QImage(w, s.height() * TITLE_HEIGHT , QImage::Format_RGB32);
--- a/ginebra2/mostvisitedpageview.cpp	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/mostvisitedpageview.cpp	Wed Aug 18 09:37:05 2010 +0300
@@ -27,6 +27,8 @@
 #include "webpagecontroller.h"
 #include "BookmarksManager.h"
 #include "webpagedata.h"
+#include "wrtbrowsercontainer.h"
+#include "wrtbrowsercontainer_p.h"
 
 const int KLinearSnippetHeight = 120;
 
@@ -43,6 +45,7 @@
     m_mostVisitedPageStore = new MostVisitedPageStore();
     WebPageController* pageController = WebPageController::getSingleton();
     connect(pageController, SIGNAL(loadFinished(const bool)), this, SLOT(onLoadFinished(const bool)));
+    connect(pageController, SIGNAL(loadFinishedForBackgroundWindow(const bool, WRT::WrtBrowserContainer*)), this, SLOT(onLoadFinishedForBackgroundWindow(const bool, WRT::WrtBrowserContainer*)));
     connect(WRT::BookmarksManager::getSingleton(),SIGNAL(historyCleared()),this,SLOT(clearMVStore()));
 }
 
@@ -219,6 +222,13 @@
         updateMVStore(activePage);
      }
  }
+ void MostVisitedPagesWidget::onLoadFinishedForBackgroundWindow(const bool ok, WRT::WrtBrowserContainer *page)
+ {
+     if (ok) {
+         if (page)
+		     updateMVStore(page);
+     }
+ }
 
 void MostVisitedPagesWidget::clearMVStore()
 {
--- a/ginebra2/mostvisitedpageview.h	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/mostvisitedpageview.h	Wed Aug 18 09:37:05 2010 +0300
@@ -23,12 +23,13 @@
 #include "ChromeSnippet.h"
 #include "ChromeWidget.h"
 
-namespace GVA {
-    class LinearFlowSnippet;
+namespace WRT {
+    class WrtBrowserContainer;
 }
 
 namespace GVA {
-class WRT::WrtBrowserContainer;
+
+class LinearFlowSnippet;
 
 class  MostVisitedPagesWidget : public ChromeItem
 {
@@ -59,6 +60,7 @@
     void okTriggered(int index);
     void closeAnimationCompleted();
     void onLoadFinished(const bool ok);
+    void onLoadFinishedForBackgroundWindow(const bool ok, WRT::WrtBrowserContainer *page);
     void clearMVStore();
 private :
     MostVisitedPageStore* m_mostVisitedPageStore;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/service_conf.xml	Wed Aug 18 09:37:05 2010 +0300
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<service>
+  <name>NokiaBrowser</name>
+  <filepath>No path</filepath>
+  <description>Web service</description>
+  <interface>
+     <name>com.nokia.symbian.IFileView</name>
+     <version>1.0</version>
+     <description>Interface for showing Files</description>
+   </interface>
+</service>
\ No newline at end of file
--- a/ginebra2/sym_iap_util.h	Tue Jul 06 14:03:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,514 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef QSYM_IAP_UTIL_H
-#define QSYM_IAP_UTIL_H
-
-// Symbian
-#include <utf.h>
-#include <es_sock.h>
-#include <in_sock.h>
-#include <es_enum.h>
-#include <in_iface.h>
-#include <commdbconnpref.h>
-#include <e32cmn.h>
-
-// OpenC
-#include <sys/socket.h>
-#include <net/if.h>
-
-//Qt
-#include <QSettings>
-#include <QStringList>
-//#include <QTextCodec>
-
-_LIT(KIapNameSetting, "IAP\\Name");             // text - mandatory
-_LIT(KIapDialogPref, "IAP\\DialogPref");        // TUnit32 - optional
-_LIT(KIapService, "IAP\\IAPService");           // TUnit32 - mandatory
-_LIT(KIapServiceType, "IAP\\IAPServiceType");   // text - mandatory
-_LIT(KIapBearer, "IAP\\IAPBearer");             // TUint32 - optional
-_LIT(KIapBearerType, "IAP\\IAPBearerType");     // text - optional
-_LIT(KIapNetwork, "IAP\\IAPNetwork");           // TUint32 - optional
-
-const QLatin1String qtOrganizationTag("Trolltech");
-const QLatin1String qtNetworkModuleTag("QtNetwork");
-const QLatin1String iapGroupTag("IAP");
-const QLatin1String iapNamesArrayTag("Names");
-const QLatin1String iapNameItemTag("Name");
-
-static QTextCodec *utf16LETextCodec = 0;
-
-void clearIapNamesSettings(QSettings &settings) {
-    settings.beginGroup(qtNetworkModuleTag);
-        settings.beginGroup(iapGroupTag);
-           settings.remove(iapNamesArrayTag);
-        settings.endGroup();
-    settings.endGroup();
-}
-
-void writeIapNamesSettings(QSettings &settings, const QStringList& iapNames) {
-    clearIapNamesSettings(settings);
-    settings.beginGroup(qtNetworkModuleTag);
-        settings.beginGroup(iapGroupTag);
-            settings.beginWriteArray(iapNamesArrayTag);
-            for (int index = 0; index < iapNames.size(); ++index) {
-                settings.setArrayIndex(index);
-                settings.setValue(iapNameItemTag, iapNames.at(index));
-            }
-            settings.endArray();
-        settings.endGroup();
-    settings.endGroup();
-}
-
-void readIapNamesSettings(QSettings &settings, QStringList& iapNames) {
-    settings.beginGroup(qtNetworkModuleTag);
-        settings.beginGroup(iapGroupTag);
-            int last = settings.beginReadArray(iapNamesArrayTag);
-            for (int index = 0; index < last; ++index) {
-                settings.setArrayIndex(index);
-                iapNames.append(settings.value(iapNameItemTag).toString());
-            }
-            settings.endArray();
-        settings.endGroup();
-    settings.endGroup();
-}
-
-static QString qt_TNameToQString(TName data) {
-    if (utf16LETextCodec == 0)
-        utf16LETextCodec = QTextCodec::codecForName("UTF-16LE");
-
-    QByteArray tmpByteArray = QByteArray::fromRawData((char*)(data.PtrZ()), data.Length() * 2);
-    return utf16LETextCodec->toUnicode(tmpByteArray);
-}
-
-static QString qt_InterfaceInfoL()
-{
-    QString output;
-
-    TBuf8<512> buffer;
-    TBuf<128> t;
-    TAutoClose<RSocketServ> ss;
-    User::LeaveIfError(ss.iObj.Connect());
-    ss.PushL();
-
-    TAutoClose<RSocket> sock;
-    User::LeaveIfError(sock.iObj.Open(ss.iObj, _L("udp")));
-    sock.PushL();
-
-    User::LeaveIfError(sock.iObj.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl));
-
-    TProtocolDesc in;
-    User::LeaveIfError(sock.iObj.Info(in));
-    printf("EPOC32 IP Configuration TCPIP Version %d.%d.%d\n", in.iVersion.iMajor, in.iVersion.iMinor, in.iVersion.iBuild);
-
-    TPckgBuf<TSoInetInterfaceInfo> info, next;
-
-    TInt res=sock.iObj.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, info);
-    if (res!=KErrNone)
-        User::Leave(res);
-    TInt count = 0;
-    while (res==KErrNone) {
-        res=sock.iObj.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, next);
-
-        if (info().iName != _L("") && info().iName != _L("loop6") && info().iName != _L("loop4")) {
-            printf("Interface %d\n", count++);
-
-            printf("Name \"%s\"\n", qt_TNameToQString(info().iName).toLatin1().data());
-            printf("NIF tag \"%s\"\n", qt_TNameToQString(info().iTag).toLatin1().data());
-
-            printf("State ");
-            switch (info().iState)
-            {
-                case EIfPending:
-                    printf("pending\n");
-                    break;
-                case EIfUp:
-                    printf("up\n");
-                    break;
-                case EIfBusy:
-                    printf("busy\n");
-                    break;
-                default:
-                    printf("down\n");
-                    break;
-            }
-
-            printf("Mtu %d\n", info().iMtu);
-            printf("Speed Metric %d\n", info().iSpeedMetric);
-
-            printf("Features:");
-            info().iFeatures & KIfIsLoopback         ? printf(" loopback") : printf("");
-            info().iFeatures & KIfIsDialup           ? printf(" dialup") : printf("");
-            info().iFeatures & KIfIsPointToPoint     ? printf(" pointtopoint") : printf("");
-            info().iFeatures & KIfCanBroadcast       ? printf(" canbroadcast") : printf("");
-            info().iFeatures & KIfCanMulticast       ? printf(" canmulticast") : printf("");
-            info().iFeatures & KIfCanSetMTU          ? printf(" cansetmtu") : printf("");
-            info().iFeatures & KIfHasHardwareAddr    ? printf(" hardwareaddr") : printf("");
-            info().iFeatures & KIfCanSetHardwareAddr ? printf(" cansethardwareaddr") : printf("");
-            printf("\n");
-
-            TName address;
-            info().iAddress.Output(address);
-            printf("Addr: %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            if (info().iAddress.IsLinkLocal()) {
-                printf("  -link local\n");
-            } else if (info().iAddress.IsSiteLocal()) {
-                printf("  -site local\n");
-            } else {
-                printf("  -global\n");
-            }
-
-            info().iNetMask.Output(address);
-            printf("Netmask %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            info().iBrdAddr.Output(address);
-            printf("Broadcast address %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            info().iDefGate.Output(address);
-            printf("Gatew: %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            info().iNameSer1.Output(address);
-            printf("DNS 1: %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            info().iNameSer2.Output(address);
-            printf("DNS 2: %s\n", qt_TNameToQString(address).toLatin1().data());
-
-            if (info().iHwAddr.Family() != KAFUnspec) {
-                printf("Hardware address ");
-                TUint j;
-                for (j = sizeof(SSockAddr) ; j < sizeof(SSockAddr) + 6 ; ++j) {
-                    if (j < (TUint)info().iHwAddr.Length()) {
-                        printf("%02X", info().iHwAddr[j]);
-                    } else {
-                        printf("??");
-                    }
-                    if (j < sizeof(SSockAddr) + 5)
-                        printf("-");
-                    else
-                        printf("\n");
-                    }
-                }
-            }
-        if (res == KErrNone) {
-            info = next;
-            printf("\n");
-        } else {
-            printf("\n");
-        }
-    }
-
-    sock.Pop();
-    ss.Pop();
-
-    return output;
-}
-
-static QString qt_RouteInfoL() {
-    QString output;
-    TAutoClose<RSocketServ> ss;
-    User::LeaveIfError(ss.iObj.Connect());
-    ss.PushL();
-
-    TAutoClose<RSocket> sock;
-    User::LeaveIfError(sock.iObj.Open(ss.iObj, _L("udp")));
-    sock.PushL();
-
-    TSoInetRouteInfo routeInfo;
-    TPckg<TSoInetRouteInfo> routeInfoPkg(routeInfo);
-
-    TName destAddr;
-    TName netMask;
-    TName gateway;
-    TName ifAddr;
-
-    // Begins enumeration of routes by setting this option
-    User::LeaveIfError(sock.iObj.SetOpt(KSoInetEnumRoutes, KSolInetRtCtrl));
-
-    // The TSoInetRouteInfo contains information for a new route each time GetOpt returns KErrNone
-    for (TInt i = 0; sock.iObj.GetOpt(KSoInetNextRoute, KSolInetRtCtrl, routeInfoPkg) == KErrNone ; i++)
-    {
-      // Extract the destination and netmask
-      routeInfo.iDstAddr.Output(destAddr);
-      routeInfo.iNetMask.Output(netMask);
-      routeInfo.iGateway.Output(gateway);
-      routeInfo.iIfAddr.Output(ifAddr);
-/*
-      if (destAddr.Length() <= 2)
-          continue;
-
-      if (netMask.Find(_L("255.255.255.255")) != KErrNotFound
-              || netMask.Find(_L("0.0.0.0")) != KErrNotFound
-              || netMask.Find(_L("ffff:ffff:ffff:ffff")) != KErrNotFound)
-          continue;
-*/
-      printf("Route Info #[%i]\n", i);
-      printf("DstAddr %s\n", qt_TNameToQString(destAddr).toLatin1().data());
-      printf("NetMask %s\n", qt_TNameToQString(netMask).toLatin1().data());
-      printf("Gateway %s\n", qt_TNameToQString(gateway).toLatin1().data());
-      printf("IfAddr %s\n", qt_TNameToQString(ifAddr).toLatin1().data());
-      printf("\n");
-    }
-
-    sock.Pop();
-    ss.Pop();
-
-    return output;
-}
-
-QString qt_TDesC2QStringL(const TDesC& aDescriptor)
-{
-#ifdef QT_NO_UNICODE
-    return QString::fromLocal8Bit(aDescriptor.Ptr(), aDescriptor.Length());
-#else
-    return QString::fromUtf16(aDescriptor.Ptr(), aDescriptor.Length());
-#endif
-}
-
-static bool qt_SetDefaultIapName(const QString &iapName, int &error) {
-    struct ifreq ifReq;
-    // clear structure
-    memset(&ifReq, 0, sizeof(struct ifreq));
-    // set IAP name value
-    // make sure it is in UTF8
-    strcpy(ifReq.ifr_name, iapName.toUtf8().data());
-
-    if (setdefaultif(&ifReq) == 0) {
-        // OK
-        error = 0;
-        return true;
-    } else {
-        error = errno;
-        return false;
-    }
-
-}
-static bool qt_SetDefaultSnapId(const int snapId, int &error) {
-    struct ifreq ifReq;
-    // clear structure
-    memset(&ifReq, 0, sizeof(struct ifreq));
-    // set SNAP ID value
-    ifReq.ifr_ifru.snap_id = snapId;
-
-    if (setdefaultif(&ifReq) == 0) {
-        // OK
-        error = 0;
-        return true;
-    } else {
-        error = errno;
-        return false;
-    }
-
-}
-
-static void qt_SaveIapName(QSettings& settings, QStringList& iapNames, QString& iapNameValue) {
-    if (iapNames.contains(iapNameValue) && iapNames.first() == iapNameValue) {
-        // no need to update
-    } else {
-        if (iapNameValue != QString("Easy WLAN")) {
-            // new selection alway on top
-            iapNames.removeAll(iapNameValue);
-            iapNames.prepend(iapNameValue);
-            writeIapNamesSettings(settings, iapNames);
-        } else {
-            // Unbeliveable ... if IAP dodn't exist before
-            // no matter what you choose from IAP selection list
-            // you will get "Easy WLAN" as IAP name value
-
-            // somehow commsdb is not in sync
-        }
-    }
-}
-
-static QString qt_OfferIapDialog() {
-    TBuf8<256> iapName;
-
-    RSocketServ socketServ;
-    CleanupClosePushL(socketServ);
-
-    RConnection connection;
-    CleanupClosePushL(connection);
-
-    socketServ.Connect();
-    connection.Open(socketServ);
-    connection.Start();
-
-    connection.GetDesSetting(TPtrC(KIapNameSetting), iapName);
-
-    //connection.Stop();
-
-    iapName.ZeroTerminate();
-    QString strIapName((char*)iapName.Ptr());
-
-    int error = 0;
-    if (!qt_SetDefaultIapName(strIapName, error)) {
-        //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error);
-        strIapName = QString("");
-    }
-
-    CleanupStack::PopAndDestroy(&connection);
-    CleanupStack::PopAndDestroy(&socketServ);
-
-    return strIapName;
-}
-
-static QString qt_CheckForActiveConnection() {
-    TUint count;
-
-    RSocketServ serv;
-    CleanupClosePushL(serv);
-
-    RConnection conn;
-    CleanupClosePushL(conn);
-
-    serv.Connect();
-    conn.Open(serv);
-
-    TConnectionInfoBuf connInfo;
-
-    TBuf8<256> iapName;
-    TBuf8<256> iapServiceType;
-
-    QString strIapName;
-
-    if (conn.EnumerateConnections(count) == KErrNone) {
-        if (count > 0) {
-            for (TUint i = 1; i <= count; i++) {
-                if (conn.GetConnectionInfo(i, connInfo) == KErrNone) {
-                    RConnection tempConn;
-                    CleanupClosePushL(tempConn);
-                    tempConn.Open(serv);
-                    if (tempConn.Attach(connInfo, RConnection::EAttachTypeNormal) == KErrNone) {
-                       tempConn.GetDesSetting(TPtrC(KIapNameSetting), iapName);
-                       tempConn.GetDesSetting(TPtrC(KIapServiceType), iapServiceType);
-                       //tempConn.Stop();
-                       iapName.ZeroTerminate();
-                       iapServiceType.ZeroTerminate();
-
-//                        if (iapServiceType.Find(_L8("LANService")) != KErrNotFound) {
-//                            activeLanConnectionFound = ETrue;
-//                            break;
-//                        }
-                        strIapName = QString((char*)iapName.Ptr());
-                        int error = 0;
-                        if (!qt_SetDefaultIapName(strIapName, error)) {
-                            //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error);
-                            strIapName = QString("");
-                        }
-
-                        CleanupStack::PopAndDestroy(&tempConn);
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    //conn.Stop();
-
-    CleanupStack::PopAndDestroy(&conn);
-    CleanupStack::PopAndDestroy(&serv);
-
-    return strIapName;
-}
-
-static QString qt_CheckSettingsForConnection(QStringList& iapNames) {
-    QString strIapName;
-    for (int index = 0; index < iapNames.size(); ++index) {
-        strIapName = iapNames.at(index);
-        int error = 0;
-        if (!qt_SetDefaultIapName(strIapName, error)) {
-            //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error);
-            strIapName = QString("");
-        } else {
-            return strIapName;
-        }
-    }
-    return strIapName;
-}
-
-static void qt_SetDefaultIapL()
-{
-    // settings @ /c/data/.config/Trolltech.com
-    QSettings settings(QSettings::UserScope, qtOrganizationTag);
-    // populate iap name list
-    QStringList iapNames;
-    readIapNamesSettings(settings, iapNames);
-
-    QString iapNameValue;
-
-    iapNameValue = qt_CheckForActiveConnection();
-
-    if (!iapNameValue.isEmpty()) {
-        qt_SaveIapName(settings, iapNames, iapNameValue);
-        return;
-    }
-
-    iapNameValue = qt_CheckSettingsForConnection(iapNames);
-
-    if (!iapNameValue.isEmpty()) {
-        qt_SaveIapName(settings, iapNames, iapNameValue);
-        return;
-    }
-
-    /*
-     * no active LAN connections yet
-     * no IAP in settings
-     * offer IAP dialog to user
-     */
-    iapNameValue = qt_OfferIapDialog();
-    qt_SaveIapName(settings, iapNames, iapNameValue);
-    return;
-
-}
-
-static int qt_SetDefaultIap()
-{
-//#ifndef __WINS__
-    TRAPD(err1, qt_SetDefaultIapL());
-//    TRAPD(err2, qt_InterfaceInfoL());
-//    TRAPD(err3, qt_RouteInfoL());
-    return err1;
-//#else
-    return 0; // IAP dialog not required for emulator
-//#endif
-}
-
-#endif // QSYM_IAP_UTIL_H
Binary file ginebra2/translations/Browser.xls has changed
--- a/ginebra2/translations/browserLoc.ts	Tue Jul 06 14:03:49 2010 +0300
+++ b/ginebra2/translations/browserLoc.ts	Wed Aug 18 09:37:05 2010 +0300
@@ -16,7 +16,7 @@
     <comment>Title of Content View.</comment>        
     <source>Browser</source>
     <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id>txt_browser_windows_new_window</extra-loc-layout_id>    
+    <extra-loc-layout_id>txt_browser_content_view_new_window</extra-loc-layout_id>    
     <extra-loc-viewid>Browser_Content_Title_001</extra-loc-viewid>
     <extra-loc-positionid>title</extra-loc-positionid>
     <extra-loc-feature>Br</extra-loc-feature>
@@ -26,7 +26,7 @@
     <comment>Title of Windows View</comment>        
     <source>Windows</source>
     <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id>txt_browser_windows_new_window</extra-loc-layout_id>    
+    <extra-loc-layout_id>txt_browser_content_view_new_window</extra-loc-layout_id>    
     <extra-loc-viewid>Browser_Windows_001</extra-loc-viewid>
     <extra-loc-positionid>title</extra-loc-positionid>
     <extra-loc-feature>Br</extra-loc-feature>
@@ -62,26 +62,6 @@
     <extra-loc-feature>Br</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
-<message numerus="no" id="txt_browser_info_message">
-    <comment>Layout ID parent. Error info notification message</comment>        
-    <source>Info Message</source>
-    <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id>txt_browser_info_message</extra-loc-layout_id>    
-    <extra-loc-viewid>Browser_Error_Dialog_001</extra-loc-viewid>
-    <extra-loc-positionid>dpopinfo</extra-loc-positionid>
-    <extra-loc-feature>Br</extra-loc-feature>
-    <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_browser_most_visited_title">
-    <comment>For the title of the Most Visited pages grid</comment>        
-    <source>Most Visited</source>
-    <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id>txt_browser_most_visited_title_most_visited</extra-loc-layout_id>    
-    <extra-loc-viewid>Browser_Content_Most_Visited_001</extra-loc-viewid>
-    <extra-loc-positionid>title</extra-loc-positionid>
-    <extra-loc-feature>Br</extra-loc-feature>
-    <extra-loc-blank>False</extra-loc-blank>
-</message>
 <message numerus="no" id="txt_browser_content_view_menu_page_allow_popups">
     <comment>Layout ID parent. Content View Context Menu Page tab Allow Pop-ups menu item</comment>        
     <source>Allow Pop-ups</source>
@@ -108,7 +88,7 @@
     <translation variants="no" type="unfinished"></translation>
     <extra-loc-layout_id>txt_browser_windows_new_window</extra-loc-layout_id>    
     <extra-loc-viewid>Browser_Windows_001 </extra-loc-viewid>
-    <extra-loc-positionid>title</extra-loc-positionid>
+    <extra-loc-positionid>subhead</extra-loc-positionid>
     <extra-loc-feature>Br</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
@@ -206,14 +186,14 @@
     <comment>Page title in Bookmarks View</comment>        
     <source>Bookmarks</source>
     <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id>txt_browser_windows_new_window</extra-loc-layout_id>    
+    <extra-loc-layout_id>txt_browser_content_view_new_window</extra-loc-layout_id>    
     <extra-loc-viewid>Browser_Bookmarks_001</extra-loc-viewid>
     <extra-loc-positionid>title</extra-loc-positionid>
     <extra-loc-feature>Br</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
 <message numerus="no" id="txt_browser_content_view_new_window">
-    <comment>Title of New Window in Content View</comment>        
+    <comment>Layout ID parent.  Title of New Window in Content View</comment>        
     <source>New Window</source>
     <translation variants="no" type="unfinished"></translation>
     <extra-loc-layout_id>txt_browser_content_view_new_window</extra-loc-layout_id>    
@@ -236,7 +216,7 @@
     <comment>Title of Settings View</comment>        
     <source>Settings</source>
     <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id>txt_browser_windows_new_window</extra-loc-layout_id>    
+    <extra-loc-layout_id>txt_browser_content_view_new_window</extra-loc-layout_id>    
     <extra-loc-viewid>Browser_Settings_001</extra-loc-viewid>
     <extra-loc-positionid>title</extra-loc-positionid>
     <extra-loc-feature>Br</extra-loc-feature>
@@ -252,6 +232,16 @@
     <extra-loc-feature>Br</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
+<message numerus="no" id="txt_browser_most_visited_title_most_visited">
+    <comment>Layout ID parent. For the title of the Most Visited pages grid</comment>        
+    <source>Most Visited</source>
+    <translation variants="no" type="unfinished"></translation>
+    <extra-loc-layout_id>txt_browser_most_visited_title_most_visited</extra-loc-layout_id>    
+    <extra-loc-viewid>Browser_Content_Most_Visited_001</extra-loc-viewid>
+    <extra-loc-positionid>title</extra-loc-positionid>
+    <extra-loc-feature>Br</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
 <message numerus="no" id="txt_browser_settings_general_settings_no">
     <comment>In the Browser Settings, for setting an option to No</comment>        
     <source>No</source>
--- a/rom/browser.iby	Tue Jul 06 14:03:49 2010 +0300
+++ b/rom/browser.iby	Wed Aug 18 09:37:05 2010 +0300
@@ -1,18 +1,11 @@
 
 /*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
-* under the terms of "Symbian Foundation License v1.0"
+* under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
-* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 */
 
@@ -34,7 +27,7 @@
 /* From sf\app\browserui\bedrockProvisioning\bedrockProvisioning_template.pkg ***********************/
 
 file=ABI_DIR\BUILD_DIR\BedrockProvisioning.dll  SHARED_LIB_DIR\BedrockProvisioning.dll
-data=\sf\app\browserui\bedrockProvisioning\template\200267EA.ini  data\.config\Nokia\200267EA.ini
+data=DATAZ_\data\.config\Nokia\200267EA.ini  data\.config\Nokia\200267EA.ini
 
 /* From sf\app\browserui\ginebra2\NokiaBrowser_template.pkg ***********************/
 
@@ -42,28 +35,28 @@
 data=DATAZ_\RESOURCE_FILES_DIR\apps\NokiaBrowser.rsc  resource\apps\NokiaBrowser.rsc
 data=DATAZ_\private\10003a3f\import\apps\NokiaBrowser_reg.rsc  private\10003a3f\import\apps\NokiaBrowser_reg.rsc
 data=DATAZ_\RESOURCE_FILES_DIR\apps\NokiaBrowser.mif  resource\apps\NokiaBrowser.mif
-data=\sf\app\browserui\ginebra2\chrome\localpages\installnotes.html  private\10008D39\localpages\installnotes.html
-data=\sf\app\browserui\ginebra2\chrome\localpages\relnotes.html  private\10008D39\localpages\relnotes.html
-data=\sf\app\browserui\ginebra2\chrome\localpages\startpage.html  private\10008D39\localpages\startpage.html
-data=\sf\app\browserui\ginebra2\chrome\localpages\startpage_101.html  private\10008D39\localpages\startpage_101.html
-data=\sf\app\browserui\ginebra2\chrome\localpages\startpage.css  private\10008D39\localpages\startpage.css
-data=\sf\app\browserui\ginebra2\chrome\localpages\subpage.css  private\10008D39\localpages\subpage.css
-data=\sf\app\browserui\ginebra2\chrome\localpages\grad_tall.jpg  private\10008D39\localpages\grad_tall.jpg
-data=\sf\app\browserui\ginebra2\chrome\localpages\back.png  private\10008D39\localpages\back.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\bedrock.png  private\10008D39\localpages\bedrock.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\bedrock_splash.png  private\10008D39\localpages\bedrock_splash.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button1.png  private\10008D39\localpages\button1.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button2.png  private\10008D39\localpages\button2.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button3.png  private\10008D39\localpages\button3.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button4.png  private\10008D39\localpages\button4.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button_back.png  private\10008D39\localpages\button_back.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button_del.png  private\10008D39\localpages\button_del.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button_rel_notes.png  private\10008D39\localpages\button_rel_notes.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button_report_bug.png  private\10008D39\localpages\button_report_bug.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button_search_google.png  private\10008D39\localpages\button_search_google.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\button_survey.png  private\10008D39\localpages\button_survey.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\google.png  private\10008D39\localpages\google.png
-data=\sf\app\browserui\ginebra2\chrome\localpages\nokia_logo.png  private\10008D39\localpages\nokia_logo.png
+data=DATAZ_\private\10008d39\localpages\installnotes.html  private\10008d39\localpages\installnotes.html
+data=DATAZ_\private\10008d39\localpages\relnotes.html  private\10008d39\localpages\relnotes.html
+data=DATAZ_\private\10008d39\localpages\startpage.html  private\10008d39\localpages\startpage.html
+data=DATAZ_\private\10008d39\localpages\startpage_101.html  private\10008d39\localpages\startpage_101.html
+data=DATAZ_\private\10008d39\localpages\startpage.css  private\10008d39\localpages\startpage.css
+data=DATAZ_\private\10008d39\localpages\subpage.css  private\10008d39\localpages\subpage.css
+data=DATAZ_\private\10008d39\localpages\grad_tall.jpg  private\10008d39\localpages\grad_tall.jpg
+data=DATAZ_\private\10008d39\localpages\back.png  private\10008d39\localpages\back.png
+data=DATAZ_\private\10008d39\localpages\bedrock.png  private\10008d39\localpages\bedrock.png
+data=DATAZ_\private\10008d39\localpages\bedrock_splash.png  private\10008d39\localpages\bedrock_splash.png
+data=DATAZ_\private\10008d39\localpages\button1.png  private\10008d39\localpages\button1.png
+data=DATAZ_\private\10008d39\localpages\button2.png  private\10008d39\localpages\button2.png
+data=DATAZ_\private\10008d39\localpages\button3.png  private\10008d39\localpages\button3.png
+data=DATAZ_\private\10008d39\localpages\button4.png  private\10008d39\localpages\button4.png
+data=DATAZ_\private\10008d39\localpages\button_back.png  private\10008d39\localpages\button_back.png
+data=DATAZ_\private\10008d39\localpages\button_del.png  private\10008d39\localpages\button_del.png
+data=DATAZ_\private\10008d39\localpages\button_rel_notes.png  private\10008d39\localpages\button_rel_notes.png
+data=DATAZ_\private\10008d39\localpages\button_report_bug.png  private\10008d39\localpages\button_report_bug.png
+data=DATAZ_\private\10008d39\localpages\button_search_google.png  private\10008d39\localpages\button_search_google.png
+data=DATAZ_\private\10008d39\localpages\button_survey.png  private\10008d39\localpages\button_survey.png
+data=DATAZ_\private\10008d39\localpages\google.png  private\10008d39\localpages\google.png
+data=DATAZ_\private\10008d39\localpages\nokia_logo.png  private\10008d39\localpages\nokia_logo.png
 
 /* From sf\mw\browser\bookmarksengine\browsercontentdll\browsercontentdll_template.pkg ***********************/