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

📄 khtmlview.cpp.orig

📁 konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版本源码包.
💻 ORIG
📖 第 1 页 / 共 5 页
字号:
	}	m_part->setStatusBarText(status.arg(d->findString.lower()),	                         KHTMLPart::BarDefaultText);}void KHTMLView::updateFindAheadTimeout(){    if( d->typeAheadActivated )        d->timer.start( 3000, true );}#endif // KHTML_NO_TYPE_AHEAD_FINDvoid KHTMLView::keyReleaseEvent(QKeyEvent *_ke){#ifndef KHTML_NO_TYPE_AHEAD_FIND    if(d->typeAheadActivated) {        _ke->accept();        return;    }#endif    if (d->m_caretViewContext && d->m_caretViewContext->keyReleasePending) {        //caretKeyReleaseEvent(_ke);	d->m_caretViewContext->keyReleasePending = false;	return;    }    if( d->scrollSuspendPreActivate && _ke->key() != Key_Shift )        d->scrollSuspendPreActivate = false;    if( _ke->key() == Key_Shift && d->scrollSuspendPreActivate && _ke->state() == Qt::ShiftButton        && !(KApplication::keyboardMouseState() & Qt::ShiftButton))        if (d->scrollTimerId)                d->scrollSuspended = !d->scrollSuspended;    if (d->accessKeysEnabled)     {        if (d->accessKeysPreActivate && _ke->key() != Key_Control)             d->accessKeysPreActivate=false;        if (d->accessKeysPreActivate && _ke->state() == Qt::ControlButton && !(KApplication::keyboardMouseState() & Qt::ControlButton))        {	    displayAccessKeys();	    m_part->setStatusBarText(i18n("Access Keys activated"),KHTMLPart::BarOverrideText);	    d->accessKeysActivated = true;	    d->accessKeysPreActivate = false;            _ke->accept();            return;        }	else if (d->accessKeysActivated)         {            accessKeysTimeout();            _ke->accept();            return;        }    }    // Send keyup event    if ( dispatchKeyEvent( _ke ) )    {        _ke->accept();        return;    }    QScrollView::keyReleaseEvent(_ke);}void KHTMLView::contentsContextMenuEvent ( QContextMenuEvent * /*ce*/ ){// ### what kind of c*** is that ?#if 0    if (!m_part->xmlDocImpl()) return;    int xm = _ce->x();    int ym = _ce->y();    DOM::NodeImpl::MouseEvent mev( _ce->state(), DOM::NodeImpl::MouseMove ); // ### not a mouse event!    m_part->xmlDocImpl()->prepareMouseEvent( xm, ym, &mev );    NodeImpl *targetNode = mev.innerNode.handle();    if (targetNode && targetNode->renderer() && targetNode->renderer()->isWidget()) {        int absx = 0;        int absy = 0;        targetNode->renderer()->absolutePosition(absx,absy);        QPoint pos(xm-absx,ym-absy);        QWidget *w = static_cast<RenderWidget*>(targetNode->renderer())->widget();        QContextMenuEvent cme(_ce->reason(),pos,_ce->globalPos(),_ce->state());        setIgnoreEvents(true);        QApplication::sendEvent(w,&cme);        setIgnoreEvents(false);    }#endif}bool KHTMLView::focusNextPrevChild( bool next ){    // Now try to find the next child    if (m_part->xmlDocImpl() && focusNextPrevNode(next))    {	if (m_part->xmlDocImpl()->focusNode())	    kdDebug() << "focusNode.name: "		      << m_part->xmlDocImpl()->focusNode()->nodeName().string() << endl;	return true; // focus node found    }    // If we get here, pass tabbing control up to the next/previous child in our parent    d->pseudoFocusNode = KHTMLViewPrivate::PFNone;    if (m_part->parentPart() && m_part->parentPart()->view())        return m_part->parentPart()->view()->focusNextPrevChild(next);    return QWidget::focusNextPrevChild(next);}void KHTMLView::doAutoScroll(){    QPoint pos = QCursor::pos();    pos = viewport()->mapFromGlobal( pos );    int xm, ym;    viewportToContents(pos.x(), pos.y(), xm, ym);    pos = QPoint(pos.x() - viewport()->x(), pos.y() - viewport()->y());    if ( (pos.y() < 0) || (pos.y() > visibleHeight()) ||         (pos.x() < 0) || (pos.x() > visibleWidth()) )    {        ensureVisible( xm, ym, 0, 5 );#ifndef KHTML_NO_SELECTION        // extend the selection while scrolling	DOM::Node innerNode;	if (m_part->isExtendingSelection()) {            RenderObject::NodeInfo renderInfo(true/*readonly*/, false/*active*/);            m_part->xmlDocImpl()->renderer()->layer()				->nodeAtPoint(renderInfo, xm, ym);            innerNode = renderInfo.innerNode();	}/*end if*/        if (innerNode.handle() && innerNode.handle()->renderer()) {            int absX, absY;            innerNode.handle()->renderer()->absolutePosition(absX, absY);            m_part->extendSelectionTo(xm, ym, absX, absY, innerNode);        }/*end if*/#endif // KHTML_NO_SELECTION    }}class HackWidget : public QWidget{ public:    inline void setNoErase() { setWFlags(getWFlags()|WRepaintNoErase); }};bool KHTMLView::eventFilter(QObject *o, QEvent *e){    if ( e->type() == QEvent::AccelOverride ) {	QKeyEvent* ke = (QKeyEvent*) e;//kdDebug(6200) << "QEvent::AccelOverride" << endl;	if (m_part->isEditable() || m_part->isCaretMode()	    || (m_part->xmlDocImpl() && m_part->xmlDocImpl()->focusNode()		&& m_part->xmlDocImpl()->focusNode()->contentEditable())) {//kdDebug(6200) << "editable/navigable" << endl;	    if ( (ke->state() & ControlButton) || (ke->state() & ShiftButton) ) {		switch ( ke->key() ) {		case Key_Left:		case Key_Right:		case Key_Up:		case Key_Down:		case Key_Home:		case Key_End:		    ke->accept();//kdDebug(6200) << "eaten" << endl;		    return true;		default:		    break;		}	    }	}    }    if ( e->type() == QEvent::Leave && d->cursor_icon_widget )        d->cursor_icon_widget->hide();    QWidget *view = viewport();    if (o == view) {	// we need to install an event filter on all children of the viewport to	// be able to get correct stacking of children within the document.	if(e->type() == QEvent::ChildInserted) {	    QObject *c = static_cast<QChildEvent *>(e)->child();	    if (c->isWidgetType()) {		QWidget *w = static_cast<QWidget *>(c);		// don't install the event filter on toplevels		if (w->parentWidget(true) == view) {		    if (!strcmp(w->name(), "__khtml")) {			w->installEventFilter(this);			w->unsetCursor();			if (!::qt_cast<QFrame*>(w))			    w->setBackgroundMode( QWidget::NoBackground );			static_cast<HackWidget *>(w)->setNoErase();			if (w->children()) {			    QObjectListIterator it(*w->children());			    for (; it.current(); ++it) {				QWidget *widget = ::qt_cast<QWidget *>(it.current());				if (widget && !widget->isTopLevel()) {				    if (!::qt_cast<QFrame*>(w))				        widget->setBackgroundMode( QWidget::NoBackground );				    static_cast<HackWidget *>(widget)->setNoErase();				    widget->installEventFilter(this);				}			    }			}		    }		}	    }	}    } else if (o->isWidgetType()) {	QWidget *v = static_cast<QWidget *>(o);        QWidget *c = v;	while (v && v != view) {            c = v;	    v = v->parentWidget(true);	}	if (v && !strcmp(c->name(), "__khtml")) {	    bool block = false;	    QWidget *w = static_cast<QWidget *>(o);	    switch(e->type()) {	    case QEvent::Paint:		if (!allowWidgetPaintEvents) {		    // eat the event. Like this we can control exactly when the widget		    // get's repainted.		    block = true;		    int x = 0, y = 0;		    QWidget *v = w;		    while (v && v != view) {			x += v->x();			y += v->y();			v = v->parentWidget();		    }		    viewportToContents( x, y, x, y );		    QPaintEvent *pe = static_cast<QPaintEvent *>(e);		    bool asap = !d->contentsMoving && ::qt_cast<QScrollView *>(c);		    // QScrollView needs fast repaints		    if ( asap && !d->painting && m_part->xmlDocImpl() && m_part->xmlDocImpl()->renderer() &&		         !static_cast<khtml::RenderCanvas *>(m_part->xmlDocImpl()->renderer())->needsLayout() ) {		        repaintContents(x + pe->rect().x(), y + pe->rect().y(),	                                        pe->rect().width(), pe->rect().height(), true);                    } else { 		        scheduleRepaint(x + pe->rect().x(), y + pe->rect().y(), 				    pe->rect().width(), pe->rect().height(), asap);                    }		}		break;	    case QEvent::MouseMove:	    case QEvent::MouseButtonPress:	    case QEvent::MouseButtonRelease:	    case QEvent::MouseButtonDblClick: {		if (w->parentWidget() == view && !::qt_cast<QScrollBar *>(w)) {		    QMouseEvent *me = static_cast<QMouseEvent *>(e);		    QPoint pt = (me->pos() + w->pos());		    QMouseEvent me2(me->type(), pt, me->button(), me->state());		    if (e->type() == QEvent::MouseMove)			viewportMouseMoveEvent(&me2);		    else if(e->type() == QEvent::MouseButtonPress)			viewportMousePressEvent(&me2);		    else if(e->type() == QEvent::MouseButtonRelease)			viewportMouseReleaseEvent(&me2);		    else			viewportMouseDoubleClickEvent(&me2);		    block = true;                }		break;	    }	    case QEvent::KeyPress:	    case QEvent::KeyRelease:		if (w->parentWidget() == view && !::qt_cast<QScrollBar *>(w)) {		    QKeyEvent *ke = static_cast<QKeyEvent *>(e);		    if (e->type() == QEvent::KeyPress)			keyPressEvent(ke);		    else			keyReleaseEvent(ke);		    block = true;		}	    default:		break;	    }	    if (block) { 		//qDebug("eating event");		return true;	    }	}    }//    kdDebug(6000) <<"passing event on to sv event filter object=" << o->className() << " event=" << e->type() << endl;    return QScrollView::eventFilter(o, e);}DOM::NodeImpl *KHTMLView::nodeUnderMouse() const{    return d->underMouse;}DOM::NodeImpl *KHTMLView::nonSharedNodeUnderMouse() const{    return d->underMouseNonShared;}bool KHTMLView::scrollTo(const QRect &bounds){    d->scrollingSelf = true; // so scroll events get ignored    int x, y, xe, ye;    x = bounds.left();    y = bounds.top();    xe = bounds.right();    ye = bounds.bottom();    //kdDebug(6000)<<"scrolling coords: x="<<x<<" y="<<y<<" width="<<xe-x<<" height="<<ye-y<<endl;    int deltax;    int deltay;    int curHeight = visibleHeight();    int curWidth = visibleWidth();    if (ye-y>curHeight-d->borderY)	ye  = y + curHeight - d->borderY;    if (xe-x>curWidth-d->borderX)	xe = x + curWidth - d->borderX;    // is xpos of target left of the view's border?    if (x < contentsX() + d->borderX )            deltax = x - contentsX() - d->borderX;    // is xpos of target right of the view's right border?    else if (xe + d->borderX > contentsX() + curWidth)            deltax = xe + d->borderX - ( contentsX() + curWidth );    else        deltax = 0;    // is ypos of target above upper border?    if (y < contentsY() + d->borderY)            deltay = y - contentsY() - d->borderY;    // is ypos of target below lower border?    else if (ye + d->borderY > contentsY() + curHeight)            deltay = ye + d->borderY - ( contentsY() + curHeight );    else        deltay = 0;    int maxx = curWidth-d->borderX;    int maxy = curHeight-d->borderY;    int scrollX,scrollY;    scrollX = deltax > 0 ? (deltax > maxx ? maxx : deltax) : deltax == 0 ? 0 : (deltax>-maxx ? deltax : -maxx);    scrollY = deltay > 0 ? (deltay > maxy ? maxy : deltay) : deltay == 0 ? 0 : (deltay>-maxy ? deltay : -maxy);    if (contentsX() + scrollX < 0)	scrollX = -contentsX();    else if (contentsWidth() - visibleWidth() - contentsX() < scrollX)	scrollX = contentsWidth() - visibleWidth() - contentsX();    if (contentsY() + scrollY < 0)	scrollY = -contentsY();    else if (contentsHeight() - visibleHeight() - contentsY() < scrollY)	scrollY = contentsHeight() - visibleHeight() - contentsY();    scrollBy(scrollX, scrollY);    d->scrollingSelf = false;    if ( (abs(deltax)<=maxx) && (abs(deltay)<=maxy) )	return true;    else return false;}bool KHTMLView::focusNextPrevNode(bool next){    // Sets the focus node of the document to be the node after (or if    // next is false, before) the current focus node.  Only nodes that    // are selectable (i.e. for which isFocusable() returns true) are    // taken into account, and the order used is that specified in the    // HTML spec (see DocumentImpl::nextFocusNode() and    // DocumentImpl::previousFocusNode() for details).    DocumentImpl *doc = m_part->xmlDocImpl();    NodeImpl *oldFocusNode = doc->focusNode();#if 1    // If the user has scrolled the document, then instead of picking    // the next focusable node in the document, use the first one that    // is within the visible area (if possible).    if (d->scrollBarMoved)    {	NodeImpl *toFocus;	if (next)	    toFocus = doc->nextFocusNode(oldFocusNode);	else	    toFocus = doc->previousFocusNode(oldFocusNode);	if (!toFocus && oldFocusNode)	    if (next)

⌨️ 快捷键说明

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