+void BrowserWindow::showAddBookmarkDialog() const
+{
+ // Instantiate an add bookmark dialog.
+ AddBookmarkDialog *addBookmarkDialogPointer = new AddBookmarkDialog(tabWidgetPointer->getCurrentTabTitle(), tabWidgetPointer->getCurrentTabUrl(), tabWidgetPointer->getCurrentTabFavoritIcon());
+
+ // Update the displayed bookmarks when a new one is added.
+ connect(addBookmarkDialogPointer, SIGNAL(bookmarkAdded()), this, SLOT(populateBookmarks()));
+
+ // Show the dialog.
+ addBookmarkDialogPointer->show();
+}
+
+void BrowserWindow::showBookmarkContextMenu(const QPoint &point)
+{
+ // Get the bookmark action.
+ QAction *bookmarkActionPointer = bookmarksToolBarPointer->actionAt(point);
+
+ // Check to see if an bookmark was clicked.
+ if (bookmarkActionPointer) // A bookmark was clicked.
+ {
+ // Create a bookmark context menu.
+ QMenu *bookmarkContextMenuPointer = new QMenu();
+
+ // Get the bookmark ID from the action.
+ int bookmarkId = bookmarkActionPointer->data().toInt();
+
+ // Add the open in new tab action to the menu.
+ bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("tab-new")), i18nc("Open bookmark in new tab context menu entry", "Open in New Tab"), [=]
+ {
+ // Get the bookmark.
+ BookmarkStruct *bookmarkStructPointer = BookmarksDatabase::getBookmark(bookmarkId);
+
+ // Open the bookmark in a new tab. `true` removes the URL line edit focus, `false` does not load a background tab.
+ tabWidgetPointer->addTab(true, false, bookmarkStructPointer->bookmarkUrl);
+ }
+ );
+
+ // Add the open in background tab action to the menu.
+ bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("tab-new")), i18nc("Open bookmark in background tab context menu entry", "Open in Background Tab"), [=]
+ {
+ // Get the bookmark.
+ BookmarkStruct *bookmarkStructPointer = BookmarksDatabase::getBookmark(bookmarkId);
+
+ // Open the bookmark in a new tab. `true` removes the URL line edit focus, `true` loads a background tab.
+ tabWidgetPointer->addTab(true, true, bookmarkStructPointer->bookmarkUrl);
+ }
+ );
+
+ // Add the open in new window action to the menu.
+ bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("window-new")), i18nc("Open bookmark in new window context menu entry", "Open in New Window"), [=]
+ {
+ // Get the bookmark.
+ BookmarkStruct *bookmarkStructPointer = BookmarksDatabase::getBookmark(bookmarkId);
+
+ // Create a new browser window.
+ BrowserWindow *browserWindowPointer = new BrowserWindow(false, &bookmarkStructPointer->bookmarkUrl);
+
+ // Show the new browser window.
+ browserWindowPointer->show();
+ }
+ );
+
+ // Add a separator.
+ bookmarkContextMenuPointer->addSeparator();
+
+ // Add the edit action to the menu.
+ bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("edit-entry")), i18nc("Edit bookmark context menu entry", "Edit"), [=]
+ {
+ // Get the current tab favorite icon.
+ QIcon currentTabFavoriteIcon = tabWidgetPointer->getCurrentTabFavoritIcon();
+
+ // Instantiate an edit bookmark dialog.
+ QDialog *editBookmarkDialogPointer = new EditBookmarkDialog(bookmarkId, currentTabFavoriteIcon);
+
+ // Show the dialog.
+ editBookmarkDialogPointer->show();
+
+ // Process bookmark events.
+ connect(editBookmarkDialogPointer, SIGNAL(bookmarkSaved()), this, SLOT(populateBookmarks()));
+ }
+ );
+
+ // Add the copy URL action to the menu.
+ bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("edit-copy")), i18nc("Copy bookmark url context menu entry", "Copy URL"), [=]
+ {
+ // Get the bookmark.
+ BookmarkStruct *bookmarkStructPointer = BookmarksDatabase::getBookmark(bookmarkId);
+
+ // Get a handle for the clipboard.
+ QClipboard *clipboard = QGuiApplication::clipboard();
+
+ // Place the URL on the keyboard.
+ clipboard->setText(bookmarkStructPointer->bookmarkUrl);
+ }
+ );
+
+ // Add a separator.
+ bookmarkContextMenuPointer->addSeparator();
+
+ // Add the delete action to the menu.
+ bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("delete")), i18nc("Delete bookmark context menu entry", "Delete"), [=]
+ {
+ // Delete the bookmark.
+ BookmarksDatabase::deleteBookmark(bookmarkId);
+
+ // Repopulate the bookmarks.
+ populateBookmarks();
+ }
+ );
+
+ // Delete the menu from memory when it is closed.
+ bookmarkContextMenuPointer->setAttribute(Qt::WA_DeleteOnClose);
+
+ // Display the context menu.
+ bookmarkContextMenuPointer->popup(bookmarksToolBarPointer->mapToGlobal(point));
+ }
+ else // The toolbar background was clicked.
+ {
+ // Temporarily set the context menu policy to the default.
+ bookmarksToolBarPointer->setContextMenuPolicy(Qt::DefaultContextMenu);
+
+ // Create a context menu event with the same position.
+ QContextMenuEvent *contextMenuEventPointer = new QContextMenuEvent(QContextMenuEvent::Mouse, point);
+
+ // Send the context menu event to the toolbar.
+ QCoreApplication::sendEvent(bookmarksToolBarPointer, contextMenuEventPointer);
+
+ // Reset the context menu policy.
+ bookmarksToolBarPointer->setContextMenuPolicy(Qt::CustomContextMenu);
+ }
+}
+