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

List:       kde-commits
Subject:    KDE/kdelibs/khtml/rendering
From:       Maks Orlovich <maksim () kde ! org>
Date:       2010-04-05 0:14:58
Message-ID: 20100405001458.ACC5BAC857 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1111163 by orlovich:

Fix disabling of optgroups/options in combobx mode as well (also making it \
unselectable in that mode).

Seems to be nearly perfect, except for not skipping the disabled items when chosing \
defaults.

CCBUG: 76489


 M  +34 -34    render_form.cpp  
 M  +2 -0      render_form.h  


--- trunk/KDE/kdelibs/khtml/rendering/render_form.cpp #1111162:1111163
@@ -61,6 +61,7 @@
 #include <QStyleOptionButton>
 #include <QtGui/QLabel>
 #include <QtGui/QStyleOptionFrameV3>
+#include <QtGui/QStandardItemModel>
 
 #include <misc/helper.h>
 #include <xml/dom2_eventsimpl.h>
@@ -1661,6 +1662,20 @@
     }
 }
 
+void RenderSelect::clearItemFlags(int index, Qt::ItemFlags flags)
+{
+    if(m_useListBox) {
+        QListWidgetItem* item = static_cast<KListWidget*>(m_widget)->item(index);
+        item->setFlags(item->flags() & ~flags);
+    } else {
+        KComboBox* combo = static_cast<KComboBox*>(m_widget);
+        if (QStandardItemModel* model = \
qobject_cast<QStandardItemModel*>(combo->model())) { +            QStandardItem* item \
= model->item(index); +            item->setFlags(item->flags() & ~flags);
+        }
+    }
+}
+
 void RenderSelect::updateFromElement()
 {
     m_ignoreSelectEvents = true;
@@ -1699,10 +1714,8 @@
         const QVector<HTMLGenericFormElementImpl*> listItems = \
element()->listItems();  int listIndex;
 
-        if(m_useListBox) {
+        if(m_useListBox)
             static_cast<KListWidget*>(m_widget)->clear();
-        }
-
         else
             static_cast<KComboBox*>(m_widget)->clear();
 
@@ -1714,28 +1727,18 @@
 
                 text = text.implementation()->collapseWhiteSpace(false, false);
 
-                bool disabled = \
                !listItems[listIndex]->getAttribute(ATTR_DISABLED).isNull();
-
                 if(m_useListBox) {
                     QListWidgetItem *item = new \
                QListWidgetItem(QString(text.implementation()->s, \
                text.implementation()->l));
-                    static_cast<KListWidget*>(m_widget)
-                        ->insertItem(listIndex,item);
+                    static_cast<KListWidget*>(m_widget)->insertItem(listIndex,item);
+                } else {
+                    static_cast<KComboBox*>(m_widget)->insertItem(listIndex, \
QString(text.implementation()->s, text.implementation()->l)); +                }
 
-                    if (disabled)
-                        item->setFlags(item->flags() & ~(Qt::ItemIsSelectable | \
                Qt::ItemIsEnabled));
-                    else
-                        item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
-                }
-                else {
-                    static_cast<KComboBox*>(m_widget)
-                        ->insertItem(listIndex, QString(text.implementation()->s, \
                text.implementation()->l));
-#ifdef __GNUC__
-  #warning "This needs fixing (though did it work in 3?)"
-#endif
-#if 0
-		    static_cast<KComboBox*>(m_widget)->listBox()->item(listIndex)->setSelectable(false);
                
-#endif
-		}
+                bool disabled = \
!listItems[listIndex]->getAttribute(ATTR_DISABLED).isNull();                 +        \
if (disabled) +                    clearItemFlags(listIndex, Qt::ItemIsSelectable | \
Qt::ItemIsEnabled); +                else
+                    clearItemFlags(listIndex, Qt::ItemIsSelectable);
             }
             else if (listItems[listIndex]->id() == ID_OPTION) {
                 HTMLOptionElementImpl* optElem = \
static_cast<HTMLOptionElementImpl*>(listItems[listIndex]); @@ -1759,20 +1762,17 @@
                     text = domText.string();
                 }
 
-                if(m_useListBox) {
-                    KListWidget *l = static_cast<KListWidget*>(m_widget);
-                    l->insertItem(listIndex,text);
+                if(m_useListBox)
+                    static_cast<KListWidget*>(m_widget)->insertItem(listIndex,text);
+                else
+                    static_cast<KComboBox*>(m_widget)->insertItem(listIndex, text);
 
-                    bool disabled = !optElem->getAttribute(ATTR_DISABLED).isNull();
-                    if (parentOptGroup)
-                        disabled = disabled || \
!parentOptGroup->getAttribute(ATTR_DISABLED).isNull(); +                bool disabled \
= !optElem->getAttribute(ATTR_DISABLED).isNull(); +                if \
(parentOptGroup) +                    disabled = disabled || \
!parentOptGroup->getAttribute(ATTR_DISABLED).isNull();  
-                    if (disabled && l->item( listIndex )) {
-                        l->item( listIndex )->setFlags( l->item(listIndex)->flags()
-                                                            & ~(Qt::ItemIsSelectable \
                | Qt::ItemIsEnabled) );
-                    }
-                }  else
-                    static_cast<KComboBox*>(m_widget)->insertItem(listIndex, text);
+                if (disabled)
+                    clearItemFlags(listIndex, Qt::ItemIsSelectable | \
Qt::ItemIsEnabled);  }
             else
                 KHTMLAssert(false);
--- trunk/KDE/kdelibs/khtml/rendering/render_form.h #1111162:1111163
@@ -480,6 +480,8 @@
     bool m_ignoreSelectEvents;
     bool m_optionsChanged;
 
+    void clearItemFlags(int index, Qt::ItemFlags flags);
+
 protected Q_SLOTS:
     void slotSelected(int index);
     void slotSelectionChanged();


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

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