📄 qwebpage.cpp
字号:
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 + -