[PATCH] bookmarking all tabs as folder

Alexander Kellett lypanov at kde.org
Sun Jul 6 02:49:47 BST 2003


hiya david / anyone else interested,

here's an impl of a feature that 
several people have been requesting
for a while now ;-)

patch is kind of intrusive. so wanted
to let you have a look through to see
if its the best way of going about it.
wasn't really sure about the splitting
off of the owner from konq_mainwindow,
but i don't really like the use of
inheritance when it doesn't provide 
anything extra.

wasn't sure how to get around the need
for the _p.h. Njaaard suggested using
METAOBJECT_SOURCES = AUTO, or something
like that, but i couldn't get that working
in the end so i just wound up with using
the old faithful _p.h trick. having the
private class in konq_mainwindow.h is
possible of course, but horrible for
compilation times.

i've already commited the core stuff 
itself KExtendedBookmarkOwner to kdelibs,
can be found in kbookmarkmanager.h

in any case, it Works For Me :)

cheers,
Alex
-------------- next part --------------
? .konq_tabs.cc.swp
? konq_mainwindow_p.h
? konqueror.la.cc
? konqueror_dummy.cc
? client/kfmclient.la.cc
? client/kfmclient_dummy.cc
? keditbookmarks/keditbookmarks.la.cpp
? keditbookmarks/keditbookmarks_dummy.cpp
Index: konq_mainwindow.cc
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_mainwindow.cc,v
retrieving revision 1.1195
diff -u -p -B -w -r1.1195 konq_mainwindow.cc
--- konq_mainwindow.cc	3 Jul 2003 20:20:59 -0000	1.1195
+++ konq_mainwindow.cc	6 Jul 2003 01:29:22 -0000
@@ -123,6 +123,13 @@ int KonqMainWindow::s_preloadUsageCount;
 
 static int current_memory_usage();
 
+#include "konq_mainwindow_p.h"
+
+KonqExtendedBookmarkOwner::KonqExtendedBookmarkOwner(KonqMainWindow *w)
+{
+   m_pKonqMainWindow = w;
+}
+
 KonqMainWindow::KonqMainWindow( const KURL &initialURL, bool openInitialURL, const char *name )
  : KParts::MainWindow( name, WDestructiveClose | WStyle_ContextHelp )
 {
@@ -165,6 +172,12 @@ KonqMainWindow::KonqMainWindow( const KU
   m_paMoveFiles = 0L;
   m_paNewDir = 0L;
   m_bookmarkBarActionCollection = 0L;
+  KonqExtendedBookmarkOwner *extOwner = new KonqExtendedBookmarkOwner( this );
+  m_pBookmarksOwner = extOwner;
+  connect( extOwner, 
+           SIGNAL( signalFillBookmarksList(KExtendedBookmarkOwner::QStringPairList &) ),
+           extOwner,
+           SLOT( slotFillBookmarksList(KExtendedBookmarkOwner::QStringPairList &) ) );
 
   KConfig *config = KGlobal::config();
 
@@ -350,7 +363,7 @@ void KonqMainWindow::initBookmarkBar()
   if (!bar) return;
   if (m_paBookmarkBar) return;
 
-  m_paBookmarkBar = new KBookmarkBar( KonqBookmarkManager::self(), this, bar, m_bookmarkBarActionCollection, this );
+  m_paBookmarkBar = new KBookmarkBar( KonqBookmarkManager::self(), m_pBookmarksOwner, bar, m_bookmarkBarActionCollection, this );
   connect( m_paBookmarkBar,
            SIGNAL( aboutToShowContextMenu(const KBookmark &, QPopupMenu*) ),
            this, SLOT( slotFillContextMenu(const KBookmark &, QPopupMenu*) ));
@@ -3244,7 +3257,7 @@ void KonqMainWindow::initActions()
   m_bookmarksActionCollection->setHighlightingEnabled( true );
   connectActionCollection( m_bookmarksActionCollection );
 
-  m_pBookmarkMenu = new KBookmarkMenu( KonqBookmarkManager::self(), this, m_pamBookmarks->popupMenu(), m_bookmarksActionCollection, true );
+  m_pBookmarkMenu = new KBookmarkMenu( KonqBookmarkManager::self(), m_pBookmarksOwner, m_pamBookmarks->popupMenu(), m_bookmarksActionCollection, true );
   connect( m_pBookmarkMenu,
            SIGNAL( aboutToShowContextMenu(const KBookmark &, QPopupMenu*) ),
            this, SLOT( slotFillContextMenu(const KBookmark &, QPopupMenu*) ));
@@ -3658,10 +3671,10 @@ void KonqMainWindow::disableActionsNoVie
     updateLocalPropsActions();
 }
 
-void KonqMainWindow::openBookmarkURL( const QString & url )
+void KonqExtendedBookmarkOwner::openBookmarkURL( const QString & url )
 {
   kdDebug(1202) << (QString("KonqMainWindow::openBookmarkURL(%1)").arg(url)) << endl;
-  openFilteredURL( url );
+  m_pKonqMainWindow->openFilteredURL( url );
 }
 
 void KonqMainWindow::setCaption( const QString &caption )
@@ -3691,6 +3704,11 @@ void KonqMainWindow::show()
   KParts::MainWindow::show();
 }
 
+QString KonqExtendedBookmarkOwner::currentURL() const 
+{
+   return m_pKonqMainWindow->currentURL();
+}
+
 QString KonqMainWindow::currentURL() const
 {
   if ( !m_currentView )
@@ -3709,6 +3727,33 @@ QString KonqMainWindow::currentURL() con
   return url;
 }
 
+void KonqExtendedBookmarkOwner::slotFillBookmarksList( KExtendedBookmarkOwner::QStringPairList & list )
+{
+  KonqFrameBase *docContainer = m_pKonqMainWindow->m_pViewManager->docContainer();
+  if (docContainer == 0L) return;
+  if (docContainer->frameType() != "Tabs") return;
+
+  KonqFrameTabs* tabContainer = static_cast<KonqFrameTabs*>(docContainer);
+
+  QPtrList<KonqFrameBase> frameList = *tabContainer->childFrameList();
+  QPtrListIterator<KonqFrameBase> it( frameList );
+
+  for ( it.toFirst(); it != 0L; ++it )
+  {
+    if ( !it.current()->activeChildView() )
+      continue;
+    if( it.current()->activeChildView()->locationBarURL().isEmpty() )
+      continue;
+    list << qMakePair( it.current()->activeChildView()->caption(),
+                       it.current()->activeChildView()->url().url() );
+  }
+}
+
+QString KonqExtendedBookmarkOwner::currentTitle() const 
+{
+   return m_pKonqMainWindow->currentTitle();
+}
+
 QString KonqMainWindow::currentTitle() const
 {
   return m_currentView ? m_currentView->caption() : QString::null;
@@ -4814,6 +4859,7 @@ static int current_memory_usage()
 }
 
 #include "konq_mainwindow.moc"
+#include "konq_mainwindow_p.moc"
 
 /* vim: et sw=4 ts=4
  */
Index: konq_mainwindow.h
===================================================================
RCS file: /home/kde/kdebase/konqueror/konq_mainwindow.h,v
retrieving revision 1.404
diff -u -p -B -w -r1.404 konq_mainwindow.h
--- konq_mainwindow.h	3 Jul 2003 20:20:59 -0000	1.404
+++ konq_mainwindow.h	6 Jul 2003 01:29:22 -0000
@@ -80,10 +80,9 @@ namespace KParts {
  struct URLArgs;
 };
 
+class KonqExtendedBookmarkOwner;
 
-class KonqMainWindow : public KParts::MainWindow,
-		       virtual public KBookmarkOwner,
-		       public KonqFrameContainerBase
+class KonqMainWindow : public KParts::MainWindow, public KonqFrameContainerBase
 {
   Q_OBJECT
   Q_PROPERTY( int viewCount READ viewCount )
@@ -94,6 +93,7 @@ class KonqMainWindow : public KParts::Ma
   Q_PROPERTY( QString currentURL READ currentURL )
   Q_PROPERTY( bool isHTMLAllowed READ isHTMLAllowed )
 public:
+  friend class KonqExtendedBookmarkOwner;
   enum ComboAction { ComboClear, ComboAdd, ComboRemove };
 
   KonqMainWindow( const KURL &initialURL = KURL(), bool openInitialURL = true, const char *name = 0 );
@@ -183,11 +183,6 @@ public:
    */
   virtual void show();
 
-  /// Overloaded functions of KBookmarkOwner
-  virtual void openBookmarkURL( const QString & _url );
-  virtual QString currentTitle() const;
-  virtual QString currentURL() const;
-
   /**
    * Change URL displayed in the location bar
    */
@@ -297,6 +292,9 @@ public:
   static void setPreloadedWindow( KonqMainWindow* );
   static KonqMainWindow* preloadedWindow() { return s_preloadedWindow; }
 
+  QString currentTitle() const;
+  QString currentURL() const;
+
 signals:
   void viewAdded( KonqView *view );
   void viewRemoved( KonqView *view );
@@ -649,6 +647,7 @@ private:
   QGuardedPtr<KonqView> m_currentView;
 
   KBookmarkMenu* m_pBookmarkMenu;
+  KonqExtendedBookmarkOwner *m_pBookmarksOwner;
   KActionCollection* m_bookmarksActionCollection;
   KActionCollection* m_bookmarkBarActionCollection;
 
-------------- next part --------------
#ifndef konq_mainwindow_p_h
#define konq_mainwindow_p_h

class KonqExtendedBookmarkOwner : public KExtendedBookmarkOwner
{
  Q_OBJECT
public:
  KonqExtendedBookmarkOwner(KonqMainWindow *);
  // from KBookmarkOwner
  virtual void openBookmarkURL( const QString & _url );
  virtual QString currentTitle() const;
  virtual QString currentURL() const;
public slots:
  // for KExtendedBookmarkOwner
  void slotFillBookmarksList( KExtendedBookmarkOwner::QStringPairList & list );
private:
  KonqMainWindow *m_pKonqMainWindow;
};

#endif


More information about the kfm-devel mailing list