Bug 100964 - aKregator tabs not remembered between sessions
Summary: aKregator tabs not remembered between sessions
Status: RESOLVED FIXED
Alias: None
Product: akregator
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: unspecified Linux
: NOR wishlist with 41 votes (vote)
Target Milestone: ---
Assignee: kdepim bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-03-06 12:49 UTC by Ole Nymoen
Modified: 2007-03-03 01:27 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments
a patch implementing session management for browser-tabs (2.72 KB, patch)
2006-11-19 12:24 UTC, Carsten Pfeiffer
Details
a patch implementing session management for kontact (14.81 KB, patch)
2006-11-21 12:28 UTC, Carsten Pfeiffer
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ole Nymoen 2005-03-06 12:49:49 UTC
Version:           1.0 beta10 (using KDE 3.3.0, SuSE)
Compiler:          gcc version 3.3.4 (pre 3.3.5 20040809)
OS:                Linux (i686) release 2.6.8-24.11-default

I tend to use my browser (Opera) as a "remember to read" list by keeping interesting tabs open. 
aKregator is a very nice rss reader and I find many interesting things in the feeds, but I don't always have time to read them there and then - so I keep the tabs open until I have read the item.
It is however quite annoying if I have to shut down my laptop before everything is read as I then loose the open tabs.
I really hope you can implement remembering tabs as a feature. After starting to use Opera I'm completely hooked on this feature.
Comment 1 Teemu Rytilahti 2005-05-22 08:09:18 UTC
I agree, we should save the tabs when saving session by KDE's sessionmanager...
Comment 2 nick 2005-07-12 18:23:57 UTC
I use akregator in a similar fashion.  It is annoying, difficult, and sometimes impossible to remember what articles were open, especially when some have been open for a week or more.

However, my issue isn't simply with the session save.  I'd like it if you could you please save the tab state as it changes.  My most plagued problem is that sometimes a web page in a tab (or an email since I use it inside kontact) will crash the browser engine and take akregator and kontact down with it.  When I restart akregator none of the tabs are restored.
Comment 3 William Kendrick 2005-07-13 08:40:57 UTC
I often forget that I'm in Akregator and not Konqeuror and hit Ctrl-Q which causes Akregator to quit. (In Konq, Ctrl-Q just closes the window, or complains if I have multiple tabs open.)

At the LEAST it would be nice if Akregator would warn and ask for confirmation when quitting with articles open in tabs.  Saving the tabs so they come back when I reopen Akregator would be nice, for those situations when I _do_ need to quit (say, to exit and restart X).

Thanks!

Comment 4 Amit Shah 2005-11-30 07:30:27 UTC
'Me too': please save tabs between sessions.
Comment 5 Raúl 2006-10-06 09:48:05 UTC
#3 I think Ctrl-Q is intended for closing app and Ctrl-W for closing tab.

BTE, I think session saving is a more than interesting feature. Some times hibernating/suspending doesn't work ;).
Comment 6 Frank Osterfeld 2006-10-06 10:02:18 UTC
I agree that session saving should include browser tabs.
Comment 7 Dan 2006-10-06 18:49:38 UTC
I think it'd be nice if Akregator also used the same hotkeys that Konqueror does for dealing with tabs.  Specifically, I should be able to switch between tabs using Ctrl-, and Ctrl-. like I do in Konq (or if this is customized to something else for Konq, Akregator should follow).
Comment 8 Carsten Pfeiffer 2006-11-19 12:24:49 UTC
Created attachment 18612 [details]
a patch implementing session management for browser-tabs

Here's a patch that saves and restores the open tabs during session management.
Unfortunately it doesn't work in kontact, but that's a separate issue, I'm
afraid. It seems, there is no support for session management at all between
kontact and its parts.
Comment 9 Raúl 2006-11-19 14:09:38 UTC
Hooray for Carsten! :). Now I would like to know if this is going to be included upstream.
Comment 10 Carsten Pfeiffer 2006-11-21 12:28:38 UTC
Created attachment 18642 [details]
a patch implementing session management for kontact

This patch provides session management for kontact and its plugins. Together
with the previous akregator patch, akregator will save and restore its tabs
also when embedded in kontact.

I didn't add any session management to the other kontact plugins yet.
Comment 11 Amit Shah 2006-11-21 12:37:27 UTC
Great, thanks a lot!

On 21 Nov 2006 11:28:40 -0000, Carsten Pfeiffer <pfeiffer@kde.org> wrote:
> a patch implementing session management for kontact

Comment 12 Allen Winter 2006-11-21 17:54:58 UTC
SVN commit 606761 by winterz:

session management framework for Kontact plugins.
akregator implementation included here.

Should complete the "aKregator tabs not remembered between sessions" bugfix.
Patch by Carsten and approved by danimo.  Thanks Carsten!

CCMAIL: pfeiffer@kde.org
BUGS: 100964


 M  +12 -1     interfaces/plugin.h  
 M  +17 -0     plugins/akregator/akregator_plugin.cpp  
 M  +2 -0      plugins/akregator/akregator_plugin.h  
 M  +1 -1      plugins/akregator/akregatorplugin.desktop  
 M  +1 -1      plugins/kaddressbook/kaddressbookplugin.desktop  
 M  +1 -1      plugins/karm/karmplugin.desktop  
 M  +1 -1      plugins/kitchensync/kitchensync.desktop  
 M  +1 -1      plugins/kmail/kmailplugin.desktop  
 M  +1 -1      plugins/knode/knodeplugin.desktop  
 M  +1 -1      plugins/knotes/knotesplugin.desktop  
 M  +1 -1      plugins/korganizer/journalplugin.desktop  
 M  +1 -1      plugins/korganizer/korganizerplugin.desktop  
 M  +1 -1      plugins/korganizer/todoplugin.desktop  
 M  +1 -1      plugins/kpilot/kpilotplugin.desktop  
 M  +1 -1      plugins/multisynk/multisynk.desktop  
 M  +1 -1      plugins/newsticker/newstickerplugin.desktop  
 M  +1 -1      plugins/specialdates/specialdatesplugin.desktop  
 M  +1 -1      plugins/summary/summaryplugin.desktop  
 M  +1 -1      plugins/test/kptestplugin.desktop  
 M  +1 -1      plugins/weather/weatherplugin.desktop  
 M  +21 -10    src/main.cpp  
 M  +40 -0     src/mainwindow.cpp  
 M  +3 -0      src/mainwindow.h  


--- branches/KDE/3.5/kdepim/kontact/interfaces/plugin.h #606760:606761
@@ -34,6 +34,7 @@
 class DCOPObject;
 class KAboutData;
 class KAction;
+class KConfig;
 class QWidget;
 namespace KParts { class ReadOnlyPart; }
 
@@ -41,7 +42,7 @@
   Increase this version number whenever you make a change
   in the API.
  */
-#define KONTACT_PLUGIN_VERSION 4
+#define KONTACT_PLUGIN_VERSION 5
 
 namespace Kontact
 {
@@ -231,6 +232,16 @@
     */
     virtual void processDropEvent( QDropEvent * ) {}
 
+    /**
+     * Session management: read properties
+     */
+    virtual void readProperties( KConfig * ) {}
+
+    /**
+     * Session management: save properties
+     */
+    virtual void saveProperties( KConfig * ) {}
+
     Core *core() const;
 
   public slots:
--- branches/KDE/3.5/kdepim/kontact/plugins/akregator/akregator_plugin.cpp #606760:606761
@@ -40,6 +40,7 @@
 #include <plugin.h>
 
 #include <akregator_options.h>
+#include <akregator_part.h>
 #include "akregator_plugin.h"
 namespace Akregator {
 
@@ -114,6 +115,22 @@
     return modules;
 }
 
+void Plugin::readProperties( KConfig *config )
+{
+    if ( part() ) {
+        Akregator::Part *myPart = static_cast<Akregator::Part*>( part() );    
+        myPart->readProperties( config );
+    }
+}
+
+void Plugin::saveProperties( KConfig *config )
+{
+    if ( part() ) {
+        Akregator::Part *myPart = static_cast<Akregator::Part*>( part() );    
+        myPart->saveProperties( config );
+    }
+}
+
 void UniqueAppHandler::loadCommandLineOptions()
 {
     KCmdLineArgs::addCmdLineOptions( akregator_options );
--- branches/KDE/3.5/kdepim/kontact/plugins/akregator/akregator_plugin.h #606760:606761
@@ -64,6 +64,8 @@
     virtual QStringList configModules() const;
     virtual QStringList invisibleToolbarActions() const;
     virtual bool isRunningStandalone();
+    virtual void readProperties( KConfig *config );
+    virtual void saveProperties( KConfig *config );
 
   private slots:
     void showPart();
--- branches/KDE/3.5/kdepim/kontact/plugins/akregator/akregatorplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_akregator
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libakregatorpart
 X-KDE-KontactPartLoadOnStart=false
 
--- branches/KDE/3.5/kdepim/kontact/plugins/kaddressbook/kaddressbookplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_kaddressbookplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libkaddressbookpart
 X-KDE-KontactPartExecutableName=kaddressbook
 X-KDE-KontactPluginHasSummary=false
--- branches/KDE/3.5/kdepim/kontact/plugins/karm/karmplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_karm
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libkarmpart
 
 X-KDE-PluginInfo-Name=kontact_karm
--- branches/KDE/3.5/kdepim/kontact/plugins/kitchensync/kitchensync.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_kitchensync
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libkitchensyncpart
 
 X-KDE-PluginInfo-Name=kontact_kitchensync
--- branches/KDE/3.5/kdepim/kontact/plugins/kmail/kmailplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_kmailplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libkmailpart
 X-KDE-KontactPartExecutableName=kmail
 X-KDE-KontactPartLoadOnStart=true
--- branches/KDE/3.5/kdepim/kontact/plugins/knode/knodeplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_knodeplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libknodepart
 X-KDE-KontactPartExecutableName=knode
 
--- branches/KDE/3.5/kdepim/kontact/plugins/knotes/knotesplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_knotesplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPluginHasSummary=true
 
 X-KDE-PluginInfo-Website=http://pim.kde.org/components/knotes.php
--- branches/KDE/3.5/kdepim/kontact/plugins/korganizer/journalplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin
 
 X-KDE-Library=libkontact_journalplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libkorganizerpart
 X-KDE-KontactPartExecutableName=korganizer
 X-KDE-KontactPluginHasSummary=false
--- branches/KDE/3.5/kdepim/kontact/plugins/korganizer/korganizerplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_korganizerplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libkorganizerpart
 X-KDE-KontactPartExecutableName=korganizer
 X-KDE-KontactPluginHasSummary=true
--- branches/KDE/3.5/kdepim/kontact/plugins/korganizer/todoplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin
 
 X-KDE-Library=libkontact_todoplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libkorganizerpart
 X-KDE-KontactPartExecutableName=korganizer
 X-KDE-KontactPluginHasSummary=true
--- branches/KDE/3.5/kdepim/kontact/plugins/kpilot/kpilotplugin.desktop #606760:606761
@@ -6,7 +6,7 @@
 
 X-KDE-Library=libkontact_kpilotplugin
 X-KDE-KontactIdentifier=kpilot
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPluginHasSummary=true
 X-KDE-KontactPluginHasPart=false
 
--- branches/KDE/3.5/kdepim/kontact/plugins/multisynk/multisynk.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_multisynk
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPartLibraryName=libmultisynkpart
 
 X-KDE-PluginInfo-Name=kontact_multisynk
--- branches/KDE/3.5/kdepim/kontact/plugins/newsticker/newstickerplugin.desktop #606760:606761
@@ -6,7 +6,7 @@
 TryExec=rssservice
 
 X-KDE-Library=libkontact_newstickerplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPluginHasSummary=true
 X-KDE-KontactPluginHasPart=false
 
--- branches/KDE/3.5/kdepim/kontact/plugins/specialdates/specialdatesplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_specialdatesplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPluginHasPart=false
 X-KDE-KontactPluginHasSummary=true
 
--- branches/KDE/3.5/kdepim/kontact/plugins/summary/summaryplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkontact_summaryplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 
 X-KDE-PluginInfo-Name=kontact_summaryplugin
 X-KDE-PluginInfo-Version=0.1
--- branches/KDE/3.5/kdepim/kontact/plugins/test/kptestplugin.desktop #606760:606761
@@ -5,7 +5,7 @@
 ServiceTypes=Kontact/Plugin,KPluginInfo
 
 X-KDE-Library=libkptestplugin
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 
 X-KDE-PluginInfo-Name=kptestplugin
 X-KDE-PluginInfo-Version=0.1
--- branches/KDE/3.5/kdepim/kontact/plugins/weather/weatherplugin.desktop #606760:606761
@@ -7,7 +7,7 @@
 
 X-KDE-Library=libkontact_weatherplugin
 X-KDE-KontactIdentifier=weather
-X-KDE-KontactPluginVersion=4
+X-KDE-KontactPluginVersion=5
 X-KDE-KontactPluginHasSummary=true
 X-KDE-KontactPluginHasPart=false
 
--- branches/KDE/3.5/kdepim/kontact/src/main.cpp #606760:606761
@@ -49,14 +49,22 @@
 
 class KontactApp : public KUniqueApplication {
   public:
-    KontactApp() : mMainWindow( 0 ) {}
+    KontactApp() : mMainWindow( 0 ), mSessionRestored( false ) {}
     ~KontactApp() {}
 
     int newInstance();
+    void setMainWindow( Kontact::MainWindow *window ) {
+        mMainWindow = window;
+        setMainWidget( window );
+    }
+    void setSessionRestored( bool restored ) {
+        mSessionRestored = restored;
+    }
 
   private:
     void startKOrgac();
     Kontact::MainWindow *mMainWindow;
+    bool mSessionRestored;
 };
 
 static void listPlugins()
@@ -94,15 +102,7 @@
     moduleName = QString::fromLocal8Bit( args->getOption( "module" ) );
   }
 
-  if ( isRestored() ) {
-    // There can only be one main window
-    if ( KMainWindow::canBeRestored( 1 ) ) {
-      mMainWindow = new Kontact::MainWindow();
-      setMainWidget( mMainWindow );
-      mMainWindow->show();
-      mMainWindow->restore( 1 );
-    }
-  } else {
+  if ( !mSessionRestored ) {
     if ( !mMainWindow ) {
       mMainWindow = new Kontact::MainWindow();
       if ( !moduleName.isEmpty() )
@@ -158,6 +158,17 @@
   }
 
   KontactApp app;
+  if ( app.restoringSession() ) {
+     // There can only be one main window
+    if ( KMainWindow::canBeRestored( 1 ) ) {
+      Kontact::MainWindow *mainWindow = new Kontact::MainWindow();
+      app.setMainWindow( mainWindow );
+      app.setSessionRestored( true );
+      mainWindow->show();
+      mainWindow->restore( 1 );
+    }
+  }
+
   bool ret = app.exec();
   while ( KMainWindow::memberList->first() )
     delete KMainWindow::memberList->first();
--- branches/KDE/3.5/kdepim/kontact/src/mainwindow.cpp #606760:606761
@@ -805,6 +805,46 @@
     new KRun( url, this );
 }
 
+void MainWindow::readProperties( KConfig *config )
+{
+  Core::readProperties( config );
+
+  QStringList activePlugins = config->readListEntry( "ActivePlugins" );
+  QValueList<Plugin*>::ConstIterator it = mPlugins.begin();
+  QValueList<Plugin*>::ConstIterator end = mPlugins.end();
+  for ( ; it != end; ++it ) {
+    Plugin *plugin = *it;
+    if ( !plugin->isRunningStandalone() ) {
+      QStringList::ConstIterator activePlugin = activePlugins.find( plugin->identifier() );
+      if ( activePlugin != activePlugins.end() ) {
+        plugin->readProperties( config );
+      }
+    }
+  }
+}
+
+void MainWindow::saveProperties( KConfig *config )
+{
+  Core::saveProperties( config );
+
+  QStringList activePlugins;
+
+  KPluginInfo::List::Iterator it = mPluginInfos.begin();
+  KPluginInfo::List::Iterator end = mPluginInfos.end();
+  for ( ; it != end; ++it ) {
+    KPluginInfo *info = *it;
+    if ( info->isPluginEnabled() ) {
+      Plugin *plugin = pluginFromInfo( info );
+      if ( plugin ) {
+        activePlugins.append( plugin->identifier() );
+        plugin->saveProperties( config );
+      }
+    }
+  }
+
+  config->writeEntry( "ActivePlugins", activePlugins );
+}
+
 bool MainWindow::queryClose()
 {
   if ( kapp->sessionSaving() || mReallyClose )
--- branches/KDE/3.5/kdepim/kontact/src/mainwindow.h #606760:606761
@@ -41,6 +41,7 @@
 class QFrame;
 
 class KAction;
+class KConfig;
 class KPluginInfo;
 class KRSqueezedTextLabel;
 class KHTMLPart;
@@ -116,6 +117,8 @@
     void setupActions();
     void showTip( bool );
     virtual bool queryClose();
+    virtual void readProperties( KConfig *config );
+    virtual void saveProperties( KConfig *config );
     void paintAboutScreen( const QString& msg );
     static QString introductionString();
 
Comment 13 Allen Winter 2006-11-21 23:32:38 UTC
Whoops!  I didn't realize that the akregator specific patch had yet to be applied.

So I'm reopening.
Comment 14 Frank Osterfeld 2006-11-24 22:22:56 UTC
SVN commit 607497 by osterfeld:

add session management for browser tabs. Patch by Carsten Pfeiffer <pfeiffer at kde.org>.

BUG: 100964


 M  +2 -0      ChangeLog  
 M  +29 -0     src/akregator_view.cpp  
 M  +13 -0     src/tabwidget.cpp  
 M  +2 -0      src/tabwidget.h  


--- branches/KDE/3.5/kdepim/akregator/ChangeLog #607496:607497
@@ -7,6 +7,8 @@
 
 Bug fixes:
 
+ 2006/11/24 Add session management for browser tabs (#100964) Patch by Carsten Pfeiffer <pfeiffer at kde.org> -fo
+ 2006/11/10 Fix crash in Konqueror icon plugin sometimes happening when switching parts (#134929) -fo
  2006/10/31 Fix group name encoding bug when adding feeds from commandline (e.g., using the Konq plugin) (#136559)
             Patch by Andrey Cherepanov.
 
--- branches/KDE/3.5/kdepim/akregator/src/akregator_view.cpp #607496:607497
@@ -93,6 +93,7 @@
 #include <qlayout.h>
 #include <qmultilineedit.h>
 #include <qpopupmenu.h>
+#include <qptrlist.h>
 #include <qstylesheet.h>
 #include <qtextstream.h>
 #include <qtimer.h>
@@ -1467,6 +1468,15 @@
         if (selNode)
             m_listTabWidget->activeView()->setSelectedNode(selNode);
     }
+
+    QStringList urls = config->readListEntry("FeedBrowserURLs");
+    QStringList::ConstIterator it = urls.begin();
+    for (; it != urls.end(); ++it)
+    {
+        KURL url = KURL::fromPathOrURL(*it);
+        if (url.isValid())
+            slotOpenNewTab(url, true); // open in background
+    }
 }
 
 void View::saveProperties(KConfig* config)
@@ -1481,6 +1491,25 @@
     {
         config->writeEntry("selectedNodeID", sel->id() );
     }
+
+    // save browser URLs
+    QStringList urls;
+    QPtrList<Frame> frames = m_tabs->frames();
+    QPtrList<Frame>::ConstIterator it = frames.begin();
+    for (; it != frames.end(); ++it)
+    {
+        Frame *frame = *it;
+        KParts::ReadOnlyPart *part = frame->part();
+        PageViewer *pageViewer = dynamic_cast<PageViewer*>(part); // don't save the ArticleViewer
+        if (pageViewer)
+        {
+            KURL url = pageViewer->url();
+            if (url.isValid())
+                urls.append(url.prettyURL());
+        }
+    }
+
+    config->writeEntry("FeedBrowserURLs", urls);
 }
 
 void View::connectToFeedList(FeedList* feedList)
--- branches/KDE/3.5/kdepim/akregator/src/tabwidget.cpp #607496:607497
@@ -127,6 +127,19 @@
     return w ? d->frames[w] : 0;
 }
 
+QPtrList<Frame> TabWidget::frames() const
+{
+    QPtrList<Frame> result;
+    QPtrDictIterator<Frame> it(d->frames);
+    while (it.current())
+    {
+        result.append(it.current());
+        ++it;
+    }
+
+    return result;
+}
+
 void TabWidget::slotTabChanged(QWidget *w)
 {
     // FIXME: Don't hardcode the tab position of main frame
--- branches/KDE/3.5/kdepim/akregator/src/tabwidget.h #607496:607497
@@ -25,6 +25,7 @@
 #ifndef TABWIDGET_H
 #define TABWIDGET_H
 
+#include <qptrlist.h>
 #include <ktabwidget.h>
 
 class QString;
@@ -45,6 +46,7 @@
         void addFrame(Frame *f);
         Frame* currentFrame();
         void removeFrame(Frame *f);
+        QPtrList<Frame> frames() const;
 
     public slots:
 
Comment 15 LXj 2007-03-03 01:27:32 UTC
I think Akregator should also remember the open tabs when exiting (not only on KDE shutdown)