summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bookmarks/bookmarksmanager.cpp141
-rw-r--r--src/bookmarks/bookmarksmanager.h47
-rw-r--r--src/mainwindow.cpp18
-rw-r--r--src/mainwindow.h7
-rw-r--r--src/rekonqui.rc5
5 files changed, 163 insertions, 55 deletions
diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp
index 7f07cf48..ca85be23 100644
--- a/src/bookmarks/bookmarksmanager.cpp
+++ b/src/bookmarks/bookmarksmanager.cpp
@@ -142,7 +142,6 @@ BookmarkMenu::BookmarkMenu(KBookmarkManager *manager,
KActionCollection* actionCollection)
: KBookmarkMenu(manager, owner, menu, actionCollection)
{
- refill();
}
@@ -152,7 +151,6 @@ BookmarkMenu::BookmarkMenu(KBookmarkManager *manager,
const QString &parentAddress)
: KBookmarkMenu(manager, owner, parentMenu, parentAddress)
{
- refill();
}
@@ -176,7 +174,8 @@ QAction * BookmarkMenu::actionForBookmark(const KBookmark &bookmark)
if (bookmark.isGroup())
{
KBookmarkActionMenu *actionMenu = new KBookmarkActionMenu(bookmark, this);
- new BookmarkMenu(manager(), owner(), actionMenu->menu(), bookmark.address());
+ BookmarkMenu *menu = new BookmarkMenu(manager(), owner(), actionMenu->menu(), bookmark.address());
+ connect(actionMenu, SIGNAL(hovered()), menu, SLOT(slotAboutToShow()));
return actionMenu;
}
else if (bookmark.isSeparator())
@@ -185,7 +184,9 @@ QAction * BookmarkMenu::actionForBookmark(const KBookmark &bookmark)
}
else
{
- return new KBookmarkAction(bookmark, owner(), this);
+ KBookmarkAction *action = new KBookmarkAction(bookmark, owner(), this);
+ connect(action, SIGNAL(hovered()), this, SLOT(actionHovered()));
+ return action;
}
}
@@ -240,9 +241,89 @@ void BookmarkMenu::addOpenFolderInTabs()
}
+void BookmarkMenu::actionHovered()
+{
+ KBookmarkActionInterface* action = dynamic_cast<KBookmarkActionInterface *>(sender());
+ if (action)
+ Application::instance()->mainWindow()->notifyMessage(action->bookmark().url().url());
+}
+
+
// ------------------------------------------------------------------------------------------------------
+BookmarkToolBar::BookmarkToolBar( const QString &objectName,
+ QMainWindow *parentWindow,
+ Qt::ToolBarArea area,
+ bool newLine,
+ bool isMainToolBar,
+ bool readConfig
+ )
+ : KToolBar(objectName, parentWindow, area, newLine, isMainToolBar, readConfig)
+ , m_filled(false)
+ , m_currentMenu(0)
+{
+}
+
+
+BookmarkToolBar::~BookmarkToolBar()
+{
+}
+
+
+void BookmarkToolBar::setVisible(bool visible)
+{
+ if (visible && !m_filled)
+ {
+ m_filled = true;
+ Application::bookmarkProvider()->fillBookmarkBar(this);
+ }
+ KToolBar::setVisible(visible);
+}
+
+
+void BookmarkToolBar::menuDisplayed()
+{
+ qApp->installEventFilter(this);
+ m_currentMenu = qobject_cast<KMenu*>(sender());
+}
+
+
+void BookmarkToolBar::menuHidden()
+{
+ qApp->removeEventFilter(this);
+ m_currentMenu = 0;
+}
+
+
+bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
+{
+ // To switch root folders as in a menubar
+ if (event->type() == QEvent::MouseMove && m_currentMenu)
+ {
+ KBookmarkActionMenu* act = dynamic_cast<KBookmarkActionMenu *>(this->actionAt(this->mapFromGlobal(QCursor::pos())));
+ if (act && act->menu() != m_currentMenu)
+ {
+ m_currentMenu->hide();
+ QPoint pos = mapToGlobal(widgetForAction(act)->pos());
+ act->menu()->popup(QPoint(pos.x(), pos.y() + widgetForAction(act)->height()));
+ }
+ }
+ return KToolBar::eventFilter(watched, event);
+}
+
+
+void BookmarkToolBar::actionHovered()
+{
+ KBookmarkActionInterface* action = dynamic_cast<KBookmarkActionInterface *>(sender());
+ if (action)
+ Application::instance()->mainWindow()->notifyMessage(action->bookmark().url().url());
+}
+
+// ------------------------------------------------------------------------------------------------------
+
+
+
BookmarkProvider::BookmarkProvider(QObject *parent)
: QObject(parent)
, m_manager(0)
@@ -293,19 +374,20 @@ BookmarkProvider::~BookmarkProvider()
}
-void BookmarkProvider::setupBookmarkBar(KToolBar *toolbar)
+void BookmarkProvider::setupBookmarkBar(BookmarkToolBar *toolbar)
{
- KToolBar *bookmarkToolBar = toolbar;
- m_bookmarkToolBars.append(bookmarkToolBar);
- bookmarkToolBar->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(bookmarkToolBar, SIGNAL(customContextMenuRequested(const QPoint &)),
- this, SLOT(contextMenu(const QPoint &)));
-
+ kDebug() << "new bookmark bar...";
+
+ m_bookmarkToolBars.append(toolbar);
+ toolbar->setContextMenuPolicy(Qt::CustomContextMenu);
+ connect(toolbar, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &)));
+
slotBookmarksChanged("", "");
+ kDebug() << "new bookmark bar... DONE!";
}
-void BookmarkProvider::removeToolBar(KToolBar *toolbar)
+void BookmarkProvider::removeToolBar(BookmarkToolBar *toolbar)
{
m_bookmarkToolBars.removeOne(toolbar);
}
@@ -316,7 +398,7 @@ void BookmarkProvider::slotBookmarksChanged(const QString &group, const QString
Q_UNUSED(group)
Q_UNUSED(caller)
- foreach(KToolBar *bookmarkToolBar, m_bookmarkToolBars)
+ foreach(BookmarkToolBar *bookmarkToolBar, m_bookmarkToolBars)
{
if (bookmarkToolBar)
{
@@ -356,12 +438,15 @@ void BookmarkProvider::contextMenu(const QPoint &point)
KActionMenu* BookmarkProvider::bookmarkActionMenu(QWidget *parent)
{
+ kDebug() << "new Bookmarks Menu...";
+
KMenu *menu = new KMenu(parent);
_bookmarkActionMenu = new KActionMenu(parent);
_bookmarkActionMenu->setMenu(menu);
_bookmarkActionMenu->setText(i18n("&Bookmarks"));
- connect(menu, SIGNAL(aboutToShow()), this, SLOT(triggerBookmarkMenu()));
-
+ new BookmarkMenu(m_manager, m_owner, menu, m_actionCollection);
+
+ kDebug() << "new Bookmarks Menu...DONE";
return _bookmarkActionMenu;
}
@@ -376,21 +461,7 @@ KAction* BookmarkProvider::bookmarkToolBarAction(KToolBar *t)
}
-void BookmarkProvider::triggerBookmarkMenu()
-{
- kDebug() << "triggering Bookmarks Menu...";
- KMenu *menu = qobject_cast<KMenu *>(sender());
-
- if(menu->actions().count() == 0)
- {
- kDebug() << "new Bookmarks Menu...";
- new BookmarkMenu(m_manager, m_owner, menu, m_actionCollection);
- kDebug() << "new Bookmarks Menu...DONE";
- }
-}
-
-
-void BookmarkProvider::fillBookmarkBar(KToolBar *toolBar)
+void BookmarkProvider::fillBookmarkBar(BookmarkToolBar *toolBar)
{
KBookmarkGroup root = m_manager->toolbar();
if (root.isNull())
@@ -403,7 +474,8 @@ void BookmarkProvider::fillBookmarkBar(KToolBar *toolBar)
KBookmarkActionMenu *menuAction = new KBookmarkActionMenu(bookmark.toGroup(), this);
menuAction->setDelayed(false);
new BookmarkMenu(bookmarkManager(), bookmarkOwner(), menuAction->menu(), bookmark.address());
-
+ connect(menuAction->menu(), SIGNAL(aboutToShow()), toolBar, SLOT(menuDisplayed()));
+ connect(menuAction->menu(), SIGNAL(aboutToHide()), toolBar, SLOT(menuHidden()));
toolBar->addAction(menuAction);
}
@@ -414,9 +486,10 @@ void BookmarkProvider::fillBookmarkBar(KToolBar *toolBar)
else
{
- KBookmarkAction* a = new KBookmarkAction(bookmark, m_owner, this);
- a->setIconText(a->iconText().replace('&', "&&"));
- toolBar->addAction(a);
+ KBookmarkAction* action = new KBookmarkAction(bookmark, m_owner, this);
+ action->setIconText(action->iconText().replace('&', "&&"));
+ connect(action, SIGNAL(hovered()), toolBar, SLOT(actionHovered()));
+ toolBar->addAction(action);
}
}
}
diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h
index fd2cfcdc..6bf796c0 100644
--- a/src/bookmarks/bookmarksmanager.h
+++ b/src/bookmarks/bookmarksmanager.h
@@ -161,6 +161,9 @@ protected:
virtual void refill();
virtual QAction* actionForBookmark(const KBookmark &bookmark);
+private slots:
+ void actionHovered();
+
private:
void addOpenFolderInTabs();
@@ -169,7 +172,40 @@ private:
// ------------------------------------------------------------------------------
+#include <KToolBar>
+
+class BookmarkToolBar : public KToolBar
+{
+ Q_OBJECT
+
+public:
+BookmarkToolBar(const QString &objectName,
+ QMainWindow *parentWindow,
+ Qt::ToolBarArea area,
+ bool newLine = false,
+ bool isMainToolBar = false,
+ bool readConfig = true);
+~BookmarkToolBar();
+
+virtual void setVisible(bool visible);
+
+protected:
+ bool eventFilter(QObject *watched, QEvent *event);
+private slots:
+ void actionHovered();
+ void menuDisplayed();
+ void menuHidden();
+
+private:
+ bool m_filled;
+ KMenu *m_currentMenu;
+};
+
+
+// ------------------------------------------------------------------------------
+
+
/**
* This class represent the interface to rekonq bookmarks system.
* All rekonq needs (Bookmarks Menu, Bookmarks Toolbar) is provided
@@ -205,9 +241,9 @@ public:
/**
* @short set the Bookmarks Toolbar Action
*/
- void setupBookmarkBar(KToolBar *);
+ void setupBookmarkBar(BookmarkToolBar *);
- void removeToolBar(KToolBar*);
+ void removeToolBar(BookmarkToolBar *);
/**
* @short Get action by name
@@ -259,20 +295,19 @@ public slots:
* @see KBookmarkManager::changed
*/
void slotBookmarksChanged(const QString &group, const QString &caller);
-
+ void fillBookmarkBar(BookmarkToolBar *toolBar);
+
private slots:
- void triggerBookmarkMenu();
void slotAddBookmark();
void slotPanelChanged();
private:
- void fillBookmarkBar(KToolBar *toolBar);
QList<KBookmark> find(QList<KBookmark> list, const KBookmark &bookmark, QString text);
KBookmarkManager *m_manager;
BookmarkOwner *m_owner;
KActionCollection *m_actionCollection;
- QList<KToolBar*> m_bookmarkToolBars;
+ QList<BookmarkToolBar *> m_bookmarkToolBars;
QList<BookmarksPanel*> m_bookmarkPanels;
KActionMenu *_bookmarkActionMenu;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 8d0f28a7..245110ec 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -103,8 +103,7 @@ MainWindow::MainWindow()
, m_analyzerPanel(0)
, m_historyBackMenu(0)
, m_encodingMenu(new KMenu(this))
-// , m_mainBar(new KToolBar(QString("MainToolBar"), this, Qt::TopToolBarArea, true, true, true))
-// , m_bmBar(new KToolBar(QString("BookmarkToolBar"), this, Qt::TopToolBarArea, true, false, true))
+ , m_bookmarksBar(new BookmarkToolBar(QString("BookmarkToolBar"), this, Qt::TopToolBarArea, true, false, true))
, m_popup(new KPassivePopup(this))
, m_hidePopup(new QTimer(this))
{
@@ -179,8 +178,7 @@ MainWindow::MainWindow()
MainWindow::~MainWindow()
{
- KToolBar *bookBar = toolBar("bookmarksToolBar");
- Application::bookmarkProvider()->removeToolBar(bookBar);
+ Application::bookmarkProvider()->removeToolBar(m_bookmarksBar);
Application::bookmarkProvider()->removeBookmarkPanel(m_bookmarksPanel);
Application::instance()->removeMainWindow(this);
@@ -195,6 +193,8 @@ MainWindow::~MainWindow()
delete m_historyBackMenu;
delete m_encodingMenu;
+ delete m_bookmarksBar;
+
delete m_zoomSlider;
delete m_popup;
@@ -215,17 +215,17 @@ void MainWindow::setupToolbars()
actionCollection()->addAction( QL1S("url_bar"), a);
KToolBar *mainBar = toolBar("mainToolBar");
- KToolBar *bookBar = toolBar("bookmarksToolBar");
-
+// KToolBar *bookBar = toolBar("bookmarksToolBar");
+//
// bookmarks bar
- KAction *bookmarkBarAction = Application::bookmarkProvider()->bookmarkToolBarAction(bookBar);
+ KAction *bookmarkBarAction = Application::bookmarkProvider()->bookmarkToolBarAction(m_bookmarksBar);
a = actionCollection()->addAction( QL1S("bookmarks_bar"), bookmarkBarAction);
mainBar->show(); // this just to fix reopening rekonq after fullscreen close
// =========== Bookmarks ToolBar ================================
- bookBar->setAcceptDrops(true);
- Application::bookmarkProvider()->setupBookmarkBar(bookBar);
+ m_bookmarksBar->setAcceptDrops(true);
+ Application::bookmarkProvider()->setupBookmarkBar(m_bookmarksBar);
}
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 1ec79a4b..96fe0f2d 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -34,6 +34,9 @@
// Rekonq Includes
#include "rekonq_defines.h"
+// Local Includes
+#include "bookmarksmanager.h"
+
// KDE Includes
#include <KXmlGuiWindow>
#include <KActionCollection>
@@ -172,11 +175,13 @@ private:
BookmarksPanel *m_bookmarksPanel;
WebInspectorPanel *m_webInspectorPanel;
NetworkAnalyzerPanel *m_analyzerPanel;
-
+
KAction *m_stopReloadAction;
KMenu *m_historyBackMenu;
KMenu *m_encodingMenu;
+ BookmarkToolBar *m_bookmarksBar;
+
QSlider *m_zoomSlider;
QString m_lastSearch;
diff --git a/src/rekonqui.rc b/src/rekonqui.rc
index d4d5d289..752599d5 100644
--- a/src/rekonqui.rc
+++ b/src/rekonqui.rc
@@ -91,10 +91,5 @@
<Action name="rekonq_tools" />
</ToolBar>
-<!-- ============ Bookmarks ToolBar =========== -->
-<ToolBar name="bookmarksToolBar" fullWidth="true" iconText="icontextright" iconSize="16" newline="true" noEdit="true">
- <text>Bookmark Toolbar</text>
- <Action noEdit="true" name="bookmarks_bar" />
-</ToolBar>
</gui>