diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -37,7 +37,7 @@ GROUP_BASE_NAME KF VERSION ${KF5_VERSION} DEPRECATED_BASE_VERSION 0 - DEPRECATION_VERSIONS 5.0 5.65 + DEPRECATION_VERSIONS 5.0 5.65 5.69 EXCLUDE_DEPRECATED_BEFORE_AND_AT ${EXCLUDE_DEPRECATED_BEFORE_AND_AT} ) diff --git a/src/kbookmarkmenu.h b/src/kbookmarkmenu.h --- a/src/kbookmarkmenu.h +++ b/src/kbookmarkmenu.h @@ -61,6 +61,7 @@ { Q_OBJECT public: +#if KBOOKMARKS_ENABLE_DEPRECATED_SINCE(5, 69) /** * Fills a bookmark menu * (one instance of KBookmarkMenu is created for the toplevel menu, @@ -75,8 +76,38 @@ * * @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.69. Use overload without KActionCollection and add actions manually to your actioncollection if desired. + * @code + * KBookmarkMenu *menu = new KBookmarkMenu(manager, owner, parentMenu); + * + * QAction *addAction = menu->addBookmarkAction(); + * actionCollection()->addAction(addAction->objectName(), addAction); + * + * QAction *bookmarkTabsAction = menu->bookmarkTabsAsFolderAction(); + * actionCollection()->addAction(bookmarkTabsAction->objectName(), bookmarkTabsAction); + * + * QAction *editAction = menu->editBookmarksAction(); + * actionCollection()->addAction(editAction->objectName(), editAction); + * @endcode */ + KBOOKMARKS_DEPRECATED_VERSION(5, 69, "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 manager 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 + * @since 5.69 + */ + KBookmarkMenu(KBookmarkManager *manager, KBookmarkOwner *owner, QMenu *parentMenu); /** * Creates a bookmark submenu @@ -112,6 +143,42 @@ */ int numberOfOpenTabs() const; + /** + * Returns the action for adding a bookmark. If you are using KXmlGui add it to your action collection. + * @code + * KBookmarkMenu *menu = new KBookmarkMenu(manager, owner, parentMenu); + * QAction *addAction = menu->addBookmarkAction(); + * actionCollection()->addAction(addAction->objectName(), addAction); + * @endcode + * @return the action for adding a bookmark. + * @since 5.69 + */ + QAction *addBookmarkAction() const; + + /** + * Returns the 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); + * QAction *bookmarkTabsAction = menu->bookmarkTabsAsFolderAction(); + * actionCollection()->addAction(bookmarkTabsAction->objectName(), bookmarkTabsAction); + * @endcode + * @return the action for adding all current tabs as bookmarks. + * @since 5.69 + */ + QAction *bookmarkTabsAsFolderAction() const; + + /** + * Returns the action for editing bookmarks. If you are using KXmlGui add it to your action collection. + * @code + * KBookmarkMenu *menu = new KBookmarkMenu(manager, owner, parentMenu); + * QAction *editAction = menu->editBookmarksAction(); + * actionCollection()->addAction(editAction->objectName(), editAction); + * @endcode + * @return the action for editing bookmarks. + * @since 5.69 + */ + QAction *editBookmarksAction() const; + public Q_SLOTS: // public for KonqBookmarkBar void slotBookmarksChanged(const QString &); diff --git a/src/kbookmarkmenu.cpp b/src/kbookmarkmenu.cpp --- a/src/kbookmarkmenu.cpp +++ b/src/kbookmarkmenu.cpp @@ -47,32 +47,45 @@ : newBookmarkFolderAction(nullptr), addBookmarkAction(nullptr), bookmarksToFolderAction(nullptr), + editBookmarksAction(nullptr), numberOfOpenTabs(2) { } QAction *newBookmarkFolderAction; QAction *addBookmarkAction; QAction *bookmarksToFolderAction; + QAction *editBookmarksAction; int numberOfOpenTabs; }; +#if KBOOKMARKS_BUILD_DEPRECATED_SINCE(5, 69) KBookmarkMenu::KBookmarkMenu(KBookmarkManager *mgr, KBookmarkOwner *_owner, QMenu *_parentMenu, KActionCollection *actionCollection) + : KBookmarkMenu(mgr, _owner, _parentMenu) +{ + m_actionCollection = actionCollection; +} +#endif + +KBookmarkMenu::KBookmarkMenu(KBookmarkManager* manager, KBookmarkOwner* _owner, QMenu* _parentMenu) : QObject(), - m_actionCollection(actionCollection), - d(new KBookmarkMenuPrivate()), - m_bIsRoot(true), - m_pManager(mgr), - m_pOwner(_owner), - m_parentMenu(_parentMenu), - m_parentAddress(QLatin1String("")) //TODO KBookmarkAdress::root + m_actionCollection(nullptr), + d(new KBookmarkMenuPrivate()), + m_bIsRoot(true), + m_pManager(manager), + m_pOwner(_owner), + m_parentMenu(_parentMenu), + m_parentAddress(QString()) //TODO KBookmarkAdress::root { + // 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) { @@ -111,7 +124,7 @@ QMenu *_parentMenu, const QString &parentAddress) : QObject(), - m_actionCollection(new KActionCollection(this)), + m_actionCollection(nullptr), d(new KBookmarkMenuPrivate()), m_bIsRoot(false), m_pManager(mgr), @@ -294,11 +307,19 @@ if (!d->bookmarksToFolderAction) { QString title = tr("Bookmark Tabs as Folder..."); d->bookmarksToFolderAction = new QAction(title, this); - m_actionCollection->addAction(m_bIsRoot ? QStringLiteral("add_bookmarks_list") : QString(), d->bookmarksToFolderAction); + + if (m_bIsRoot) { + d->bookmarksToFolderAction->setObjectName(QStringLiteral("add_bookmarks_list")); + } + d->bookmarksToFolderAction->setIcon(QIcon::fromTheme(QStringLiteral("bookmark-new-list"))); d->bookmarksToFolderAction->setToolTip(tr("Add a folder of bookmarks for all open tabs.")); d->bookmarksToFolderAction->setStatusTip(d->bookmarksToFolderAction->toolTip()); connect(d->bookmarksToFolderAction, &QAction::triggered, this, &KBookmarkMenu::slotAddBookmarksList); + + if (m_actionCollection) { + m_actionCollection->addAction(d->bookmarksToFolderAction->objectName(), d->bookmarksToFolderAction); + } } m_parentMenu->addAction(d->bookmarksToFolderAction); @@ -312,11 +333,15 @@ } if (!d->addBookmarkAction) { - d->addBookmarkAction = m_actionCollection->addAction( - KStandardAction::AddBookmark, - m_bIsRoot ? QStringLiteral("add_bookmark") : QString(), - this, - SLOT(slotAddBookmark())); + d->addBookmarkAction = KStandardAction::addBookmark(this, SLOT(slotAddBookmark()), this); + if (m_bIsRoot) { + d->addBookmarkAction->setObjectName(QStringLiteral("add_bookmark")); + } + + if (m_actionCollection) { + m_actionCollection->addAction(d->addBookmarkAction->objectName(), d->addBookmarkAction); + } + if (!m_bIsRoot) { d->addBookmarkAction->setShortcut(QKeySequence()); } @@ -333,11 +358,16 @@ 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); + d->editBookmarksAction->setObjectName(QStringLiteral("edit_bookmarks")); + + 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(d->editBookmarksAction->objectName(), d->editBookmarksAction); + } } void KBookmarkMenu::addNewFolder() @@ -445,3 +475,18 @@ dlg->createNewFolder(QLatin1String(""), parentBookmark); delete dlg; } + +QAction * KBookmarkMenu::addBookmarkAction() const +{ + return d->addBookmarkAction; +} + +QAction * KBookmarkMenu::bookmarkTabsAsFolderAction() const +{ + return d->bookmarksToFolderAction; +} + +QAction * KBookmarkMenu::editBookmarksAction() const +{ + return d->editBookmarksAction; +}