File patch-r896002.diff of Package kdelibs4

Subject: fix khtml pressing tab doesn't move focus  away from a drop-down box
From: wstephenson@suse.de
Bug: kde:156164
Patch-upstream: 896002
--- khtml/rendering/render_form.h	(revision 896001)
+++ khtml/rendering/render_form.h	(revision 896002)
@@ -413,6 +413,7 @@ public:
 protected:
     virtual bool event(QEvent *);
     virtual bool eventFilter(QObject *dest, QEvent *e);
+    virtual void keyPressEvent(QKeyEvent *e);
     virtual void showPopup();
     virtual void hidePopup();
 };
--- khtml/rendering/render_form.cpp	(revision 896001)
+++ khtml/rendering/render_form.cpp	(revision 896002)
@@ -1206,6 +1206,7 @@ bool ComboBoxWidget::eventFilter(QObject
 	{
 	case Qt::Key_Tab:
 	    forward=true;
+            // fall through
 	case Qt::Key_Backtab:
 	    // ugly hack. emulate popdownlistbox() (private in QComboBox)
 	    // we re-use ke here to store the reference to the generated event.
@@ -1221,6 +1222,20 @@ bool ComboBoxWidget::eventFilter(QObject
     return KComboBox::eventFilter(dest, e);
 }
 
+void ComboBoxWidget::keyPressEvent(QKeyEvent *e)
+{
+    // Normally, widgets are not sent Tab keys this way in the first
+    // place as they are handled by QWidget::event() for focus handling
+    // already. But we get our events via EventPropagator::sendEvent()
+    // directly. Ignore them so that HTMLGenericFormElementImpl::
+    // defaultEventHandler() can call focusNextPrev().
+    if (e->key() == Qt::Key_Tab || e->key() == Qt::Key_Backtab) {
+        e->ignore();
+        return;
+    }
+    KComboBox::keyPressEvent(e);
+}
+
 // -------------------------------------------------------------------------
 
 RenderSelect::RenderSelect(HTMLSelectElementImpl *element)
--- khtml/rendering/render_replaced.cpp	(revision 896001)
+++ khtml/rendering/render_replaced.cpp	(revision 896002)
@@ -854,6 +854,7 @@ bool RenderWidget::eventFilter(QObject*
 }
 
 void RenderWidget::EventPropagator::sendEvent(QEvent *e) {
+    // ### why don't we just call event()? That would be the normal route.
     switch(e->type()) {
     case QEvent::Wheel:
         wheelEvent ( static_cast<QWheelEvent *> (e) );
Index: khtml/rendering/render_form.h
===================================================================
Index: khtml/rendering/render_form.cpp
===================================================================
Index: khtml/rendering/render_replaced.cpp
===================================================================
openSUSE Build Service is sponsored by