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

List:       kde-commits
Subject:    branches/KDE/4.2/kdepim/akregator/src
From:       Frank Osterfeld <frank.osterfeld () kdemail ! net>
Date:       2009-01-23 17:20:12
Message-ID: 1232731212.237809.28986.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 915740 by osterfeld:

backport, Christophe confirms it's fixed now. Please all test. Same fix for feed list \
to come.

SVN commit 915739 by osterfeld:

Try to fix the headerview amnesia.
QHeaderView::restoreState/saveState doesn't work properly if there is no model
set
Also, with the Qt 4.5 snapshot, all header settings are lost each time when
setting a new model.
This patch is for articleview, can be done for feed list view as well, if it
solves the problem.
Please everyone test (if you use SVN)

BUG:152702


 M  +17 -25    articlelistview.cpp  
 M  +3 -1      articlelistview.h  
 M  +4 -5      selectioncontroller.cpp  


--- branches/KDE/4.2/kdepim/akregator/src/articlelistview.cpp #915739:915740
@@ -144,9 +144,11 @@
 
 void ArticleListView::setArticleModel( ArticleModel* model )
 {
-    slotClear();
-    if ( !model )
+    if ( !model ) {
+        setModel( model );
         return;
+    }
+
     m_proxy = new SortColorizeProxyModel( model );
     m_proxy->setSourceModel( model );
     m_proxy->setSortRole( ArticleModel::SortRole );
@@ -164,12 +166,6 @@
     columnsProxy->setColumnEnabled( ArticleModel::AuthorColumn );
 
     setModel( columnsProxy );
-
-    if ( !m_headerSetUp )
-    {
-        loadHeaderSettings();
-        m_headerSetUp = true;
-    }
     header()->setContextMenuPolicy( Qt::CustomContextMenu );
 }
 
@@ -205,24 +201,14 @@
 
 void ArticleListView::saveHeaderSettings()
 {
-    //FIXME: HACK: Change back to saveState() when the Qt-bug is fixed
-    // is it qt-bug, really? at least saveState is working, but calling the next \
                line causes app to hang.. -Teemu
-    //Settings::setArticlelistHeaderStates( header()->saveState().toBase64() );
-
-    QByteArray s = header()->saveState();
     KConfigGroup conf( Settings::self()->config(), "General" );
-    conf.writeEntry( "ArticleListHeaders", s.toBase64() );
+    conf.writeEntry( "ArticleListHeaders", m_headerState.toBase64() );
 }
 
 void ArticleListView::loadHeaderSettings()
 {
-    //FIXME: HACK: change back to loadState+Settings class instead of using \
                KConfigGroup directly..
-    //QByteArray s = QByteArray::fromBase64( \
                Settings::feedlistHeaderStates().toAscii() ); // this fails \
                currently, I think -Teemu
-
     KConfigGroup conf( Settings::self()->config(), "General" );
-    QByteArray s = QByteArray::fromBase64( conf.readEntry( "ArticleListHeaders" \
                ).toAscii() );
-    if( !s.isNull() )
-        header()->restoreState( s );
+    m_headerState = QByteArray::fromBase64( conf.readEntry( "ArticleListHeaders" \
).toAscii() );  }
 
 QItemSelectionModel* ArticleListView::articleSelectionModel() const
@@ -287,8 +273,7 @@
 ArticleListView::ArticleListView( QWidget* parent )
     : QTreeView(parent),
     m_columnMode( Unspecified ),
-    m_isAggregation( false ),
-    m_headerSetUp( false )
+    m_isAggregation( false )
 {
     setSortingEnabled( true );
     setAlternatingRowColors( true );
@@ -296,7 +281,6 @@
     setUniformRowHeights( true );
     setRootIsDecorated( false );
     setAllColumnsShowFocus( true );
-
     setMinimumSize( 250, 150 );
     setWhatsThis( i18n("<h2>Article list</h2>"
         "Here you can browse articles from the currently selected feed. "
@@ -306,6 +290,7 @@
     //connect exactly once
     disconnect( header(), SIGNAL(customContextMenuRequested(QPoint)), this, \
                SLOT(showHeaderMenu(QPoint)) );
     connect( header(), SIGNAL(customContextMenuRequested(QPoint)), this, \
SLOT(showHeaderMenu(QPoint)) ); +    loadHeaderSettings();
 }
 
 void ArticleListView::mousePressEvent( QMouseEvent *ev )
@@ -390,11 +375,18 @@
 }
 
 
+void ArticleListView::setModel( QAbstractItemModel* m ) {
+    QAbstractItemModel* const oldModel = model();
+    if ( oldModel )
+        m_headerState = header()->saveState();
+    QTreeView::setModel( m );
+    if ( m )
+        header()->restoreState( m_headerState );
+}
+
 void ArticleListView::slotClear()
 {
-    QAbstractItemModel* const oldModel = model();
     setModel( 0L );
-    delete oldModel;
 }
 
 void ArticleListView::slotPreviousArticle()
--- branches/KDE/4.2/kdepim/akregator/src/articlelistview.h #915739:915740
@@ -119,6 +119,8 @@
 
     void setIsAggregation( bool isAggregation );
 
+    /* reimp */ void setModel( QAbstractItemModel* model );
+
 protected:
     void mousePressEvent( QMouseEvent *ev );
 
@@ -162,8 +164,8 @@
     ColumnMode m_columnMode;
     bool m_isAggregation;
     QPointer<SortColorizeProxyModel> m_proxy;
-    bool m_headerSetUp;
     std::vector<boost::shared_ptr<const Filters::AbstractMatcher> > m_matchers;
+    QByteArray m_headerState;
 };
 
 } // namespace Akregator
--- branches/KDE/4.2/kdepim/akregator/src/selectioncontroller.cpp #915739:915740
@@ -181,12 +181,11 @@
 
 void Akregator::SelectionController::articleHeadersAvailable()
 {
-    if(m_articleModel)
-        delete m_articleModel;
+    ArticleModel* const newModel = new ArticleModel( m_selectedSubscription );
+    m_articleLister->setArticleModel( newModel );
+    delete m_articleModel;
+    m_articleModel = newModel;
 
-    m_articleModel = new Akregator::ArticleModel( m_selectedSubscription );
-    m_articleLister->setArticleModel( m_articleModel );
-
     m_articleLister->setIsAggregation( m_selectedSubscription->isAggregation() );
 
     connect( m_articleLister->articleSelectionModel(), SIGNAL( selectionChanged( \
QItemSelection, QItemSelection ) ),


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

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