diff -r dd21522fd290 -r 7c90e6132015 webengine/osswebengine/WebKit/s60/webview/WebView.cpp --- 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(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(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* 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);