[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