--- a/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Mon Mar 30 12:54:55 2009 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebView.cpp Fri May 08 08:25:06 2009 +0300
@@ -138,12 +138,11 @@
// -----------------------------------------------------------------------------
-// CWebKitView::NewL
+// WebView::NewL
// Public Class Method
// Two-phased constructor.
// -----------------------------------------------------------------------------
-WebView* WebView::NewL(
- CCoeControl& parent, CBrCtl* brctl )
+WebView* WebView::NewL( CCoeControl& parent, CBrCtl* brctl )
{
WebView* self = new (ELeave) WebView( brctl );
@@ -155,7 +154,7 @@
}
// -----------------------------------------------------------------------------
-// CWebKitView::CWebKitView
+// WebView::CWebKitView
// Private Class Method
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
@@ -163,6 +162,7 @@
m_brctl(brctl)
, m_isEditable(false)
, m_currentEventKey(KNullKeyEvent)
+, m_currentEventCode(EEventNull)
, m_scrollingSpeed(KNormalScrollRange*KZoomLevelDefaultValue/100)
, m_focusedElementType(TBrCtlDefs::EElementNone)
, m_pageScaler(NULL)
@@ -232,12 +232,11 @@
}
// -----------------------------------------------------------------------------
-// CWebKitView::ConstructL
+// WebView::ConstructL
// Private Class Method
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
-void WebView::ConstructL(
- CCoeControl& parent)
+void WebView::ConstructL( CCoeControl& parent )
{
SetContainerWindowL(parent);
@@ -360,11 +359,10 @@
}
//-------------------------------------------------------------------------------
-// Draw ( from CCoeControl )
+// WebView::Draw ( from CCoeControl )
// BitBlts the offscreen bitmap to the GraphicsContext
//-------------------------------------------------------------------------------
-void WebView::Draw(
- const TRect& rect ) const
+void WebView::Draw( const TRect& rect ) const
{
if (m_pluginFullscreen) return;
@@ -437,11 +435,10 @@
}
//-------------------------------------------------------------------------------
-// SyncRepaint
+// WebView::syncRepaint
// Repaint the given rectangle synchronously
//-------------------------------------------------------------------------------
-void WebView::syncRepaint(
- const TRect& rect)
+void WebView::syncRepaint( const TRect& rect)
{
m_repaints.AddRect( rect );
syncRepaint();
@@ -530,7 +527,7 @@
// draw to back buffer
-
+
if(!( m_widgetextension && m_widgetextension->IsWidgetPublising())) {
mainFrame()->frameView()->draw( *m_webcorecontext, rect );
if ( zoomLevel < m_minZoomLevel ) zoomLevel = m_minZoomLevel;
@@ -538,7 +535,7 @@
}
}
//-------------------------------------------------------------------------------
-// SyncRepaint
+// WebView::syncRepaint
// Repaint the current repaint region synchronously and clear it
//-------------------------------------------------------------------------------
void WebView::syncRepaint()
@@ -613,7 +610,7 @@
}
//-------------------------------------------------------------------------------
-// DoRepaint
+// WebView::doRepaint
// Perform a scheduled repaint
//-------------------------------------------------------------------------------
void WebView::doRepaint()
@@ -631,12 +628,12 @@
}
//-------------------------------------------------------------------------------
-// CollectOffscreenbitmap
+// WebView::collectOffscreenbitmap
// Get offscreen bitmap
//-------------------------------------------------------------------------------
void WebView::collectOffscreenbitmapL(CFbsBitmap& snapshot)
{
-
+
(snapshot).Create(m_brctl->Size(), StaticObjectsContainer::instance()->webSurface()->displayMode());
CFbsBitmapDevice* device = CFbsBitmapDevice::NewL( &snapshot);
@@ -652,7 +649,7 @@
}
//-------------------------------------------------------------------------------
-// ScheduleRepaint
+// WebView::scheduleRepaint
// Schedule an asynchronous repaint
//-------------------------------------------------------------------------------
void WebView::scheduleRepaint(
@@ -667,7 +664,7 @@
#endif
}
// if we are active, we'll repaint when timer fires
- if( !m_repainttimer->IsActive() && !m_pageZoomHandler->isActive() &&
+ if( !m_repainttimer->IsActive() && !m_pageZoomHandler->isActive() &&
m_allowRepaints) {
// no timer yet, repaint immediatly (but asynchronously)
m_repainttimer->Start( 0, 0, TCallBack( &doRepaintCb, this ) );
@@ -790,6 +787,325 @@
return rv;
}
+bool WebView::isNaviKey(const TKeyEvent& keyevent)
+{
+ return ( keyevent.iCode == EKeyUpArrow // North
+ || keyevent.iCode == EKeyRightUpArrow // Northeast
+ || keyevent.iCode == EStdKeyDevice11 // : Extra KeyEvent supports diagonal event simulator wedge
+ || keyevent.iCode == EKeyRightArrow // East
+ || keyevent.iCode == EKeyRightDownArrow // Southeast
+ || keyevent.iCode == EStdKeyDevice12 // : Extra KeyEvent supports diagonal event simulator wedge
+ || keyevent.iCode == EKeyDownArrow // South
+ || keyevent.iCode == EKeyLeftDownArrow // Southwest
+ || keyevent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
+ || keyevent.iCode == EKeyLeftArrow // West
+ || keyevent.iCode == EKeyLeftUpArrow // Northwest
+ || keyevent.iCode == EStdKeyDevice10);
+}
+
+bool WebView::handleEditable(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame )
+{
+ bool consumed = false;
+ consumed = frame->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode));
+ // exit input on up/down key
+ // EXCEPT on touch-enabled devices. We'll just consume in that case
+ if ( !consumed && isNaviKey(keyevent) ) {
+ if (m_webfeptexteditor->validateTextFormat() ) {
+ setFocusNone();
+ }
+ else {
+ consumed = true;
+ }
+ }
+
+ return consumed;
+}
+
+
+bool WebView::handleEventKeyDown(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
+{
+ m_currentEventKey = keyevent;
+ m_currentEventCode = eventcode;
+ return false; // not consumed
+}
+
+
+void WebView::sendMouseEventToEngine(TPointerEvent::TType eventType, TPoint pos, Frame* frame)
+{
+ TPointerEvent event;
+ event.iPosition = pos;
+ event.iModifiers = 0;
+ event.iType = eventType;
+
+ switch (eventType) {
+ case TPointerEvent::EButton1Down:
+ {
+ frame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(event));
+ break;
+ }
+
+ case TPointerEvent::EButton1Up:
+ {
+ frame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(event));
+ break;
+ }
+
+ case TPointerEvent::EMove:
+ {
+ frame->eventHandler()->handleMouseMoveEvent(PlatformMouseEvent(event));
+ break;
+ }
+ };
+}
+
+
+void WebView::setFocusedNode(Frame* frame)
+{
+ Node* node = frame->eventHandler()->mousePressNode();
+ for (Node* n = node; n; n = n->parentNode()) {
+ if ( n->isFocusable() ) {
+ page()->focusController()->setFocusedNode(n, frame);
+ }
+ }
+}
+
+bool WebView::handleEventKeyL(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
+{
+ WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+ bool consumed = false;
+
+ TKeyEvent oldKeyEvent(m_currentEventKey);
+ bool downEventConsumed = false;
+ if (m_currentEventCode == EEventKeyDown &&
+ keyevent.iCode != EKeyDevice3 ){
+ sendKeyEventToEngine(oldKeyEvent, EEventKeyDown, frame);
+ }
+ m_currentEventKey = keyevent;
+ m_currentEventCode = eventcode;
+ if (keyevent.iCode == EKeyDevice3) {
+ // pass it to webcore
+ sendMouseEventToEngine(TPointerEvent::EButton1Down,
+ cursor->position(), frame);
+
+ // mimic ccb's behavior of onFocus
+ setFocusedNode(frame);
+
+ // Toolbar is activated on long key press only if the element
+ // type is EElementNone during EEventKeyDown and EEventKey.
+ // This prevents toolbar from popping up in DHTML pages. Also,
+ // toolbar is activated when the user is not in fast scroll
+ // mode, or in page overview mode, or on wml page.
+ if ( ( m_focusedElementType == TBrCtlDefs::EElementNone ||
+ m_focusedElementType == TBrCtlDefs::EElementBrokenImage ) &&
+ keyevent.iRepeats && !m_brctl->wmlMode() ) {
+ launchToolBarL();
+ }
+ consumed = true;
+ }
+ else if (isNaviKey(keyevent)) {
+ if (m_brctl->settings()->getTabbedNavigation()) {
+ consumed = downEventConsumed || handleTabbedNavigation(keyevent, eventcode);
+ }
+ else {
+ consumed = handleKeyNavigation(keyevent, eventcode, frame);
+ }
+ } // if (m_brctl->settings()->getTabbedNavigation()
+ else { // Not an arrow key..
+ // activate hovered input element by just start typing
+ consumed = handleInputElement(keyevent, eventcode, frame);
+ }
+
+ if (!consumed) {
+ consumed = sendKeyEventToEngine(keyevent, eventcode, frame);
+ }
+ return consumed;
+}
+
+
+bool WebView::handleInputElement(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
+{
+ WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+ if (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
+ m_focusedElementType == TBrCtlDefs::EElementSelectBox ||
+ m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox ||
+ m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
+
+ sendMouseEventToEngine(TPointerEvent::EButton1Down, cursor->position(), frame);
+ sendMouseEventToEngine(TPointerEvent::EButton1Up, cursor->position(), frame);
+
+ if (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
+ m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
+ if (!m_fepTimer) {
+ m_fepTimer = new WebCore::Timer<WebView>(this, &WebView::fepTimerFired);
+ }
+
+ m_fepTimer->startOneShot(0.2f);
+ setEditable(true);
+ }
+ m_keyevent = keyevent;
+ m_eventcode = eventcode;
+ }
+ return true;
+}
+
+
+bool WebView::handleKeyNavigation(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
+{
+ WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+ bool consumed = false;
+ bool fastscroll(m_fastScrollTimer->IsActive());
+
+ // start fast scrolling
+ m_showCursor = true;
+ if (!cursor->isVisible()) {
+ cursor->cursorUpdate(true);
+ }
+
+ m_savedPosition = mainFrame()->frameView()->contentPos();
+ cursor->scrollAndMoveCursor(keyevent.iCode, m_scrollingSpeed, fastscroll);
+ updateScrollbars();
+ if (!fastscroll) {
+ m_fastScrollTimer->Start(KCursorInitialDelay,KCursorUpdateFrquency,TCallBack(&scrollTimerCb,this));
+ m_scrollingStartTime.HomeTime();
+ }
+
+ // and minimap comes on
+ consumed = handleMinimapNavigation();
+
+ if (!fastscroll) {
+ sendMouseEventToEngine(TPointerEvent::EMove, cursor->position(), frame);
+ }
+
+ consumed = true;
+ return consumed;
+}
+
+
+bool WebView::handleMinimapNavigation()
+{
+ int scrollingTime = millisecondsScrolled();
+ if (!AknLayoutUtils::PenEnabled() && m_pageScalerEnabled &&
+ m_pageScaler && !isSmallPage() &&
+ m_brctl->settings()->brctlSetting(TBrCtlDefs::ESettingsPageOverview) &&
+ (scrollingTime > KPanningPageScalerStart || m_pageScaler->Visible())) {
+ m_pageScaler->SetVisibleUntil(KScalerVisibilityTime);
+ }
+ return true;
+}
+
+bool WebView::handleTabbedNavigation(const TKeyEvent& keyevent, TEventCode eventcode)
+{
+ int horizontal = 0;
+ int vertical = 0;
+ switch(keyevent.iCode) {
+ case EKeyUpArrow: // North
+ vertical = -1;
+ break;
+
+ case EKeyRightUpArrow: // Northeast
+ case EStdKeyDevice11: // : Extra KeyEvent supports diagonal event simulator wedge
+ vertical = -1;
+ horizontal = +1;
+ break;
+
+ case EKeyRightArrow: // East
+ horizontal = +1;
+ break;
+
+ case EKeyRightDownArrow: // Southeast
+ case EStdKeyDevice12: // : Extra KeyEvent supports diagonal event simulator wedge
+ vertical = +1;
+ horizontal = +1;
+ break;
+
+ case EKeyDownArrow: // South
+ vertical = +1;
+ break;
+
+ case EKeyLeftDownArrow: // Southwest
+ case EStdKeyDevice13: // : Extra KeyEvent supports diagonal event simulator wedge
+ vertical = +1;
+ horizontal = -1;
+ break;
+
+ case EKeyLeftArrow: // West
+ horizontal = -1;
+ break;
+
+ case EKeyLeftUpArrow: // Northwest
+ case EStdKeyDevice10: // : Extra KeyEvent supports diagonal event simulator wedge
+ vertical = -1;
+ horizontal = -1;
+ break;
+
+ default: // (Should never get here)
+ break;
+
+ }
+ return m_tabbedNavigation->navigate(horizontal, vertical);
+}
+
+
+bool WebView::handleEventKeyUp(const TKeyEvent& keyevent, TEventCode eventcode, Frame* frame)
+{
+ bool consumed = false;
+ TInt delay = 2 * KCursorInitialDelay;
+ WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
+ m_fastScrollTimer->Cancel();
+ m_scrollingSpeed = KNormalScrollRange*100/scalingFactor();
+
+ if (viewIsFastScrolling()) {
+ setViewIsFastScrolling(false);
+ sendMouseEventToEngine(TPointerEvent::EMove, cursor->position(), frame);
+ toggleRepaintTimer(true);
+ if (!inPageViewMode()) {
+ delay = 0;
+ }
+ }
+ m_pageScrollHandler->scrollbarDrawer()->fadeScrollbar(delay);
+
+ if ( (keyevent.iScanCode == EStdKeyDevice3) ||
+ (keyevent.iScanCode == EStdKeyEnter) ) {
+ // pass it to webcore
+
+ if (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
+ m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
+ setEditable(true);
+ }
+ sendMouseEventToEngine(TPointerEvent::EButton1Up, cursor->position(), frame);
+ consumed = true;
+ }
+ if (!consumed) {
+ sendKeyEventToEngine(keyevent, eventcode, frame);
+ }
+ m_currentEventKey = KNullKeyEvent;
+ m_currentEventCode = EEventNull;
+ return consumed;
+}
+
+
+bool WebView::sendKeyEventToEngine(const TKeyEvent& keyevent,
+ TEventCode eventcode, Frame* frame)
+{
+ bool consumed = frame->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode));
+
+ if (!consumed && eventcode == EEventKey &&
+ (m_brctl->capabilities() & TBrCtlDefs::ECapabilityAccessKeys)) {
+
+ TKeyEvent ke = keyevent;
+ TChar c(ke.iCode);
+ // Not consumed by WebCore, is alphanumeric and does not have any modifier
+ if (c.IsAlphaDigit() &&
+ !(ke.iModifiers & (EModifierCtrl | EModifierAlt | EModifierShift))) {
+ ke.iModifiers = EModifierCtrl;
+ frame->eventHandler()->keyEvent(PlatformKeyboardEvent(ke,EEventKeyDown));
+ consumed = true;
+ }
+ }
+ return consumed;
+}
+
+
TKeyResponse WebView::OfferKeyEventL(const TKeyEvent& keyevent, TEventCode eventcode )
{
WebCursor* cursor = StaticObjectsContainer::instance()->webCursor();
@@ -806,253 +1122,37 @@
if ( m_webFormFillPopup && m_webFormFillPopup->IsVisible() && AknLayoutUtils::PenEnabled() ) {
if (EKeyWasConsumed == m_webFormFillPopup->HandleKeyEventL(keyevent, eventcode)) {
return EKeyWasConsumed;
- }
+ }
}
bool consumed = false;
Frame* coreFrame = core(mainFrame());
if (!coreFrame)
return EKeyWasNotConsumed;
-
coreFrame = page()->focusController()->focusedOrMainFrame();
// edit events
if (m_isEditable) {
- consumed = page()->focusController()->focusedOrMainFrame()->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode));
- // exit input on up/down key
- // EXCEPT on touch-enabled devices. We'll just consume in that case
- if ( !consumed
- && ( keyevent.iCode == EKeyUpArrow // North
- || keyevent.iCode == EKeyRightUpArrow // Northeast
- || keyevent.iCode == EStdKeyDevice11 // : Extra KeyEvent supports diagonal event simulator wedge
- || keyevent.iCode == EKeyRightArrow // East
- || keyevent.iCode == EKeyRightDownArrow // Southeast
- || keyevent.iCode == EStdKeyDevice12 // : Extra KeyEvent supports diagonal event simulator wedge
- || keyevent.iCode == EKeyDownArrow // South
- || keyevent.iCode == EKeyLeftDownArrow // Southwest
- || keyevent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
- || keyevent.iCode == EKeyLeftArrow // West
- || keyevent.iCode == EKeyLeftUpArrow // Northwest
- || keyevent.iCode == EStdKeyDevice10 ) ) // : Extra KeyEvent supports diagonal event simulator wedge
- {
- if (m_webfeptexteditor->validateTextFormat() ) {
- setFocusNone();
- } else {
- consumed = true;
- }
- }
+ consumed = handleEditable(keyevent, eventcode, coreFrame);
}
// scroll events
if (!consumed) {
switch( eventcode ) {
case EEventKeyDown:
- m_currentEventKey = keyevent;
- //page()->mainFrame()->setFocusedNodeIfNeeded();
- //coreFrame->eventHandler()->mousePressNode()->focus();
-
+ handleEventKeyDown(keyevent, eventcode, coreFrame);
break;
case EEventKey:
if (keyevent.iScanCode != m_currentEventKey.iScanCode ) return EKeyWasNotConsumed;
- //
- m_currentEventKey = keyevent;
- if (keyevent.iCode == EKeyDevice3) {
- // pass it to webcore
- TPointerEvent event;
- event.iPosition = StaticObjectsContainer::instance()->webCursor()->position();
- event.iModifiers = 0;
- event.iType = TPointerEvent::EButton1Down ;
- coreFrame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(event));
-
- // mimic ccb's behavior of onFocus
- Node* node = page()->focusController()->focusedOrMainFrame()->eventHandler()->mousePressNode();
- for (Node* n = node; n; n = n->parentNode()) {
- if ( n->isFocusable() ) {
- page()->focusController()->setFocusedNode(n, page()->focusController()->focusedOrMainFrame());
- }
- }
-
- // Toolbar is activated on long key press only if the element
- // type is EElementNone during EEventKeyDown and EEventKey.
- // This prevents toolbar from popping up in DHTML pages. Also,
- // toolbar is activated when the user is not in fast scroll
- // mode, or in page overview mode, or on wml page.
- if ( ( m_focusedElementType == TBrCtlDefs::EElementNone ||
- m_focusedElementType == TBrCtlDefs::EElementBrokenImage ) &&
- keyevent.iRepeats && !m_brctl->wmlMode() )
- {
- launchToolBarL();
- }
- consumed = true;
- } else if ( keyevent.iCode == EKeyUpArrow // North
- || keyevent.iCode == EKeyRightUpArrow // Northeast
- || keyevent.iCode == EStdKeyDevice11 // : Extra KeyEvent supports diagonal event simulator wedge
- || keyevent.iCode == EKeyRightArrow // East
- || keyevent.iCode == EKeyRightDownArrow // Southeast
- || keyevent.iCode == EStdKeyDevice12 // : Extra KeyEvent supports diagonal event simulator wedge
- || keyevent.iCode == EKeyDownArrow // South
- || keyevent.iCode == EKeyLeftDownArrow // Southwest
- || keyevent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
- || keyevent.iCode == EKeyLeftArrow // West
- || keyevent.iCode == EKeyLeftUpArrow // Northwest
- || keyevent.iCode == EStdKeyDevice10 ) // : Extra KeyEvent supports diagonal event simulator wedge
- {
- if (m_brctl->settings()->getTabbedNavigation()) {
- int horizontal = 0;
- int vertical = 0;
- switch(keyevent.iCode)
- {
- case EKeyUpArrow: // North
- vertical = -1;
- break;
-
- case EKeyRightUpArrow: // Northeast
- case EStdKeyDevice11: // : Extra KeyEvent supports diagonal event simulator wedge
- vertical = -1;
- horizontal = +1;
- break;
-
- case EKeyRightArrow: // East
- horizontal = +1;
- break;
-
- case EKeyRightDownArrow: // Southeast
- case EStdKeyDevice12: // : Extra KeyEvent supports diagonal event simulator wedge
- vertical = +1;
- horizontal = +1;
- break;
-
- case EKeyDownArrow: // South
- vertical = +1;
- break;
-
- case EKeyLeftDownArrow: // Southwest
- case EStdKeyDevice13: // : Extra KeyEvent supports diagonal event simulator wedge
- vertical = +1;
- horizontal = -1;
- break;
-
- case EKeyLeftArrow: // West
- horizontal = -1;
- break;
-
- case EKeyLeftUpArrow: // Northwest
- case EStdKeyDevice10: // : Extra KeyEvent supports diagonal event simulator wedge
- vertical = -1;
- horizontal = -1;
- break;
-
- default: // (Should never get here)
- break;
-
- }
-
- consumed = m_tabbedNavigation->navigate(horizontal, vertical);
- }
- else {
- // start fast scrolling
- m_showCursor = true;
- if (!cursor->isVisible()) {
- cursor->cursorUpdate(true);
- }
- bool fastscroll(m_fastScrollTimer->IsActive());
- m_savedPosition = mainFrame()->frameView()->contentPos();
- cursor->scrollAndMoveCursor(keyevent.iCode, m_scrollingSpeed, fastscroll);
- if (!fastscroll) {
- m_fastScrollTimer->Start(KCursorInitialDelay,KCursorUpdateFrquency,TCallBack(&scrollTimerCb,this));
- m_scrollingStartTime.HomeTime();
- }
- // and minimap comes on
- int scrollingTime = millisecondsScrolled();
- if (!AknLayoutUtils::PenEnabled() && m_pageScalerEnabled && m_pageScaler && !isSmallPage() &&
- m_brctl->settings()->brctlSetting(TBrCtlDefs::ESettingsPageOverview) &&
- (scrollingTime > KPanningPageScalerStart || m_pageScaler->Visible())) {
- m_pageScaler->SetVisibleUntil(KScalerVisibilityTime);
- }
- //
- if (!fastscroll) {
- TPointerEvent event;
- event.iPosition = cursor->position();
- event.iModifiers = 0;
- event.iType = TPointerEvent::EMove;
- coreFrame->eventHandler()->handleMouseMoveEvent(PlatformMouseEvent(event));
- }
- consumed = true;
- } // if (m_brctl->settings()->getTabbedNavigation()
- } else {
- // activate hovered input element by just start typing
- if (m_focusedElementType == TBrCtlDefs::EElementInputBox || m_focusedElementType == TBrCtlDefs::EElementSelectBox
- || m_focusedElementType == TBrCtlDefs::EElementSelectMultiBox || m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
- TPointerEvent event;
- event.iModifiers = 0;
- event.iPosition = cursor->position();
- event.iType = TPointerEvent::EButton1Down ;
- coreFrame->eventHandler()->handleMousePressEvent(PlatformMouseEvent(event));
- event.iType = TPointerEvent::EButton1Up;
- coreFrame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(event));
-
-
- if (m_focusedElementType == TBrCtlDefs::EElementInputBox || m_focusedElementType == TBrCtlDefs::EElementTextAreaBox) {
- if (!m_fepTimer)
- m_fepTimer = new WebCore::Timer<WebView>(this, &WebView::fepTimerFired);
-
- m_fepTimer->startOneShot(0.2f);
- setEditable(true);
- }
- m_keyevent = keyevent;
- m_eventcode = eventcode;
-
- consumed = true;
- }
- }
+ consumed = handleEventKeyL(keyevent, eventcode, coreFrame);
break;
case EEventKeyUp:
- m_fastScrollTimer->Cancel();
- m_scrollingSpeed = KNormalScrollRange*100/scalingFactor();
-
- if (viewIsFastScrolling()) {
- setViewIsFastScrolling(false);
- toggleRepaintTimer(true);
- if (AknLayoutUtils::PenEnabled() && !inPageViewMode()) {
- m_pageScrollHandler->scrollbarDrawer()->fadeScrollbar();
- }
- }
- m_currentEventKey = KNullKeyEvent;
- if ( (keyevent.iScanCode == EStdKeyDevice3) || (keyevent.iScanCode == EStdKeyEnter) ){
- // pass it to webcore
- TPointerEvent event;
- if (m_focusedElementType == TBrCtlDefs::EElementInputBox ||
- m_focusedElementType == TBrCtlDefs::EElementTextAreaBox)
- {
- setEditable(true);
- }
- event.iPosition = cursor->position();
- event.iType = TPointerEvent::EButton1Up;
- coreFrame->eventHandler()->handleMouseReleaseEvent(PlatformMouseEvent(event));
- consumed = true;
- }
+ consumed = handleEventKeyUp(keyevent, eventcode, coreFrame);
break;
}
}
- // keyevents
- if (!consumed) {
- consumed = coreFrame->eventHandler()->keyEvent(PlatformKeyboardEvent(keyevent,eventcode));
- if (!consumed && eventcode == EEventKey && (m_brctl->capabilities() & TBrCtlDefs::ECapabilityAccessKeys)) {
- TKeyEvent ke = keyevent;
- TChar c(ke.iCode);
- // Not consumed by WebCore, is alphanumeric and does not have any modifier
- if (c.IsAlphaDigit() && !(ke.iModifiers & (EModifierCtrl | EModifierAlt | EModifierShift))) {
- ke.iModifiers = EModifierCtrl;
- coreFrame->eventHandler()->keyEvent(PlatformKeyboardEvent(ke,EEventKeyDown));
- consumed = true;
- }
- }
- }
-
- //setEditable();
-
- return (consumed)?EKeyWasConsumed:EKeyWasNotConsumed;
+ return (consumed) ? EKeyWasConsumed : EKeyWasNotConsumed;
}
@@ -1062,6 +1162,20 @@
(displayPosY * scalingFactor()) / 100, (documentWidth * scalingFactor()) / 100, Rect().Width(),
(displayPosX * scalingFactor()) / 100);
}
+void WebView::updateScrollbars()
+{
+ TPoint scrollDelta = mainFrame()->frameView()->contentPos() - m_savedPosition;
+ scrollDelta.iX *= 100;
+ scrollDelta.iY *= 100;
+ if (!inPageViewMode()) {
+ if (scrollDelta.iX == 0 && scrollDelta.iY == 0) {
+ m_pageScrollHandler->scrollbarDrawer()->drawScrollbar(this);
+ }
+ else {
+ m_pageScrollHandler->scrollbarDrawer()->drawScrollbar(this, scrollDelta);
+ }
+ }
+}
void WebView::openPageViewL()
{
@@ -1100,7 +1214,7 @@
}
//-------------------------------------------------------------------------------
-// launchToolBarL
+// WebView::launchToolBarL
//-------------------------------------------------------------------------------
void WebView::launchToolBarL()
{
@@ -1135,7 +1249,7 @@
}
//-------------------------------------------------------------------------------
-// closeToolBarL
+// WebView::closeToolBarL
//-------------------------------------------------------------------------------
void WebView::closeToolBarL()
{
@@ -1155,7 +1269,7 @@
}
//-------------------------------------------------------------------------------
-// DrawDocumentPart ( from MPageScalerCallback )
+// WebView::DrawDocumentPart ( from MPageScalerCallback )
//
//
//-------------------------------------------------------------------------------
@@ -1186,7 +1300,7 @@
}
//-------------------------------------------------------------------------------
-// DocumentViewport ( from MPageScalerCallback )
+// WebView::DocumentViewport ( from MPageScalerCallback )
//
//
//-------------------------------------------------------------------------------
@@ -1196,7 +1310,7 @@
}
//-------------------------------------------------------------------------------
-// ScaledPageChanged ( from MPageScalerCallback )
+// WebView::ScaledPageChanged ( from MPageScalerCallback )
//
//
//-------------------------------------------------------------------------------
@@ -1224,7 +1338,7 @@
}
//-------------------------------------------------------------------------------
-// DocumentSize ( from MPageScalerCallback )
+// WebView::DocumentSize ( from MPageScalerCallback )
//
//
//-------------------------------------------------------------------------------
@@ -1234,7 +1348,7 @@
}
//-------------------------------------------------------------------------------
-// TouchScrolling ( from MPageScalerCallback )
+// WebView::TouchScrolling ( from MPageScalerCallback )
//
//
//-------------------------------------------------------------------------------
@@ -1431,12 +1545,6 @@
toggleRepaintTimer(false);
m_scrollingSpeed = milli>=KPanningMaxTime ? KPanningMaxSpeed : KPanningStartSpeed+(KPanningMaxSpeed-KPanningStartSpeed)*Max(milli-KPanningStartTime,0)/KPanningMaxTime;
m_scrollingSpeed = m_scrollingSpeed*100/scalingFactor();
- TPoint scrollDelta = mainFrame()->frameView()->contentPos() - m_savedPosition;
- scrollDelta.iX *= 100;
- scrollDelta.iY *= 100;
- if (AknLayoutUtils::PenEnabled() && !inPageViewMode()) {
- m_pageScrollHandler->scrollbarDrawer()->drawScrollbar(this, scrollDelta);
- }
OfferKeyEventL(m_currentEventKey, EEventKey);
}
@@ -1474,9 +1582,9 @@
{
if (!m_findKeyword) {
WebFrame* frame = mainFrame()->findFrameWithSelection();
- if(frame) {
- frame->clearSelection();
- }
+ if (frame) {
+ frame->clearSelection();
+ }
return TBrCtlDefs::EFindNoMatches;
}
return search(*m_findKeyword, forward, true);
@@ -1517,7 +1625,7 @@
return TBrCtlDefs::EFindMatch;
}
if (onlyOneFrame) {
- startFrame->clearSelection();
+ startFrame->clearSelection();
return TBrCtlDefs::EFindNoMatches;
}
frame = nextFrame;
@@ -1533,9 +1641,9 @@
return TBrCtlDefs::EFindMatch;
}
- if(frame) {
- frame->clearSelection();
- }
+ if (frame) {
+ frame->clearSelection();
+ }
return TBrCtlDefs::EFindNoMatches;
}
@@ -1564,8 +1672,8 @@
//-------------------------------------------------------------------------------
-// HandlePointerBufferReadyL
-// Handles Pointer Move Events
+// WebView::HandlePointerBufferReadyL
+// Handles pointer move events
//-------------------------------------------------------------------------------
void WebView::HandlePointerBufferReadyL()
{
@@ -1583,8 +1691,8 @@
}
//-------------------------------------------------------------------------------
-// HandlePointerEventL
-// Handles Pointer Events
+// WebView::HandlePointerEventL
+// Handles pointer events
//-------------------------------------------------------------------------------
void WebView::HandlePointerEventL(const TPointerEvent& aPointerEvent)
{
@@ -1602,7 +1710,7 @@
}
//-------------------------------------------------------------------------------
-// HandleShowAnchorHref()
+// WebView::handleShowAnchorHrefL
// Display a popup with the url of an anchor
//-------------------------------------------------------------------------------
void WebView::handleShowAnchorHrefL()
@@ -1639,7 +1747,7 @@
}
//-------------------------------------------------------------------------------
-// FocusedImageLC()
+// WebView::focusedImageLC
// Return the image that is under the cursor
//-------------------------------------------------------------------------------
TBrCtlImageCarrier* WebView::focusedImageLC()
@@ -1654,7 +1762,7 @@
}
//-------------------------------------------------------------------------------
-// LoadFocusedImageL()
+// WebView::loadFocusedImageL
// Load the image that is under the cursor
//-------------------------------------------------------------------------------
void WebView::loadFocusedImageL()
@@ -1667,7 +1775,7 @@
}
//-------------------------------------------------------------------------------
-// RemovePopup()
+// WebView::removePopup
// Delete the popupDrawer
//-------------------------------------------------------------------------------
void WebView::removePopup()
@@ -1680,6 +1788,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::zoomLevels
//-------------------------------------------------------------------------------
RArray<TUint>* WebView::zoomLevels()
{
@@ -1687,6 +1796,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::setZoomLevel
//-------------------------------------------------------------------------------
void WebView::setZoomLevel(int zoomLevel)
{
@@ -1699,6 +1809,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::setBitmapZoomLevel
//-------------------------------------------------------------------------------
void WebView::setBitmapZoomLevel(int zoomLevel)
{
@@ -1755,6 +1866,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::restoreZoomLevel
//-------------------------------------------------------------------------------
void WebView::restoreZoomLevel(int zoomLevel)
{
@@ -1768,6 +1880,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::resetZoomLevel
//-------------------------------------------------------------------------------
void WebView::resetZoomLevel(void)
{
@@ -1812,6 +1925,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::updateMinZoomLevel
//-------------------------------------------------------------------------------
void WebView::updateMinZoomLevel(TSize size)
{
@@ -1858,6 +1972,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::UpdateZoomArray
//-------------------------------------------------------------------------------
void WebView::UpdateZoomArray()
{
@@ -1893,6 +2008,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::zoomLevelChanged
//-------------------------------------------------------------------------------
void WebView::zoomLevelChanged(int newZoomLevel)
{
@@ -1964,6 +2080,7 @@
}
//-------------------------------------------------------------------------------
+// WebView:::resetLastZoomLevelIfNeeded
//-------------------------------------------------------------------------------
void WebView::resetLastZoomLevelIfNeeded()
{
@@ -1972,7 +2089,7 @@
}
//-----------------------------------------------------------------------------
-// setZoomLevelAdaptively()
+// WebView::setZoomLevelAdaptively()
//-----------------------------------------------------------------------------
void WebView::setZoomLevelAdaptively()
{
@@ -1980,25 +2097,25 @@
// Double Tap Zooming: it toggles between default, maxiZoomLevel.
// Depending on the current zoom level:
- // A. If the current is already the max, it zooms to the max
+ // A. If the current is already the max, it zooms to the max
// B. If the current is bigger than/equal to the default zoom level zooms to the default, it zooms to the max
- // C. Otherwise it zooms to the default level first.
+ // C. Otherwise it zooms to the default level first.
// For the mobile pages, such as google.com and cnn.com, minimum zoom level equals
// to the default zoom level. Zooming is only possible between default and maximum
// zoom level, double tap only won't reach logic C
//
- // For both mobile and non-mobile pages, it creates the same end user double tap
- // experiences
-
+ // For both mobile and non-mobile pages, it creates the same end user double tap
+ // experiences
+
if (m_currentZoomLevel == m_maxZoomLevel ) {
- zoomLevel = KZoomLevelDefaultValue;
+ zoomLevel = KZoomLevelDefaultValue;
}
else if (m_currentZoomLevel >= KZoomLevelDefaultValue ) {
zoomLevel = m_maxZoomLevel;
- }
+ }
else {
- zoomLevel = KZoomLevelDefaultValue;
- }
+ zoomLevel = KZoomLevelDefaultValue;
+ }
// move the content
WebFrameView* view = mainFrame()->frameView();
@@ -2022,6 +2139,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::openPluginPlayer
// Called when user clicks a plugin which is able to accept user input,
// this feature is only used in US build
//-------------------------------------------------------------------------------
@@ -2049,6 +2167,7 @@
page()->focusController()->setFocusedNode(NULL, page()->focusController()->focusedOrMainFrame());
}
//-------------------------------------------------------------------------------
+// WebView::closePluginPlayer
//-------------------------------------------------------------------------------
void WebView::closePluginPlayer()
{
@@ -2064,6 +2183,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::createWidgetExtension
//-------------------------------------------------------------------------------
CWidgetExtension* WebView::createWidgetExtension(MWidgetCallback &aWidgetCallback)
{
@@ -2078,6 +2198,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::forceLayoutAndResize
//-------------------------------------------------------------------------------
void WebView::forceLayoutAndResize(WebFrame* frame)
{
@@ -2106,6 +2227,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::showZoomSliderL
//-------------------------------------------------------------------------------
void WebView::showZoomSliderL()
{
@@ -2120,6 +2242,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::hideZoomSliderL
//-------------------------------------------------------------------------------
void WebView::hideZoomSliderL()
{
@@ -2129,6 +2252,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::notifyZoomSliderModeChangeL
//-------------------------------------------------------------------------------
void WebView::notifyZoomSliderModeChangeL( bool mode )
{
@@ -2139,6 +2263,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::maxZoomLevel
//-------------------------------------------------------------------------------
int WebView::maxZoomLevel()
{
@@ -2146,6 +2271,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::minZoomLevel
//-------------------------------------------------------------------------------
int WebView::minZoomLevel()
{
@@ -2153,6 +2279,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::updateZoomLevel
//-------------------------------------------------------------------------------
void WebView::updateZoomLevel( TBrCtlDefs::TBrCtlSettings setting, unsigned int value)
{
@@ -2178,6 +2305,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::EnterFullscreenBrowsingL
//-------------------------------------------------------------------------------
void WebView::EnterFullscreenBrowsingL()
{
@@ -2188,6 +2316,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::LeaveFullscreenBrowsingL
//-------------------------------------------------------------------------------
void WebView::LeaveFullscreenBrowsingL()
{
@@ -2198,6 +2327,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::notifyFullscreenModeChangeL
//-------------------------------------------------------------------------------
void WebView::notifyFullscreenModeChangeL(bool mode)
{
@@ -2206,6 +2336,7 @@
}
//-------------------------------------------------------------------------------
+// WebView::checkForZoomChange
//-------------------------------------------------------------------------------
void WebView::checkForZoomChange()
{
@@ -2259,6 +2390,7 @@
m_redirectWithLockedHistory = value;
}
//-------------------------------------------------------------------------------
+// WebView::notifyPlugins
// Webview notifies plugins to handle play/pause of .swf files when user switches to menu/another application
//-------------------------------------------------------------------------------
void WebView::notifyPlugins(TBool focus)
@@ -2314,7 +2446,7 @@
//-----------------------------------------------------------------------------
-// setZoomCursorPosition(TBool)
+// WebView::setZoomCursorPosition
// Set the cursor position while zooming, this is only for non-touch device
//-----------------------------------------------------------------------------
void WebView::setZoomCursorPosition(TBool isZoomIn)
@@ -2359,7 +2491,7 @@
// ---------------------------------------------------------------------------
-// FindCurrentZoomIndex
+// WebView::FindCurrentZoomIndex
// ---------------------------------------------------------------------------
TInt WebView::FindCurrentZoomIndex(TInt aCurrentZoomLevel)
{
@@ -2381,7 +2513,7 @@
return m_widgetextension ? m_widgetextension->GetWidgetId():0;
}
-void WebView::setShowCursor(TBool showCursor)
+void WebView::setShowCursor(TBool showCursor)
{
m_showCursor = showCursor;
StaticObjectsContainer::instance()->webCursor()->setCursorVisible(showCursor);