⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qwebpage.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                    visitedWebActions->setBit(action);                }                break;            }            case WebCore::SeparatorType:                menu->addSeparator();                break;            case WebCore::SubmenuType: {                QMenu *subMenu = createContextMenu(webcoreMenu, item.platformSubMenu(), visitedWebActions);                bool anyEnabledAction = false;                QList<QAction *> actions = subMenu->actions();                for (int i = 0; i < actions.count(); ++i) {                    if (actions.at(i)->isVisible())                        anyEnabledAction |= actions.at(i)->isEnabled();                }                // don't show sub-menus with just disabled actions                if (anyEnabledAction) {                    subMenu->setTitle(item.title());                    menu->addAction(subMenu->menuAction());                } else {                    delete subMenu;                }                break;            }        }    }    return menu;}#endif // QT_NO_CONTEXTMENUQWebFrame *QWebPagePrivate::frameAt(const QPoint &pos) const{    QWebFrame *frame = mainFrame;redo:    QList<QWebFrame*> children = frame->childFrames();    for (int i = 0; i < children.size(); ++i) {        if (children.at(i)->geometry().contains(pos)) {            frame = children.at(i);            goto redo;        }    }    if (frame->geometry().contains(pos))        return frame;    return 0;}void QWebPagePrivate::_q_webActionTriggered(bool checked){    QAction *a = qobject_cast<QAction *>(q->sender());    if (!a)        return;    QWebPage::WebAction action = static_cast<QWebPage::WebAction>(a->data().toInt());    q->triggerAction(action, checked);}#ifndef NDEBUGvoid QWebPagePrivate::_q_cleanupLeakMessages(){    // Need this to make leak messages accurate.    cache()->setCapacities(0, 0, 0);}#endifvoid QWebPagePrivate::updateAction(QWebPage::WebAction action){    QAction *a = actions[action];    if (!a || !mainFrame)        return;    WebCore::FrameLoader *loader = mainFrame->d->frame->loader();    WebCore::Editor *editor = page->focusController()->focusedOrMainFrame()->editor();    bool enabled = a->isEnabled();    bool checked = a->isChecked();    switch (action) {        case QWebPage::Back:            enabled = loader->canGoBackOrForward(-1);            break;        case QWebPage::Forward:            enabled = loader->canGoBackOrForward(1);            break;        case QWebPage::Stop:            enabled = loader->isLoading();            break;        case QWebPage::Reload:            enabled = !loader->isLoading();            break;        case QWebPage::Cut:            enabled = editor->canCut();            break;        case QWebPage::Copy:            enabled = editor->canCopy();            break;        case QWebPage::Paste:            enabled = editor->canPaste();            break;#ifndef QT_NO_UNDOSTACK        case QWebPage::Undo:        case QWebPage::Redo:            // those two are handled by QUndoStack            break;#endif // QT_NO_UNDOSTACK        case QWebPage::MoveToNextChar:        case QWebPage::MoveToPreviousChar:        case QWebPage::MoveToNextWord:        case QWebPage::MoveToPreviousWord:        case QWebPage::MoveToNextLine:        case QWebPage::MoveToPreviousLine:        case QWebPage::MoveToStartOfLine:        case QWebPage::MoveToEndOfLine:        case QWebPage::MoveToStartOfBlock:        case QWebPage::MoveToEndOfBlock:        case QWebPage::MoveToStartOfDocument:        case QWebPage::MoveToEndOfDocument:        case QWebPage::SelectAll:        case QWebPage::SelectNextChar:        case QWebPage::SelectPreviousChar:        case QWebPage::SelectNextWord:        case QWebPage::SelectPreviousWord:        case QWebPage::SelectNextLine:        case QWebPage::SelectPreviousLine:        case QWebPage::SelectStartOfLine:        case QWebPage::SelectEndOfLine:        case QWebPage::SelectStartOfBlock:        case QWebPage::SelectEndOfBlock:        case QWebPage::SelectStartOfDocument:        case QWebPage::SelectEndOfDocument:        case QWebPage::DeleteStartOfWord:        case QWebPage::DeleteEndOfWord:        case QWebPage::SetTextDirectionDefault:        case QWebPage::SetTextDirectionLeftToRight:        case QWebPage::SetTextDirectionRightToLeft:        case QWebPage::ToggleBold:        case QWebPage::ToggleItalic:        case QWebPage::ToggleUnderline:            enabled = editor->canEditRichly();            if (enabled)                checked = editor->command(editorCommandForWebActions(action)).state() != FalseTriState;            else                checked = false;            break;        default: break;    }    a->setEnabled(enabled);    if (a->isCheckable())        a->setChecked(checked);}void QWebPagePrivate::updateNavigationActions(){    updateAction(QWebPage::Back);    updateAction(QWebPage::Forward);    updateAction(QWebPage::Stop);    updateAction(QWebPage::Reload);}void QWebPagePrivate::updateEditorActions(){    updateAction(QWebPage::Cut);    updateAction(QWebPage::Copy);    updateAction(QWebPage::Paste);    updateAction(QWebPage::MoveToNextChar);    updateAction(QWebPage::MoveToPreviousChar);    updateAction(QWebPage::MoveToNextWord);    updateAction(QWebPage::MoveToPreviousWord);    updateAction(QWebPage::MoveToNextLine);    updateAction(QWebPage::MoveToPreviousLine);    updateAction(QWebPage::MoveToStartOfLine);    updateAction(QWebPage::MoveToEndOfLine);    updateAction(QWebPage::MoveToStartOfBlock);    updateAction(QWebPage::MoveToEndOfBlock);    updateAction(QWebPage::MoveToStartOfDocument);    updateAction(QWebPage::MoveToEndOfDocument);    updateAction(QWebPage::SelectAll);    updateAction(QWebPage::SelectNextChar);    updateAction(QWebPage::SelectPreviousChar);    updateAction(QWebPage::SelectNextWord);    updateAction(QWebPage::SelectPreviousWord);    updateAction(QWebPage::SelectNextLine);    updateAction(QWebPage::SelectPreviousLine);    updateAction(QWebPage::SelectStartOfLine);    updateAction(QWebPage::SelectEndOfLine);    updateAction(QWebPage::SelectStartOfBlock);    updateAction(QWebPage::SelectEndOfBlock);    updateAction(QWebPage::SelectStartOfDocument);    updateAction(QWebPage::SelectEndOfDocument);    updateAction(QWebPage::DeleteStartOfWord);    updateAction(QWebPage::DeleteEndOfWord);    updateAction(QWebPage::SetTextDirectionDefault);    updateAction(QWebPage::SetTextDirectionLeftToRight);    updateAction(QWebPage::SetTextDirectionRightToLeft);    updateAction(QWebPage::ToggleBold);    updateAction(QWebPage::ToggleItalic);    updateAction(QWebPage::ToggleUnderline);}void QWebPagePrivate::timerEvent(QTimerEvent *ev){    int timerId = ev->timerId();    if (timerId == tripleClickTimer.timerId())        tripleClickTimer.stop();    else        q->QObject::timerEvent(ev);}void QWebPagePrivate::mouseMoveEvent(QMouseEvent *ev){    WebCore::Frame* frame = QWebFramePrivate::core(mainFrame);    if (!frame->view())        return;    bool accepted = frame->eventHandler()->mouseMoved(PlatformMouseEvent(ev, 0));    ev->setAccepted(accepted);}void QWebPagePrivate::mousePressEvent(QMouseEvent *ev){    WebCore::Frame* frame = QWebFramePrivate::core(mainFrame);    if (!frame->view())        return;    if (tripleClickTimer.isActive()            && (ev->pos() - tripleClick).manhattanLength()                < QApplication::startDragDistance()) {        mouseTripleClickEvent(ev);        return;    }    bool accepted = false;    PlatformMouseEvent mev(ev, 1);    // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton    if (mev.button() != NoButton)        accepted = frame->eventHandler()->handleMousePressEvent(mev);    ev->setAccepted(accepted);}void QWebPagePrivate::mouseDoubleClickEvent(QMouseEvent *ev){    WebCore::Frame* frame = QWebFramePrivate::core(mainFrame);    if (!frame->view())        return;    bool accepted = false;    PlatformMouseEvent mev(ev, 2);    // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton    if (mev.button() != NoButton)        accepted = frame->eventHandler()->handleMousePressEvent(mev);    ev->setAccepted(accepted);    tripleClickTimer.start(QApplication::doubleClickInterval(), q);    tripleClick = ev->pos();}void QWebPagePrivate::mouseTripleClickEvent(QMouseEvent *ev){    WebCore::Frame* frame = QWebFramePrivate::core(mainFrame);    if (!frame->view())        return;    bool accepted = false;    PlatformMouseEvent mev(ev, 3);    // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton    if (mev.button() != NoButton)        accepted = frame->eventHandler()->handleMousePressEvent(mev);    ev->setAccepted(accepted);}void QWebPagePrivate::mouseReleaseEvent(QMouseEvent *ev){    WebCore::Frame* frame = QWebFramePrivate::core(mainFrame);    if (!frame->view())        return;    bool accepted = false;    PlatformMouseEvent mev(ev, 0);    // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton    if (mev.button() != NoButton)        accepted = frame->eventHandler()->handleMouseReleaseEvent(mev);    ev->setAccepted(accepted);#ifndef QT_NO_CLIPBOARD    if (QApplication::clipboard()->supportsSelection()) {        bool oldSelectionMode = Pasteboard::generalPasteboard()->isSelectionMode();        Pasteboard::generalPasteboard()->setSelectionMode(true);        WebCore::Frame* focusFrame = page->focusController()->focusedOrMainFrame();        if (ev->button() == Qt::LeftButton) {            if(focusFrame && (focusFrame->editor()->canCopy() || focusFrame->editor()->canDHTMLCopy())) {                focusFrame->editor()->copy();                ev->setAccepted(true);            }        } else if (ev->button() == Qt::MidButton) {            if(focusFrame && (focusFrame->editor()->canPaste() || focusFrame->editor()->canDHTMLPaste())) {                focusFrame->editor()->paste();                ev->setAccepted(true);            }        }        Pasteboard::generalPasteboard()->setSelectionMode(oldSelectionMode);    }#endif}#ifndef QT_NO_CONTEXTMENUvoid QWebPagePrivate::contextMenuEvent(QContextMenuEvent *ev){    QMenu *menu = q->createStandardContextMenu();    if (menu) {        menu->exec(ev->globalPos());        delete menu;    }}#endif // QT_NO_CONTEXTMENU/*!    \since 4.5    This function creates the standard context menu which is shown when    the user clicks on the web page with the right mouse button. It is    called from the default contextMenuEvent() handler. The popup menu's    ownership is transferred to the caller. */QMenu *QWebPage::createStandardContextMenu(){#ifndef QT_NO_CONTEXTMENU    QMenu *menu = d->currentContextMenu;    d->currentContextMenu = 0;    return menu;#else    return 0;#endif}#ifndef QT_NO_WHEELEVENTvoid QWebPagePrivate::wheelEvent(QWheelEvent *ev){    WebCore::Frame* frame = QWebFramePrivate::core(mainFrame);    if (!frame->view())        return;    WebCore::PlatformWheelEvent pev(ev);    bool accepted = frame->eventHandler()->handleWheelEvent(pev);    ev->setAccepted(accepted);}#endif // QT_NO_WHEELEVENT#ifndef QT_NO_SHORTCUTQWebPage::WebAction QWebPagePrivate::editorActionForKeyEvent(QKeyEvent* event){    static struct {        QKeySequence::StandardKey standardKey;        QWebPage::WebAction action;    } editorActions[] = {        { QKeySequence::Cut, QWebPage::Cut },        { QKeySequence::Copy, QWebPage::Copy },        { QKeySequence::Paste, QWebPage::Paste },        { QKeySequence::Undo, QWebPage::Undo },        { QKeySequence::Redo, QWebPage::Redo },        { QKeySequence::MoveToNextChar, QWebPage::MoveToNextChar },        { QKeySequence::MoveToPreviousChar, QWebPage::MoveToPreviousChar },        { QKeySequence::MoveToNextWord, QWebPage::MoveToNextWord },        { QKeySequence::MoveToPreviousWord, QWebPage::MoveToPreviousWord },        { QKeySequence::MoveToNextLine, QWebPage::MoveToNextLine },        { QKeySequence::MoveToPreviousLine, QWebPage::MoveToPreviousLine },        { QKeySequence::MoveToStartOfLine, QWebPage::MoveToStartOfLine },        { QKeySequence::MoveToEndOfLine, QWebPage::MoveToEndOfLine },        { QKeySequence::MoveToStartOfBlock, QWebPage::MoveToStartOfBlock },        { QKeySequence::MoveToEndOfBlock, QWebPage::MoveToEndOfBlock },        { QKeySequence::MoveToStartOfDocument, QWebPage::MoveToStartOfDocument },

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -