| Summary: | textarea steals focus from overlapping javascript calendar | ||
|---|---|---|---|
| Product: | [Applications] konqueror | Reporter: | Markus Plessing <plessing> | 
| Component: | khtml | Assignee: | Konqueror Bugs <konqueror-bugs-null> | 
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | michael | 
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Debian testing | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| Attachments: | patch. | ||
| 
        
          Description
        
        
          Markus Plessing
        
        
        
        
          2006-06-28 09:53:49 UTC
        
       Created attachment 16851 [details]
patch.
Channel some more mouse events through the dom.
Qt is a mulish girl though, I can't convince her to stop changing the cursor
shape.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;
     }
*** Bug 106080 has been marked as a duplicate of this bug. *** |