From 339f1fe47ae8f6dcd799a674cdab65693a810d5f Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Thu, 28 Apr 2011 00:04:20 +0200 Subject: - A new option to set/unset the current bookmark bar folder in the context menu - Fix drag and drop with a custom folder - Fix a regression which affects BK bar drag and drop (5a53d2bf91dd) Patch by Yoann Laissus, reviewed by me :) --- src/bookmarks/bookmarkstoolbar.cpp | 86 +++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 39 deletions(-) (limited to 'src/bookmarks/bookmarkstoolbar.cpp') diff --git a/src/bookmarks/bookmarkstoolbar.cpp b/src/bookmarks/bookmarkstoolbar.cpp index 3667503b..57d56fff 100644 --- a/src/bookmarks/bookmarkstoolbar.cpp +++ b/src/bookmarks/bookmarkstoolbar.cpp @@ -223,11 +223,12 @@ void BookmarkToolBar::hideMenu() bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) { - if (m_currentMenu && m_currentMenu->isVisible() && !m_currentMenu->rect().contains(m_currentMenu->mapFromGlobal(QCursor::pos()))) + // To switch root folders as in a menubar + if (m_currentMenu && m_currentMenu->isVisible() && event->type() == QEvent::MouseMove + && !m_currentMenu->rect().contains(m_currentMenu->mapFromGlobal(QCursor::pos()))) { - // To switch root folders as in a menubar KBookmarkActionMenu* act = dynamic_cast(toolBar()->actionAt(toolBar()->mapFromGlobal(QCursor::pos()))); - if (event->type() == QEvent::MouseMove && act && m_currentMenu && act->menu() != m_currentMenu) + if (act && act->menu() != m_currentMenu) { m_currentMenu->hide(); QPoint pos = toolBar()->mapToGlobal(toolBar()->widgetForAction(act)->pos()); @@ -237,9 +238,6 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) return QObject::eventFilter(watched, event); } - if (watched != toolBar()) - return QObject::eventFilter(watched, event); - switch (event->type()) { case QEvent::Show: @@ -342,7 +340,7 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) { QDropEvent *dropEvent = static_cast(event); KBookmark bookmark; - KBookmarkGroup root = rApp->bookmarkProvider()->rootGroup(); + KBookmarkGroup root = rApp->bookmarkProvider()->bookmarkManager()->toolbar(); if (dropEvent->mimeData()->hasFormat("application/rekonq-bookmark")) { @@ -428,49 +426,59 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) } break; - case QEvent::MouseButtonPress: // drag handling - { - QPoint pos = toolBar()->mapFromGlobal(QCursor::pos()); - KBookmarkActionInterface *action = dynamic_cast(toolBar()->actionAt(pos)); + default: + break; + } - if (action) + // These events need to be handled only for Bookmark actions and not the bar + if (watched != toolBar()) + { + switch (event->type()) + { + case QEvent::MouseButtonPress: // drag handling { - m_dragAction = toolBar()->actionAt(pos); - m_startDragPos = pos; + QPoint pos = toolBar()->mapFromGlobal(QCursor::pos()); + KBookmarkActionInterface *action = dynamic_cast(toolBar()->actionAt(pos)); + + if (action) + { + m_dragAction = toolBar()->actionAt(pos); + m_startDragPos = pos; - // The menu is displayed only when the mouse button is released - if (action->bookmark().isGroup()) - return true; + // The menu is displayed only when the mouse button is released + if (action->bookmark().isGroup()) + return true; + } } - } - break; + break; - case QEvent::MouseMove: - { - int distance = (toolBar()->mapFromGlobal(QCursor::pos()) - m_startDragPos).manhattanLength(); - if (!m_currentMenu && distance >= QApplication::startDragDistance()) + case QEvent::MouseMove: { - startDrag(); + int distance = (toolBar()->mapFromGlobal(QCursor::pos()) - m_startDragPos).manhattanLength(); + if (!m_currentMenu && distance >= QApplication::startDragDistance()) + { + startDrag(); + } } - } - break; - - case QEvent::MouseButtonRelease: - { - int distance = (toolBar()->mapFromGlobal(QCursor::pos()) - m_startDragPos).manhattanLength(); - KBookmarkActionInterface *action = dynamic_cast(toolBar()->actionAt(m_startDragPos)); + break; - if (action && action->bookmark().isGroup() && distance < QApplication::startDragDistance()) + case QEvent::MouseButtonRelease: { - KBookmarkActionMenu *menu = dynamic_cast(toolBar()->actionAt(m_startDragPos)); - QPoint actionPos = toolBar()->mapToGlobal(toolBar()->widgetForAction(menu)->pos()); - menu->menu()->popup(QPoint(actionPos.x(), actionPos.y() + toolBar()->widgetForAction(menu)->height())); + int distance = (toolBar()->mapFromGlobal(QCursor::pos()) - m_startDragPos).manhattanLength(); + KBookmarkActionInterface *action = dynamic_cast(toolBar()->actionAt(m_startDragPos)); + + if (action && action->bookmark().isGroup() && distance < QApplication::startDragDistance()) + { + KBookmarkActionMenu *menu = dynamic_cast(toolBar()->actionAt(m_startDragPos)); + QPoint actionPos = toolBar()->mapToGlobal(toolBar()->widgetForAction(menu)->pos()); + menu->menu()->popup(QPoint(actionPos.x(), actionPos.y() + toolBar()->widgetForAction(menu)->height())); + } } - } - break; + break; - default: - break; + default: + break; + } } return QObject::eventFilter(watched, event); -- cgit v1.2.1