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

List:       kde-commits
Subject:    [kdepim] akregator/src: in doCreate(), when the akregator part hasn't been loaded yet sometimes
From:       Allen Winter <winter () kde ! org>
Date:       2012-02-01 0:06:08
Message-ID: 20120201000608.A5F8DA60A6 () git ! kde ! org
[Download RAW message or body]

Git commit a19ca446ebeead28a8f44cbedfc6d36953408ab3 by Allen Winter.
Committed on 01/02/2012 at 01:01.
Pushed by winterz into branch 'master'.

in doCreate(), when the akregator part hasn't been loaded yet sometimes
the parent and root folders aren't set, in this case set the root folder
to the "All" Folders top-level and add the new feed there.

I found this crash while testing out another bug, so I don't know if
this fixes any reported crashes -- certainly wouldn't surprise me.

MERGE: 4.8

M  +18   -5    akregator/src/createfeedcommand.cpp
M  +4    -3    akregator/src/createfeedcommand.h
M  +5    -0    akregator/src/mainwidget.h

http://commits.kde.org/kdepim/a19ca446ebeead28a8f44cbedfc6d36953408ab3

diff --git a/akregator/src/createfeedcommand.cpp b/akregator/src/createfeedcommand.cpp
index 917d628..a754b3d 100644
--- a/akregator/src/createfeedcommand.cpp
+++ b/akregator/src/createfeedcommand.cpp
@@ -26,8 +26,10 @@
 
 #include "addfeeddialog.h"
 #include "feed.h"
+#include "feedlist.h"
 #include "feedpropertiesdialog.h"
 #include "folder.h"
+#include "mainwidget.h"
 #include "subscriptionlistview.h"
 
 #include <KInputDialog>
@@ -50,6 +52,7 @@ public:
 
     void doCreate();
 
+    QPointer<MainWidget> m_parent;
     QPointer<Folder> m_rootFolder;
     QPointer<SubscriptionListView> m_subscriptionListView;
     QString m_url;
@@ -121,18 +124,28 @@ void CreateFeedCommand::Private::doCreate()
     }
     else
     {
-        m_parentFolder = m_parentFolder ? m_parentFolder : m_rootFolder;
-        m_parentFolder->insertChild( feed, m_after );
-        m_subscriptionListView->ensureNodeVisible( feed );
+        if ( !m_parentFolder ) {
+          if ( !m_rootFolder ) {
+            if ( m_parent->allFeedsList() ) {
+              q->setRootFolder( m_parent->allFeedsList()->allFeedsFolder() );
+            }
+          }
+          m_parentFolder = m_rootFolder;
+        }
+
+        if ( m_parentFolder ) {
+          m_parentFolder->insertChild( feed, m_after );
+          m_subscriptionListView->ensureNodeVisible( feed );
+        }
     }
 
     delete dlg;
     q->done();
 }
 
-CreateFeedCommand::CreateFeedCommand( QObject* parent ) : Command( parent ), d( new Private( this ) )
+CreateFeedCommand::CreateFeedCommand( MainWidget* parent ) : Command( parent ), d( new Private( this ) )
 {
-
+    d->m_parent = parent;
 }
 
 CreateFeedCommand::~CreateFeedCommand()
diff --git a/akregator/src/createfeedcommand.h b/akregator/src/createfeedcommand.h
index ccd34f6..b1cb470 100644
--- a/akregator/src/createfeedcommand.h
+++ b/akregator/src/createfeedcommand.h
@@ -30,6 +30,7 @@
 namespace Akregator {
 
 class Folder;
+class MainWidget;
 class SubscriptionListView;
 class TreeNode;
 
@@ -37,7 +38,7 @@ class CreateFeedCommand : public Command
 {
     Q_OBJECT
 public:
-    explicit CreateFeedCommand( QObject* parent = 0 );
+    explicit CreateFeedCommand( MainWidget* parent = 0 );
     ~CreateFeedCommand();
 
     void setSubscriptionListView( SubscriptionListView* view );
@@ -45,11 +46,11 @@ public:
     void setUrl( const QString& url );
     void setPosition( Folder* parent, TreeNode* after );
     void setAutoExecute( bool autoexec );
-    
+
 private:
     void doStart();
     void doAbort();
-    
+
 private:
     class Private;
     Private* const d;
diff --git a/akregator/src/mainwidget.h b/akregator/src/mainwidget.h
index a832cf3..ec18b2c 100644
--- a/akregator/src/mainwidget.h
+++ b/akregator/src/mainwidget.h
@@ -102,6 +102,11 @@ class AKREGATORPART_EXPORT MainWidget : public QWidget
          */
         void addFeedToGroup(const QString& url, const QString& group);
 
+        boost::shared_ptr<FeedList> allFeedsList()
+        {
+            return m_feedList;
+        }
+
         /** session management **/
         void readProperties(const KConfigGroup & config);
         void saveProperties(KConfigGroup & config);
[prev in list] [next in list] [prev in thread] [next in thread] 

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