diff --git a/src/kbookmarkmenu.h b/src/kbookmarkmenu.h --- a/src/kbookmarkmenu.h +++ b/src/kbookmarkmenu.h @@ -75,8 +75,36 @@ * * @todo KDE 5: give ownership of the bookmarkmenu to another qobject, e.g. parentMenu. * Currently this is a QObject without a parent, use setParent to benefit from automatic deletion. + * + * @deprecated since 5.65. Use overload without KActionCollection and add actions manually to your actioncollection if desired. + * @code + * KBookmarkMenu *menu = new KBookmarkMenu(manager, owner, parentMenu); + * actionCollection()->addAction(QStringLiteral("add_bookmark"), menu->addBookmarkAction()); + * actionCollection()->addAction(QStringLiteral("edit_bookmarks"), menu->editBookmarksAction()); + * actionCollection()->addAction(QStringLiteral("add_bookmarks_list"), menu->bookmarkTabsAsFolderAction()); + * @endcode + + * */ +#if KBOOKMARKS_ENABLE_DEPRECATED_SINCE(5, 65) + KBOOKMARKS_DEPRECATED_VERSION(5, 65, "Use overload without KActionCollection and add actions manually to your actioncollection if desired") KBookmarkMenu(KBookmarkManager *mgr, KBookmarkOwner *owner, QMenu *parentMenu, KActionCollection *collec); +#endif + + /** + * Fills a bookmark menu + * (one instance of KBookmarkMenu is created for the toplevel menu, + * but also one per submenu). + * + * @param mgr The bookmark manager to use (i.e. for reading and writing) + * @param owner implementation of the KBookmarkOwner callback interface. + * Note: If you pass a null KBookmarkOwner to the constructor, the + * openBookmark signal is not emitted, instead QDesktopServices::openUrl is used to open the bookmark. + * @param parentMenu menu to be filled + * @param collec parent collection for the KActions. + * @since 5.65 + */ + KBookmarkMenu(KBookmarkManager *mgr, KBookmarkOwner *owner, QMenu *parentMenu); /** * Creates a bookmark submenu @@ -112,6 +140,35 @@ */ int numberOfOpenTabs() const; + /** + * Action for adding a bookmark. If you are using KXMLGui add it to your action collection. + * @code + * KBookmarkMenu *menu = new KBookmarkMenu(manager, owner, parentMenu); + * actionCollection()->addAction(QStringLiteral("add_bookmark"), menu->addBookmarkAction()); + * @endcode + * @since 5.65 + */ + QAction *addBookmarkAction(); + + + /** + * Action for adding all current tabs as bookmarks. If you are using KXMLGui add it to your action collection. + * @code + * KBookmarkMenu *menu = new KBookmarkMenu(manager, owner, parentMenu); + * actionCollection()->addAction(QStringLiteral("add_bookmarks_list"), menu->bookmarkTabsAsFolderAction()); + * @endcode + */ + QAction *bookmarkTabsAsFolderAction(); + + /** + * Action for editing bookmarks. If you are using KXMLGui add it to your action collection. + * @code + * KBookmarkMenu *menu = new KBookmarkMenu(manager, owner, parentMenu); + * actionCollection()->addAction(QStringLiteral("edit_bookmarks"), menu->editBookmarksAction()); + * @endcode + */ + QAction *editBookmarksAction(); + public Q_SLOTS: // public for KonqBookmarkBar void slotBookmarksChanged(const QString &); @@ -171,6 +228,8 @@ void slotCustomContextMenu(const QPoint &); private: + void setup(); + KBookmarkMenuPrivate *d; bool m_bIsRoot; diff --git a/src/kbookmarkmenu.cpp b/src/kbookmarkmenu.cpp --- a/src/kbookmarkmenu.cpp +++ b/src/kbookmarkmenu.cpp @@ -47,16 +47,19 @@ : newBookmarkFolder(nullptr), addAddBookmark(nullptr), bookmarksToFolder(nullptr), + editBookmarksAction(nullptr), numberOfOpenTabs(2) { } QAction *newBookmarkFolder; QAction *addAddBookmark; QAction *bookmarksToFolder; + QAction *editBookmarksAction; int numberOfOpenTabs; }; +#if KBOOKMARKS_BUILD_DEPRECATED_SINCE(5, 65) KBookmarkMenu::KBookmarkMenu(KBookmarkManager *mgr, KBookmarkOwner *_owner, QMenu *_parentMenu, @@ -69,13 +72,32 @@ m_pOwner(_owner), m_parentMenu(_parentMenu), m_parentAddress(QLatin1String("")) //TODO KBookmarkAdress::root +{ + setup(); +} +#endif + +KBookmarkMenu::KBookmarkMenu(KBookmarkManager* mgr, KBookmarkOwner* _owner, QMenu* _parentMenu) + : QObject(), + m_actionCollection(nullptr), + d(new KBookmarkMenuPrivate()), + m_bIsRoot(true), + m_pManager(mgr), + m_pOwner(_owner), + m_parentMenu(_parentMenu), + m_parentAddress(QLatin1String("")) //TODO KBookmarkAdress::root +{ + setup(); +} + +void KBookmarkMenu::setup() { // TODO KDE5 find a QMenu equvalnet for this one //m_parentMenu->setKeyboardShortcutsEnabled( true ); // qCDebug(KBOOKMARKS_LOG) << "KBookmarkMenu::KBookmarkMenu " << this << " address : " << m_parentAddress; - connect(_parentMenu, &QMenu::aboutToShow, + connect(m_parentMenu, &QMenu::aboutToShow, this, &KBookmarkMenu::slotAboutToShow); if (KBookmarkSettings::self()->m_contextmenu) { @@ -114,7 +136,7 @@ QMenu *_parentMenu, const QString &parentAddress) : QObject(), - m_actionCollection(new KActionCollection(this)), + m_actionCollection(nullptr), d(new KBookmarkMenuPrivate()), m_bIsRoot(false), m_pManager(mgr), @@ -299,11 +321,14 @@ if (!d->bookmarksToFolder) { QString title = tr("Bookmark Tabs as Folder..."); d->bookmarksToFolder = new QAction(title, this); - m_actionCollection->addAction(m_bIsRoot ? QStringLiteral("add_bookmarks_list") : QString(), d->bookmarksToFolder); d->bookmarksToFolder->setIcon(QIcon::fromTheme(QStringLiteral("bookmark-new-list"))); d->bookmarksToFolder->setToolTip(tr("Add a folder of bookmarks for all open tabs.")); d->bookmarksToFolder->setStatusTip(d->bookmarksToFolder->toolTip()); connect(d->bookmarksToFolder, &QAction::triggered, this, &KBookmarkMenu::slotAddBookmarksList); + + if (m_actionCollection) { + m_actionCollection->addAction(QStringLiteral("add_bookmarks_list"), d->bookmarksToFolder); + } } m_parentMenu->addAction(d->bookmarksToFolder); @@ -317,11 +342,12 @@ } if (!d->addAddBookmark) { - d->addAddBookmark = m_actionCollection->addAction( - KStandardAction::AddBookmark, - m_bIsRoot ? QStringLiteral("add_bookmark") : QString(), - this, - SLOT(slotAddBookmark())); + d->addAddBookmark = KStandardAction::addBookmark(this, SLOT(slotAddBookmark()), this); + + if (m_actionCollection) { + m_actionCollection->addAction(QStringLiteral("add_bookmark"), d->addAddBookmark); + } + if (!m_bIsRoot) { d->addAddBookmark->setShortcut(QKeySequence()); } @@ -338,11 +364,15 @@ return; } - QAction *m_paEditBookmarks = m_actionCollection->addAction(KStandardAction::EditBookmarks, QStringLiteral("edit_bookmarks"), - m_pManager, SLOT(slotEditBookmarks())); - m_parentMenu->addAction(m_paEditBookmarks); - m_paEditBookmarks->setToolTip(tr("Edit your bookmark collection in a separate window")); - m_paEditBookmarks->setStatusTip(m_paEditBookmarks->toolTip()); + d->editBookmarksAction = KStandardAction::editBookmarks(m_pManager, SLOT(slotEditBookmarks()), this); + + m_parentMenu->addAction(d->editBookmarksAction); + d->editBookmarksAction->setToolTip(tr("Edit your bookmark collection in a separate window")); + d->editBookmarksAction->setStatusTip(d->editBookmarksAction->toolTip()); + + if (m_actionCollection) { + m_actionCollection->addAction(QStringLiteral("edit_bookmarks"), d->editBookmarksAction); + } } void KBookmarkMenu::addNewFolder() @@ -450,3 +480,18 @@ dlg->createNewFolder(QLatin1String(""), parentBookmark); delete dlg; } + +QAction * KBookmarkMenu::addBookmarkAction() +{ + return d->addAddBookmark; +} + +QAction * KBookmarkMenu::bookmarkTabsAsFolderAction() +{ + return d->bookmarksToFolder; +} + +QAction * KBookmarkMenu::editBookmarksAction() +{ + return d->editBookmarksAction; +}