From 067b99a053b6f8b1ccab507be8e828b2f72a1e43 Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Wed, 10 Feb 2010 10:57:57 +0100
Subject: Fix copyright for 0.4 beta release

---
 src/bookmarks/bookmarksmanager.cpp   | 4 ++--
 src/bookmarks/bookmarksmanager.h     | 4 ++--
 src/bookmarks/bookmarkspanel.cpp     | 2 +-
 src/bookmarks/bookmarkspanel.h       | 1 +
 src/bookmarks/bookmarksproxy.cpp     | 1 +
 src/bookmarks/bookmarksproxy.h       | 1 +
 src/bookmarks/bookmarkstreemodel.cpp | 1 +
 src/bookmarks/bookmarkstreemodel.h   | 1 +
 8 files changed, 10 insertions(+), 5 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 6442192a..3aab08ae 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -2,9 +2,9 @@
 *
 * This file is a part of the rekonq project
 *
-* Copyright (C) 2008-2009 by Andrea Diamantini <adjam7 at gmail dot com>
+* Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com>
 * Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
-* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr>
+* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr>
 *
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index febac234..200bfb4b 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -2,9 +2,9 @@
 *
 * This file is a part of the rekonq project
 *
-* Copyright (C) 2008-2009 by Andrea Diamantini <adjam7 at gmail dot com>
+* Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com>
 * Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
-* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr>
+* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr>
 *
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index 9164dbb6..48ca6537 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -3,7 +3,7 @@
 * This file is a part of the rekonq project
 *
 * Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com>
-*
+* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h
index 6c0e153f..64d68f70 100644
--- a/src/bookmarks/bookmarkspanel.h
+++ b/src/bookmarks/bookmarkspanel.h
@@ -3,6 +3,7 @@
 * This file is a part of the rekonq project
 *
 * Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com>
+* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
 *
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/bookmarks/bookmarksproxy.cpp b/src/bookmarks/bookmarksproxy.cpp
index e94fbeff..7fa34b3f 100644
--- a/src/bookmarks/bookmarksproxy.cpp
+++ b/src/bookmarks/bookmarksproxy.cpp
@@ -3,6 +3,7 @@
 * This file is a part of the rekonq project
 *
 * Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com>
+* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
 *
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/bookmarks/bookmarksproxy.h b/src/bookmarks/bookmarksproxy.h
index 99483331..fcd49673 100644
--- a/src/bookmarks/bookmarksproxy.h
+++ b/src/bookmarks/bookmarksproxy.h
@@ -3,6 +3,7 @@
 * This file is a part of the rekonq project
 *
 * Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com>
+* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
 *
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp
index 140fa9c8..f80fdc74 100644
--- a/src/bookmarks/bookmarkstreemodel.cpp
+++ b/src/bookmarks/bookmarkstreemodel.cpp
@@ -3,6 +3,7 @@
 * This file is a part of the rekonq project
 *
 * Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com>
+* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
 *
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/bookmarks/bookmarkstreemodel.h b/src/bookmarks/bookmarkstreemodel.h
index 9753999c..9b65d923 100644
--- a/src/bookmarks/bookmarkstreemodel.h
+++ b/src/bookmarks/bookmarkstreemodel.h
@@ -3,6 +3,7 @@
 * This file is a part of the rekonq project
 *
 * Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com>
+* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
 *
 *
 * This program is free software; you can redistribute it and/or
-- 
cgit v1.2.1


From 3e1ac6fb3f9865bf5bb0c156e985c1a4577b20e0 Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Sun, 14 Feb 2010 11:23:37 +0100
Subject: Krazy issues (1st branch)

---
 src/bookmarks/bookmarksproxy.h       | 8 ++++----
 src/bookmarks/bookmarkstreemodel.cpp | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksproxy.h b/src/bookmarks/bookmarksproxy.h
index fcd49673..a1444218 100644
--- a/src/bookmarks/bookmarksproxy.h
+++ b/src/bookmarks/bookmarksproxy.h
@@ -37,13 +37,13 @@ class BookmarksProxy : public QSortFilterProxyModel
     Q_DISABLE_COPY(BookmarksProxy)
 
 public:
-	BookmarksProxy( QObject *parent = 0 );
+    BookmarksProxy( QObject *parent = 0 );
 
 protected:
-	virtual bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const;
+    virtual bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const;
 
-	// returns true if any child(or childs-child...) matches filter
-	bool recursiveMatch( const QModelIndex &index ) const;
+    // returns true if any child(or children-child...) matches filter
+    bool recursiveMatch( const QModelIndex &index ) const;
 };
 
 #endif // BOOKMARKSPROXY_H
diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp
index f80fdc74..95e5ad41 100644
--- a/src/bookmarks/bookmarkstreemodel.cpp
+++ b/src/bookmarks/bookmarkstreemodel.cpp
@@ -268,7 +268,7 @@ void BookmarksTreeModel::bookmarksChanged( const QString &groupAddress )
     QModelIndex nodeIndex;
 
     QStringList indexChain( groupAddress.split( '/', QString::SkipEmptyParts) );
-    foreach( QString sIndex, indexChain ) 
+    foreach( const QString &sIndex, indexChain ) 
     {
         bool ok;
         int i = sIndex.toInt( &ok );
-- 
cgit v1.2.1


From d92f82b200c2c9098cab32c2d9437ee2cfefa720 Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Tue, 16 Feb 2010 09:43:56 +0100
Subject: Removed unuseful check (also if sometimes the bookmark toolbar let
 rekonq misteriously crash...)

---
 src/bookmarks/bookmarksmanager.cpp | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 3aab08ae..cfe26a55 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -219,16 +219,13 @@ void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString
     if (toolBarGroup.isNull())
         return;
 
-    if(m_bookmarkToolBar)
-    {
-        m_bookmarkToolBar->clear(); // FIXME CRASH
+    m_bookmarkToolBar->clear(); // FIXME CRASH
 
-        KBookmark bookmark = toolBarGroup.first();
-        while (!bookmark.isNull())
-        {
-            m_bookmarkToolBar->addAction(fillBookmarkBar(bookmark));
-            bookmark = toolBarGroup.next(bookmark);
-        }
+    KBookmark bookmark = toolBarGroup.first();
+    while (!bookmark.isNull())
+    {
+        m_bookmarkToolBar->addAction(fillBookmarkBar(bookmark));
+        bookmark = toolBarGroup.next(bookmark);
     }
 }
 
-- 
cgit v1.2.1


From 8dda858403d283f1850c0298aac0fb5212a27952 Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Fri, 26 Feb 2010 11:37:11 +0100
Subject: tests support for every Qt derived rekonq class

---
 src/bookmarks/bookmarksmanager.h   |  3 ++-
 src/bookmarks/bookmarkspanel.h     |  6 +++++-
 src/bookmarks/bookmarksproxy.h     |  7 ++++++-
 src/bookmarks/bookmarkstreemodel.h | 11 ++++++++---
 4 files changed, 21 insertions(+), 6 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index 200bfb4b..d4afb997 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -31,6 +31,7 @@
 
 
 // Local Includes
+#include "rekonqprivate_export.h"
 #include "application.h"
 
 // Qt Includes
@@ -55,7 +56,7 @@ class KBookmarkManager;
  * bookmarks as actions
  *
  */
-class BookmarkOwner : public QObject , public KBookmarkOwner
+class REKONQ_TESTS_EXPORT BookmarkOwner : public QObject , public KBookmarkOwner
 {
     Q_OBJECT
 
diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h
index 64d68f70..f5376d98 100644
--- a/src/bookmarks/bookmarkspanel.h
+++ b/src/bookmarks/bookmarkspanel.h
@@ -28,6 +28,10 @@
 #ifndef BOOKMARKSPANEL_H
 #define BOOKMARKSPANEL_H
 
+
+// Local Includes
+#include "rekonqprivate_export.h"
+
 // Qt Includes
 #include <QDockWidget>
 
@@ -36,7 +40,7 @@ class KUrl;
 class QModelIndex;
 
 
-class BookmarksPanel : public QDockWidget
+class REKONQ_TESTS_EXPORT BookmarksPanel : public QDockWidget
 {
     Q_OBJECT
 
diff --git a/src/bookmarks/bookmarksproxy.h b/src/bookmarks/bookmarksproxy.h
index a1444218..2bf1d63a 100644
--- a/src/bookmarks/bookmarksproxy.h
+++ b/src/bookmarks/bookmarksproxy.h
@@ -28,10 +28,15 @@
 #ifndef BOOKMARKSPROXY_H
 #define BOOKMARKSPROXY_H
 
+
+// Local Includes
+#include "rekonqprivate_export.h"
+
 // Qt Includes
 #include <QSortFilterProxyModel>
 
-class BookmarksProxy : public QSortFilterProxyModel
+
+class REKONQ_TESTS_EXPORT BookmarksProxy : public QSortFilterProxyModel
 {
     Q_OBJECT
     Q_DISABLE_COPY(BookmarksProxy)
diff --git a/src/bookmarks/bookmarkstreemodel.h b/src/bookmarks/bookmarkstreemodel.h
index 9b65d923..dfad52ba 100644
--- a/src/bookmarks/bookmarkstreemodel.h
+++ b/src/bookmarks/bookmarkstreemodel.h
@@ -28,13 +28,18 @@
 #ifndef BOOKMARKSTREEMODEL_H
 #define BOOKMARKSTREEMODEL_H
 
-// Qt Includes
-#include <QAbstractItemModel>
+
+// Local Includes
+#include "rekonqprivate_export.h"
 
 // KDE includes
 #include <KBookmark>
 
-class BookmarksTreeModel : public QAbstractItemModel
+// Qt Includes
+#include <QAbstractItemModel>
+
+
+class REKONQ_TESTS_EXPORT BookmarksTreeModel : public QAbstractItemModel
 {
     Q_OBJECT
     Q_DISABLE_COPY(BookmarksTreeModel)
-- 
cgit v1.2.1


From e9670c51fef2c8447a04a30778a24646df4ef915 Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Tue, 23 Mar 2010 22:56:26 +0100
Subject: A lot of fix and improvements for the bookmark and the history panels

---
 src/bookmarks/bookmarksmanager.cpp   |   4 +-
 src/bookmarks/bookmarksmanager.h     |   4 +-
 src/bookmarks/bookmarkspanel.cpp     | 441 +++++++++++++++++++++++++++++++++--
 src/bookmarks/bookmarkspanel.h       |  36 ++-
 src/bookmarks/bookmarkstreemodel.cpp | 265 ++++++++++++++-------
 src/bookmarks/bookmarkstreemodel.h   |  51 ++--
 6 files changed, 677 insertions(+), 124 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index cfe26a55..9feed63a 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -178,7 +178,9 @@ BookmarkProvider::BookmarkProvider(QObject *parent)
             bookfile = KUrl(bookmarksPath);
         }
     }
-    m_manager = KBookmarkManager::managerForExternalFile(bookfile.path());
+    // A workaround to avoid a long delay between the two changed signals of the bookmark manager
+    m_manager = KBookmarkManager::managerForFile(bookfile.path(), "rekonq");
+    
     connect(m_manager, SIGNAL(changed(const QString &, const QString &)),
             this, SLOT(slotBookmarksChanged(const QString &, const QString &)));
 
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index d4afb997..e50148e4 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -210,7 +210,9 @@ public:
      */
     KBookmarkGroup rootGroup();
 
-	KBookmarkManager *bookmarkManager() { return m_manager; }
+    KBookmarkManager *bookmarkManager() { return m_manager; }
+    BookmarkOwner *bookmarkOwner() { return m_owner; }
+    
 signals:
     /**
     * @short This signal is emitted when an url has to be loaded
diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index 48ca6537..c50ebcdb 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -29,6 +29,7 @@
 #include "bookmarkspanel.moc"
 
 // Local Includes
+#include "bookmarksmanager.h"
 #include "bookmarkstreemodel.h"
 #include "bookmarksproxy.h"
 
@@ -44,12 +45,21 @@
 // KDE includes
 #include <KLineEdit>
 #include <KLocalizedString>
+#include <KAction>
+#include <KMenu>
+#include <KBookmarkDialog>
+#include <KMessageBox>
 
 
 BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags)
-    : QDockWidget(title, parent, flags)
+    : QDockWidget(title, parent, flags),
+    m_treeView(new UrlTreeView(this)),
+    m_ac(new KActionCollection(this)),
+    menu(new KMenu(this)),
+    expandLock(false)
 {
     setup();
+    setupActions();
     setShown(ReKonfig::showBookmarksPanel());
 }
 
@@ -60,13 +70,6 @@ BookmarksPanel::~BookmarksPanel()
 }
 
 
-void BookmarksPanel::bookmarkActivated( const QModelIndex &index )
-{
-    if( index.isValid() )
-        emit openUrl( qVariantValue< KUrl >( index.data( Qt::UserRole ) ) );
-}
-
-
 void BookmarksPanel::setup()
 {
     setObjectName("bookmarksPanel");
@@ -85,19 +88,20 @@ void BookmarksPanel::setup()
     searchLabel->setBuddy( search );
 
     // setup tree view
-    QTreeView *treeView = new QTreeView(ui);
-    treeView->setUniformRowHeights(true);
-    treeView->setSelectionBehavior(QAbstractItemView::SelectRows);
-    treeView->setTextElideMode(Qt::ElideMiddle);
-    treeView->setAlternatingRowColors(true);
-    treeView->header()->hide();
-    treeView->setRootIsDecorated( false );
+    m_treeView->setUniformRowHeights(true);
+    m_treeView->setTextElideMode(Qt::ElideMiddle);
+    m_treeView->setAlternatingRowColors(true);
+    m_treeView->header()->hide();
+    m_treeView->setDragEnabled(true);
+    m_treeView->setAutoExpandDelay(750);
+    m_treeView->setDefaultDropAction(Qt::MoveAction);
+    m_treeView->viewport()->setAcceptDrops(true);
 
     // put everything together
     QVBoxLayout *vBoxLayout = new QVBoxLayout;
     vBoxLayout->setContentsMargins(0, 0, 0, 0);
     vBoxLayout->addLayout(searchLayout);
-    vBoxLayout->addWidget(treeView);
+    vBoxLayout->addWidget(m_treeView);
 
     // add it to the UI
     ui->setLayout(vBoxLayout);
@@ -106,8 +110,407 @@ void BookmarksPanel::setup()
     BookmarksTreeModel *model = new BookmarksTreeModel( this );
     BookmarksProxy *proxy = new BookmarksProxy(ui);
     proxy->setSourceModel( model );
-    treeView->setModel( proxy );
+    m_treeView->setModel( proxy );
+
+    connect(m_treeView, SIGNAL(contextMenuItemRequested(const QPoint &)), this, SLOT(contextMenuBk(const QPoint &)));
+    connect(m_treeView, SIGNAL(contextMenuGroupRequested(const QPoint &)), this, SLOT(contextMenuBkGroup(const QPoint &)));
+    connect(m_treeView, SIGNAL(contextMenuEmptyRequested(const QPoint &)), this, SLOT(contextMenuBlank(const QPoint &)));
+    connect(m_treeView, SIGNAL(delKeyPressed()), this, SLOT(deleteBookmark()));
+    connect(m_treeView, SIGNAL(collapsed(const QModelIndex &)), this, SLOT(onCollapse(const QModelIndex &)));
+    connect(m_treeView, SIGNAL(expanded(const QModelIndex &)), this, SLOT(onExpand(const QModelIndex &)));
+    connect(search, SIGNAL(textChanged(const QString &)), proxy, SLOT(setFilterFixedString(const QString &)));
+    callAutoExpand();
+}
+
+
+void BookmarksPanel::onCollapse(const QModelIndex &index)
+{
+    if(expandLock)
+        return;
+
+    KBookmark bookmark = bookmarkForIndex(index);
+    bookmark.internalElement().setAttribute("folded", "yes");
+    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
+}
+
+
+void BookmarksPanel::onExpand(const QModelIndex &index)
+{
+    if(expandLock)
+        return;
+
+    KBookmark bookmark = bookmarkForIndex(index);
+    bookmark.internalElement().setAttribute("folded", "no");
+    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
+}
+
+
+void BookmarksPanel::callAutoExpand()
+{
+    expandLock = true;
+    autoExpand();
+    expandLock = false;
+}
+
+
+void BookmarksPanel::autoExpand(const QModelIndex &root)
+{
+
+    int count = m_treeView->model()->rowCount(root);
+    QModelIndex temp;
+
+    for(int i = 0; i < count; i++)
+    {
+        temp = m_treeView->model()->index(i,0,root);
+        m_treeView->setExpanded(temp, bookmarkForIndex(temp).toGroup().isOpen());
+        autoExpand(temp);
+    }
+}
+
+
+void BookmarksPanel::setupActions()
+{
+    KAction* action;
+
+    action = new KAction(KIcon("tab-new"), i18n("Open"), this);
+    connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInCurrentTab()));
+    m_ac.addAction("open", action);
+
+    action = new KAction(KIcon("tab-new"), i18n("Open in New Tab"), this);
+    connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInNewTab()));
+    m_ac.addAction("open_tab", action);
+
+    action = new KAction(KIcon("window-new"), i18n("Open in New Window"), this);
+    connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInNewWindow()));
+    m_ac.addAction("open_window", action);
+
+    action = new KAction(KIcon("rating"), i18n("Bookmark Page"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(bookmarkPage()));
+    m_ac.addAction("bookmark_page", action);
+
+    action = new KAction(KIcon("bookmark-new"), i18n("New Bookmark"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(newBookmark()));
+    m_ac.addAction("bookmark_new", action);
+
+    action = new KAction(KIcon("folder-new"), i18n("New Bookmark Folder"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(newBookmarkGroup()));
+    m_ac.addAction("folder_new", action);
+
+    action = new KAction(KIcon("edit-clear"), i18n("New Separator"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(newSeparator()));
+    m_ac.addAction("separator_new", action);
+
+    action = new KAction(KIcon("edit-copy"), i18n("Copy Link"), this);
+    connect(action, SIGNAL(triggered()), m_treeView, SLOT(copyToClipboard()));
+    m_ac.addAction("copy", action);
+
+    action = new KAction(KIcon("edit-delete"), i18n("Delete"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(deleteBookmark()));
+    m_ac.addAction("delete", action);
+
+    action = new KAction(KIcon("configure"), i18n("Properties"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(editBookmark()));
+    m_ac.addAction("properties", action);
+
+    action = new KAction(KIcon("tab-new"), i18n("Open all Bookmarks"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(openAll()));
+    m_ac.addAction("open_all", action);
+}
+
+
+KBookmark BookmarksPanel::bookmarkForIndex(const QModelIndex &index)
+{
+    if(!index.isValid())
+        return KBookmark();
+
+    const QAbstractProxyModel* proxyModel = dynamic_cast< const QAbstractProxyModel* >(index.model());
+    QModelIndex originalIndex = proxyModel->mapToSource(index);
+
+    BtmItem *node = static_cast< BtmItem* >( originalIndex.internalPointer() );
+    return node->getBkm();
+}
+
+
+void BookmarksPanel::contextMenuBk(const QPoint &pos)
+{
+    QPoint position = m_treeView->mapToGlobal(pos);
+    QModelIndex index = m_treeView->indexAt(pos);
+    if(!index.isValid() || expandLock)
+        return;
+
+    KBookmark selected = bookmarkForIndex(index);
+
+    if(selected.isGroup())
+    {
+        contextMenuBkGroup(pos, true);
+        return;
+    }
+
+    if(selected.isSeparator())
+    {
+        contextMenuSeparator(pos);
+        return;
+    }
+
+    menu = new KMenu(this);
+
+    menu->addAction(m_ac.action("open"));
+    menu->addAction(m_ac.action("open_tab"));
+    menu->addAction(m_ac.action("open_window"));
+
+    menu->addSeparator();
+
+    menu->addAction(m_ac.action("bookmark_page"));
+    menu->addAction(m_ac.action("bookmark_new"));
+    menu->addAction(m_ac.action("folder_new"));
+    menu->addAction(m_ac.action("separator_new"));
+
+    menu->addSeparator();
+
+    menu->addAction(m_ac.action("copy"));
+
+    menu->addSeparator();
+
+    menu->addAction(m_ac.action("delete"));
+    menu->addAction(m_ac.action("properties"));
+
+    menu->popup(position);
+}
+
+
+void BookmarksPanel::contextMenuBkGroup(const QPoint &pos, bool emptyGroup)
+{
+    if(expandLock)
+        return;
+
+    QPoint position = m_treeView->mapToGlobal(pos);
+    menu = new KMenu(this);
+
+    if(!emptyGroup)
+    {
+        menu->addAction(m_ac.action("open_all"));
+        menu->addSeparator();
+    }
+
+    menu->addAction(m_ac.action("bookmark_page"));
+    menu->addAction(m_ac.action("bookmark_new"));
+    menu->addAction(m_ac.action("folder_new"));
+    menu->addAction(m_ac.action("separator_new"));
+
+    menu->addSeparator();
+
+    menu->addAction(m_ac.action("delete"));
+    menu->addAction(m_ac.action("properties"));
+
+    menu->popup(position);
+}
+
+
+void BookmarksPanel::contextMenuSeparator(const QPoint &pos)
+{
+    QPoint position = m_treeView->mapToGlobal(pos);
+    menu = new KMenu(this);
+
+    menu->addAction(m_ac.action("bookmark_page"));
+    menu->addAction(m_ac.action("bookmark_new"));
+    menu->addAction(m_ac.action("folder_new"));
+    menu->addAction(m_ac.action("separator_new"));
+
+    menu->addSeparator();
+
+    menu->addAction(m_ac.action("delete"));
+
+    menu->popup(position);
+}
+
+
+void BookmarksPanel::contextMenuBlank(const QPoint &pos)
+{
+    QPoint position = m_treeView->mapToGlobal(pos);
+    menu = new KMenu(this);
+
+    menu->addAction(m_ac.action("bookmark_page"));
+    menu->addAction(m_ac.action("bookmark_new"));
+    menu->addAction(m_ac.action("folder_new"));
+    menu->addAction(m_ac.action("separator_new"));
+
+    menu->popup(position);
+}
+
+
+void BookmarksPanel::deleteBookmark()
+{
+    QModelIndex index = m_treeView->currentIndex();
+    if(!index.isValid())
+        return;
+
+    KBookmark selected = bookmarkForIndex(index);
+    KBookmarkGroup parent = selected.parentGroup();
+
+    parent.deleteBookmark(selected);
+    Application::instance()->bookmarkProvider()->bookmarkManager()->emitChanged();
+}
+
+
+void BookmarksPanel::editBookmark()
+{
+    QModelIndex index = m_treeView->currentIndex();
+    if(!index.isValid())
+        return;
+
+    KBookmark selected = bookmarkForIndex(index);
+
+    KBookmarkDialog *dialog = Application::bookmarkProvider()->bookmarkOwner()->bookmarkDialog(Application::bookmarkProvider()->bookmarkManager(), QApplication::activeWindow());
+    dialog->editBookmark(selected);
+    delete dialog;
+}
+
+
+void BookmarksPanel::openAll()
+{
+    QModelIndex index = m_treeView->currentIndex();
+    if(!index.isValid())
+        return;
+
+    QList<KUrl> allChild = bookmarkForIndex(index).toGroup().groupUrlList();
+
+    if(allChild.length() > 8) // 8, a good choice ?
+    {
+        if(!(KMessageBox::warningContinueCancel(this, i18n("You are about to open a lot of tabs : %1\nAre you sure  ?", QString::number(allChild.length()))) == KMessageBox::Continue))
+            return;
+    }
+
+    for(int i = 0; i < allChild.length(); i++)
+        emit openUrl(allChild.at(i).url(), Rekonq::SettingOpenTab);
+}
+
+
+void BookmarksPanel::newBookmark()
+{
+    QModelIndex index = m_treeView->currentIndex();
+
+    KBookmark selected;
+    KBookmark newBk;
+
+    KBookmarkDialog *dialog = Application::bookmarkProvider()->bookmarkOwner()->bookmarkDialog(Application::bookmarkProvider()->bookmarkManager(), QApplication::activeWindow());
+
+    if(index.isValid())
+    {
+        selected = bookmarkForIndex(index);
+
+         if(selected.isGroup())
+            newBk = dialog->addBookmark("New bookmark", KUrl("www.kde.org"), selected);
+        else
+            newBk = dialog->addBookmark("New bookmark", KUrl("www.kde.org"), selected.parentGroup());
+    }
+
+    else
+    {
+        newBk = dialog->addBookmark("New bookmark", KUrl("www.kde.org"));
+    }
+
+    delete dialog;
+
+    // addBookmark already added the bookmark, but without the default favicon
+    KBookmarkGroup parent = newBk.parentGroup();
+    parent.deleteBookmark(newBk);
+    newBk.setIcon(("text-html"));
+    parent.addBookmark(newBk);
+
+    if(index.isValid())
+        parent.moveBookmark(newBk, selected);
+
+    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
+}
+
+
+void BookmarksPanel::newBookmarkGroup()
+{
+    QModelIndex index = m_treeView->currentIndex();
+    KBookmark newBk;
+
+    KBookmarkDialog *dialog = Application::bookmarkProvider()->bookmarkOwner()->bookmarkDialog(Application::bookmarkProvider()->bookmarkManager(), QApplication::activeWindow());
+
+    if(index.isValid())
+    {
+        KBookmark selected = bookmarkForIndex(index);
+
+        if(selected.isGroup())
+        {
+            newBk = dialog->createNewFolder("New folder", selected);
+        }
+
+        else
+        {
+            newBk = dialog->createNewFolder("New folder", selected.parentGroup());
+            selected.parentGroup().moveBookmark(newBk, selected);
+            Application::bookmarkProvider()->bookmarkManager()->emitChanged();
+        } 
+    }
+
+    else
+    {
+        dialog->createNewFolder("New folder");
+    }
+
+    delete dialog;
+}
+
+
+void BookmarksPanel::newSeparator()
+{
+    QModelIndex index = m_treeView->currentIndex();
+
+    KBookmark selected;
+    KBookmark newBk;
+
+    if(index.isValid())
+    {
+        selected = bookmarkForIndex(index);
+
+        if(selected.isGroup())
+            newBk = selected.toGroup().createNewSeparator();
+        else
+            newBk = selected.parentGroup().createNewSeparator();
+    }
+
+    else
+    {
+        newBk = Application::bookmarkProvider()->rootGroup().createNewSeparator();
+    }
+
+    KBookmarkGroup parent = newBk.parentGroup();
+    newBk.setIcon(("edit-clear"));
+    parent.addBookmark(newBk);
+
+    if(index.isValid())
+        parent.moveBookmark(newBk, selected);
+
+    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
+}
+
+
+void BookmarksPanel::bookmarkPage()
+{
+    QModelIndex index = m_treeView->currentIndex();
+    KBookmarkGroup parent = Application::bookmarkProvider()->rootGroup();
+
+    if(index.isValid())
+    {
+        KBookmark selected = bookmarkForIndex(index);
+        parent = selected.parentGroup();
+
+        if(selected.isGroup())
+            parent = selected.toGroup();
+
+        KBookmark newBk = parent.addBookmark(Application::bookmarkProvider()->bookmarkOwner()->currentTitle(), KUrl(Application::bookmarkProvider()->bookmarkOwner()->currentUrl()), "text-html");
+        parent.moveBookmark(newBk, selected);
+    }
+
+    else
+    {
+       parent.addBookmark(Application::bookmarkProvider()->bookmarkOwner()->currentTitle(), KUrl(Application::bookmarkProvider()->bookmarkOwner()->currentUrl()), "text-html");
+    }
 
-    connect(search, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString)));
-    connect(treeView, SIGNAL( activated(QModelIndex) ), this, SLOT( bookmarkActivated(QModelIndex) ) );
+    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
 }
diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h
index f5376d98..ea33e265 100644
--- a/src/bookmarks/bookmarkspanel.h
+++ b/src/bookmarks/bookmarkspanel.h
@@ -31,10 +31,17 @@
 
 // Local Includes
 #include "rekonqprivate_export.h"
+#include "application.h"
+#include "urltreeview.h"
 
 // Qt Includes
 #include <QDockWidget>
 
+// KDE Includes
+#include <KBookmark>
+#include <KActionCollection>
+#include <KMenu>
+
 // Forward Declarations
 class KUrl;
 class QModelIndex;
@@ -49,13 +56,38 @@ public:
     ~BookmarksPanel();
 
 signals:
-    void openUrl(const KUrl &);
+    void openUrl(const KUrl &, const Rekonq::OpenType &);
+    void itemHovered(const QString &);
+    void saveExpFinished(const QString &);
+    void saveRequested();
 
 private slots:
-    void bookmarkActivated( const QModelIndex &index );
+    void contextMenuBk(const QPoint &pos);
+    void contextMenuBkGroup(const QPoint &pos, const bool emptyGroup = false);
+    void contextMenuBlank(const QPoint &pos);
+    void deleteBookmark();
+    void openAll();
+    void editBookmark();
+    void newBookmark();
+    void newBookmarkGroup();
+    void newSeparator();
+    void bookmarkPage();
+    void autoExpand(const QModelIndex &root = QModelIndex());
+    void onCollapse(const QModelIndex &index);
+    void onExpand(const QModelIndex &index);
+    void callAutoExpand();
 
 private:
     void setup();
+    void setupActions();
+    void contextMenuSeparator(const QPoint &pos);
+    KBookmark bookmarkForIndex(const QModelIndex &index);
+
+    UrlTreeView *m_treeView;
+    QStringList m_expList;
+    KActionCollection m_ac;
+    KMenu *menu;
+    bool expandLock;
 };
 
 #endif // BOOKMARKSPANEL_H
diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp
index 95e5ad41..d63c92d3 100644
--- a/src/bookmarks/bookmarkstreemodel.cpp
+++ b/src/bookmarks/bookmarkstreemodel.cpp
@@ -33,94 +33,112 @@
 #include "application.h"
 #include "bookmarksmanager.h"
 
+// Qt Includes
+#include <QMimeData>
+
 // KDE includes
 #include <KBookmarkGroup>
 #include <KLocalizedString>
 
 
-class BookmarksTreeModel::BtmItem
+BtmItem::BtmItem(const KBookmark &bm)
+    : m_parent(0)
+    , m_kbm(bm)
 {
-public:
-    BtmItem(const KBookmark &bm)
-        : m_parent(0)
-        , m_kbm(bm)
-    {
-    }
-    
-    
-    ~BtmItem()
-    {
-        qDeleteAll(m_children);
-    }
+}
 
 
-    QVariant data( int role = Qt::DisplayRole ) const
-    {
-        if( m_kbm.isNull() )
-            return QVariant();  // should only happen for root item
+BtmItem::~BtmItem()
+{
+    qDeleteAll(m_children);
+}
 
-        if( role == Qt::DisplayRole )
-            return m_kbm.text();
-        if( role == Qt::DecorationRole )
-            return KIcon( m_kbm.icon() );
-        if( role == Qt::UserRole )
-            return m_kbm.url();
 
-        return QVariant();
+QVariant BtmItem::data( int role ) const
+{
+    if( m_kbm.isNull() )
+        return QVariant();  // should only happen for root item
+
+    if( role == Qt::DisplayRole )
+        return m_kbm.text();
+    if( role == Qt::DecorationRole )
+        return KIcon( m_kbm.icon() );
+    if( role == Qt::UserRole )
+        return m_kbm.url();
+    if( role == Qt::ToolTipRole)
+    {
+        QString tooltip = "";
+	
+        if(!m_kbm.text().isEmpty())
+	{
+            tooltip += m_kbm.text();
+	}
+        if(m_kbm.isGroup())
+	{
+            tooltip += " [" + QString::number(childCount()) + " " + i18n("Items") + "]";
+	}
+        if(!m_kbm.url().url().isEmpty())
+        {
+            if(!tooltip.isEmpty())
+                tooltip += "\n";
+            tooltip += m_kbm.url().url();
+        }
+        return tooltip;
     }
 
+    return QVariant();
+}
 
-    int row() const
-    {
-        if(m_parent)
-            return m_parent->m_children.indexOf( const_cast< BtmItem* >( this ) );
-        return 0;
-    }
 
+int BtmItem::row() const
+{
+    if(m_parent)
+        return m_parent->m_children.indexOf( const_cast< BtmItem* >( this ) );
+    return 0;
+}
 
-    int childCount() const
-    {
-        return m_children.count();
-    }
 
+int BtmItem::childCount() const
+{
+    return m_children.count();
+}
 
-    BtmItem* child( int n )
-    {
-        Q_ASSERT(n>=0);
-        Q_ASSERT(n<childCount());
 
-        return m_children.at(n);
-    }
+BtmItem* BtmItem::child( int n )
+{
+    Q_ASSERT(n>=0);
+    Q_ASSERT(n<childCount());
 
+    return m_children.at(n);
+}
 
-    BtmItem* parent() const
-    {
-        return m_parent;
-    }
 
+BtmItem* BtmItem::parent() const
+{
+    return m_parent;
+}
 
-    void appendChild(BtmItem *child)
-    {
-        if( !child )
-            return;
 
-        child->m_parent = this;
-        m_children << child;
-    }
+void BtmItem::appendChild(BtmItem *child)
+{
+    if( !child )
+        return;
 
+    child->m_parent = this;
+    m_children << child;
+}
 
-    void clear()
-    {
-        qDeleteAll(m_children);
-        m_children.clear();
-    }
 
-private:
-    BtmItem *m_parent;
-    QList< BtmItem* > m_children;
-    KBookmark m_kbm;
-};
+void BtmItem::clear()
+{
+    qDeleteAll(m_children);
+    m_children.clear();
+}
 
+KBookmark BtmItem::getBkm() const
+{
+    return m_kbm;
+}
 
 // -------------------------------------------------------------------------------------
 
@@ -130,8 +148,8 @@ BookmarksTreeModel::BookmarksTreeModel(QObject *parent)
     , m_root(0)
 {
     resetModel();
+    connect( this, SIGNAL(bookmarkChangedFinished()), parent, SLOT(callAutoExpand()));
     connect( Application::bookmarkProvider()->bookmarkManager(), SIGNAL( changed(QString,QString) ), this, SLOT( bookmarksChanged(QString) ) );
-    connect( Application::bookmarkProvider()->bookmarkManager(), SIGNAL( bookmarksChanged(QString) ), this, SLOT( bookmarksChanged(QString) ) );
 }
 
 
@@ -179,8 +197,17 @@ QVariant BookmarksTreeModel::headerData(int section, Qt::Orientation orientation
 
 Qt::ItemFlags BookmarksTreeModel::flags(const QModelIndex &index) const
 {
-    Q_UNUSED(index)
-    return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
+    Qt::ItemFlags flags = QAbstractItemModel::flags(index);
+    
+    if(!index.isValid())
+        return flags | Qt::ItemIsDropEnabled;
+
+    flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled;
+
+    if(bookmarkForIndex(index).isGroup())
+        flags |= Qt::ItemIsDropEnabled;
+    
+    return flags;
 }
 
 
@@ -258,30 +285,9 @@ QVariant BookmarksTreeModel::data(const QModelIndex &index, int role) const
 
 void BookmarksTreeModel::bookmarksChanged( const QString &groupAddress )
 {
-    if( groupAddress.isEmpty() )
-    {
-        resetModel();
-        return;
-    }
-
-    BtmItem *node = m_root;
-    QModelIndex nodeIndex;
-
-    QStringList indexChain( groupAddress.split( '/', QString::SkipEmptyParts) );
-    foreach( const QString &sIndex, indexChain ) 
-    {
-        bool ok;
-        int i = sIndex.toInt( &ok );
-        if( !ok )
-            break;
-
-        if( i < 0 || i >= node->childCount() )
-            break;
-
-        node = node->child( i );
-        nodeIndex = index( i, 0, nodeIndex );
-    }
-    emit dataChanged( index( 0, 0, nodeIndex ), index( node->childCount(), 0, nodeIndex ) );
+    Q_UNUSED(groupAddress);
+    resetModel();
+    emit bookmarkChangedFinished();
 }
 
 
@@ -322,3 +328,86 @@ void BookmarksTreeModel::populate( BtmItem *node, KBookmarkGroup bmg)
         bm = bmg.next( bm );
     }
 }
+
+
+KBookmark BookmarksTreeModel::bookmarkForIndex(const QModelIndex index) const
+{
+    return static_cast<BtmItem*>(index.internalPointer())->getBkm();
+}
+
+
+Qt::DropActions BookmarksTreeModel::supportedDropActions () const
+{
+    return Qt::MoveAction;
+}
+
+
+QStringList BookmarksTreeModel::mimeTypes () const
+{
+    return KBookmark::List::mimeDataTypes();
+}
+
+
+QMimeData* BookmarksTreeModel::mimeData( const QModelIndexList & indexes ) const
+{
+    QMimeData *mimeData = new QMimeData;
+
+    QByteArray addresse = bookmarkForIndex(indexes.first()).address().toLatin1();
+    mimeData->setData( "application/rekonq-bookmark", addresse);
+    bookmarkForIndex(indexes.first()).populateMimeData(mimeData);
+
+    return mimeData;
+}
+
+
+bool BookmarksTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex & parent)
+{
+    if(action == Qt::MoveAction)
+    {
+        if(data->hasFormat("application/rekonq-bookmark"))
+        {
+            QByteArray addresses = data->data("application/rekonq-bookmark");
+            KBookmark bookmark = Application::bookmarkProvider()->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data()));
+
+            QModelIndex destIndex = index(row, column, parent);
+
+            KBookmark dropDestBookmark;
+            if(destIndex.isValid())
+                dropDestBookmark = bookmarkForIndex(destIndex);
+
+            KBookmarkGroup root = Application::bookmarkProvider()->rootGroup();
+            if(parent.isValid())
+                root = bookmarkForIndex(parent).toGroup();
+
+            if(!destIndex.isValid())
+            {
+                if(!parent.isValid()) // Drop into a blank area
+                {
+                    Application::bookmarkProvider()->rootGroup().deleteBookmark(bookmark);
+                    Application::bookmarkProvider()->rootGroup().addBookmark(bookmark);
+                }
+                else // Drop at the last item of the group or directly on the main item of the group
+                {
+                    root.deleteBookmark(bookmark);
+                    root.addBookmark(bookmark);
+                }
+            }
+
+            else
+            {
+                if(row == -1)
+                {
+                    root.deleteBookmark(bookmark);
+                    root.addBookmark(bookmark);
+                }
+                else // A classic drop
+                {
+                    root.moveBookmark(bookmark, root.previous(dropDestBookmark));
+                }
+            }
+
+            Application::bookmarkProvider()->bookmarkManager()->emitChanged(root);
+        }
+    }
+    return true;
+}
diff --git a/src/bookmarks/bookmarkstreemodel.h b/src/bookmarks/bookmarkstreemodel.h
index dfad52ba..4ff19e5f 100644
--- a/src/bookmarks/bookmarkstreemodel.h
+++ b/src/bookmarks/bookmarkstreemodel.h
@@ -38,6 +38,26 @@
 // Qt Includes
 #include <QAbstractItemModel>
 
+class BtmItem
+{
+public:
+    BtmItem(const KBookmark &bm);
+    ~BtmItem();
+    QVariant data( int role = Qt::DisplayRole ) const;
+    int row() const;
+    int childCount() const;
+    BtmItem* child( int n );
+    BtmItem* parent() const;
+    void appendChild(BtmItem *child);
+    void clear();
+    KBookmark getBkm() const;
+
+private:
+    BtmItem *m_parent;
+    QList< BtmItem* > m_children;
+    KBookmark m_kbm;
+};
+
 
 class REKONQ_TESTS_EXPORT BookmarksTreeModel : public QAbstractItemModel
 {
@@ -48,28 +68,33 @@ public:
     explicit BookmarksTreeModel(QObject *parent = 0);
     ~BookmarksTreeModel();
 
-	virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
     virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
 
-	virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-	virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
 
-	virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
     virtual QModelIndex parent(const QModelIndex &index) const;
-	virtual QVariant data(const QModelIndex &index, int role) const;
-//     virtual bool setData(const QModelIndex &index, const QVariant &value, int role);
+    virtual QVariant data(const QModelIndex &index, int role) const;
 
-private slots:
-	void bookmarksChanged( const QString &groupAddress );
+    virtual QStringList mimeTypes () const;
+    virtual bool dropMimeData(const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent);
+    virtual Qt::DropActions supportedDropActions () const;
+    virtual QMimeData *mimeData( const QModelIndexList & indexes ) const;
 
-private:
-	class BtmItem;
-	BtmItem *m_root;
+private slots:
+    void bookmarksChanged( const QString &groupAddress );
 
-	void resetModel();
+signals:
+    void bookmarkChangedFinished();
 
+private:
+    BtmItem *m_root;
+    void resetModel();
     void setRoot(KBookmarkGroup bmg);
-	void populate( BtmItem *node, KBookmarkGroup bmg);
+    void populate( BtmItem *node, KBookmarkGroup bmg);
+    KBookmark bookmarkForIndex(const QModelIndex index) const;
 };
 
 #endif // BOOKMARKSTREEMODEL_H
-- 
cgit v1.2.1


From 9ede70edadea14f3a1ee4d66ca03ec20a6133f72 Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Thu, 25 Mar 2010 12:22:04 +0100
Subject: Add tests for the bookmark before toGroup()

---
 src/bookmarks/bookmarkspanel.cpp | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index c50ebcdb..fdf1b3d8 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -157,13 +157,16 @@ void BookmarksPanel::autoExpand(const QModelIndex &root)
 {
 
     int count = m_treeView->model()->rowCount(root);
-    QModelIndex temp;
+    QModelIndex index;
 
     for(int i = 0; i < count; i++)
     {
-        temp = m_treeView->model()->index(i,0,root);
-        m_treeView->setExpanded(temp, bookmarkForIndex(temp).toGroup().isOpen());
-        autoExpand(temp);
+        index = m_treeView->model()->index(i, 0, root);
+        if(index.isValid() && bookmarkForIndex(index).isGroup())
+        {
+            m_treeView->setExpanded(index, bookmarkForIndex(index).toGroup().isOpen());
+            autoExpand(index);
+        }
     }
 }
 
@@ -369,7 +372,7 @@ void BookmarksPanel::editBookmark()
 void BookmarksPanel::openAll()
 {
     QModelIndex index = m_treeView->currentIndex();
-    if(!index.isValid())
+    if(!index.isValid() || !bookmarkForIndex(index).isGroup())
         return;
 
     QList<KUrl> allChild = bookmarkForIndex(index).toGroup().groupUrlList();
-- 
cgit v1.2.1


From 632389517ca496031bb1cbe468d904884961bf57 Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Sat, 27 Mar 2010 19:04:11 +0100
Subject: - Fix a crash when the cancel button of the add bookmark menu is
 clicked - Use the same behaviour for delete bookmark as the toolbar - Some
 strings changed - Keep the selection of a folder when it's expanded/collapsed
 - Fix the name of some methods and properties - Code cleaned a bit

---
 src/bookmarks/bookmarkspanel.cpp     | 153 +++++++++++++++++++----------------
 src/bookmarks/bookmarkspanel.h       |  19 ++---
 src/bookmarks/bookmarkstreemodel.cpp |  24 ++++--
 src/bookmarks/bookmarkstreemodel.h   |   7 +-
 4 files changed, 116 insertions(+), 87 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index fdf1b3d8..c5c2f548 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -55,8 +55,7 @@ BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::Window
     : QDockWidget(title, parent, flags),
     m_treeView(new UrlTreeView(this)),
     m_ac(new KActionCollection(this)),
-    menu(new KMenu(this)),
-    expandLock(false)
+    m_loadingState(false)
 {
     setup();
     setupActions();
@@ -119,41 +118,41 @@ void BookmarksPanel::setup()
     connect(m_treeView, SIGNAL(collapsed(const QModelIndex &)), this, SLOT(onCollapse(const QModelIndex &)));
     connect(m_treeView, SIGNAL(expanded(const QModelIndex &)), this, SLOT(onExpand(const QModelIndex &)));
     connect(search, SIGNAL(textChanged(const QString &)), proxy, SLOT(setFilterFixedString(const QString &)));
-    callAutoExpand();
+    loadFoldedState();
 }
 
 
 void BookmarksPanel::onCollapse(const QModelIndex &index)
 {
-    if(expandLock)
+    if(m_loadingState)
         return;
 
     KBookmark bookmark = bookmarkForIndex(index);
     bookmark.internalElement().setAttribute("folded", "yes");
-    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
+    emit saveOnlyRequested();
 }
 
 
 void BookmarksPanel::onExpand(const QModelIndex &index)
 {
-    if(expandLock)
+    if(m_loadingState)
         return;
 
     KBookmark bookmark = bookmarkForIndex(index);
     bookmark.internalElement().setAttribute("folded", "no");
-    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
+    emit saveOnlyRequested();
 }
 
 
-void BookmarksPanel::callAutoExpand()
+void BookmarksPanel::loadFoldedState()
 {
-    expandLock = true;
-    autoExpand();
-    expandLock = false;
+    m_loadingState = true;
+    loadFoldedState(QModelIndex());
+    m_loadingState = false;
 }
 
 
-void BookmarksPanel::autoExpand(const QModelIndex &root)
+void BookmarksPanel::loadFoldedState(const QModelIndex &root)
 {
 
     int count = m_treeView->model()->rowCount(root);
@@ -165,7 +164,7 @@ void BookmarksPanel::autoExpand(const QModelIndex &root)
         if(index.isValid() && bookmarkForIndex(index).isGroup())
         {
             m_treeView->setExpanded(index, bookmarkForIndex(index).toGroup().isOpen());
-            autoExpand(index);
+            loadFoldedState(index);
         }
     }
 }
@@ -177,47 +176,47 @@ void BookmarksPanel::setupActions()
 
     action = new KAction(KIcon("tab-new"), i18n("Open"), this);
     connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInCurrentTab()));
-    m_ac.addAction("open", action);
+    m_ac->addAction("open", action);
 
     action = new KAction(KIcon("tab-new"), i18n("Open in New Tab"), this);
     connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInNewTab()));
-    m_ac.addAction("open_tab", action);
+    m_ac->addAction("open_tab", action);
 
     action = new KAction(KIcon("window-new"), i18n("Open in New Window"), this);
     connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInNewWindow()));
-    m_ac.addAction("open_window", action);
+    m_ac->addAction("open_window", action);
 
-    action = new KAction(KIcon("rating"), i18n("Bookmark Page"), this);
+    action = new KAction(KIcon("rating"), i18n("Bookmark Current Page"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(bookmarkPage()));
-    m_ac.addAction("bookmark_page", action);
+    m_ac->addAction("bookmark_page", action);
 
     action = new KAction(KIcon("bookmark-new"), i18n("New Bookmark"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(newBookmark()));
-    m_ac.addAction("bookmark_new", action);
+    m_ac->addAction("bookmark_new", action);
 
     action = new KAction(KIcon("folder-new"), i18n("New Bookmark Folder"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(newBookmarkGroup()));
-    m_ac.addAction("folder_new", action);
+    m_ac->addAction("folder_new", action);
 
     action = new KAction(KIcon("edit-clear"), i18n("New Separator"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(newSeparator()));
-    m_ac.addAction("separator_new", action);
+    m_ac->addAction("separator_new", action);
 
-    action = new KAction(KIcon("edit-copy"), i18n("Copy Link"), this);
+    action = new KAction(KIcon("edit-copy"), i18n("Copy Link Adress"), this);
     connect(action, SIGNAL(triggered()), m_treeView, SLOT(copyToClipboard()));
-    m_ac.addAction("copy", action);
+    m_ac->addAction("copy", action);
 
-    action = new KAction(KIcon("edit-delete"), i18n("Delete"), this);
+    action = new KAction(KIcon("edit-delete"), i18n("Delete Bookmark"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(deleteBookmark()));
-    m_ac.addAction("delete", action);
+    m_ac->addAction("delete", action);
 
     action = new KAction(KIcon("configure"), i18n("Properties"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(editBookmark()));
-    m_ac.addAction("properties", action);
+    m_ac->addAction("properties", action);
 
-    action = new KAction(KIcon("tab-new"), i18n("Open all Bookmarks"), this);
-    connect(action, SIGNAL(triggered()), this, SLOT(openAll()));
-    m_ac.addAction("open_all", action);
+    action = new KAction(KIcon("tab-new"), i18n("Open Folder in Tabs"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(openFolderInTabs()));
+    m_ac->addAction("open_all", action);
 }
 
 
@@ -238,7 +237,7 @@ void BookmarksPanel::contextMenuBk(const QPoint &pos)
 {
     QPoint position = m_treeView->mapToGlobal(pos);
     QModelIndex index = m_treeView->indexAt(pos);
-    if(!index.isValid() || expandLock)
+    if(!index.isValid() || m_loadingState)
         return;
 
     KBookmark selected = bookmarkForIndex(index);
@@ -255,27 +254,27 @@ void BookmarksPanel::contextMenuBk(const QPoint &pos)
         return;
     }
 
-    menu = new KMenu(this);
+    KMenu *menu = new KMenu(this);
 
-    menu->addAction(m_ac.action("open"));
-    menu->addAction(m_ac.action("open_tab"));
-    menu->addAction(m_ac.action("open_window"));
+    menu->addAction(m_ac->action("open"));
+    menu->addAction(m_ac->action("open_tab"));
+    menu->addAction(m_ac->action("open_window"));
 
     menu->addSeparator();
 
-    menu->addAction(m_ac.action("bookmark_page"));
-    menu->addAction(m_ac.action("bookmark_new"));
-    menu->addAction(m_ac.action("folder_new"));
-    menu->addAction(m_ac.action("separator_new"));
+    menu->addAction(m_ac->action("bookmark_page"));
+    menu->addAction(m_ac->action("bookmark_new"));
+    menu->addAction(m_ac->action("folder_new"));
+    menu->addAction(m_ac->action("separator_new"));
 
     menu->addSeparator();
 
-    menu->addAction(m_ac.action("copy"));
+    menu->addAction(m_ac->action("copy"));
 
     menu->addSeparator();
 
-    menu->addAction(m_ac.action("delete"));
-    menu->addAction(m_ac.action("properties"));
+    menu->addAction(m_ac->action("delete"));
+    menu->addAction(m_ac->action("properties"));
 
     menu->popup(position);
 }
@@ -283,27 +282,27 @@ void BookmarksPanel::contextMenuBk(const QPoint &pos)
 
 void BookmarksPanel::contextMenuBkGroup(const QPoint &pos, bool emptyGroup)
 {
-    if(expandLock)
+    if(m_loadingState)
         return;
 
     QPoint position = m_treeView->mapToGlobal(pos);
-    menu = new KMenu(this);
+    KMenu *menu = new KMenu(this);
 
     if(!emptyGroup)
     {
-        menu->addAction(m_ac.action("open_all"));
+        menu->addAction(m_ac->action("open_all"));
         menu->addSeparator();
     }
 
-    menu->addAction(m_ac.action("bookmark_page"));
-    menu->addAction(m_ac.action("bookmark_new"));
-    menu->addAction(m_ac.action("folder_new"));
-    menu->addAction(m_ac.action("separator_new"));
+    menu->addAction(m_ac->action("bookmark_page"));
+    menu->addAction(m_ac->action("bookmark_new"));
+    menu->addAction(m_ac->action("folder_new"));
+    menu->addAction(m_ac->action("separator_new"));
 
     menu->addSeparator();
 
-    menu->addAction(m_ac.action("delete"));
-    menu->addAction(m_ac.action("properties"));
+    menu->addAction(m_ac->action("delete"));
+    menu->addAction(m_ac->action("properties"));
 
     menu->popup(position);
 }
@@ -312,16 +311,16 @@ void BookmarksPanel::contextMenuBkGroup(const QPoint &pos, bool emptyGroup)
 void BookmarksPanel::contextMenuSeparator(const QPoint &pos)
 {
     QPoint position = m_treeView->mapToGlobal(pos);
-    menu = new KMenu(this);
+    KMenu *menu = new KMenu(this);
 
-    menu->addAction(m_ac.action("bookmark_page"));
-    menu->addAction(m_ac.action("bookmark_new"));
-    menu->addAction(m_ac.action("folder_new"));
-    menu->addAction(m_ac.action("separator_new"));
+    menu->addAction(m_ac->action("bookmark_page"));
+    menu->addAction(m_ac->action("bookmark_new"));
+    menu->addAction(m_ac->action("folder_new"));
+    menu->addAction(m_ac->action("separator_new"));
 
     menu->addSeparator();
 
-    menu->addAction(m_ac.action("delete"));
+    menu->addAction(m_ac->action("delete"));
 
     menu->popup(position);
 }
@@ -330,12 +329,12 @@ void BookmarksPanel::contextMenuSeparator(const QPoint &pos)
 void BookmarksPanel::contextMenuBlank(const QPoint &pos)
 {
     QPoint position = m_treeView->mapToGlobal(pos);
-    menu = new KMenu(this);
+    KMenu *menu = new KMenu(this);
 
-    menu->addAction(m_ac.action("bookmark_page"));
-    menu->addAction(m_ac.action("bookmark_new"));
-    menu->addAction(m_ac.action("folder_new"));
-    menu->addAction(m_ac.action("separator_new"));
+    menu->addAction(m_ac->action("bookmark_page"));
+    menu->addAction(m_ac->action("bookmark_new"));
+    menu->addAction(m_ac->action("folder_new"));
+    menu->addAction(m_ac->action("separator_new"));
 
     menu->popup(position);
 }
@@ -347,10 +346,22 @@ void BookmarksPanel::deleteBookmark()
     if(!index.isValid())
         return;
 
-    KBookmark selected = bookmarkForIndex(index);
-    KBookmarkGroup parent = selected.parentGroup();
+    KBookmark bm = bookmarkForIndex(index);
+    bool folder = bm.isGroup();
+
+    if (KMessageBox::warningContinueCancel(
+            QApplication::activeWindow(),
+            folder ? i18n("Are you sure you wish to remove the bookmark folder\n\"%1\"?", bm.text())
+                   : i18n("Are you sure you wish to remove the bookmark\n\"%1\"?", bm.text()),
+            folder ? i18n("Bookmark Folder Deletion")
+                   : i18n("Bookmark Deletion"),
+            KStandardGuiItem::del())
+          != KMessageBox::Continue
+        )
+        return;
 
-    parent.deleteBookmark(selected);
+
+    bm.parentGroup().deleteBookmark(bm);
     Application::instance()->bookmarkProvider()->bookmarkManager()->emitChanged();
 }
 
@@ -369,7 +380,7 @@ void BookmarksPanel::editBookmark()
 }
 
 
-void BookmarksPanel::openAll()
+void BookmarksPanel::openFolderInTabs()
 {
     QModelIndex index = m_treeView->currentIndex();
     if(!index.isValid() || !bookmarkForIndex(index).isGroup())
@@ -402,18 +413,22 @@ void BookmarksPanel::newBookmark()
         selected = bookmarkForIndex(index);
 
          if(selected.isGroup())
-            newBk = dialog->addBookmark("New bookmark", KUrl("www.kde.org"), selected);
+            newBk = dialog->addBookmark("New bookmark", KUrl(), selected);
         else
-            newBk = dialog->addBookmark("New bookmark", KUrl("www.kde.org"), selected.parentGroup());
+            newBk = dialog->addBookmark("New bookmark", KUrl(), selected.parentGroup());
     }
 
     else
     {
-        newBk = dialog->addBookmark("New bookmark", KUrl("www.kde.org"));
+        newBk = dialog->addBookmark("New bookmark", KUrl());
     }
 
     delete dialog;
 
+    // a click on cancel
+    if(newBk.isNull())
+        return;
+
     // addBookmark already added the bookmark, but without the default favicon
     KBookmarkGroup parent = newBk.parentGroup();
     parent.deleteBookmark(newBk);
@@ -493,7 +508,7 @@ void BookmarksPanel::newSeparator()
 }
 
 
-void BookmarksPanel::bookmarkPage()
+void BookmarksPanel::bookmarkCurrentPage()
 {
     QModelIndex index = m_treeView->currentIndex();
     KBookmarkGroup parent = Application::bookmarkProvider()->rootGroup();
diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h
index ea33e265..be52804f 100644
--- a/src/bookmarks/bookmarkspanel.h
+++ b/src/bookmarks/bookmarkspanel.h
@@ -40,7 +40,6 @@
 // KDE Includes
 #include <KBookmark>
 #include <KActionCollection>
-#include <KMenu>
 
 // Forward Declarations
 class KUrl;
@@ -58,24 +57,24 @@ public:
 signals:
     void openUrl(const KUrl &, const Rekonq::OpenType &);
     void itemHovered(const QString &);
-    void saveExpFinished(const QString &);
-    void saveRequested();
+    void saveOnlyRequested();
 
 private slots:
     void contextMenuBk(const QPoint &pos);
     void contextMenuBkGroup(const QPoint &pos, const bool emptyGroup = false);
     void contextMenuBlank(const QPoint &pos);
     void deleteBookmark();
-    void openAll();
+    void openFolderInTabs();
     void editBookmark();
     void newBookmark();
     void newBookmarkGroup();
     void newSeparator();
-    void bookmarkPage();
-    void autoExpand(const QModelIndex &root = QModelIndex());
     void onCollapse(const QModelIndex &index);
     void onExpand(const QModelIndex &index);
-    void callAutoExpand();
+    void bookmarkCurrentPage();
+    void loadFoldedState(const QModelIndex &root);
+    void loadFoldedState();
+
 
 private:
     void setup();
@@ -84,10 +83,8 @@ private:
     KBookmark bookmarkForIndex(const QModelIndex &index);
 
     UrlTreeView *m_treeView;
-    QStringList m_expList;
-    KActionCollection m_ac;
-    KMenu *menu;
-    bool expandLock;
+    KActionCollection *m_ac;
+    bool m_loadingState;
 };
 
 #endif // BOOKMARKSPANEL_H
diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp
index d63c92d3..836401a6 100644
--- a/src/bookmarks/bookmarkstreemodel.cpp
+++ b/src/bookmarks/bookmarkstreemodel.cpp
@@ -148,8 +148,9 @@ BookmarksTreeModel::BookmarksTreeModel(QObject *parent)
     , m_root(0)
 {
     resetModel();
-    connect( this, SIGNAL(bookmarkChangedFinished()), parent, SLOT(callAutoExpand()));
-    connect( Application::bookmarkProvider()->bookmarkManager(), SIGNAL( changed(QString,QString) ), this, SLOT( bookmarksChanged(QString) ) );
+    connect( this, SIGNAL(bookmarksUpdated()), parent, SLOT(loadFoldedState()));
+    connect( Application::bookmarkProvider()->bookmarkManager(), SIGNAL( changed(QString,QString) ), this, SLOT( bookmarksChanged() ) );
+    connect( parent, SIGNAL(saveOnlyRequested()), this, SLOT(saveOnly()) );
 }
 
 
@@ -283,11 +284,10 @@ QVariant BookmarksTreeModel::data(const QModelIndex &index, int role) const
 }
 
 
-void BookmarksTreeModel::bookmarksChanged( const QString &groupAddress )
+void BookmarksTreeModel::bookmarksChanged()
 {
-    Q_UNUSED(groupAddress);
     resetModel();
-    emit bookmarkChangedFinished();
+    emit bookmarksUpdated();
 }
 
 
@@ -336,6 +336,20 @@ KBookmark BookmarksTreeModel::bookmarkForIndex(const QModelIndex index) const
 }
 
 
+void BookmarksTreeModel::saveOnly()
+{
+    disconnect(Application::bookmarkProvider()->bookmarkManager(), SIGNAL(changed(QString,QString)), this, SLOT(bookmarksChanged()));
+    connect(Application::bookmarkProvider()->bookmarkManager(), SIGNAL(changed(QString,QString)), this, SLOT(reconnectManager()));
+    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
+}
+
+
+void BookmarksTreeModel::reconnectManager()
+{
+    connect(Application::bookmarkProvider()->bookmarkManager(), SIGNAL( changed(QString,QString) ), this, SLOT(bookmarksChanged()));
+}
+
+
 Qt::DropActions BookmarksTreeModel::supportedDropActions () const
 {
     return Qt::MoveAction;
diff --git a/src/bookmarks/bookmarkstreemodel.h b/src/bookmarks/bookmarkstreemodel.h
index 4ff19e5f..b312ab2d 100644
--- a/src/bookmarks/bookmarkstreemodel.h
+++ b/src/bookmarks/bookmarkstreemodel.h
@@ -84,13 +84,16 @@ public:
     virtual QMimeData *mimeData( const QModelIndexList & indexes ) const;
 
 private slots:
-    void bookmarksChanged( const QString &groupAddress );
+    void bookmarksChanged();
+    void saveOnly();
+    void reconnectManager();
 
 signals:
-    void bookmarkChangedFinished();
+    void bookmarksUpdated();
 
 private:
     BtmItem *m_root;
+
     void resetModel();
     void setRoot(KBookmarkGroup bmg);
     void populate( BtmItem *node, KBookmarkGroup bmg);
-- 
cgit v1.2.1


From f5a40919219ef5210598a87054af34b331ebe31e Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Sat, 27 Mar 2010 20:08:59 +0100
Subject: Fix the bookmarkCurrentPage slot name

---
 src/bookmarks/bookmarkspanel.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index c5c2f548..a1bc4f51 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -187,7 +187,7 @@ void BookmarksPanel::setupActions()
     m_ac->addAction("open_window", action);
 
     action = new KAction(KIcon("rating"), i18n("Bookmark Current Page"), this);
-    connect(action, SIGNAL(triggered()), this, SLOT(bookmarkPage()));
+    connect(action, SIGNAL(triggered()), this, SLOT(bookmarkCurrentPage()));
     m_ac->addAction("bookmark_page", action);
 
     action = new KAction(KIcon("bookmark-new"), i18n("New Bookmark"), this);
-- 
cgit v1.2.1


From a3020fb4be790a79af806b4d22b5d9bdc790ee7f Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Sat, 27 Mar 2010 20:20:12 +0100
Subject: Fix missing strings on the history panel

---
 src/bookmarks/bookmarkspanel.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index a1bc4f51..c249566d 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -202,7 +202,7 @@ void BookmarksPanel::setupActions()
     connect(action, SIGNAL(triggered()), this, SLOT(newSeparator()));
     m_ac->addAction("separator_new", action);
 
-    action = new KAction(KIcon("edit-copy"), i18n("Copy Link Adress"), this);
+    action = new KAction(KIcon("edit-copy"), i18n("Copy Link Address"), this);
     connect(action, SIGNAL(triggered()), m_treeView, SLOT(copyToClipboard()));
     m_ac->addAction("copy", action);
 
-- 
cgit v1.2.1


From 6183e8e1c21807299f04f4e84c43486cf684f140 Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Sat, 27 Mar 2010 22:17:20 +0100
Subject: - Remove the Add Bookmark action from the different context menus -
 Add Bookmark Here now add the bookmark on top of the selected item - ctor
 initialisation for the UrlTreeView of the history panel

---
 src/bookmarks/bookmarkspanel.cpp | 55 ++--------------------------------------
 src/bookmarks/bookmarkspanel.h   |  1 -
 2 files changed, 2 insertions(+), 54 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index c249566d..2f530c6c 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -186,14 +186,10 @@ void BookmarksPanel::setupActions()
     connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInNewWindow()));
     m_ac->addAction("open_window", action);
 
-    action = new KAction(KIcon("rating"), i18n("Bookmark Current Page"), this);
+    action = new KAction(KIcon("bookmark-new"), i18n("Add Bookmark Here"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(bookmarkCurrentPage()));
     m_ac->addAction("bookmark_page", action);
 
-    action = new KAction(KIcon("bookmark-new"), i18n("New Bookmark"), this);
-    connect(action, SIGNAL(triggered()), this, SLOT(newBookmark()));
-    m_ac->addAction("bookmark_new", action);
-
     action = new KAction(KIcon("folder-new"), i18n("New Bookmark Folder"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(newBookmarkGroup()));
     m_ac->addAction("folder_new", action);
@@ -263,7 +259,6 @@ void BookmarksPanel::contextMenuBk(const QPoint &pos)
     menu->addSeparator();
 
     menu->addAction(m_ac->action("bookmark_page"));
-    menu->addAction(m_ac->action("bookmark_new"));
     menu->addAction(m_ac->action("folder_new"));
     menu->addAction(m_ac->action("separator_new"));
 
@@ -295,7 +290,6 @@ void BookmarksPanel::contextMenuBkGroup(const QPoint &pos, bool emptyGroup)
     }
 
     menu->addAction(m_ac->action("bookmark_page"));
-    menu->addAction(m_ac->action("bookmark_new"));
     menu->addAction(m_ac->action("folder_new"));
     menu->addAction(m_ac->action("separator_new"));
 
@@ -314,7 +308,6 @@ void BookmarksPanel::contextMenuSeparator(const QPoint &pos)
     KMenu *menu = new KMenu(this);
 
     menu->addAction(m_ac->action("bookmark_page"));
-    menu->addAction(m_ac->action("bookmark_new"));
     menu->addAction(m_ac->action("folder_new"));
     menu->addAction(m_ac->action("separator_new"));
 
@@ -332,7 +325,6 @@ void BookmarksPanel::contextMenuBlank(const QPoint &pos)
     KMenu *menu = new KMenu(this);
 
     menu->addAction(m_ac->action("bookmark_page"));
-    menu->addAction(m_ac->action("bookmark_new"));
     menu->addAction(m_ac->action("folder_new"));
     menu->addAction(m_ac->action("separator_new"));
 
@@ -399,49 +391,6 @@ void BookmarksPanel::openFolderInTabs()
 }
 
 
-void BookmarksPanel::newBookmark()
-{
-    QModelIndex index = m_treeView->currentIndex();
-
-    KBookmark selected;
-    KBookmark newBk;
-
-    KBookmarkDialog *dialog = Application::bookmarkProvider()->bookmarkOwner()->bookmarkDialog(Application::bookmarkProvider()->bookmarkManager(), QApplication::activeWindow());
-
-    if(index.isValid())
-    {
-        selected = bookmarkForIndex(index);
-
-         if(selected.isGroup())
-            newBk = dialog->addBookmark("New bookmark", KUrl(), selected);
-        else
-            newBk = dialog->addBookmark("New bookmark", KUrl(), selected.parentGroup());
-    }
-
-    else
-    {
-        newBk = dialog->addBookmark("New bookmark", KUrl());
-    }
-
-    delete dialog;
-
-    // a click on cancel
-    if(newBk.isNull())
-        return;
-
-    // addBookmark already added the bookmark, but without the default favicon
-    KBookmarkGroup parent = newBk.parentGroup();
-    parent.deleteBookmark(newBk);
-    newBk.setIcon(("text-html"));
-    parent.addBookmark(newBk);
-
-    if(index.isValid())
-        parent.moveBookmark(newBk, selected);
-
-    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
-}
-
-
 void BookmarksPanel::newBookmarkGroup()
 {
     QModelIndex index = m_treeView->currentIndex();
@@ -522,7 +471,7 @@ void BookmarksPanel::bookmarkCurrentPage()
             parent = selected.toGroup();
 
         KBookmark newBk = parent.addBookmark(Application::bookmarkProvider()->bookmarkOwner()->currentTitle(), KUrl(Application::bookmarkProvider()->bookmarkOwner()->currentUrl()), "text-html");
-        parent.moveBookmark(newBk, selected);
+        parent.moveBookmark(newBk, selected.parentGroup().previous(selected));
     }
 
     else
diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h
index be52804f..f8528b71 100644
--- a/src/bookmarks/bookmarkspanel.h
+++ b/src/bookmarks/bookmarkspanel.h
@@ -66,7 +66,6 @@ private slots:
     void deleteBookmark();
     void openFolderInTabs();
     void editBookmark();
-    void newBookmark();
     void newBookmarkGroup();
     void newSeparator();
     void onCollapse(const QModelIndex &index);
-- 
cgit v1.2.1


From 942c55b945443a2e6dd9a2d3660347fc2176630a Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Mon, 29 Mar 2010 11:47:42 +0200
Subject: This commit merge all our work about new UrlBar.

DISCLAIMER: this is far from perfect, but we finally have a good starting point to work on.. :)

Jonas Gastal started working on it in the 0.3 times, startin from CompletionBase code ..
.. I did some work on another idea, proposing (in code) a new "suggest engine" created from scratch...
Lionel Chauvin finally merged our ideas and implemented what you are seeing (and improved it, too!)..

- New suggestion items (Firefox style)
- a mockup on the known urls (rekonq style)
- for now, automatic Google and Wikipedia searches (more coming)..
- a beautiful animation :)
- quite all rough edges smoothed

--------------------------------------------------------
Squashed commit of the following:

commit d9cf43da421c7f6c71f78444ff1935c414468b98
commit 9dcb6e18f8a3e9ae8ef1cd1299d47d37393aa6e5
commit 6c4bf2b2040ea20c78c5703f20c6bc88b7e40169
commit 8488df67115d186489f34210b638c150c66f62d3
commit 066ab907661282b1ffa4cf640739c20b4c7b6556
commit c23e23cbca7ab3197c570651a95d3f8fea270d78
commit 60655b0a8685a76e2b8b7a457bfded974bc98b4c
commit 9a8817db124b55f501c9e5d3415a975ee6f92d68
commit 61312b6b577a535a4d56758b3bd3ea38812d5139
commit b6a3f4ea12423a063eafa641cedd13b890b9d392
commit 5e8e2f851edb42bc2deed296c26c58c3d7570381
commit 2904d828f71ac8ff46a53e58da8f45b5aa16e7ef
---------------------------------------------------------
---
 src/bookmarks/bookmarksmanager.cpp | 14 +++++++++++++-
 src/bookmarks/bookmarksmanager.h   |  7 +++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 9feed63a..89e39ef8 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -161,7 +161,12 @@ BookmarkProvider::BookmarkProvider(QObject *parent)
         , m_actionCollection(new KActionCollection(this))
         , m_bookmarkMenu(0)
         , m_bookmarkToolBar(0)
+        , m_completion(0)
 {
+    // take care of the completion object
+    m_completion = new KCompletion;
+    m_completion->setOrder( KCompletion::Weighted );
+
     KUrl bookfile = KUrl("~/.kde/share/apps/konqueror/bookmarks.xml");  // share konqueror bookmarks
 
     if (!QFile::exists(bookfile.path()))
@@ -222,6 +227,7 @@ void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString
         return;
 
     m_bookmarkToolBar->clear(); // FIXME CRASH
+    m_completion->clear();
 
     KBookmark bookmark = toolBarGroup.first();
     while (!bookmark.isNull())
@@ -287,7 +293,8 @@ KAction *BookmarkProvider::fillBookmarkBar(const KBookmark &bookmark)
         return a;
     }
     else
-    {
+    {        
+        m_completion->addItem(bookmark.url().path());
         return new KBookmarkAction(bookmark, m_owner, this);
     }
 }
@@ -297,3 +304,8 @@ KBookmarkGroup BookmarkProvider::rootGroup()
 {
     return m_manager->root();
 }
+
+KCompletion *BookmarkProvider::completionObject() const
+{
+    return m_completion;
+}
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index e50148e4..18ff3ef0 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -39,6 +39,7 @@
 
 // KDE Includes
 #include <KBookmarkOwner>
+#include <KCompletion>
 
 // Forward Declarations
 class BookmarkProvider;
@@ -213,6 +214,11 @@ public:
     KBookmarkManager *bookmarkManager() { return m_manager; }
     BookmarkOwner *bookmarkOwner() { return m_owner; }
     
+    /**
+    * @returns the KCompletion object.
+    */
+    KCompletion *completionObject() const;
+
 signals:
     /**
     * @short This signal is emitted when an url has to be loaded
@@ -247,6 +253,7 @@ private:
     KActionCollection *m_actionCollection;
     BookmarkMenu *m_bookmarkMenu;
     KToolBar *m_bookmarkToolBar;
+    KCompletion *m_completion;
 };
 
 #endif
-- 
cgit v1.2.1


From b1f39e13b1d2199b2f8a9bef3c213715a36dd146 Mon Sep 17 00:00:00 2001
From: megabigbug <megabigbug@arrakis.(none)>
Date: Mon, 29 Mar 2010 23:20:37 +0200
Subject: add title for bookmarks in the list

---
 src/bookmarks/bookmarksmanager.cpp | 50 +++++++++++++++++++++++++++++++++++++-
 src/bookmarks/bookmarksmanager.h   |  4 +++
 2 files changed, 53 insertions(+), 1 deletion(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 89e39ef8..9c3201e6 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -294,7 +294,7 @@ KAction *BookmarkProvider::fillBookmarkBar(const KBookmark &bookmark)
     }
     else
     {        
-        m_completion->addItem(bookmark.url().path());
+        m_completion->addItem(bookmark.url().url());
         return new KBookmarkAction(bookmark, m_owner, this);
     }
 }
@@ -309,3 +309,51 @@ KCompletion *BookmarkProvider::completionObject() const
 {
     return m_completion;
 }
+
+
+
+
+
+QString BookmarkProvider::titleForBookmarkUrl(QString url)
+{
+    QString title = "";
+    KBookmarkGroup bookGroup = Application::bookmarkProvider()->rootGroup();
+    if (bookGroup.isNull())
+    {
+        return title;
+    }
+
+    KBookmark bookmark = bookGroup.first();
+    while (!bookmark.isNull() && title.isEmpty())
+    {
+        title = titleForBookmarkUrl(bookmark, url);
+        bookmark = bookGroup.next(bookmark);
+    }
+    
+    return title;
+}
+
+
+QString BookmarkProvider::titleForBookmarkUrl(const KBookmark &bookmark, QString url)
+{
+    QString title = "";
+    if (bookmark.isGroup())
+    {
+        KBookmarkGroup group = bookmark.toGroup();
+        KBookmark bm = group.first();
+        while (!bm.isNull() && title.isEmpty())
+        {
+            title = titleForBookmarkUrl(bm, url); // it is .bookfolder
+            bm = group.next(bm);
+        }
+    }
+    else if(!bookmark.isSeparator() && bookmark.url()==url)
+    {
+        title = bookmark.fullText();
+    }
+    
+    return title;
+}
+
+
+
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index 18ff3ef0..ace06e95 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -219,6 +219,8 @@ public:
     */
     KCompletion *completionObject() const;
 
+    QString titleForBookmarkUrl(QString url);
+    
 signals:
     /**
     * @short This signal is emitted when an url has to be loaded
@@ -245,8 +247,10 @@ public slots:
      */
     void slotBookmarksChanged(const QString &group, const QString &caller);
 
+    
 private:
     KAction *fillBookmarkBar(const KBookmark &bookmark);
+    QString titleForBookmarkUrl(const KBookmark &bookmark, QString url);
 
     KBookmarkManager *m_manager;
     BookmarkOwner *m_owner;
-- 
cgit v1.2.1


From a2cb9efc54c78c47e41196f0121ca00255a4a7ab Mon Sep 17 00:00:00 2001
From: lionelc <lionelc@lionelc.(none)>
Date: Tue, 30 Mar 2010 11:37:25 +0200
Subject: add title for history items

---
 src/bookmarks/bookmarksmanager.cpp | 5 +++++
 1 file changed, 5 insertions(+)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 9c3201e6..95adf387 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -330,6 +330,11 @@ QString BookmarkProvider::titleForBookmarkUrl(QString url)
         bookmark = bookGroup.next(bookmark);
     }
     
+    if (title.isEmpty())
+    {
+        title = url;
+    }
+    
     return title;
 }
 
-- 
cgit v1.2.1


From c28496c854a41baf865fc6e34b9d0453034ee84b Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Sat, 3 Apr 2010 23:09:25 +0200
Subject: - Add the control modifier support for back, next and home actions
 and for the UrlTreeView - Use SettingsOpenTab to open a link in a new tab
 with the bookmark toolbar

---
 src/bookmarks/bookmarksmanager.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 95adf387..6a5417fc 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -66,7 +66,7 @@ void BookmarkOwner::openBookmark(const KBookmark & bookmark,
 {
     if (keyboardModifiers & Qt::ControlModifier || mouseButtons == Qt::MidButton)
     {
-        emit openUrl(bookmark.url(), Rekonq::NewCurrentTab);
+        emit openUrl(bookmark.url(), Rekonq::SettingOpenTab);
     }
     else
     {
-- 
cgit v1.2.1


From a48a5a4157e9af22adb3a7673203ed8ced5ceeab Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Tue, 6 Apr 2010 12:43:21 +0200
Subject: - Enable context menu for folders and separators of the bookmark bar
 - Use the same context menu for the bookmark panel and the bookmark bar - Use
 a list to store the different bookmark bars   - Fix the different crashes
 when there are more than one window   - When the bookmarks are changed, all
 the bars are refreshed

---
 src/bookmarks/bookmarkcontextmenu.cpp | 309 ++++++++++++++++++++++++++++++++++
 src/bookmarks/bookmarkcontextmenu.h   |  63 +++++++
 src/bookmarks/bookmarksmanager.cpp    | 132 +++++++++++----
 src/bookmarks/bookmarksmanager.h      |  27 ++-
 src/bookmarks/bookmarkspanel.cpp      | 307 +++------------------------------
 src/bookmarks/bookmarkspanel.h        |  14 +-
 6 files changed, 518 insertions(+), 334 deletions(-)
 create mode 100644 src/bookmarks/bookmarkcontextmenu.cpp
 create mode 100644 src/bookmarks/bookmarkcontextmenu.h

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkcontextmenu.cpp b/src/bookmarks/bookmarkcontextmenu.cpp
new file mode 100644
index 00000000..ccb63143
--- /dev/null
+++ b/src/bookmarks/bookmarkcontextmenu.cpp
@@ -0,0 +1,309 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+// Self Includes
+#include "bookmarkcontextmenu.h"
+
+// Local Includes
+#include "application.h"
+#include "bookmarksmanager.h"
+
+// KDE Includes
+#include <KMessageBox>
+#include <KActionCollection>
+#include <KBookmarkDialog>
+
+
+BookmarkContextMenu::BookmarkContextMenu(const KBookmark & bookmark, KBookmarkManager *manager, KBookmarkOwner *owner, QWidget *parent)
+    : KBookmarkContextMenu(bookmark, manager, owner, parent)
+    , m_ac(new KActionCollection(this))
+{
+    setupActions();
+}
+
+
+void BookmarkContextMenu::setupActions()
+{
+    KAction* action;
+
+    action = new KAction(KIcon("tab-new"), i18n("Open"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(openInCurrentTab()));
+    m_ac->addAction("open", action);
+
+    action = new KAction(KIcon("tab-new"), i18n("Open in New Tab"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(openInNewTab()));
+    m_ac->addAction("open_tab", action);
+
+    action = new KAction(KIcon("window-new"), i18n("Open in New Window"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(openInNewWindow()));
+    m_ac->addAction("open_window", action);
+
+    action = new KAction(KIcon("bookmark-new"), i18n("Add Bookmark Here"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(bookmarkCurrentPage()));
+    m_ac->addAction("bookmark_page", action);
+
+    action = new KAction(KIcon("folder-new"), i18n("New Bookmark Folder"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(newBookmarkGroup()));
+    m_ac->addAction("folder_new", action);
+
+    action = new KAction(KIcon("edit-clear"), i18n("New Separator"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(newSeparator()));
+    m_ac->addAction("separator_new", action);
+
+    action = new KAction(KIcon("edit-copy"), i18n("Copy Link Address"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(copyToClipboard()));
+    m_ac->addAction("copy", action);
+
+    action = new KAction(KIcon("edit-delete"), i18n("Delete Bookmark"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(deleteBookmark()));
+    m_ac->addAction("delete", action);
+
+    action = new KAction(KIcon("configure"), i18n("Properties"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(editBookmark()));
+    m_ac->addAction("properties", action);
+
+    action = new KAction(KIcon("tab-new"), i18n("Open Folder in Tabs"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(openFolderInTabs()));
+    m_ac->addAction("open_all", action);
+}
+
+
+void BookmarkContextMenu::addBookmarkActions()
+{
+    addAction(m_ac->action("open"));
+    addAction(m_ac->action("open_tab"));
+    addAction(m_ac->action("open_window"));
+
+    addSeparator();
+
+    addAction(m_ac->action("bookmark_page"));
+    addAction(m_ac->action("folder_new"));
+    addAction(m_ac->action("separator_new"));
+
+    addSeparator();
+
+    addAction(m_ac->action("copy"));
+
+    addSeparator();
+
+    addAction(m_ac->action("delete"));
+    addAction(m_ac->action("properties"));
+}
+
+
+void BookmarkContextMenu::addFolderActions()
+{
+    if(!bookmark().toGroup().first().isNull())
+    {
+        addAction(m_ac->action("open_all"));
+        addSeparator();
+    }
+
+    addAction(m_ac->action("bookmark_page"));
+    addAction(m_ac->action("folder_new"));
+    addAction(m_ac->action("separator_new"));
+
+    addSeparator();
+
+    addAction(m_ac->action("delete"));
+    addAction(m_ac->action("properties"));
+}
+
+
+void BookmarkContextMenu::addSeparatorActions()
+{
+    addAction(m_ac->action("bookmark_page"));
+    addAction(m_ac->action("folder_new"));
+    addAction(m_ac->action("separator_new"));
+
+    addSeparator();
+
+    addAction(m_ac->action("delete"));
+}
+
+
+void BookmarkContextMenu::addActions()
+{
+    if(bookmark().isGroup())
+    {
+        addFolderActions();
+    }
+
+    else if(bookmark().isSeparator())
+    {
+        addSeparatorActions();
+    }
+
+    else if(bookmark().isNull())
+    {
+        addAction(m_ac->action("bookmark_page"));
+        addAction(m_ac->action("folder_new"));
+        addAction(m_ac->action("separator_new"));
+    }
+
+    else
+    {
+        addBookmarkActions();
+    }
+}
+
+
+void BookmarkContextMenu::openInCurrentTab()
+{
+    Application::instance()->loadUrl(bookmark().url());
+}
+
+
+void BookmarkContextMenu::openInNewTab()
+{
+    Application::instance()->loadUrl(bookmark().url(), Rekonq::SettingOpenTab);
+}
+
+
+void BookmarkContextMenu::openInNewWindow()
+{
+    Application::instance()->loadUrl(bookmark().url(), Rekonq::NewWindow);
+}
+
+void BookmarkContextMenu::deleteBookmark()
+{
+    KBookmark bm = bookmark();
+    bool folder = bm.isGroup();
+
+    if (KMessageBox::warningContinueCancel(
+            QApplication::activeWindow(),
+            folder ? i18n("Are you sure you wish to remove the bookmark folder\n\"%1\"?", bm.text())
+                   : i18n("Are you sure you wish to remove the bookmark\n\"%1\"?", bm.text()),
+            folder ? i18n("Bookmark Folder Deletion")
+                   : i18n("Bookmark Deletion"),
+            KStandardGuiItem::del())
+          != KMessageBox::Continue
+        )
+        return;
+
+    bm.parentGroup().deleteBookmark(bm);
+    manager()->emitChanged();
+}
+
+
+void BookmarkContextMenu::editBookmark()
+{
+    KBookmark selected = bookmark();
+
+    KBookmarkDialog *dialog = owner()->bookmarkDialog(manager(), QApplication::activeWindow());
+    dialog->editBookmark(selected);
+    delete dialog;
+}
+
+
+void BookmarkContextMenu::openFolderInTabs()
+{
+    if(bookmark().isGroup())
+        owner()->openFolderinTabs(bookmark().toGroup());
+}
+
+
+void BookmarkContextMenu::newBookmarkGroup()
+{
+    KBookmark newBk;
+    KBookmark selected = bookmark();
+    KBookmarkDialog *dialog = owner()->bookmarkDialog(manager(), QApplication::activeWindow());
+
+    if(!selected.isNull())
+    {
+        if(selected.isGroup())
+        {
+            newBk = dialog->createNewFolder("New folder", selected);
+        }
+
+        else
+        {
+            newBk = dialog->createNewFolder("New folder", selected.parentGroup());
+            selected.parentGroup().moveBookmark(newBk, selected);
+            manager()->emitChanged();
+        }
+    }
+    else
+    {
+        dialog->createNewFolder("New folder");
+    }
+
+    delete dialog;
+}
+
+
+void BookmarkContextMenu::newSeparator()
+{
+    KBookmark selected = bookmark();
+    KBookmark newBk;
+
+    if(!selected.isNull())
+    {
+        if(selected.isGroup())
+            newBk = selected.toGroup().createNewSeparator();
+        else
+            newBk = selected.parentGroup().createNewSeparator();
+    }
+
+    else
+    {
+        newBk = Application::bookmarkProvider()->rootGroup().createNewSeparator();
+    }
+
+    KBookmarkGroup parent = newBk.parentGroup();
+    newBk.setIcon(("edit-clear"));
+    parent.addBookmark(newBk);
+
+    if(!selected.isNull())
+        parent.moveBookmark(newBk, selected);
+
+    manager()->emitChanged();
+}
+
+
+void BookmarkContextMenu::bookmarkCurrentPage()
+{
+    KBookmarkGroup parent = Application::bookmarkProvider()->rootGroup();
+    KBookmark selected = bookmark();
+
+    if(!selected.isNull())
+    {
+        parent = selected.parentGroup();
+
+        if(selected.isGroup())
+            parent = selected.toGroup();
+
+        KBookmark newBk = parent.addBookmark(owner()->currentTitle(), KUrl(owner()->currentUrl()), "text-html");
+        parent.moveBookmark(newBk, selected.parentGroup().previous(selected));
+    }
+
+    else
+    {
+       parent.addBookmark(owner()->currentTitle(), KUrl(owner()->currentUrl()), "text-html");
+    }
+
+    manager()->emitChanged();
+}
diff --git a/src/bookmarks/bookmarkcontextmenu.h b/src/bookmarks/bookmarkcontextmenu.h
new file mode 100644
index 00000000..38fbc71a
--- /dev/null
+++ b/src/bookmarks/bookmarkcontextmenu.h
@@ -0,0 +1,63 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+#ifndef BOOKMARKCONTEXTMENU_H
+#define BOOKMARKCONTEXTMENU_H
+
+// Local Includes
+#include "application.h"
+
+// Qt Includes
+#include <KBookmarkMenu>
+
+
+class BookmarkContextMenu : public KBookmarkContextMenu
+{
+    Q_OBJECT
+public:
+    BookmarkContextMenu(const KBookmark & bk, KBookmarkManager * manager, KBookmarkOwner *owner, QWidget * parent = 0);
+    virtual void addActions();
+
+private slots:
+    void openInCurrentTab();
+    void openInNewTab();
+    void openInNewWindow();
+    void deleteBookmark();
+    void openFolderInTabs();
+    void editBookmark();
+    void newBookmarkGroup();
+    void newSeparator();
+    void bookmarkCurrentPage();
+
+private:
+    void setupActions();
+    void addFolderActions();
+    void addBookmarkActions();
+    void addSeparatorActions();
+    KActionCollection *m_ac;
+};
+
+#endif // BOOKMARKCONTEXTMENU_H
diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 6a5417fc..8cdc5d8e 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -34,18 +34,18 @@
 #include "mainwindow.h"
 #include "webtab.h"
 #include "webview.h"
+#include "bookmarkcontextmenu.h"
 
 // KDE Includes
 #include <KActionCollection>
-#include <KBookmark>
 #include <KBookmarkAction>
 #include <KBookmarkGroup>
-#include <KBookmarkMenu>
 #include <KToolBar>
 #include <KDebug>
 #include <KMenu>
 #include <KStandardDirs>
 #include <KUrl>
+#include <KMessageBox>
 
 // Qt Includes
 #include <QtCore/QFile>
@@ -96,6 +96,13 @@ QString BookmarkOwner::currentTitle() const
 void BookmarkOwner::openFolderinTabs(const KBookmarkGroup &bm)
 {
     QList<KUrl> urlList = bm.groupUrlList();
+
+    if(urlList.length() > 8)
+    {
+        if(!(KMessageBox::warningContinueCancel(Application::instance()->mainWindow(), i18n("You are about to open %1 tabs.\nAre you sure  ?", QString::number(urlList.length()))) == KMessageBox::Continue))
+            return;
+    }
+
     QList<KUrl>::iterator url;
     for (url = urlList.begin(); url != urlList.end(); ++url)
     {
@@ -126,12 +133,10 @@ BookmarkMenu::~BookmarkMenu()
 
 KMenu *BookmarkMenu::viewContextMenu(QAction *action)
 {
-    // contextMenu() returns an invalid  KMenu (seg fault) for the folders in the toolbar
-    KMenu *menu = contextMenu(action);
-    if(menu)
-        return menu;
-
-    return 0;   // new KMenu();
+    KBookmarkActionInterface* act = dynamic_cast<KBookmarkActionInterface *>(action);
+     if (!act)
+         return 0;
+     return new BookmarkContextMenu(act->bookmark(), manager(), owner());
 }
 
 
@@ -160,7 +165,6 @@ BookmarkProvider::BookmarkProvider(QObject *parent)
         , m_owner(0)
         , m_actionCollection(new KActionCollection(this))
         , m_bookmarkMenu(0)
-        , m_bookmarkToolBar(0)
         , m_completion(0)
 {
     // take care of the completion object
@@ -204,36 +208,44 @@ BookmarkProvider::~BookmarkProvider()
 }
 
 
-void BookmarkProvider::setupBookmarkBar(KToolBar *t)
+void BookmarkProvider::setupBookmarkBar(KToolBar *toolbar)
 {
-    m_bookmarkToolBar = t;
-    connect(m_bookmarkToolBar, SIGNAL(customContextMenuRequested(const QPoint &)),
+    KToolBar *bookmarkToolBar = toolbar;
+    m_bookmarkToolBars.append(toolbar);
+    connect(bookmarkToolBar, SIGNAL(customContextMenuRequested(const QPoint &)),
             this, SLOT(contextMenu(const QPoint &)));
 
     slotBookmarksChanged("", "");
 }
 
+void BookmarkProvider::removeToolBar(KToolBar *toolbar)
+{
+    m_bookmarkToolBars.removeOne(toolbar);
+}
 
 void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString &caller)
 {
     Q_UNUSED(group)
     Q_UNUSED(caller)
 
-    if (!m_bookmarkToolBar)
-        return;
-
-    KBookmarkGroup toolBarGroup = m_manager->toolbar();
-    if (toolBarGroup.isNull())
-        return;
-
-    m_bookmarkToolBar->clear(); // FIXME CRASH
-    m_completion->clear();
-
-    KBookmark bookmark = toolBarGroup.first();
-    while (!bookmark.isNull())
+    foreach(KToolBar *bookmarkToolBar, m_bookmarkToolBars)
     {
-        m_bookmarkToolBar->addAction(fillBookmarkBar(bookmark));
-        bookmark = toolBarGroup.next(bookmark);
+        if (bookmarkToolBar)
+        {
+            KBookmarkGroup toolBarGroup = m_manager->toolbar();
+            if (toolBarGroup.isNull())
+                return;
+
+            bookmarkToolBar->clear();
+            m_completion->clear();
+
+            KBookmark bookmark = toolBarGroup.first();
+            while (!bookmark.isNull())
+            {
+                bookmarkToolBar->addAction(fillBookmarkBar(bookmark));
+                bookmark = toolBarGroup.next(bookmark);
+            }
+        }
     }
 }
 
@@ -249,13 +261,22 @@ QAction *BookmarkProvider::actionByName(const QString &name)
 
 void BookmarkProvider::contextMenu(const QPoint &point)
 {
-    KAction* action = dynamic_cast<KAction*>(m_bookmarkToolBar->actionAt(point));
+    if(m_bookmarkToolBars.isEmpty())
+        return;
+
+    KToolBar *bookmarkToolBar = m_bookmarkToolBars.at(0);
+    if(!bookmarkToolBar)
+        return;
+
+    KAction* action = dynamic_cast<KAction*>(bookmarkToolBar->actionAt(point));
     if (!action)
         return;
+
     KMenu *menu = m_bookmarkMenu->viewContextMenu(action);
     if (!menu)
         return;
-    menu->popup(m_bookmarkToolBar->mapToGlobal(point));
+
+    menu->popup(bookmarkToolBar->mapToGlobal(point));
 }
 
 
@@ -276,19 +297,23 @@ KAction *BookmarkProvider::fillBookmarkBar(const KBookmark &bookmark)
     {
         KBookmarkGroup group = bookmark.toGroup();
         KBookmark bm = group.first();
-        KActionMenu *menuAction = new KActionMenu(KIcon(bookmark.icon()), bookmark.text(), this);
-        menuAction->setDelayed(false);
+        BookmarkActionMenu *menuAction = new BookmarkActionMenu(group, this);
+
         while (!bm.isNull())
         {
             menuAction->addAction(fillBookmarkBar(bm));
             bm = group.next(bm);
         }
+
+        menuAction->addFolderActions();
         return menuAction;
     }
  
     if(bookmark.isSeparator())
     {
-        KAction *a = new KAction(this);
+        KAction *a = new KBookmarkAction(bookmark, m_owner, this);
+        a->setText("");
+        a->setIcon(QIcon());
         a->setSeparator(true);
         return a;
     }
@@ -305,15 +330,13 @@ KBookmarkGroup BookmarkProvider::rootGroup()
     return m_manager->root();
 }
 
+
 KCompletion *BookmarkProvider::completionObject() const
 {
     return m_completion;
 }
 
 
-
-
-
 QString BookmarkProvider::titleForBookmarkUrl(QString url)
 {
     QString title = "";
@@ -361,4 +384,45 @@ QString BookmarkProvider::titleForBookmarkUrl(const KBookmark &bookmark, QString
 }
 
 
+// ----------------------------------------------------------------------------------------------
+
+
+BookmarkActionMenu::BookmarkActionMenu(const KBookmarkGroup &bm, QObject *parent)
+    : KBookmarkActionMenu(bm, bm.text(), parent)
+    , m_group(bm)
+{
+    setIcon(KIcon(bm.icon()));
+    setDelayed(false);
+}
+
+
+void BookmarkActionMenu::addFolderActions()
+{
+    addSeparator();
+    KAction *action;
+
+    if(!m_group.first().isNull())
+    {
+        action = new KAction(KIcon("tab-new"), i18n("Open Folder in Tabs"), this);
+        connect(action, SIGNAL(triggered(bool)), this, SLOT(openActionInTabs()));
+        addAction(action);
+    }
+
+    action = new KAction(KIcon("bookmark-new"), i18n("Add Bookmark Here"), this);
+    connect(action, SIGNAL(triggered(bool)), this, SLOT(bookmarkCurrentPage()));
+    addAction(action);
+}
+
+
+void BookmarkActionMenu::bookmarkCurrentPage()
+{
+    m_group.addBookmark(Application::bookmarkProvider()->bookmarkOwner()->currentTitle(), KUrl(Application::bookmarkProvider()->bookmarkOwner()->currentUrl()));
+    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
+}
+
 
+void BookmarkActionMenu::openActionInTabs()
+{
+    if(!m_group.isNull())
+        Application::bookmarkProvider()->bookmarkOwner()->openFolderinTabs(m_group);
+}
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index ace06e95..3c21bc67 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -194,6 +194,7 @@ public:
     */
     void setupBookmarkBar(KToolBar *);
 
+    void removeToolBar(KToolBar*);
 
     /**
      * @short Get action by name
@@ -220,7 +221,7 @@ public:
     KCompletion *completionObject() const;
 
     QString titleForBookmarkUrl(QString url);
-    
+
 signals:
     /**
     * @short This signal is emitted when an url has to be loaded
@@ -256,8 +257,30 @@ private:
     BookmarkOwner *m_owner;
     KActionCollection *m_actionCollection;
     BookmarkMenu *m_bookmarkMenu;
-    KToolBar *m_bookmarkToolBar;
+    QList<KToolBar*> m_bookmarkToolBars;
     KCompletion *m_completion;
 };
 
+
+// ------------------------------------------------------------------------------------------
+
+
+class BookmarkActionMenu : public KBookmarkActionMenu
+{
+    Q_OBJECT
+
+public:
+    BookmarkActionMenu (const KBookmarkGroup &bm, QObject *parent);
+    void addFolderActions();
+
+private slots:
+    void openActionInTabs();
+    void bookmarkCurrentPage();
+
+private:
+    KBookmarkGroup m_group;
+
+};
+
+
 #endif
diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index 2f530c6c..6360b313 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -32,6 +32,7 @@
 #include "bookmarksmanager.h"
 #include "bookmarkstreemodel.h"
 #include "bookmarksproxy.h"
+#include "bookmarkcontextmenu.h"
 
 // Auto Includes
 #include "rekonq.h"
@@ -39,26 +40,21 @@
 // Qt includes
 #include <QHBoxLayout>
 #include <QLabel>
-#include <QTreeView>
 #include <QHeaderView>
 
 // KDE includes
 #include <KLineEdit>
 #include <KLocalizedString>
-#include <KAction>
 #include <KMenu>
-#include <KBookmarkDialog>
 #include <KMessageBox>
 
 
 BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags)
     : QDockWidget(title, parent, flags),
     m_treeView(new UrlTreeView(this)),
-    m_ac(new KActionCollection(this)),
     m_loadingState(false)
 {
     setup();
-    setupActions();
     setShown(ReKonfig::showBookmarksPanel());
 }
 
@@ -111,9 +107,9 @@ void BookmarksPanel::setup()
     proxy->setSourceModel( model );
     m_treeView->setModel( proxy );
 
-    connect(m_treeView, SIGNAL(contextMenuItemRequested(const QPoint &)), this, SLOT(contextMenuBk(const QPoint &)));
-    connect(m_treeView, SIGNAL(contextMenuGroupRequested(const QPoint &)), this, SLOT(contextMenuBkGroup(const QPoint &)));
-    connect(m_treeView, SIGNAL(contextMenuEmptyRequested(const QPoint &)), this, SLOT(contextMenuBlank(const QPoint &)));
+    connect(m_treeView, SIGNAL(contextMenuItemRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &)));
+    connect(m_treeView, SIGNAL(contextMenuGroupRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &)));
+    connect(m_treeView, SIGNAL(contextMenuEmptyRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &)));
     connect(m_treeView, SIGNAL(delKeyPressed()), this, SLOT(deleteBookmark()));
     connect(m_treeView, SIGNAL(collapsed(const QModelIndex &)), this, SLOT(onCollapse(const QModelIndex &)));
     connect(m_treeView, SIGNAL(expanded(const QModelIndex &)), this, SLOT(onExpand(const QModelIndex &)));
@@ -122,6 +118,19 @@ void BookmarksPanel::setup()
 }
 
 
+KBookmark BookmarksPanel::bookmarkForIndex(const QModelIndex &index)
+{
+    if(!index.isValid())
+        return KBookmark();
+
+    const QAbstractProxyModel* proxyModel = dynamic_cast< const QAbstractProxyModel* >(index.model());
+    QModelIndex originalIndex = proxyModel->mapToSource(index);
+
+    BtmItem *node = static_cast< BtmItem* >( originalIndex.internalPointer() );
+    return node->getBkm();
+}
+
+
 void BookmarksPanel::onCollapse(const QModelIndex &index)
 {
     if(m_loadingState)
@@ -170,165 +179,16 @@ void BookmarksPanel::loadFoldedState(const QModelIndex &root)
 }
 
 
-void BookmarksPanel::setupActions()
+void BookmarksPanel::contextMenu(const QPoint &pos)
 {
-    KAction* action;
-
-    action = new KAction(KIcon("tab-new"), i18n("Open"), this);
-    connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInCurrentTab()));
-    m_ac->addAction("open", action);
-
-    action = new KAction(KIcon("tab-new"), i18n("Open in New Tab"), this);
-    connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInNewTab()));
-    m_ac->addAction("open_tab", action);
-
-    action = new KAction(KIcon("window-new"), i18n("Open in New Window"), this);
-    connect(action, SIGNAL(triggered()), m_treeView, SLOT(openInNewWindow()));
-    m_ac->addAction("open_window", action);
-
-    action = new KAction(KIcon("bookmark-new"), i18n("Add Bookmark Here"), this);
-    connect(action, SIGNAL(triggered()), this, SLOT(bookmarkCurrentPage()));
-    m_ac->addAction("bookmark_page", action);
-
-    action = new KAction(KIcon("folder-new"), i18n("New Bookmark Folder"), this);
-    connect(action, SIGNAL(triggered()), this, SLOT(newBookmarkGroup()));
-    m_ac->addAction("folder_new", action);
-
-    action = new KAction(KIcon("edit-clear"), i18n("New Separator"), this);
-    connect(action, SIGNAL(triggered()), this, SLOT(newSeparator()));
-    m_ac->addAction("separator_new", action);
-
-    action = new KAction(KIcon("edit-copy"), i18n("Copy Link Address"), this);
-    connect(action, SIGNAL(triggered()), m_treeView, SLOT(copyToClipboard()));
-    m_ac->addAction("copy", action);
-
-    action = new KAction(KIcon("edit-delete"), i18n("Delete Bookmark"), this);
-    connect(action, SIGNAL(triggered()), this, SLOT(deleteBookmark()));
-    m_ac->addAction("delete", action);
-
-    action = new KAction(KIcon("configure"), i18n("Properties"), this);
-    connect(action, SIGNAL(triggered()), this, SLOT(editBookmark()));
-    m_ac->addAction("properties", action);
-
-    action = new KAction(KIcon("tab-new"), i18n("Open Folder in Tabs"), this);
-    connect(action, SIGNAL(triggered()), this, SLOT(openFolderInTabs()));
-    m_ac->addAction("open_all", action);
-}
-
-
-KBookmark BookmarksPanel::bookmarkForIndex(const QModelIndex &index)
-{
-    if(!index.isValid())
-        return KBookmark();
-
-    const QAbstractProxyModel* proxyModel = dynamic_cast< const QAbstractProxyModel* >(index.model());
-    QModelIndex originalIndex = proxyModel->mapToSource(index);
-
-    BtmItem *node = static_cast< BtmItem* >( originalIndex.internalPointer() );
-    return node->getBkm();
-}
-
-
-void BookmarksPanel::contextMenuBk(const QPoint &pos)
-{
-    QPoint position = m_treeView->mapToGlobal(pos);
     QModelIndex index = m_treeView->indexAt(pos);
-    if(!index.isValid() || m_loadingState)
-        return;
-
-    KBookmark selected = bookmarkForIndex(index);
-
-    if(selected.isGroup())
-    {
-        contextMenuBkGroup(pos, true);
-        return;
-    }
-
-    if(selected.isSeparator())
-    {
-        contextMenuSeparator(pos);
-        return;
-    }
-
-    KMenu *menu = new KMenu(this);
-
-    menu->addAction(m_ac->action("open"));
-    menu->addAction(m_ac->action("open_tab"));
-    menu->addAction(m_ac->action("open_window"));
-
-    menu->addSeparator();
-
-    menu->addAction(m_ac->action("bookmark_page"));
-    menu->addAction(m_ac->action("folder_new"));
-    menu->addAction(m_ac->action("separator_new"));
-
-    menu->addSeparator();
-
-    menu->addAction(m_ac->action("copy"));
-
-    menu->addSeparator();
-
-    menu->addAction(m_ac->action("delete"));
-    menu->addAction(m_ac->action("properties"));
-
-    menu->popup(position);
-}
-
-
-void BookmarksPanel::contextMenuBkGroup(const QPoint &pos, bool emptyGroup)
-{
     if(m_loadingState)
         return;
 
-    QPoint position = m_treeView->mapToGlobal(pos);
-    KMenu *menu = new KMenu(this);
-
-    if(!emptyGroup)
-    {
-        menu->addAction(m_ac->action("open_all"));
-        menu->addSeparator();
-    }
-
-    menu->addAction(m_ac->action("bookmark_page"));
-    menu->addAction(m_ac->action("folder_new"));
-    menu->addAction(m_ac->action("separator_new"));
-
-    menu->addSeparator();
-
-    menu->addAction(m_ac->action("delete"));
-    menu->addAction(m_ac->action("properties"));
-
-    menu->popup(position);
-}
-
-
-void BookmarksPanel::contextMenuSeparator(const QPoint &pos)
-{
-    QPoint position = m_treeView->mapToGlobal(pos);
-    KMenu *menu = new KMenu(this);
-
-    menu->addAction(m_ac->action("bookmark_page"));
-    menu->addAction(m_ac->action("folder_new"));
-    menu->addAction(m_ac->action("separator_new"));
-
-    menu->addSeparator();
-
-    menu->addAction(m_ac->action("delete"));
-
-    menu->popup(position);
-}
-
-
-void BookmarksPanel::contextMenuBlank(const QPoint &pos)
-{
-    QPoint position = m_treeView->mapToGlobal(pos);
-    KMenu *menu = new KMenu(this);
-
-    menu->addAction(m_ac->action("bookmark_page"));
-    menu->addAction(m_ac->action("folder_new"));
-    menu->addAction(m_ac->action("separator_new"));
+    KBookmark selected = bookmarkForIndex(index);
 
-    menu->popup(position);
+    BookmarkContextMenu *menu = new BookmarkContextMenu(selected, Application::bookmarkProvider()->bookmarkManager(), Application::bookmarkProvider()->bookmarkOwner(), this);
+    menu->popup(m_treeView->mapToGlobal(pos));
 }
 
 
@@ -356,128 +216,3 @@ void BookmarksPanel::deleteBookmark()
     bm.parentGroup().deleteBookmark(bm);
     Application::instance()->bookmarkProvider()->bookmarkManager()->emitChanged();
 }
-
-
-void BookmarksPanel::editBookmark()
-{
-    QModelIndex index = m_treeView->currentIndex();
-    if(!index.isValid())
-        return;
-
-    KBookmark selected = bookmarkForIndex(index);
-
-    KBookmarkDialog *dialog = Application::bookmarkProvider()->bookmarkOwner()->bookmarkDialog(Application::bookmarkProvider()->bookmarkManager(), QApplication::activeWindow());
-    dialog->editBookmark(selected);
-    delete dialog;
-}
-
-
-void BookmarksPanel::openFolderInTabs()
-{
-    QModelIndex index = m_treeView->currentIndex();
-    if(!index.isValid() || !bookmarkForIndex(index).isGroup())
-        return;
-
-    QList<KUrl> allChild = bookmarkForIndex(index).toGroup().groupUrlList();
-
-    if(allChild.length() > 8) // 8, a good choice ?
-    {
-        if(!(KMessageBox::warningContinueCancel(this, i18n("You are about to open a lot of tabs : %1\nAre you sure  ?", QString::number(allChild.length()))) == KMessageBox::Continue))
-            return;
-    }
-
-    for(int i = 0; i < allChild.length(); i++)
-        emit openUrl(allChild.at(i).url(), Rekonq::SettingOpenTab);
-}
-
-
-void BookmarksPanel::newBookmarkGroup()
-{
-    QModelIndex index = m_treeView->currentIndex();
-    KBookmark newBk;
-
-    KBookmarkDialog *dialog = Application::bookmarkProvider()->bookmarkOwner()->bookmarkDialog(Application::bookmarkProvider()->bookmarkManager(), QApplication::activeWindow());
-
-    if(index.isValid())
-    {
-        KBookmark selected = bookmarkForIndex(index);
-
-        if(selected.isGroup())
-        {
-            newBk = dialog->createNewFolder("New folder", selected);
-        }
-
-        else
-        {
-            newBk = dialog->createNewFolder("New folder", selected.parentGroup());
-            selected.parentGroup().moveBookmark(newBk, selected);
-            Application::bookmarkProvider()->bookmarkManager()->emitChanged();
-        } 
-    }
-
-    else
-    {
-        dialog->createNewFolder("New folder");
-    }
-
-    delete dialog;
-}
-
-
-void BookmarksPanel::newSeparator()
-{
-    QModelIndex index = m_treeView->currentIndex();
-
-    KBookmark selected;
-    KBookmark newBk;
-
-    if(index.isValid())
-    {
-        selected = bookmarkForIndex(index);
-
-        if(selected.isGroup())
-            newBk = selected.toGroup().createNewSeparator();
-        else
-            newBk = selected.parentGroup().createNewSeparator();
-    }
-
-    else
-    {
-        newBk = Application::bookmarkProvider()->rootGroup().createNewSeparator();
-    }
-
-    KBookmarkGroup parent = newBk.parentGroup();
-    newBk.setIcon(("edit-clear"));
-    parent.addBookmark(newBk);
-
-    if(index.isValid())
-        parent.moveBookmark(newBk, selected);
-
-    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
-}
-
-
-void BookmarksPanel::bookmarkCurrentPage()
-{
-    QModelIndex index = m_treeView->currentIndex();
-    KBookmarkGroup parent = Application::bookmarkProvider()->rootGroup();
-
-    if(index.isValid())
-    {
-        KBookmark selected = bookmarkForIndex(index);
-        parent = selected.parentGroup();
-
-        if(selected.isGroup())
-            parent = selected.toGroup();
-
-        KBookmark newBk = parent.addBookmark(Application::bookmarkProvider()->bookmarkOwner()->currentTitle(), KUrl(Application::bookmarkProvider()->bookmarkOwner()->currentUrl()), "text-html");
-        parent.moveBookmark(newBk, selected.parentGroup().previous(selected));
-    }
-
-    else
-    {
-       parent.addBookmark(Application::bookmarkProvider()->bookmarkOwner()->currentTitle(), KUrl(Application::bookmarkProvider()->bookmarkOwner()->currentUrl()), "text-html");
-    }
-
-    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
-}
diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h
index f8528b71..374c48f4 100644
--- a/src/bookmarks/bookmarkspanel.h
+++ b/src/bookmarks/bookmarkspanel.h
@@ -39,7 +39,6 @@
 
 // KDE Includes
 #include <KBookmark>
-#include <KActionCollection>
 
 // Forward Declarations
 class KUrl;
@@ -60,29 +59,20 @@ signals:
     void saveOnlyRequested();
 
 private slots:
-    void contextMenuBk(const QPoint &pos);
-    void contextMenuBkGroup(const QPoint &pos, const bool emptyGroup = false);
-    void contextMenuBlank(const QPoint &pos);
+    void contextMenu(const QPoint &pos);
+
     void deleteBookmark();
-    void openFolderInTabs();
-    void editBookmark();
-    void newBookmarkGroup();
-    void newSeparator();
     void onCollapse(const QModelIndex &index);
     void onExpand(const QModelIndex &index);
-    void bookmarkCurrentPage();
     void loadFoldedState(const QModelIndex &root);
     void loadFoldedState();
 
 
 private:
     void setup();
-    void setupActions();
-    void contextMenuSeparator(const QPoint &pos);
     KBookmark bookmarkForIndex(const QModelIndex &index);
 
     UrlTreeView *m_treeView;
-    KActionCollection *m_ac;
     bool m_loadingState;
 };
 
-- 
cgit v1.2.1


From c53637d8b4c45b444c5e5d1d74d4a2bc0a34ef97 Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Tue, 6 Apr 2010 16:48:05 +0200
Subject: Add a missing slot

---
 src/bookmarks/bookmarkcontextmenu.cpp | 18 ++++++++++++++++--
 src/bookmarks/bookmarkcontextmenu.h   |  1 +
 src/bookmarks/bookmarksmanager.cpp    |  2 ++
 3 files changed, 19 insertions(+), 2 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkcontextmenu.cpp b/src/bookmarks/bookmarkcontextmenu.cpp
index ccb63143..1d50cfe9 100644
--- a/src/bookmarks/bookmarkcontextmenu.cpp
+++ b/src/bookmarks/bookmarkcontextmenu.cpp
@@ -31,6 +31,9 @@
 #include "application.h"
 #include "bookmarksmanager.h"
 
+// Qt Includes
+#include <QClipboard>
+
 // KDE Includes
 #include <KMessageBox>
 #include <KActionCollection>
@@ -188,6 +191,17 @@ void BookmarkContextMenu::openInNewWindow()
     Application::instance()->loadUrl(bookmark().url(), Rekonq::NewWindow);
 }
 
+
+void BookmarkContextMenu::copyToClipboard()
+{
+    if(bookmark().isNull())
+        return;
+
+    QClipboard *cb = QApplication::clipboard();
+    cb->setText(bookmark().url().url());
+}
+
+
 void BookmarkContextMenu::deleteBookmark()
 {
     KBookmark bm = bookmark();
@@ -228,7 +242,6 @@ void BookmarkContextMenu::openFolderInTabs()
 
 void BookmarkContextMenu::newBookmarkGroup()
 {
-    KBookmark newBk;
     KBookmark selected = bookmark();
     KBookmarkDialog *dialog = owner()->bookmarkDialog(manager(), QApplication::activeWindow());
 
@@ -236,11 +249,12 @@ void BookmarkContextMenu::newBookmarkGroup()
     {
         if(selected.isGroup())
         {
-            newBk = dialog->createNewFolder("New folder", selected);
+            dialog->createNewFolder("New folder", selected);
         }
 
         else
         {
+            KBookmark newBk;
             newBk = dialog->createNewFolder("New folder", selected.parentGroup());
             selected.parentGroup().moveBookmark(newBk, selected);
             manager()->emitChanged();
diff --git a/src/bookmarks/bookmarkcontextmenu.h b/src/bookmarks/bookmarkcontextmenu.h
index 38fbc71a..7f00738a 100644
--- a/src/bookmarks/bookmarkcontextmenu.h
+++ b/src/bookmarks/bookmarkcontextmenu.h
@@ -45,6 +45,7 @@ private slots:
     void openInCurrentTab();
     void openInNewTab();
     void openInNewWindow();
+    void copyToClipboard();
     void deleteBookmark();
     void openFolderInTabs();
     void editBookmark();
diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 8cdc5d8e..07b0238f 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -218,11 +218,13 @@ void BookmarkProvider::setupBookmarkBar(KToolBar *toolbar)
     slotBookmarksChanged("", "");
 }
 
+
 void BookmarkProvider::removeToolBar(KToolBar *toolbar)
 {
     m_bookmarkToolBars.removeOne(toolbar);
 }
 
+
 void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString &caller)
 {
     Q_UNUSED(group)
-- 
cgit v1.2.1


From c51282fb7d0092c6a5587e33b1bdfb609290edf1 Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Wed, 7 Apr 2010 02:10:20 +0200
Subject: Some stupid not so important fixes

---
 src/bookmarks/bookmarkcontextmenu.cpp | 7 ++++---
 src/bookmarks/bookmarkcontextmenu.h   | 2 ++
 2 files changed, 6 insertions(+), 3 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkcontextmenu.cpp b/src/bookmarks/bookmarkcontextmenu.cpp
index 1d50cfe9..dedec097 100644
--- a/src/bookmarks/bookmarkcontextmenu.cpp
+++ b/src/bookmarks/bookmarkcontextmenu.cpp
@@ -31,14 +31,14 @@
 #include "application.h"
 #include "bookmarksmanager.h"
 
-// Qt Includes
-#include <QClipboard>
-
 // KDE Includes
 #include <KMessageBox>
 #include <KActionCollection>
 #include <KBookmarkDialog>
 
+// Qt Includes
+#include <QClipboard>
+
 
 BookmarkContextMenu::BookmarkContextMenu(const KBookmark & bookmark, KBookmarkManager *manager, KBookmarkOwner *owner, QWidget *parent)
     : KBookmarkContextMenu(bookmark, manager, owner, parent)
@@ -321,3 +321,4 @@ void BookmarkContextMenu::bookmarkCurrentPage()
 
     manager()->emitChanged();
 }
+
diff --git a/src/bookmarks/bookmarkcontextmenu.h b/src/bookmarks/bookmarkcontextmenu.h
index 7f00738a..2028df39 100644
--- a/src/bookmarks/bookmarkcontextmenu.h
+++ b/src/bookmarks/bookmarkcontextmenu.h
@@ -37,6 +37,7 @@
 class BookmarkContextMenu : public KBookmarkContextMenu
 {
     Q_OBJECT
+
 public:
     BookmarkContextMenu(const KBookmark & bk, KBookmarkManager * manager, KBookmarkOwner *owner, QWidget * parent = 0);
     virtual void addActions();
@@ -62,3 +63,4 @@ private:
 };
 
 #endif // BOOKMARKCONTEXTMENU_H
+
-- 
cgit v1.2.1


From c5fb79456e9bc46094bddbc5c3375e7d3b4e0a80 Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Wed, 7 Apr 2010 03:03:05 +0200
Subject: Add Copyright

---
 src/bookmarks/bookmarksmanager.cpp | 1 +
 src/bookmarks/bookmarksmanager.h   | 1 +
 src/bookmarks/bookmarkspanel.cpp   | 1 +
 src/bookmarks/bookmarkspanel.h     | 1 +
 4 files changed, 4 insertions(+)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 07b0238f..31bf2278 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -5,6 +5,7 @@
 * Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com>
 * Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
 * Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr>
+* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com>
 *
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index 3c21bc67..c8264633 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -5,6 +5,7 @@
 * Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com>
 * Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
 * Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr>
+* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com>
 *
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index 6360b313..611031b5 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -4,6 +4,7 @@
 *
 * Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com>
 * Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
+* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h
index 374c48f4..86794d3a 100644
--- a/src/bookmarks/bookmarkspanel.h
+++ b/src/bookmarks/bookmarkspanel.h
@@ -4,6 +4,7 @@
 *
 * Copyright (C) 2009 by Nils Weigel <nehlsen at gmail dot com>
 * Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com>
+* Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com>
 *
 *
 * This program is free software; you can redistribute it and/or
-- 
cgit v1.2.1


From 6a5f7762fa7e2876d63c4adb9a1842acef0c7333 Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Wed, 14 Apr 2010 10:39:36 +0200
Subject: Stupid commit :) Renamed urltreeview files to paneltreeviews one to
 let my konsole tab completion easily work. Blame me for this..

---
 src/bookmarks/bookmarkspanel.cpp | 6 +++---
 src/bookmarks/bookmarkspanel.h   | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp
index 611031b5..0caf0f31 100644
--- a/src/bookmarks/bookmarkspanel.cpp
+++ b/src/bookmarks/bookmarkspanel.cpp
@@ -51,9 +51,9 @@
 
 
 BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags)
-    : QDockWidget(title, parent, flags),
-    m_treeView(new UrlTreeView(this)),
-    m_loadingState(false)
+    : QDockWidget(title, parent, flags)
+    , m_treeView(new PanelTreeView(this))
+    , m_loadingState(false)
 {
     setup();
     setShown(ReKonfig::showBookmarksPanel());
diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h
index 86794d3a..90597c73 100644
--- a/src/bookmarks/bookmarkspanel.h
+++ b/src/bookmarks/bookmarkspanel.h
@@ -33,7 +33,7 @@
 // Local Includes
 #include "rekonqprivate_export.h"
 #include "application.h"
-#include "urltreeview.h"
+#include "paneltreeview.h"
 
 // Qt Includes
 #include <QDockWidget>
@@ -73,7 +73,7 @@ private:
     void setup();
     KBookmark bookmarkForIndex(const QModelIndex &index);
 
-    UrlTreeView *m_treeView;
+    PanelTreeView *m_treeView;
     bool m_loadingState;
 };
 
-- 
cgit v1.2.1


From e8e18f0b164c78c2ea410cad0e1e1033b1b24ab2 Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Wed, 14 Apr 2010 11:36:47 +0200
Subject: Set default background to white

BUG:232552
---
 src/bookmarks/bookmarksmanager.cpp | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 31bf2278..d54abb3c 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -55,8 +55,8 @@
 
 
 BookmarkOwner::BookmarkOwner(QObject *parent)
-        : QObject(parent)
-        , KBookmarkOwner()
+    : QObject(parent)
+    , KBookmarkOwner()
 {
 }
 
@@ -119,11 +119,10 @@ BookmarkMenu::BookmarkMenu(KBookmarkManager *manager,
                            KBookmarkOwner *owner,
                            KMenu *menu,
                            KActionCollection* actionCollection)
-        : KBookmarkMenu(manager, owner, menu, actionCollection)
+    : KBookmarkMenu(manager, owner, menu, actionCollection)
 
 {
     KAction *a = KStandardAction::addBookmark(this, SLOT(slotAddBookmark()), this);
-//     a->setText(i18n("Bookmark this Page"));
     actionCollection->addAction(QLatin1String("rekonq_add_bookmark"),a);
 }
 
-- 
cgit v1.2.1


From a219ae2f7306d2d513eccf988ad9d2fd679c934c Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Wed, 14 Apr 2010 11:58:50 +0200
Subject: Don't create "Open Folder in Tabs" action when there are only folders
 or separators Implement a missing method : currentBookmarkList() which now
 allow "Bookmarks Tabs as Folder BUG: 234234

---
 src/bookmarks/bookmarksmanager.cpp | 34 ++++++++++++++++++++++++++++++----
 src/bookmarks/bookmarksmanager.h   |  2 ++
 2 files changed, 32 insertions(+), 4 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index d54abb3c..7e933599 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -35,6 +35,7 @@
 #include "mainwindow.h"
 #include "webtab.h"
 #include "webview.h"
+#include "mainview.h"
 #include "bookmarkcontextmenu.h"
 
 // KDE Includes
@@ -53,7 +54,6 @@
 #include <QtGui/QActionGroup>
 
 
-
 BookmarkOwner::BookmarkOwner(QObject *parent)
     : QObject(parent)
     , KBookmarkOwner()
@@ -112,6 +112,22 @@ void BookmarkOwner::openFolderinTabs(const KBookmarkGroup &bm)
 }
 
 
+QList< QPair<QString, QString> > BookmarkOwner::currentBookmarkList() const
+{
+    QList< QPair<QString, QString> > bkList;
+    int tabNumber = Application::instance()->mainWindow()->mainView()->count();
+
+    for(int i = 0; i < tabNumber; i++)
+    {
+        QPair<QString, QString> item;
+        item.first = Application::instance()->mainWindow()->mainView()->webTab(i)->view()->title();
+        item.second = Application::instance()->mainWindow()->mainView()->webTab(i)->url().url();
+        bkList += item;
+    }
+    return bkList;
+}
+
+
 // ------------------------------------------------------------------------------------------------------
 
 
@@ -405,9 +421,19 @@ void BookmarkActionMenu::addFolderActions()
 
     if(!m_group.first().isNull())
     {
-        action = new KAction(KIcon("tab-new"), i18n("Open Folder in Tabs"), this);
-        connect(action, SIGNAL(triggered(bool)), this, SLOT(openActionInTabs()));
-        addAction(action);
+        KBookmark bookmark = m_group.first();
+
+        while(bookmark.isGroup() || bookmark.isSeparator())
+        {
+            bookmark = m_group.next(bookmark);
+        }
+
+        if(!bookmark.isNull())
+        {
+            action = new KAction(KIcon("tab-new"), i18n("Open Folder in Tabs"), this);
+            connect(action, SIGNAL(triggered(bool)), this, SLOT(openActionInTabs()));
+            addAction(action);
+        }
     }
 
     action = new KAction(KIcon("bookmark-new"), i18n("Add Bookmark Here"), this);
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index c8264633..7fb02970 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -115,6 +115,8 @@ public:
     */
     virtual void openFolderinTabs(const KBookmarkGroup &bm);
 
+    virtual QList< QPair<QString, QString> > currentBookmarkList() const;
+
 signals:
     /**
      * This signal is emitted when an url has to be loaded
-- 
cgit v1.2.1


From fa2287de034db6ce80dd1d966bde4844350f9e87 Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Wed, 14 Apr 2010 16:19:35 +0200
Subject: moc fixes

---
 src/bookmarks/bookmarkcontextmenu.cpp | 1 +
 src/bookmarks/bookmarkcontextmenu.h   | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkcontextmenu.cpp b/src/bookmarks/bookmarkcontextmenu.cpp
index dedec097..aab6af90 100644
--- a/src/bookmarks/bookmarkcontextmenu.cpp
+++ b/src/bookmarks/bookmarkcontextmenu.cpp
@@ -26,6 +26,7 @@
 
 // Self Includes
 #include "bookmarkcontextmenu.h"
+#include "bookmarkcontextmenu.moc"
 
 // Local Includes
 #include "application.h"
diff --git a/src/bookmarks/bookmarkcontextmenu.h b/src/bookmarks/bookmarkcontextmenu.h
index 2028df39..c8c903d8 100644
--- a/src/bookmarks/bookmarkcontextmenu.h
+++ b/src/bookmarks/bookmarkcontextmenu.h
@@ -63,4 +63,3 @@ private:
 };
 
 #endif // BOOKMARKCONTEXTMENU_H
-
-- 
cgit v1.2.1


From ad1b58215550c99f708a1ef03b5f8f38c179348b Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Sat, 17 Apr 2010 16:03:25 +0200
Subject: - Enable context menu for actions inside bookmark bar folder -
 Reverse bookmarks and bookmark managing option on the bookmarkActionMenu (as
 we discussed with Lionel) - Common actionMenu between bookmark bars and the
 bookmarkActionMenu - Use BookmarkContextMenu instead of KBookmarkContextMenu
 in the bookmarkActionMenu

---
 src/bookmarks/bookmarksmanager.cpp   | 182 ++++++++++++++++++++---------------
 src/bookmarks/bookmarksmanager.h     |  36 +++----
 src/bookmarks/bookmarkstreemodel.cpp |   5 +
 3 files changed, 119 insertions(+), 104 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 7e933599..e7b24a09 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -94,9 +94,9 @@ QString BookmarkOwner::currentTitle() const
 }
 
 
-void BookmarkOwner::openFolderinTabs(const KBookmarkGroup &bm)
+void BookmarkOwner::openFolderinTabs(const KBookmarkGroup &bookmark)
 {
-    QList<KUrl> urlList = bm.groupUrlList();
+    QList<KUrl> urlList = bookmark.groupUrlList();
 
     if(urlList.length() > 8)
     {
@@ -107,7 +107,7 @@ void BookmarkOwner::openFolderinTabs(const KBookmarkGroup &bm)
     QList<KUrl>::iterator url;
     for (url = urlList.begin(); url != urlList.end(); ++url)
     {
-        Application::instance()->loadUrl(*url, Rekonq::NewCurrentTab);
+        emit openUrl(*url, Rekonq::NewCurrentTab);
     }
 }
 
@@ -136,23 +136,35 @@ BookmarkMenu::BookmarkMenu(KBookmarkManager *manager,
                            KMenu *menu,
                            KActionCollection* actionCollection)
     : KBookmarkMenu(manager, owner, menu, actionCollection)
-
 {
     KAction *a = KStandardAction::addBookmark(this, SLOT(slotAddBookmark()), this);
     actionCollection->addAction(QLatin1String("rekonq_add_bookmark"),a);
+    refill();
+}
+
+
+BookmarkMenu::BookmarkMenu(KBookmarkManager  *manager,
+                           KBookmarkOwner  *owner,
+                           KMenu  *parentMenu,
+                           const QString &parentAddress)
+    : KBookmarkMenu(manager, owner, parentMenu, parentAddress)
+{
+    refill();
 }
 
+
 BookmarkMenu::~BookmarkMenu()
 {
 }
 
 
-KMenu *BookmarkMenu::viewContextMenu(QAction *action)
+KMenu * BookmarkMenu::contextMenu(QAction *act)
 {
-    KBookmarkActionInterface* act = dynamic_cast<KBookmarkActionInterface *>(action);
-     if (!act)
+
+    KBookmarkActionInterface* action = dynamic_cast<KBookmarkActionInterface *>(act);
+     if (!action)
          return 0;
-     return new BookmarkContextMenu(act->bookmark(), manager(), owner());
+     return new BookmarkContextMenu(action->bookmark(), manager(), owner());
 }
 
 
@@ -172,6 +184,76 @@ void BookmarkMenu::slotAddBookmark()
 }
 
 
+QAction * BookmarkMenu::actionForBookmark(const KBookmark &bookmark)
+{
+    if(bookmark.isGroup())
+    {
+        KBookmarkActionMenu *actionMenu = new KBookmarkActionMenu(bookmark, this);
+        new BookmarkMenu(manager(), owner(), actionMenu->menu(), bookmark.address());
+        return actionMenu;
+    }
+    else if(bookmark.isSeparator())
+    {
+        return KBookmarkMenu::actionForBookmark(bookmark);
+    }
+    else
+    {
+        Application::bookmarkProvider()->completionObject()->addItem(bookmark.url().url());
+        return  new KBookmarkAction( bookmark, owner(), this );
+    }
+}
+
+
+void BookmarkMenu::refill()
+{
+    fillBookmarks();
+
+    if(parentMenu()->actions().count() > 0)
+        parentMenu()->addSeparator();
+
+    if(isRoot())
+    {
+        addAddBookmark();
+        addAddBookmarksList();
+        addNewFolder();
+        addEditBookmarks();
+
+    }
+    else
+    {
+        addOpenFolderInTabs();
+        addAddBookmark();
+        addAddBookmarksList();
+        addNewFolder();
+    }
+}
+
+
+void BookmarkMenu::addOpenFolderInTabs()
+{
+    KAction *action;
+    KBookmarkGroup group = manager()->findByAddress(parentAddress()).toGroup();
+
+    if(!group.first().isNull())
+    {
+        KBookmark bookmark = group.first();
+
+        while(bookmark.isGroup() || bookmark.isSeparator())
+        {
+            bookmark = group.next(bookmark);
+        }
+
+        if(!bookmark.isNull())
+        {
+            action = new KAction(KIcon("tab-new"), i18n("Open Folder in Tabs"), this);
+            action->setHelpText( i18n( "Open all bookmarks in this folder as a new tab." ) );
+            connect(action, SIGNAL(triggered(bool)), this, SLOT(slotOpenFolderInTabs()));
+            parentMenu()->addAction(action);
+        }
+    }
+}
+
+
 // ------------------------------------------------------------------------------------------------------
 
 
@@ -203,7 +285,7 @@ BookmarkProvider::BookmarkProvider(QObject *parent)
             bookfile = KUrl(bookmarksPath);
         }
     }
-    // A workaround to avoid a long delay between the two changed signals of the bookmark manager
+
     m_manager = KBookmarkManager::managerForFile(bookfile.path(), "rekonq");
     
     connect(m_manager, SIGNAL(changed(const QString &, const QString &)),
@@ -227,8 +309,9 @@ BookmarkProvider::~BookmarkProvider()
 void BookmarkProvider::setupBookmarkBar(KToolBar *toolbar)
 {
     KToolBar *bookmarkToolBar = toolbar;
-    m_bookmarkToolBars.append(toolbar);
-    connect(bookmarkToolBar, SIGNAL(customContextMenuRequested(const QPoint &)),
+    m_bookmarkToolBars.append(bookmarkToolBar);
+    bookmarkToolBar->setContextMenuPolicy(Qt::CustomContextMenu);
+    connect(bookmarkToolbar, SIGNAL(customContextMenuRequested(const QPoint &)),
             this, SLOT(contextMenu(const QPoint &)));
 
     slotBookmarksChanged("", "");
@@ -246,6 +329,8 @@ void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString
     Q_UNUSED(group)
     Q_UNUSED(caller)
 
+    m_completion->clear();
+
     foreach(KToolBar *bookmarkToolBar, m_bookmarkToolBars)
     {
         if (bookmarkToolBar)
@@ -255,7 +340,6 @@ void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString
                 return;
 
             bookmarkToolBar->clear();
-            m_completion->clear();
 
             KBookmark bookmark = toolBarGroup.first();
             while (!bookmark.isNull())
@@ -286,11 +370,11 @@ void BookmarkProvider::contextMenu(const QPoint &point)
     if(!bookmarkToolBar)
         return;
 
-    KAction* action = dynamic_cast<KAction*>(bookmarkToolBar->actionAt(point));
+    KBookmarkActionInterface* action = dynamic_cast<KBookmarkActionInterface *>(bookmarkToolBar->actionAt(point));
     if (!action)
         return;
 
-    KMenu *menu = m_bookmarkMenu->viewContextMenu(action);
+    KMenu *menu = new BookmarkContextMenu(action->bookmark(), bookmarkManager(), bookmarkOwner());
     if (!menu)
         return;
 
@@ -313,17 +397,10 @@ KAction *BookmarkProvider::fillBookmarkBar(const KBookmark &bookmark)
 {
     if (bookmark.isGroup())
     {
-        KBookmarkGroup group = bookmark.toGroup();
-        KBookmark bm = group.first();
-        BookmarkActionMenu *menuAction = new BookmarkActionMenu(group, this);
-
-        while (!bm.isNull())
-        {
-            menuAction->addAction(fillBookmarkBar(bm));
-            bm = group.next(bm);
-        }
+        KBookmarkActionMenu *menuAction = new KBookmarkActionMenu(bookmark.toGroup(), this);
+        menuAction->setDelayed(false);
+        new BookmarkMenu(bookmarkManager(), bookmarkOwner(), menuAction->menu(), bookmark.address());
 
-        menuAction->addFolderActions();
         return menuAction;
     }
  
@@ -336,8 +413,7 @@ KAction *BookmarkProvider::fillBookmarkBar(const KBookmark &bookmark)
         return a;
     }
     else
-    {        
-        m_completion->addItem(bookmark.url().url());
+    {
         return new KBookmarkAction(bookmark, m_owner, this);
     }
 }
@@ -400,57 +476,3 @@ QString BookmarkProvider::titleForBookmarkUrl(const KBookmark &bookmark, QString
     
     return title;
 }
-
-
-// ----------------------------------------------------------------------------------------------
-
-
-BookmarkActionMenu::BookmarkActionMenu(const KBookmarkGroup &bm, QObject *parent)
-    : KBookmarkActionMenu(bm, bm.text(), parent)
-    , m_group(bm)
-{
-    setIcon(KIcon(bm.icon()));
-    setDelayed(false);
-}
-
-
-void BookmarkActionMenu::addFolderActions()
-{
-    addSeparator();
-    KAction *action;
-
-    if(!m_group.first().isNull())
-    {
-        KBookmark bookmark = m_group.first();
-
-        while(bookmark.isGroup() || bookmark.isSeparator())
-        {
-            bookmark = m_group.next(bookmark);
-        }
-
-        if(!bookmark.isNull())
-        {
-            action = new KAction(KIcon("tab-new"), i18n("Open Folder in Tabs"), this);
-            connect(action, SIGNAL(triggered(bool)), this, SLOT(openActionInTabs()));
-            addAction(action);
-        }
-    }
-
-    action = new KAction(KIcon("bookmark-new"), i18n("Add Bookmark Here"), this);
-    connect(action, SIGNAL(triggered(bool)), this, SLOT(bookmarkCurrentPage()));
-    addAction(action);
-}
-
-
-void BookmarkActionMenu::bookmarkCurrentPage()
-{
-    m_group.addBookmark(Application::bookmarkProvider()->bookmarkOwner()->currentTitle(), KUrl(Application::bookmarkProvider()->bookmarkOwner()->currentUrl()));
-    Application::bookmarkProvider()->bookmarkManager()->emitChanged();
-}
-
-
-void BookmarkActionMenu::openActionInTabs()
-{
-    if(!m_group.isNull())
-        Application::bookmarkProvider()->bookmarkOwner()->openFolderinTabs(m_group);
-}
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index 7fb02970..8d09e122 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -113,7 +113,7 @@ public:
     * The default implementation does nothing.
     * This is only called if supportsTabs() returns true
     */
-    virtual void openFolderinTabs(const KBookmarkGroup &bm);
+    virtual void openFolderinTabs(const KBookmarkGroup &bookmark);
 
     virtual QList< QPair<QString, QString> > currentBookmarkList() const;
 
@@ -133,7 +133,6 @@ signals:
 // KDE Includes
 #include <KBookmarkMenu>
 
-
 /**
  * This class represent the rekonq bookmarks menu.
  * It's just a simple class inherited from KBookmarkMenu
@@ -148,13 +147,23 @@ public:
                  KBookmarkOwner* owner,
                  KMenu* menu,
                  KActionCollection* actionCollection);
+    BookmarkMenu(KBookmarkManager  *manager,
+                 KBookmarkOwner  *owner,
+                 KMenu  *parentMenu,
+                 const QString &parentAddress);
     ~BookmarkMenu();
 
-    virtual KMenu *viewContextMenu(QAction* action);
+protected:
+    virtual KMenu * contextMenu(QAction * act);
+    virtual void refill();
+    virtual QAction* actionForBookmark(const KBookmark &bookmark);
 
 protected slots:
     void slotAddBookmark();
 
+private:
+    void addOpenFolderInTabs();
+
 };
 
 
@@ -265,25 +274,4 @@ private:
 };
 
 
-// ------------------------------------------------------------------------------------------
-
-
-class BookmarkActionMenu : public KBookmarkActionMenu
-{
-    Q_OBJECT
-
-public:
-    BookmarkActionMenu (const KBookmarkGroup &bm, QObject *parent);
-    void addFolderActions();
-
-private slots:
-    void openActionInTabs();
-    void bookmarkCurrentPage();
-
-private:
-    KBookmarkGroup m_group;
-
-};
-
-
 #endif
diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp
index 836401a6..e731940c 100644
--- a/src/bookmarks/bookmarkstreemodel.cpp
+++ b/src/bookmarks/bookmarkstreemodel.cpp
@@ -323,6 +323,11 @@ void BookmarksTreeModel::populate( BtmItem *node, KBookmarkGroup bmg)
         BtmItem *newChild = new BtmItem( bm );
         if( bm.isGroup() )
             populate( newChild, bm.toGroup() );
+        else
+        {
+            Application::bookmarkProvider()->completionObject()->addItem(bm.url().url());
+            //QMessageBox::information(new QWidget(), "", bm.url().url());
+        }
 
         node->appendChild( newChild );
         bm = bmg.next( bm );
-- 
cgit v1.2.1


From bac4a843a3e11fe2a7af52cb4fab189761515e7c Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Sat, 17 Apr 2010 16:18:39 +0200
Subject: Forget to save file

---
 src/bookmarks/bookmarkstreemodel.cpp | 5 -----
 1 file changed, 5 deletions(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp
index e731940c..836401a6 100644
--- a/src/bookmarks/bookmarkstreemodel.cpp
+++ b/src/bookmarks/bookmarkstreemodel.cpp
@@ -323,11 +323,6 @@ void BookmarksTreeModel::populate( BtmItem *node, KBookmarkGroup bmg)
         BtmItem *newChild = new BtmItem( bm );
         if( bm.isGroup() )
             populate( newChild, bm.toGroup() );
-        else
-        {
-            Application::bookmarkProvider()->completionObject()->addItem(bm.url().url());
-            //QMessageBox::information(new QWidget(), "", bm.url().url());
-        }
 
         node->appendChild( newChild );
         bm = bmg.next( bm );
-- 
cgit v1.2.1


From 7fe3643b5401e73d2e27e552fb64222fe44dc643 Mon Sep 17 00:00:00 2001
From: Yoann Laissus <yoann.laissus@gmail.com>
Date: Sat, 17 Apr 2010 17:55:04 +0200
Subject: Fix compile

---
 src/bookmarks/bookmarksmanager.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src/bookmarks')

diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index e7b24a09..df6bc54b 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -311,7 +311,7 @@ void BookmarkProvider::setupBookmarkBar(KToolBar *toolbar)
     KToolBar *bookmarkToolBar = toolbar;
     m_bookmarkToolBars.append(bookmarkToolBar);
     bookmarkToolBar->setContextMenuPolicy(Qt::CustomContextMenu);
-    connect(bookmarkToolbar, SIGNAL(customContextMenuRequested(const QPoint &)),
+    connect(bookmarkToolBar, SIGNAL(customContextMenuRequested(const QPoint &)),
             this, SLOT(contextMenu(const QPoint &)));
 
     slotBookmarksChanged("", "");
-- 
cgit v1.2.1