[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/3.5/kdelibs/khtml
From: Germain Garand <germain () ebooksfrance ! com>
Date: 2006-07-02 11:50:42
Message-ID: 1151841042.170751.30927.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 557096 by ggarand:
Channel more KHTMLWidgets mouse events through the dom.
BUG: 129947
M +6 -3 khtmlview.cpp
M +31 -3 rendering/render_replaced.cpp
--- branches/KDE/3.5/kdelibs/khtml/khtmlview.cpp #557095:557096
@@ -1083,7 +1083,10 @@
QPoint p(x-absx, y-absy);
QMouseEvent fw(me->type(), p, me->button(), me->state());
QWidget* w = r->widget();
- if(w)
+ QScrollView* sc = ::qt_cast<QScrollView*>(w);
+ if (sc && !::qt_cast<QListBox*>(w))
+ static_cast<khtml::RenderWidget::ScrollViewEventPropagator*>(sc)->sendEvent(&fw);
+ else if(w)
static_cast<khtml::RenderWidget::EventPropagator*>(w)->sendEvent(&fw);
}
@@ -1940,9 +1943,9 @@
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
case QEvent::MouseButtonDblClick: {
- if (w->parentWidget() == view && !::qt_cast<QScrollBar *>(w)) {
+ if ( (w->parentWidget() == view || ::qt_cast<QScrollView*>(c)) && !::qt_cast<QScrollBar *>(w)) {
QMouseEvent *me = static_cast<QMouseEvent *>(e);
- QPoint pt = (me->pos() + w->pos());
+ QPoint pt = w->mapTo( view, me->pos());
QMouseEvent me2(me->type(), pt, me->button(), me->state());
if (e->type() == QEvent::MouseMove)
--- branches/KDE/3.5/kdelibs/khtml/rendering/render_replaced.cpp #557095:557096
@@ -697,6 +697,31 @@
}
}
+void RenderWidget::ScrollViewEventPropagator::sendEvent(QEvent *e) {
+ switch(e->type()) {
+ case QEvent::MouseButtonPress:
+ viewportMousePressEvent(static_cast<QMouseEvent *>(e));
+ break;
+ case QEvent::MouseButtonRelease:
+ viewportMouseReleaseEvent(static_cast<QMouseEvent *>(e));
+ break;
+ case QEvent::MouseButtonDblClick:
+ viewportMouseDoubleClickEvent(static_cast<QMouseEvent *>(e));
+ break;
+ case QEvent::MouseMove:
+ viewportMouseMoveEvent(static_cast<QMouseEvent *>(e));
+ break;
+ case QEvent::KeyPress:
+ keyPressEvent(static_cast<QKeyEvent *>(e));
+ break;
+ case QEvent::KeyRelease:
+ keyReleaseEvent(static_cast<QKeyEvent *>(e));
+ break;
+ default:
+ break;
+ }
+}
+
bool RenderWidget::handleEvent(const DOM::EventImpl& ev)
{
bool ret = false;
@@ -712,8 +737,7 @@
int absy = 0;
absolutePosition(absx, absy);
-
- const QPoint p(me.clientX() - absx + m_view->contentsX(),
+ QPoint p(me.clientX() - absx + m_view->contentsX(),
me.clientY() - absy + m_view->contentsY());
QMouseEvent::Type type;
int button = 0;
@@ -763,7 +787,11 @@
// << " pos=" << p << " type=" << type
// << " button=" << button << " state=" << state << endl;
QMouseEvent e(type, p, button, state);
- static_cast<EventPropagator *>(m_widget)->sendEvent(&e);
+ QScrollView * sc = ::qt_cast<QScrollView*>(m_widget);
+ if (sc && !::qt_cast<QListBox*>(m_widget))
+ static_cast<ScrollViewEventPropagator *>(sc)->sendEvent(&e);
+ else
+ static_cast<EventPropagator *>(m_widget)->sendEvent(&e);
ret = e.isAccepted();
break;
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic