diff options
author | aqua <aqua@iserlohn-fortress.net> | 2022-09-11 14:21:43 +0300 |
---|---|---|
committer | aqua <aqua@iserlohn-fortress.net> | 2022-09-14 08:51:10 +0300 |
commit | 59e5e79cd32187b842bbb423a287a54a23a60f5f (patch) | |
tree | 2a730a663c9a1917e08da62eb87d6b2c5e2ebd5c /src/bookmarks/bookmarksmenu.cpp | |
parent | BookmarksPanel: add custom context menu (diff) | |
download | rekonq-59e5e79cd32187b842bbb423a287a54a23a60f5f.tar.xz |
BookmarksMenu: show top-level bookmarks
Diffstat (limited to 'src/bookmarks/bookmarksmenu.cpp')
-rw-r--r-- | src/bookmarks/bookmarksmenu.cpp | 148 |
1 files changed, 29 insertions, 119 deletions
diff --git a/src/bookmarks/bookmarksmenu.cpp b/src/bookmarks/bookmarksmenu.cpp index 445b81b7..761a0026 100644 --- a/src/bookmarks/bookmarksmenu.cpp +++ b/src/bookmarks/bookmarksmenu.cpp @@ -1,133 +1,43 @@ /* ============================================================ - * - * This file is a part of the rekonq project - * + * The rekonq project + * ============================================================ + * SPDX-License-Identifier: GPL-2.0-or-later * Copyright (C) 2008-2013 by Andrea Diamantini <adjam7 at gmail dot com> * Copyright (C) 2010 by Yoann Laissus <yoann dot laissus at gmail dot com> - * - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License or (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * SPDX-License-Identifier: GPL-3.0-only + * Copyright (C) 2022 aqua <aqua@iserlohn-fortress.net> + * ============================================================ + * Description: rekonq bookmarks menu * ============================================================ */ -// Self Includes -#include "bookmarksmenu.h" -#include "bookmarksmenu.moc" +#include "bookmarksmenu.hpp" +#include "bookmarkstreemodel.hpp" -// Local Includes -#include "bookmarkmanager.h" -#include "bookmarkowner.h" -#include "bookmarkscontextmenu.h" - -#include "iconmanager.h" -#include "webwindow.h" - -// Qt Includes -#include <QActionEvent> -#include <QApplication> -#include <QFrame> - -BookmarkMenu::BookmarkMenu(KBookmarkManager *manager, KBookmarkOwner *owner, KMenu *menu, - KActionCollection *actionCollection) - : KBookmarkMenu(manager, owner, menu, actionCollection) -{ -} - -BookmarkMenu::BookmarkMenu(KBookmarkManager *manager, KBookmarkOwner *owner, KMenu *parentMenu, - const QString &parentAddress) - : KBookmarkMenu(manager, owner, parentMenu, parentAddress) -{ -} - -BookmarkMenu::~BookmarkMenu() -{ - kDebug() << "Deleting BookmarkMenu.. See http://svn.reviewboard.kde.org/r/5606/ about."; -} - -KMenu *BookmarkMenu::contextMenu(QAction *act) +BookmarksMenu::BookmarksMenu(QWidget *parent) : QMenu(parent) { - KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface *>(act); - if (!action) return 0; - return new BookmarksContextMenu(action->bookmark(), manager(), static_cast<BookmarkOwner *>(owner())); -} - -QAction *BookmarkMenu::actionForBookmark(const KBookmark &bookmark) -{ - if (bookmark.isGroup()) { - KBookmarkActionMenu *actionMenu = new KBookmarkActionMenu(bookmark, this); - BookmarkMenu *menu = new BookmarkMenu(manager(), owner(), actionMenu->menu(), bookmark.address()); - // An hack to get rid of bug 219274 - connect(actionMenu, SIGNAL(hovered()), menu, SLOT(slotAboutToShow())); - return actionMenu; - } - else if (bookmark.isSeparator()) { - return KBookmarkMenu::actionForBookmark(bookmark); - } - else { - KBookmarkAction *action = new KBookmarkAction(bookmark, owner(), this); - action->setIcon(IconManager::self()->iconForUrl(KUrl(bookmark.url()))); - return action; - } + connect(this, &QMenu::aboutToShow, this, &BookmarksMenu::refill); } -void BookmarkMenu::refill() +void BookmarksMenu::refill() { - clear(); - - if (isRoot()) { - addAddBookmark(); - addAddBookmarksList(); - - if (parentMenu()->actions().count() > 0) parentMenu()->addSeparator(); - - WebWindow *w = qobject_cast<WebWindow *>(parentMenu()->parent()); - QAction *a; - // bk page - a = w->actionByName(QL1S("open_bookmarks_page")); - parentMenu()->addAction(a); - a = w->actionByName(QL1S("show_bookmarks_toolbar")); - parentMenu()->addAction(a); - - addEditBookmarks(); - - if (parentMenu()->actions().count() > 0) parentMenu()->addSeparator(); - } + Q_CHECK_PTR(model); - fillBookmarks(); - - if (!isRoot()) { - if (parentMenu()->actions().count() > 0) parentMenu()->addSeparator(); - - addOpenFolderInTabs(); - addAddBookmarksList(); + for (auto *a : actions) { + removeAction(a); + delete a; } -} - -void BookmarkMenu::addOpenFolderInTabs() -{ - KBookmarkGroup group = manager()->findByAddress(parentAddress()).toGroup(); - - if (!group.first().isNull()) { - KBookmark bookmark = group.first(); - - while (bookmark.isGroup() || bookmark.isSeparator()) { bookmark = group.next(bookmark); } - - if (!bookmark.isNull()) { - parentMenu()->addAction(BookmarkManager::self()->owner()->createAction(group, BookmarkOwner::OPEN_FOLDER)); - } + actions.clear(); + + actions.append(addSeparator()); + + const auto *root = model->item(); + Q_CHECK_PTR(root); + for (int i = 0; i < root->childCount(); ++i) { + const auto *child = root->child(i); + if (child->type() != BookmarksTreeItem::Bookmark) continue; + auto *action = addAction(child->data(BookmarksTreeItem::Title).toString(), this, [this, child]() { + emit loadUrl(child->data(BookmarksTreeItem::Href).toUrl(), rekonq::CurrentTab); + }); + actions.append(action); } } |