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

List:       kde-commits
Subject:    branches/KDE/3.4/kdelibs/khtml/rendering
From:       David Faure <faure () kde ! org>
Date:       2005-05-12 18:31:05
Message-ID: 1115922665.688925.29468.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 412818 by dfaure:

Returning false from onkeypress should prevent the keys from being processed, backport.
BUG: 99749


 M  +11 -8     branches/KDE/3.4/kdelibs/khtml/rendering/render_replaced.cpp  


--- branches/KDE/3.4/kdelibs/khtml/rendering/render_replaced.cpp #412817:412818
@@ -746,10 +746,11 @@
         break;
     }
     case EventImpl::KEYDOWN_EVENT:
+        // do nothing; see the mapping table below
+        break;
     case EventImpl::KEYUP_EVENT: {
         QKeyEvent* const ke = static_cast<const TextEventImpl &>(ev).qKeyEvent();
-        if (ke)
-            static_cast<EventPropagator *>(m_widget)->sendEvent(ke);
+        static_cast<EventPropagator *>(m_widget)->sendEvent(ke);
         ret = ke->isAccepted();
         break;
     }
@@ -762,18 +763,20 @@
         // because the matching Qt keypress event was already sent from DOM keydown event.
 
         // Reverse drawing as the one in KHTMLView:
-        //  DOM:   Down     Press   |       Press                             |     Up
-        //  Qt:    Press  (nothing) | Release(autorepeat) + Press(autorepeat) |   Release
+        //  DOM:   Down      Press   |       Press                             |     Up
+        //  Qt:    (nothing) Press   | Release(autorepeat) + Press(autorepeat) |   Release
+        //
+        // Qt::KeyPress is sent for DOM keypress and not DOM keydown to allow
+        // sites to block a key with onkeypress, #99749
 
         QKeyEvent* const ke = static_cast<const TextEventImpl &>(ev).qKeyEvent();
-        if (ke && ke->isAutoRepeat()) {
+        if (ke->isAutoRepeat()) {
             QKeyEvent releaseEv( QEvent::KeyRelease, ke->key(), ke->ascii(), ke->state(),
                                ke->text(), ke->isAutoRepeat(), ke->count() );
             static_cast<EventPropagator *>(m_widget)->sendEvent(&releaseEv);
-            static_cast<EventPropagator *>(m_widget)->sendEvent(ke);
-            ret = ke->isAccepted();
         }
-
+        static_cast<EventPropagator *>(m_widget)->sendEvent(ke);
+        ret = ke->isAccepted();
 	break;
     }
     case EventImpl::MOUSEOUT_EVENT: {
[prev in list] [next in list] [prev in thread] [next in thread] 

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