diff options
author | aqua <aqua@iserlohn-fortress.net> | 2022-09-11 10:45:14 +0300 |
---|---|---|
committer | aqua <aqua@iserlohn-fortress.net> | 2022-09-14 08:51:10 +0300 |
commit | 9ff4588acd9702c268c2e70d44e962925bdde291 (patch) | |
tree | 635d0f8015eddf89388f10ba15b9a9b352e372f6 /src/panels/bookmarkspanel.cpp | |
parent | Add Bookmarks panel (diff) | |
download | rekonq-9ff4588acd9702c268c2e70d44e962925bdde291.tar.xz |
BookmarksPanel: add custom context menu
Diffstat (limited to 'src/panels/bookmarkspanel.cpp')
-rw-r--r-- | src/panels/bookmarkspanel.cpp | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/src/panels/bookmarkspanel.cpp b/src/panels/bookmarkspanel.cpp index ee7ae717..5eda1c67 100644 --- a/src/panels/bookmarkspanel.cpp +++ b/src/panels/bookmarkspanel.cpp @@ -7,14 +7,15 @@ #include "bookmarkspanel.hpp" #include "bookmarks/bookmarkstreemodel.hpp" +#include <QMenu> BookmarksPanel::BookmarksPanel(QWidget *parent) : QTreeView(parent) { - connect(this, &QTreeView::activated, this, [this](const QModelIndex &index) { - auto *item = model()->item(index); - const auto url = item->data(BookmarksTreeItem::Href).toUrl(); - emit loadUrl(url, rekonq::CurrentTab); - }); + setEditTriggers(QAbstractItemView::NoEditTriggers); + setContextMenuPolicy(Qt::CustomContextMenu); + + connect(this, &QTreeView::activated, this, [this](const QModelIndex &index) { open(index); }); + connect(this, &QTreeView::customContextMenuRequested, this, &BookmarksPanel::customContextMenu); } BookmarkModel *BookmarksPanel::model() const @@ -23,3 +24,27 @@ BookmarkModel *BookmarksPanel::model() const Q_CHECK_PTR(m); return m; } + +void BookmarksPanel::customContextMenu(const QPoint &pos) +{ + const auto index = indexAt(pos); + auto *item = model()->item(indexAt(pos)); + Q_CHECK_PTR(item); + + auto *menu = new QMenu(this); + menu->addAction(tr("Open in current tab"), this, [this, index]() { open(index); }); + menu->addAction(tr("Open in new tab"), this, [this, index]() { open(index, rekonq::NewTab); }); + menu->addAction(tr("Edit")); + menu->addAction(tr("Remove"), this, [this, index]() { remove(index); }); + + menu->popup(mapToGlobal(pos)); +} + +void BookmarksPanel::open(const QModelIndex &index, rekonq::OpenType type) +{ + auto *item = model()->item(index); + const auto url = item->data(BookmarksTreeItem::Href).toUrl(); + emit loadUrl(url, type); +} + +void BookmarksPanel::remove(const QModelIndex &index) { model()->removeRow(index.row(), index.parent()); } |