[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