[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.1/kdelibs/khtml/rendering
From:       Harri Porten <porten () kde ! org>
Date:       2008-10-18 20:47:58
Message-ID: 1224362878.177089.28691.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 873119 by porten:

Merged revision 873117:
As we do our own event transporting we have to do our own
bubbling for nested QWidgets embedded as from controls.

Fixes the click on the clear button of the the KUrlRequester
control used for the file input element.

 M  +19 -2     render_replaced.cpp  


--- branches/KDE/4.1/kdelibs/khtml/rendering/render_replaced.cpp #873118:873119
@@ -927,6 +927,23 @@
     }
 }
 
+
+// send event to target and let it bubble up until it is accepted or
+// once it would go through a limiting widget level
+static bool bubblingSend(QWidget* target, QEvent* e, QWidget* stoppingParent)
+{
+    for (;;) {
+        static_cast<RenderWidget::EventPropagator *>(target)->sendEvent(e);
+        if (e->isAccepted())
+            return true;
+        if (target == stoppingParent)
+            return false;
+        // ### might want to shift Q*Event::pos() as we go up
+        target = target->parentWidget();
+        assert(target != 0);
+    }
+}
+
 bool RenderWidget::handleEvent(const DOM::EventImpl& ev)
 {
     bool ret = false;
@@ -1090,10 +1107,10 @@
         QEvent *e = isMouseWheel ?
                     static_cast<QEvent*>(new QWheelEvent(p, -me.detail()*40, buttons, state, orient)) :
                     static_cast<QEvent*>(new QMouseEvent(type,    p, button, buttons, state));
-        static_cast<EventPropagator *>(target)->sendEvent(e);
 
-        ret = e->isAccepted();
 
+        ret = bubblingSend(target, e, m_widget);
+
         if (needContextMenuEvent) {
             QContextMenuEvent cme(QContextMenuEvent::Mouse, p);
             static_cast<EventPropagator *>(target)->sendEvent(&cme);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic