summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2011-04-08 00:30:12 +0200
committerAndrea Diamantini <adjam7@gmail.com>2011-04-08 00:37:30 +0200
commit5a53d2bf91dd9861b6b36e398566f8705b1d714a (patch)
treecd4ccdb5d2935c7675c3acf97054d3f6c9dec7f3 /src
parentDe-parent providers instances and delete them on close. Please, (diff)
downloadrekonq-5a53d2bf91dd9861b6b36e398566f8705b1d714a.tar.xz
Add bookmarks by dropping inside the bk toolbar.
This patch, based on Furkan's work on this, is quite different from the original for the following reasons: first, the "need" to not modify a lot actual code in the urlbar (disabling dragging and reenabling by code. What are the implications? Who really knows this?) Second, the problem of showing "as urls" (showing their icon) TEXT mimeData: not a good choice, IMHO. Actual code is cleaner and works with every drop inside the bk toolbar (In case of text, checking if the derivated url is valid)
Diffstat (limited to 'src')
-rw-r--r--src/bookmarks/bookmarkstoolbar.cpp77
1 files changed, 59 insertions, 18 deletions
diff --git a/src/bookmarks/bookmarkstoolbar.cpp b/src/bookmarks/bookmarkstoolbar.cpp
index 8da30c62..3667503b 100644
--- a/src/bookmarks/bookmarkstoolbar.cpp
+++ b/src/bookmarks/bookmarkstoolbar.cpp
@@ -36,6 +36,7 @@
#include "application.h"
#include "bookmarkprovider.h"
#include "bookmarkowner.h"
+#include "webtab.h"
// Qt Includes
#include <QtGui/QFrame>
@@ -232,10 +233,16 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
QPoint pos = toolBar()->mapToGlobal(toolBar()->widgetForAction(act)->pos());
act->menu()->popup(QPoint(pos.x(), pos.y() + toolBar()->widgetForAction(act)->height()));
}
+
+ return QObject::eventFilter(watched, event);
}
- else if (watched == toolBar())
+
+ if (watched != toolBar())
+ return QObject::eventFilter(watched, event);
+
+ switch (event->type())
{
- if (event->type() == QEvent::Show)
+ case QEvent::Show:
{
if (!m_filled)
{
@@ -243,7 +250,9 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
m_filled = true;
}
}
- if (event->type() == QEvent::ActionRemoved)
+ break;
+
+ case QEvent::ActionRemoved:
{
QActionEvent *actionEvent = static_cast<QActionEvent*>(event);
if (actionEvent && actionEvent->action() != m_dropAction)
@@ -255,7 +264,9 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
}
}
}
- else if (event->type() == QEvent::ParentChange)
+ break;
+
+ case QEvent::ParentChange:
{
QActionEvent *actionEvent = static_cast<QActionEvent*>(event);
if (actionEvent && actionEvent->action() != m_dropAction)
@@ -267,10 +278,12 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
}
}
}
- else if (event->type() == QEvent::DragEnter)
+ break;
+
+ case QEvent::DragEnter:
{
QDragEnterEvent *dragEvent = static_cast<QDragEnterEvent*>(event);
- if (dragEvent->mimeData()->hasFormat("application/rekonq-bookmark") || dragEvent->mimeData()->hasFormat("text/uri-list"))
+ if (dragEvent->mimeData()->hasFormat("application/rekonq-bookmark") || dragEvent->mimeData()->hasFormat("text/uri-list") || dragEvent->mimeData()->hasFormat("text/plain"))
{
QFrame* dropIndicatorWidget = new QFrame(toolBar());
dropIndicatorWidget->setFrameShape(QFrame::VLine);
@@ -279,10 +292,12 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
dragEvent->accept();
}
}
- else if (event->type() == QEvent::DragMove)
+ break;
+
+ case QEvent::DragMove:
{
QDragMoveEvent *dragEvent = static_cast<QDragMoveEvent*>(event);
- if (dragEvent->mimeData()->hasFormat("application/rekonq-bookmark") || dragEvent->mimeData()->hasFormat("text/uri-list"))
+ if (dragEvent->mimeData()->hasFormat("application/rekonq-bookmark") || dragEvent->mimeData()->hasFormat("text/uri-list") || dragEvent->mimeData()->hasFormat("text/plain"))
{
QAction *overAction = toolBar()->actionAt(dragEvent->pos());
KBookmarkActionInterface *overActionBK = dynamic_cast<KBookmarkActionInterface*>(overAction);
@@ -312,14 +327,18 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
}
}
}
- else if (event->type() == QEvent::DragLeave)
+ break;
+
+ case QEvent::DragLeave:
{
QDragLeaveEvent *dragEvent = static_cast<QDragLeaveEvent*>(event);
delete m_dropAction;
m_dropAction = 0;
dragEvent->accept();
}
- else if (event->type() == QEvent::Drop)
+ break;
+
+ case QEvent::Drop:
{
QDropEvent *dropEvent = static_cast<QDropEvent*>(event);
KBookmark bookmark;
@@ -334,10 +353,26 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
}
else if (dropEvent->mimeData()->hasFormat("text/uri-list"))
{
- QString title = dropEvent->mimeData()->text();
+ kDebug() << "DROP is URL";
QString url = dropEvent->mimeData()->urls().at(0).toString();
+ QString title = url.contains( rApp->mainWindow()->currentTab()->url().url() )
+ ? rApp->mainWindow()->currentTab()->view()->title()
+ : url;
bookmark = root.addBookmark(title, url);
}
+ else if (dropEvent->mimeData()->hasFormat("text/plain"))
+ {
+ kDebug() << "DROP is TEXT";
+ QString url = dropEvent->mimeData()->text();
+ KUrl u(url);
+ if (u.isValid())
+ {
+ QString title = url.contains( rApp->mainWindow()->currentTab()->url().url() )
+ ? rApp->mainWindow()->currentTab()->view()->title()
+ : url;
+ bookmark = root.addBookmark(title, url);
+ }
+ }
else
{
return false;
@@ -391,11 +426,9 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
}
dropEvent->accept();
}
- }
- else
- {
- // Drag handling
- if (event->type() == QEvent::MouseButtonPress)
+ break;
+
+ case QEvent::MouseButtonPress: // drag handling
{
QPoint pos = toolBar()->mapFromGlobal(QCursor::pos());
KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface *>(toolBar()->actionAt(pos));
@@ -410,7 +443,9 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
return true;
}
}
- else if (event->type() == QEvent::MouseMove)
+ break;
+
+ case QEvent::MouseMove:
{
int distance = (toolBar()->mapFromGlobal(QCursor::pos()) - m_startDragPos).manhattanLength();
if (!m_currentMenu && distance >= QApplication::startDragDistance())
@@ -418,7 +453,9 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
startDrag();
}
}
- else if (event->type() == QEvent::MouseButtonRelease)
+ break;
+
+ case QEvent::MouseButtonRelease:
{
int distance = (toolBar()->mapFromGlobal(QCursor::pos()) - m_startDragPos).manhattanLength();
KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface *>(toolBar()->actionAt(m_startDragPos));
@@ -430,6 +467,10 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event)
menu->menu()->popup(QPoint(actionPos.x(), actionPos.y() + toolBar()->widgetForAction(menu)->height()));
}
}
+ break;
+
+ default:
+ break;
}
return QObject::eventFilter(watched, event);