Summary: | Support for bookmarklets | ||
---|---|---|---|
Product: | [Applications] rekonq | Reporter: | Shane <shane> |
Component: | general | Assignee: | Yoann Laissus <yoann.laissus> |
Status: | RESOLVED FIXED | ||
Severity: | wishlist | CC: | yoann.laissus |
Priority: | NOR | ||
Version: | 0.5.0 | ||
Target Milestone: | 0.7 | ||
Platform: | Arch Linux | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: |
Description
Shane
2010-09-09 04:13:58 UTC
commit ef2d5465aee86115cca6343cbaeacca4ed699b12 Author: Yoann Laissus <yoann.laissus@gmail.com> Date: Wed Sep 15 23:41:49 2010 +0200 - Bookmarklet support - text/uri-list drops in the BK toolbar - Don't allow other drag than bookmarks in the BK panel (for the moment) - A little cleanup BUG: 250623 diff --git a/src/bookmarks/bookmarkstoolbar.cpp b/src/bookmarks/bookmarkstoolbar.cpp index 4eff2e5..60b59a3 100644 --- a/src/bookmarks/bookmarkstoolbar.cpp +++ b/src/bookmarks/bookmarkstoolbar.cpp @@ -278,33 +278,25 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) else if (event->type() == QEvent::DragEnter) { QDragEnterEvent *dragEvent = static_cast<QDragEnterEvent*>(event); - if (dragEvent->mimeData()->hasFormat("application/rekonq-bookmark")) + if (dragEvent->mimeData()->hasFormat("application/rekonq-bookmark") || dragEvent->mimeData()->hasFormat("text/uri-list")) { - QByteArray addresses = dragEvent->mimeData()->data("application/rekonq-bookmark"); - KBookmark bookmark = Application::bookmarkProvider()->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data())); + QFrame* dropIndicatorWidget = new QFrame(toolBar()); + dropIndicatorWidget->setFrameShape(QFrame::VLine); + m_dropAction = toolBar()->insertWidget(toolBar()->actionAt(dragEvent->pos()), dropIndicatorWidget); - if (!bookmark.isNull()) - { - QFrame* dropIndicatorWidget = new QFrame(toolBar()); - dropIndicatorWidget->setFrameShape(QFrame::VLine); - m_dropAction = toolBar()->insertWidget(toolBar()->actionAt(dragEvent->pos()), dropIndicatorWidget); - - dragEvent->accept(); - } + dragEvent->accept(); } } else if (event->type() == QEvent::DragMove) { QDragMoveEvent *dragEvent = static_cast<QDragMoveEvent*>(event); - if (dragEvent->mimeData()->hasFormat("application/rekonq-bookmark")) + if (dragEvent->mimeData()->hasFormat("application/rekonq-bookmark") || dragEvent->mimeData()->hasFormat("text/uri-list")) { - QByteArray addresses = dragEvent->mimeData()->data("application/rekonq-bookmark"); - KBookmark bookmark = Application::bookmarkProvider()->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data())); QAction *overAction = toolBar()->actionAt(dragEvent->pos()); KBookmarkActionInterface *overActionBK = dynamic_cast<KBookmarkActionInterface*>(overAction); QWidget *widgetAction = toolBar()->widgetForAction(overAction); - if (!bookmark.isNull() && overAction != m_dropAction && overActionBK && widgetAction && m_dropAction) + if (overAction != m_dropAction && overActionBK && widgetAction && m_dropAction) { toolBar()->removeAction(m_dropAction); @@ -338,10 +330,26 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) else if (event->type() == QEvent::Drop) { QDropEvent *dropEvent = static_cast<QDropEvent*>(event); - QByteArray addresses = dropEvent->mimeData()->data("application/rekonq-bookmark"); - KBookmark bookmark = Application::bookmarkProvider()->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data())); + KBookmark bookmark; + QUrl url; + QString title; - if (!dropEvent->mimeData()->hasFormat("application/rekonq-bookmark") && !bookmark.isNull()) + if (dropEvent->mimeData()->hasFormat("application/rekonq-bookmark")) + { + QByteArray addresses = dropEvent->mimeData()->data("application/rekonq-bookmark"); + bookmark = Application::bookmarkProvider()->bookmarkManager()->findByAddress(QString::fromLatin1(addresses.data())); + if (bookmark.isNull()) + return QObject::eventFilter(watched, event); + + url = bookmark.url(); + title = bookmark.fullText(); + } + else if (dropEvent->mimeData()->hasFormat("text/uri-list")) + { + title = dropEvent->mimeData()->text(); + url = dropEvent->mimeData()->urls().at(0).toString(); + } + else { return QObject::eventFilter(watched, event); } @@ -366,11 +374,12 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) KBookmarkActionInterface *destBookmarkAction = dynamic_cast<KBookmarkActionInterface *>(destAction); QWidget *widgetAction = toolBar()->widgetForAction(destAction); - if (destBookmarkAction && !destBookmarkAction->bookmark().isNull() - && widgetAction && bookmark.address() != destBookmarkAction->bookmark().address()) + if (destBookmarkAction && !destBookmarkAction->bookmark().isNull() && widgetAction + && bookmark.address() != destBookmarkAction->bookmark().address()) { KBookmark destBookmark = destBookmarkAction->bookmark(); root.deleteBookmark(bookmark); + bookmark = root.addBookmark(title, url); if ((dropEvent->pos().x() - widgetAction->pos().x()) > (widgetAction->width() / 2)) { @@ -380,20 +389,18 @@ bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) { root.moveBookmark(bookmark, destBookmark.parentGroup().previous(destBookmark)); } + Application::bookmarkProvider()->bookmarkManager()->emitChanged(); } } else { root.deleteBookmark(bookmark); - if (QCursor::pos().x() < toolBar()->widgetForAction(toolBar()->actions().first())->pos().x()) + bookmark = root.addBookmark(title, url); + if (dropEvent->pos().x() < toolBar()->widgetForAction(toolBar()->actions().first())->pos().x()) { root.moveBookmark(bookmark, KBookmark()); } - else - { - root.addBookmark(bookmark); - } Application::bookmarkProvider()->bookmarkManager()->emitChanged(); } diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp index 8d702fb..f13cee4 100644 --- a/src/bookmarks/bookmarkstreemodel.cpp +++ b/src/bookmarks/bookmarkstreemodel.cpp @@ -268,7 +268,7 @@ QVariant BookmarksTreeModel::data(const QModelIndex &index, int role) const QStringList BookmarksTreeModel::mimeTypes() const { - return KBookmark::List::mimeDataTypes(); + return QStringList("application/rekonq-bookmark"); } diff --git a/src/filterurljob.cpp b/src/filterurljob.cpp index b27df74..c5ffa60 100644 --- a/src/filterurljob.cpp +++ b/src/filterurljob.cpp @@ -60,6 +60,12 @@ void FilterUrlJob::run() { // this should let rekonq filtering URI info and supporting // the beautiful KDE web browsing shortcuts + + if (_urlString.startsWith("javascript:")) + { + _url = KUrl(_urlString); + return; + } KUriFilterData data(_urlString); data.setCheckForExecutables(false); // if true, queries like "rekonq" or "dolphin" are considered as executables Yoann! Thank you so, so much for this fix! I shared this bug report using the bookmarklet. Awesome! |