// Qt toolkit headers.
#include <QClipboard>
#include <QContextMenuEvent>
+#include <QDBusConnection>
+#include <QDBusConnectionInterface>
+#include <QDBusMessage>
#include <QFileDialog>
#include <QInputDialog>
#include <QNetworkCookie>
setCentralWidget(tabWidgetPointer);
// Get a handle for the action collection.
- KActionCollection *actionCollectionPointer = this->actionCollection();
+ actionCollectionPointer = this->actionCollection();
// Add the standard actions.
KStandardAction::print(tabWidgetPointer, SLOT(print()), actionCollectionPointer);
KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer);
zoomInActionPointer = KStandardAction::zoomIn(this, SLOT(incrementZoom()), actionCollectionPointer);
zoomOutActionPointer = KStandardAction::zoomOut(this, SLOT(decrementZoom()), actionCollectionPointer);
- KStandardAction::redisplay(this, SLOT(refresh()), actionCollectionPointer);
+ refreshActionPointer = KStandardAction::redisplay(this, SLOT(refresh()), actionCollectionPointer);
fullScreenActionPointer = KStandardAction::fullScreen(this, SLOT(toggleFullScreen()), this, actionCollectionPointer);
QAction *backActionPointer = KStandardAction::back(this, SLOT(back()), actionCollectionPointer);
QAction *forwardActionPointer = KStandardAction::forward(this, SLOT(forward()), actionCollectionPointer);
KStandardAction::home(this, SLOT(home()), actionCollectionPointer);
- KStandardAction::addBookmark(this, SLOT(showAddBookmarkDialog()), actionCollectionPointer);
QAction *editBookmarksActionPointer = KStandardAction::editBookmarks(this, SLOT(editBookmarks()), actionCollectionPointer);
KStandardAction::preferences(this, SLOT(showSettingsDialog()), actionCollectionPointer);
KStandardAction::find(this, SLOT(showFindTextActions()), actionCollectionPointer);
// Add the custom actions.
QAction *newTabActionPointer = actionCollectionPointer->addAction(QLatin1String("new_tab"));
QAction *newWindowActionPointer = actionCollectionPointer->addAction(QLatin1String("new_window"));
+ QAction *saveArchiveActionPointer = actionCollectionPointer->addAction(QLatin1String("save_archive"));
zoomDefaultActionPointer = actionCollectionPointer->addAction(QLatin1String("zoom_default"));
QAction *reloadAndBypassCacheActionPointer = actionCollectionPointer->addAction(QLatin1String("reload_and_bypass_cache"));
+ stopActionPointer = actionCollectionPointer->addAction(QLatin1String("stop"));
viewSourceActionPointer = actionCollectionPointer->addAction(QLatin1String("view_source"));
viewSourceInNewTabActionPointer = actionCollectionPointer->addAction(QLatin1String("view_source_in_new_tab"));
+ developerToolsActionPointer = actionCollectionPointer->addAction(QLatin1String("developer_tools"));
javaScriptActionPointer = actionCollectionPointer->addAction(QLatin1String("javascript"));
localStorageActionPointer = actionCollectionPointer->addAction(QLatin1String("local_storage"));
domStorageActionPointer = actionCollectionPointer->addAction(QLatin1String("dom_storage"));
searchEngineBingActionPointer = actionCollectionPointer->addAction(QLatin1String("search_engine_bing"));
searchEngineYahooActionPointer = actionCollectionPointer->addAction(QLatin1String("search_engine_yahoo"));
searchEngineCustomActionPointer = actionCollectionPointer->addAction(QLatin1String("search_engine_custom"));
- QAction *addFolderPointer = actionCollectionPointer->addAction(QLatin1String("add_folder"));
viewBookmarksToolBarActionPointer = actionCollectionPointer->addAction(QLatin1String("view_bookmarks_toolbar"));
QAction *domainSettingsActionPointer = actionCollectionPointer->addAction(QLatin1String("domain_settings"));
cookiesActionPointer = actionCollectionPointer->addAction(QLatin1String("cookies"));
domStorageActionPointer->setCheckable(true);
findCaseSensitiveActionPointer->setCheckable(true);
viewSourceActionPointer->setCheckable(true);
+ developerToolsActionPointer->setCheckable(true);
userAgentPrivacyBrowserActionPointer->setCheckable(true);
userAgentWebEngineDefaultActionPointer->setCheckable(true);
userAgentFirefoxLinuxActionPointer->setCheckable(true);
UserAgentHelper *userAgentHelperPointer = new UserAgentHelper();
// Set the action text.
- viewSourceActionPointer->setText(i18nc("View source action", "View Source"));
- viewSourceInNewTabActionPointer->setText(i18nc("View source in new tab action", "View Source in New Tab"));
newTabActionPointer->setText(i18nc("New tab action", "New Tab"));
newWindowActionPointer->setText(i18nc("New window action", "New Window"));
+ saveArchiveActionPointer->setText(i18nc("Save archive action", "Save Archive"));
zoomDefaultActionPointer->setText(i18nc("Zoom default action", "Zoom Default"));
reloadAndBypassCacheActionPointer->setText(i18nc("Reload and bypass cache action", "Reload and Bypass Cache"));
+ stopActionPointer->setText(i18nc("Stop action", "Stop"));
+ viewSourceActionPointer->setText(i18nc("View source action", "View Source"));
+ viewSourceInNewTabActionPointer->setText(i18nc("View source in new tab action", "View Source in New Tab"));
+ developerToolsActionPointer->setText(i18nc("Developer tools action", "Developer Tools"));
javaScriptActionPointer->setText(i18nc("JavaScript action", "JavaScript"));
localStorageActionPointer->setText(i18nc("The Local Storage action", "Local Storage"));
domStorageActionPointer->setText(i18nc("DOM Storage action", "DOM Storage"));
searchEngineGoogleActionPointer->setText(i18nc("Search engine", "Google"));
searchEngineBingActionPointer->setText(i18nc("Search engine", "Bing"));
searchEngineYahooActionPointer->setText(i18nc("Search engine", "Yahoo"));
- addFolderPointer->setText(i18nc("Add folder", "Add Folder"));
viewBookmarksToolBarActionPointer->setText(i18nc("View bookmarks toolbar", "View Bookmarks Toolbar"));
domainSettingsActionPointer->setText(i18nc("Domain Settings action", "Domain Settings"));
cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", 0));
// The toolbar icons don't pick up unless the size is explicit, probably because the toolbar ends up being an intermediate size.
newTabActionPointer->setIcon(QIcon::fromTheme(QLatin1String("tab-new")));
newWindowActionPointer->setIcon(QIcon::fromTheme(QLatin1String("window-new")));
+ saveArchiveActionPointer->setIcon(QIcon::fromTheme(QLatin1String("document-save")));
zoomDefaultActionPointer->setIcon(QIcon::fromTheme(QLatin1String("zoom-fit-best")));
reloadAndBypassCacheActionPointer->setIcon(QIcon::fromTheme(QLatin1String("view-refresh")));
+ stopActionPointer->setIcon(QIcon::fromTheme(QLatin1String("process-stop")));
viewSourceActionPointer->setIcon(QIcon::fromTheme(QLatin1String("view-choose"), QIcon::fromTheme(QLatin1String("accessories-text-editor"))));
viewSourceInNewTabActionPointer->setIcon(QIcon::fromTheme(QLatin1String("view-choose"), QIcon::fromTheme(QLatin1String("accessories-text-editor"))));
+ developerToolsActionPointer->setIcon(QIcon::fromTheme(QLatin1String("add-subtitle"), QIcon::fromTheme("system-run")));
domStorageActionPointer->setIcon(QIcon::fromTheme(QLatin1String("code-class"), QIcon(QLatin1String("/usr/share/icons/gnome/32x32/actions/gtk-unindent-ltr.png"))));
- userAgentPrivacyBrowserActionPointer->setIcon(QIcon(":/icons/privacy-mode.svg"));
- userAgentWebEngineDefaultActionPointer->setIcon(QIcon::fromTheme(QLatin1String("qtlogo"), QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new")))));
+ userAgentPrivacyBrowserActionPointer->setIcon(QIcon(QLatin1String(":/icons/privacy-mode.svg")));
+ userAgentWebEngineDefaultActionPointer->setIcon(QIcon::fromTheme(QLatin1String("qtlogo"), QIcon::fromTheme(QLatin1String("user-group-properties"),
+ QIcon::fromTheme(QLatin1String("contact-new")))));
userAgentFirefoxLinuxActionPointer->setIcon(QIcon::fromTheme(QLatin1String("firefox-esr"), QIcon::fromTheme(QLatin1String("user-group-properties"),
QIcon::fromTheme(QLatin1String("contact-new")))));
userAgentChromiumLinuxActionPointer->setIcon(QIcon::fromTheme(QLatin1String("chromium"), QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new")))));
searchEngineYahooActionPointer->setIcon(QIcon::fromTheme(QLatin1String("im-yahoo"), QIcon::fromTheme(QLatin1String("edit-find"))));
searchEngineCustomActionPointer->setIcon(QIcon::fromTheme(QLatin1String("edit-find")));
zoomFactorActionPointer->setIcon(QIcon::fromTheme(QLatin1String("zoom-fit-best")));
- addFolderPointer->setIcon(QIcon::fromTheme(QLatin1String("folder-add")));
- viewBookmarksToolBarActionPointer->setIcon(QIcon::fromTheme(QLatin1String("bookmarks")));
+ editBookmarksActionPointer->setIcon(QIcon::fromTheme(QLatin1String("bookmark-edit"), QIcon::fromTheme(QLatin1String("bookmark-new"))));
+ viewBookmarksToolBarActionPointer->setIcon(QIcon::fromTheme(QLatin1String("bookmarks"), QIcon::fromTheme(QLatin1String("bookmark-new"))));
domainSettingsActionPointer->setIcon(QIcon::fromTheme(QLatin1String("settings-configure"), QIcon::fromTheme(QLatin1String("preferences-desktop"))));
cookiesActionPointer->setIcon(QIcon::fromTheme(QLatin1String("preferences-web-browser-cookies"), QIcon::fromTheme(QLatin1String("appointment-new"))));
findCaseSensitiveActionPointer->setIcon(QIcon::fromTheme(QLatin1String("format-text-lowercase"), QIcon::fromTheme(QLatin1String("/usr/share/icons/gnome/32x32/apps/fonts.png"))));
// Create the key sequences.
QKeySequence ctrlTKeySequence = QKeySequence(i18nc("The open new tab key sequence.", "Ctrl+T"));
QKeySequence ctrlNKeySequence = QKeySequence(i18nc("The open new window key sequence.", "Ctrl+N"));
+ QKeySequence ctrlAKeySequence = QKeySequence(i18nc("The save archive key sequence.", "Ctrl+A"));
QKeySequence ctrl0KeySequence = QKeySequence(i18nc("The zoom default key sequence.", "Ctrl+0"));
QKeySequence ctrlF5KeySequence = QKeySequence(i18nc("The reload and bypass cache key sequence.", "Ctrl+F5"));
+ QKeySequence ctrlShiftXKeySequence = QKeySequence(i18nc("The stop key sequence.", "Ctrl+Shift+X"));
QKeySequence ctrlUKeySequence = QKeySequence(i18nc("The view source key sequence.", "Ctrl+U"));
QKeySequence ctrlShiftUKeySequence = QKeySequence(i18nc("The view source in new tab key sequence.", "Ctrl+Shift+U"));
+ QKeySequence f12KeySequence = QKeySequence(i18nc("The developer tools key sequence.", "F12"));
QKeySequence ctrlShiftPKeySequence = QKeySequence(i18nc("The print preview key sequence.", "Ctrl+Shift+P"));
QKeySequence ctrlJKeySequence = QKeySequence(i18nc("The JavaScript key sequence.", "Ctrl+J"));
QKeySequence ctrlLKeySequence = QKeySequence(i18nc("The local storage key sequence.", "Ctrl+L"));
QKeySequence ctrlShiftYKeySequence = QKeySequence(i18nc("The Yahoo search engine key sequence.", "Ctrl+Shift+Y"));
QKeySequence ctrlShiftCKeySequence = QKeySequence(i18nc("The custom search engine key sequence.", "Ctrl+Shift+C"));
QKeySequence ctrlAltShiftBKeySequence = QKeySequence(i18nc("The edit bookmarks key sequence.", "Ctrl+Alt+Shift+B"));
- QKeySequence altFKeySequence = QKeySequence(i18nc("The add folder key sequence.", "Alt+F"));
QKeySequence ctrlAltBKeySequence = QKeySequence(i18nc("The view bookmarks toolbar key sequence.", "Ctrl+Alt+B"));
QKeySequence ctrlShiftDKeySequence = QKeySequence(i18nc("The domain settings key sequence.", "Ctrl+Shift+D"));
QKeySequence ctrlSemicolonKeySequence = QKeySequence(i18nc("The cookies dialog key sequence.", "Ctrl+;"));
// Set the action key sequences.
actionCollectionPointer->setDefaultShortcut(newTabActionPointer, ctrlTKeySequence);
actionCollectionPointer->setDefaultShortcut(newWindowActionPointer, ctrlNKeySequence);
+ actionCollectionPointer->setDefaultShortcut(saveArchiveActionPointer, ctrlAKeySequence);
actionCollectionPointer->setDefaultShortcut(zoomDefaultActionPointer, ctrl0KeySequence);
actionCollectionPointer->setDefaultShortcut(reloadAndBypassCacheActionPointer, ctrlF5KeySequence);
+ actionCollectionPointer->setDefaultShortcut(stopActionPointer, ctrlShiftXKeySequence);
actionCollectionPointer->setDefaultShortcut(viewSourceActionPointer, ctrlUKeySequence);
actionCollectionPointer->setDefaultShortcut(viewSourceInNewTabActionPointer, ctrlShiftUKeySequence);
+ actionCollectionPointer->setDefaultShortcut(developerToolsActionPointer, f12KeySequence);
actionCollectionPointer->setDefaultShortcut(printPreviewActionPointer, ctrlShiftPKeySequence);
actionCollectionPointer->setDefaultShortcut(javaScriptActionPointer, ctrlJKeySequence);
actionCollectionPointer->setDefaultShortcut(localStorageActionPointer, ctrlLKeySequence);
actionCollectionPointer->setDefaultShortcut(searchEngineYahooActionPointer, ctrlShiftYKeySequence);
actionCollectionPointer->setDefaultShortcut(searchEngineCustomActionPointer, ctrlShiftCKeySequence);
actionCollectionPointer->setDefaultShortcut(editBookmarksActionPointer, ctrlAltShiftBKeySequence);
- actionCollectionPointer->setDefaultShortcut(addFolderPointer, altFKeySequence);
actionCollectionPointer->setDefaultShortcut(viewBookmarksToolBarActionPointer, ctrlAltBKeySequence);
actionCollectionPointer->setDefaultShortcut(domainSettingsActionPointer, ctrlShiftDKeySequence);
actionCollectionPointer->setDefaultShortcut(cookiesActionPointer, ctrlSemicolonKeySequence);
// Execute the actions.
connect(newTabActionPointer, SIGNAL(triggered()), tabWidgetPointer, SLOT(addTab()));
connect(newWindowActionPointer, SIGNAL(triggered()), this, SLOT(newWindow()));
+ connect(saveArchiveActionPointer, SIGNAL(triggered()), tabWidgetPointer, SLOT(saveArchive()));
connect(zoomDefaultActionPointer, SIGNAL(triggered()), this, SLOT(zoomDefault()));
connect(reloadAndBypassCacheActionPointer, SIGNAL(triggered()), this, SLOT(reloadAndBypassCache()));
+ connect(stopActionPointer, SIGNAL(triggered()), tabWidgetPointer, SLOT(stop()));
connect(viewSourceActionPointer, SIGNAL(triggered()), this, SLOT(toggleViewSource()));
connect(viewSourceInNewTabActionPointer, SIGNAL(triggered()), this, SLOT(toggleViewSourceInNewTab()));
+ connect(developerToolsActionPointer, SIGNAL(triggered()), this, SLOT(toggleDeveloperTools()));
connect(zoomFactorActionPointer, SIGNAL(triggered()), this, SLOT(getZoomFactorFromUser()));
- connect(addFolderPointer, SIGNAL(triggered()), this, SLOT(showAddFolderDialog()));
connect(viewBookmarksToolBarActionPointer, SIGNAL(triggered()), this, SLOT(toggleViewBookmarksToolBar()));
connect(cookiesActionPointer, SIGNAL(triggered()), this, SLOT(showCookiesDialog()));
connect(domainSettingsActionPointer, SIGNAL(triggered()), this, SLOT(showDomainSettingsDialog()));
connect(localStorageActionPointer, SIGNAL(triggered()), this, SLOT(toggleLocalStorage()));
connect(domStorageActionPointer, SIGNAL(triggered()), this, SLOT(toggleDomStorage()));
- // Update the URL toolbar actions.
+ // Update the actions from the tab widget.
+ connect(tabWidgetPointer, SIGNAL(updateDeveloperToolsAction(bool)), developerToolsActionPointer, SLOT(setChecked(bool)));
connect(tabWidgetPointer, SIGNAL(updateBackAction(bool)), backActionPointer, SLOT(setEnabled(bool)));
connect(tabWidgetPointer, SIGNAL(updateForwardAction(bool)), forwardActionPointer, SLOT(setEnabled(bool)));
connect(tabWidgetPointer, SIGNAL(updateJavaScriptAction(bool)), this, SLOT(updateJavaScriptAction(bool)));
connect(findCaseSensitiveActionPointer, SIGNAL(triggered()), this, SLOT(toggleFindCaseSensitive()));
connect(hideFindTextActionPointer, SIGNAL(triggered()), this, SLOT(hideFindTextActions()));
+
+
// Setup the GUI based on the browserwindowui.rc file.
setupGUI(StandardWindowOption::Default, ("browserwindowui.rc"));
// Show the clear button on the find line edit.
findTextLineEditPointer->setClearButtonEnabled(true);
- // Add an edit or add domain settings action to the URL line edit.
+ // Add the actions to the URL line edit.
+ bookmarkedActionPointer = urlLineEditPointer->addAction(QIcon::fromTheme("non-starred-symbolic"), QLineEdit::LeadingPosition);
QAction *addOrEditDomainSettingsActionPointer = urlLineEditPointer->addAction(QIcon::fromTheme("settings-configure", QIcon::fromTheme(QLatin1String("preferences-desktop"))),
QLineEdit::TrailingPosition);
- // Add or edit the current domain settings.
+ // Set the bookmarked action pointer to be checkable.
+ bookmarkedActionPointer->setCheckable(true);
+
+ // Connect the URL line edit actions.
+ connect(bookmarkedActionPointer, SIGNAL(triggered()), this, SLOT(toggleBookmark()));
connect(addOrEditDomainSettingsActionPointer, SIGNAL(triggered()), this, SLOT(addOrEditDomainSettings()));
// Create a find text label pointer.
// Update the progress bar.
connect(tabWidgetPointer, SIGNAL(showProgressBar(const int)), this, SLOT(showProgressBar(const int)));
- connect(tabWidgetPointer, SIGNAL(hideProgressBar()), progressBarPointer, SLOT(hide()));
+ connect(tabWidgetPointer, SIGNAL(hideProgressBar()), this, SLOT(hideProgressBar()));
// Update the URL line edit focus.
connect(tabWidgetPointer, SIGNAL(clearUrlLineEditFocus()), this, SLOT(clearUrlLineEditFocus()));
bookmarksMenuPointer->addSeparator();
// Initialize the current bookmarks lists.
+ finalBookmarkFolderMenuActionList = QList<QPair<QMenu *, QAction *> *>();
bookmarksMenuActionList = QList<QPair<QMenu *, QAction *> *>();
bookmarksMenuSubmenuList = QList<QPair<QMenu *, QMenu *> *>();
bookmarksToolBarActionList = QList<QAction*>();
// Show the custom bookmark context menu when requested.
connect(bookmarksToolBarPointer, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showBookmarkContextMenu(const QPoint&)));
- // Populate the bookmarks.
- populateBookmarks();
+ // Populate the bookmarks in this window.
+ populateBookmarksInThisWindow();
// Populate the UI.
// This must be done here, because otherwise, if a URL is loaded, like a local file, that does not trigger a call to TabWidget::applyDomainSettings, the UI will not be fully populated.
}
}
+void BrowserWindow::addFinalBookmarkFolderMenuActions(QMenu *menuPointer, double folderId)
+{
+ // Get the database ID.
+ int folderDatabaseId = BookmarksDatabase::getFolderDatabaseId(folderId);
+
+ // Add a separator.
+ menuPointer->addSeparator();
+
+ // Add the add bookmark action to the menu.
+ QAction *addBookmarkActionPointer = menuPointer->addAction(QIcon::fromTheme(QLatin1String("bookmark-new")), i18nc("The add bookmark action", "Add Bookmark"), [=]
+ {
+ // Instantiate an add bookmark dialog.
+ AddBookmarkDialog *addBookmarkDialogPointer = new AddBookmarkDialog(tabWidgetPointer->getCurrentTabTitle(), tabWidgetPointer->getCurrentTabUrl(),
+ tabWidgetPointer->getCurrentTabFavoritIcon(), folderId);
+
+ // Update the displayed bookmarks when a new one is added.
+ connect(addBookmarkDialogPointer, SIGNAL(bookmarkAdded()), this, SLOT(populateBookmarksInAllWindows()));
+
+ // Show the dialog.
+ addBookmarkDialogPointer->show();
+ }
+ );
+
+ // Add the add folder action to the menu.
+ QAction *addFolderActionPointer = menuPointer->addAction(QIcon::fromTheme(QLatin1String("folder-add")), i18nc("The add folder action", "Add Folder"), [=]
+ {
+ // Instantiate an add folder dialog.
+ AddFolderDialog *addFolderDialogPointer = new AddFolderDialog(tabWidgetPointer->getCurrentTabFavoritIcon(), folderId);
+
+ // Update the displayed bookmarks when a folder is added.
+ connect(addFolderDialogPointer, SIGNAL(folderAdded()), this, SLOT(populateBookmarksInAllWindows()));
+
+ // Show the dialog.
+ addFolderDialogPointer->show();
+ }
+ );
+
+ // Add a separator.
+ menuPointer->addSeparator();
+
+ // Add the open folder in new tabs action to the menu.
+ QAction *openFolderInNewTabsActionPointer = menuPointer->addAction(QIcon::fromTheme(QLatin1String("tab-new")), i18nc("The open folder in new tabs action", "Open Folder in New Tabs"), [=]
+ {
+ // Get all the folder URLs.
+ QList<QString> *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(folderId);
+
+ // Open the URLs in new tabs. `true` removes the URL line edit focus, `true` opens the new tabs in an adjacent tab. `false` does not load a background tab.
+ for (QString url : *folderUrlsListPointer)
+ tabWidgetPointer->addTab(true, true, false, url);
+ }
+ );
+
+ // Add the open folder in background tabs action to the menu.
+ QAction *openFolderInBackgroundTabsActionPointer = menuPointer->addAction(QIcon::fromTheme(QLatin1String("tab-new")),
+ i18nc("The open folder in background tabs action", "Open Folder in Background Tabs"), [=]
+ {
+ // Get all the folder URLs.
+ QList<QString> *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(folderId);
+
+ // Open the URLs in new tabs. `true` removes the URL line edit focus, `true` opens the new tabs in an adjacent tab. `true` loads a background tab.
+ for (QString url : *folderUrlsListPointer)
+ tabWidgetPointer->addTab(true, true, true, url);
+ }
+ );
+
+ // Add the open folder in new window action to the menu.
+ QAction *openFolderInNewWindowActionPointer = menuPointer->addAction(QIcon::fromTheme(QLatin1String("window-new")), i18nc("The open folder in new window action", "Open Folder in New Window"), [=]
+ {
+ // Get all the folder URLs.
+ QList<QString> *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(folderId);
+
+ // Create a new browser window.
+ BrowserWindow *browserWindowPointer = new BrowserWindow(false, &folderUrlsListPointer->first());
+
+ // Get a count of the folder URLs.
+ const int folderUrls = folderUrlsListPointer->count();
+
+ // Load all the other URLs. `true` removes the URL line edit focus, `false` does not load the new tabs in adjacent tabs. `true` loads a background tab.
+ for (int i = 1; i < folderUrls; ++i)
+ browserWindowPointer->tabWidgetPointer->addTab(true, false, true, folderUrlsListPointer->value(i));
+
+ // Show the new browser window.
+ browserWindowPointer->show();
+ }
+ );
+
+ // Add a separator.
+ menuPointer->addSeparator();
+
+ // Add the edit folder action to the menu if this is not the root bookmark menu.
+ if (folderId != 0)
+ {
+ QAction *editFolderActionPointer = menuPointer->addAction(QIcon::fromTheme(QLatin1String("document-edit")), i18nc("The edit folder action", "Edit Folder"), [=]
+ {
+ // Get the current tab favorite icon.
+ QIcon currentTabFavoriteIcon = tabWidgetPointer->getCurrentTabFavoritIcon();
+
+ // Instantiate an edit folder dialog.
+ QDialog *editFolderDialogPointer = new EditFolderDialog(folderDatabaseId, currentTabFavoriteIcon);
+
+ // Show the dialog.
+ editFolderDialogPointer->show();
+
+ // Process bookmark events.
+ connect(editFolderDialogPointer, SIGNAL(folderSaved()), this, SLOT(populateBookmarksInAllWindows()));
+ }
+ );
+
+ // Add the action to the beginning of the final bookmark folder menu action list.
+ finalBookmarkFolderMenuActionList.prepend(new QPair<QMenu *, QAction *>(menuPointer, editFolderActionPointer));
+ }
+
+ // Add the delete folder action to the menu.
+ QAction *deleteFolderActionPointer = menuPointer->addAction(QIcon::fromTheme(QLatin1String("edit-delete")), i18nc("Delete folder context menu entry", "Delete Folder"), [=]
+ {
+ // Create an items to delete list.
+ QList<int>* itemsToDeleteListPointer = new QList<int>;
+
+ // Add the folder to the list of items to delete if it is not the root folder.
+ if (folderId != 0)
+ itemsToDeleteListPointer->append(folderDatabaseId);
+
+ // Add the folder contents to the list of items to delete.
+ itemsToDeleteListPointer->append(*BookmarksDatabase::getFolderContentsDatabaseIdsRecursively(folderId));
+
+ // Instantiate a delete dialog message box.
+ QMessageBox deleteDialogMessageBox;
+
+ // Set the icon.
+ deleteDialogMessageBox.setIcon(QMessageBox::Warning);
+
+ // Set the window title.
+ deleteDialogMessageBox.setWindowTitle(i18nc("Delete bookmarks dialog title", "Delete Bookmarks"));
+
+ // Set the text.
+ deleteDialogMessageBox.setText(i18ncp("Delete bookmarks dialog main message", "Delete %1 bookmark item?", "Delete %1 bookmark items?", itemsToDeleteListPointer->count()));
+
+ // Set the informative text.
+ deleteDialogMessageBox.setInformativeText(i18nc("Delete bookmarks dialog secondary message", "This cannot be undone."));
+
+ // Set the standard buttons.
+ deleteDialogMessageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+
+ // Set the default button.
+ deleteDialogMessageBox.setDefaultButton(QMessageBox::No);
+
+ // Display the dialog and capture the return value.
+ int returnValue = deleteDialogMessageBox.exec();
+
+ // Delete the domain if instructed.
+ if (returnValue == QMessageBox::Yes)
+ {
+ // Get the parent folder ID.
+ double parentFolderId = BookmarksDatabase::getParentFolderId(folderDatabaseId);
+
+ // Delete the folder and its contents.
+ for (const int databaseId : *itemsToDeleteListPointer)
+ BookmarksDatabase::deleteBookmark(databaseId);
+
+ // Update the display order of the bookmarks in the parent folder.
+ BookmarksDatabase::updateFolderContentsDisplayOrder(parentFolderId);
+
+ // Repopulate the bookmarks.
+ populateBookmarksInAllWindows();
+ }
+ }
+ );
+
+ // Add the key sequences if this is the root bookmarks menu.
+ if (folderId == 0)
+ {
+ // Create the key sequences.
+ QKeySequence ctrlBKeySequence = QKeySequence(i18nc("The add bookmark key sequence.", "Ctrl+B"));
+ QKeySequence metaFKeySequence = QKeySequence(i18nc("The add folder key sequence.", "Meta+F"));
+
+ // Set the action key sequences.
+ actionCollectionPointer->setDefaultShortcut(addBookmarkActionPointer, ctrlBKeySequence);
+ actionCollectionPointer->setDefaultShortcut(addFolderActionPointer, metaFKeySequence);
+ }
+
+ // Add the actions to the beginning of the final bookmark folder menu action list.
+ finalBookmarkFolderMenuActionList.prepend(new QPair<QMenu *, QAction *>(menuPointer, addBookmarkActionPointer));
+ finalBookmarkFolderMenuActionList.prepend(new QPair<QMenu *, QAction *>(menuPointer, addFolderActionPointer));
+ finalBookmarkFolderMenuActionList.prepend(new QPair<QMenu *, QAction *>(menuPointer, openFolderInNewTabsActionPointer));
+ finalBookmarkFolderMenuActionList.prepend(new QPair<QMenu *, QAction *>(menuPointer, openFolderInBackgroundTabsActionPointer));
+ finalBookmarkFolderMenuActionList.prepend(new QPair<QMenu *, QAction *>(menuPointer, openFolderInNewWindowActionPointer));
+ finalBookmarkFolderMenuActionList.prepend(new QPair<QMenu *, QAction *>(menuPointer, deleteFolderActionPointer));
+}
+
void BrowserWindow::addOrEditDomainSettings() const
{
// Remove the focus from the URL line edit.
BookmarksDialog *bookmarksDialogPointer = new BookmarksDialog(tabWidgetPointer->getCurrentTabTitle(), tabWidgetPointer->getCurrentTabUrl(), tabWidgetPointer->getCurrentTabFavoritIcon());
// Update the displayed bookmarks when edited.
- connect(bookmarksDialogPointer, SIGNAL(bookmarkUpdated()), this, SLOT(populateBookmarks()));
+ connect(bookmarksDialogPointer, SIGNAL(bookmarkUpdated()), this, SLOT(populateBookmarksInAllWindows()));
// Show the dialog.
bookmarksDialogPointer->show();
tabWidgetPointer->home();
}
+void BrowserWindow::hideProgressBar() const
+{
+ // Hide the progress bar.
+ progressBarPointer->hide();
+
+ // Disable and hide the stop action.
+ stopActionPointer->setEnabled(false);
+ stopActionPointer->setVisible(false);
+
+ // Enable and show the refresh action.
+ refreshActionPointer->setEnabled(true);
+ refreshActionPointer->setVisible(true);
+}
+
void BrowserWindow::incrementZoom()
{
// Update the current zoom factor.
browserWindowPointer->show();
}
-void BrowserWindow::populateBookmarks()
+void BrowserWindow::populateBookmarksInAllWindows() const
{
+ // Get a list of all the registered service names.
+ QStringList registeredServiceNames = QDBusConnection::sessionBus().interface()->registeredServiceNames().value();
+
+ // Get a list of all the Privacy Browser windows, which will be `com.stoutner.privacybrowser-` with the PID appended.
+ QStringList privacyBrowserServiceNames = registeredServiceNames.filter("com.stoutner.privacybrowser");
+
+ // Repopulate the bookmarks in each window.
+ for (QString privacyBrowserServiceName : privacyBrowserServiceNames)
+ {
+ // Prepare the D-Bus message.
+ QDBusMessage dBusMessage = QDBusMessage::createMethodCall(privacyBrowserServiceName, "/privacybrowser/MainWindow_1", "com.stoutner.privacybrowser.BrowserWindow", "populateBookmarksInThisWindow");
+
+ // Make it so.
+ QDBusConnection::sessionBus().send(dBusMessage);
+ }
+}
+
+void BrowserWindow::populateBookmarksInThisWindow()
+{
+ // Remove all the final bookmark folder menu actions.
+ for (QPair<QMenu *, QAction *> *finalBookmarkFolderMenuActionPair : finalBookmarkFolderMenuActionList)
+ {
+ // Remove the action.
+ finalBookmarkFolderMenuActionPair->first->removeAction(finalBookmarkFolderMenuActionPair->second);
+ }
+
// Remove all the current menu bookmarks.
- for (QPair<QMenu *, QAction *> *bookmarkPairPointer : bookmarksMenuActionList)
+ for (QPair<QMenu *, QAction *> *bookmarkMenuActionPairPointer : bookmarksMenuActionList)
{
// Remove the bookmark.
- bookmarkPairPointer->first->removeAction(bookmarkPairPointer->second);
+ bookmarkMenuActionPairPointer->first->removeAction(bookmarkMenuActionPairPointer->second);
}
// Remove all the current menu subfolders.
}
// Remove all the current toolbar subfolders.
- for (QPair<QMenu *, QAction *> *subfolderPairPointer : bookmarksToolBarSubfolderActionList)
+ for (QPair<QMenu *, QAction *> *subfolderActionPairPointer : bookmarksToolBarSubfolderActionList)
{
// Remove the action from the subfolder.
- subfolderPairPointer->first->removeAction(subfolderPairPointer->second);
+ subfolderActionPairPointer->first->removeAction(subfolderActionPairPointer->second);
}
// Remove all the current toolbar bookmarks.
// Set the layout of each bookmark to be left aligned.
for(int i = 0; i < bookmarkCount; ++i)
bookmarksToolBarLayoutPointer->itemAt(i)->setAlignment(Qt::AlignLeft);
+
+ // Update the bookmarked action.
+ updateBookmarkedAction();
}
void BrowserWindow::populateBookmarksMenuSubfolders(const double folderId, QMenu *menuPointer)
bookmarksMenuActionList.prepend(new QPair<QMenu *, QAction *>(menuPointer, menuBookmarkActionPointer));
}
}
+
+ // Add the extra items at the bottom of the menu.
+ addFinalBookmarkFolderMenuActions(menuPointer, folderId);
}
void BrowserWindow::populateBookmarksToolBar()
// Add the extra items to the toolbar folder menus. The first item in the pair is the menu pointer. The second is the folder ID.
for (QPair<QMenu *, const double> *menuAndFolderIdPairPointer : bookmarksToolBarMenuList)
{
- // Add a separator.
- menuAndFolderIdPairPointer->first->addSeparator();
-
- // Add the open folder in new tabs action to the menu.
- menuAndFolderIdPairPointer->first->addAction(QIcon::fromTheme(QLatin1String("tab-new")), i18nc("The open folder in new tabs action", "Open Folder in New Tabs"), [=]
- {
- // Get all the folder URLs.
- QList<QString> *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(menuAndFolderIdPairPointer->second);
-
- // Open the URLs in new tabs. `true` removes the URL line edit focus, `false` does not load a background tab.
- for (QString url : *folderUrlsListPointer)
- tabWidgetPointer->addTab(true, false, url);
- }
- );
-
- // Add the open folder in background tabs action to the menu.
- menuAndFolderIdPairPointer->first->addAction(QIcon::fromTheme(QLatin1String("tab-new")), i18nc("The open folder in background tabs action", "Open Folder in Background Tabs"), [=]
- {
- // Get all the folder URLs.
- QList<QString> *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(menuAndFolderIdPairPointer->second);
-
- // Open the URLs in new tabs. `true` removes the URL line edit focus, `true` loads a background tab.
- for (QString url : *folderUrlsListPointer)
- tabWidgetPointer->addTab(true, true, url);
- }
- );
-
- // Add the open folder in new window action to the menu.
- menuAndFolderIdPairPointer->first->addAction(QIcon::fromTheme(QLatin1String("window-new")), i18nc("The open folder in new window action", "Open Folder in New Window"), [=]
- {
- // Get all the folder URLs.
- QList<QString> *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(menuAndFolderIdPairPointer->second);
-
- // Create a new browser window.
- BrowserWindow *browserWindowPointer = new BrowserWindow(false, &folderUrlsListPointer->first());
-
- // Get a count of the folder URLs.
- const int folderUrls = folderUrlsListPointer->count();
-
- // Load all the other URLs. `true` removes the URL line edit focus, `true` loads a background tab.
- for (int i = 1; i < folderUrls; ++i)
- browserWindowPointer->tabWidgetPointer->addTab(true, true, folderUrlsListPointer->value(i));
-
- // Show the new browser window.
- browserWindowPointer->show();
- }
- );
-
- // Add a separator.
- menuAndFolderIdPairPointer->first->addSeparator();
-
- // Add the add bookmark action to the menu.
- menuAndFolderIdPairPointer->first->addAction(QIcon::fromTheme(QLatin1String("bookmark-new")), i18nc("The add bookmark action", "Add Bookmark"), [=]
- {
- // Instantiate an add bookmark dialog.
- AddBookmarkDialog *addBookmarkDialogPointer = new AddBookmarkDialog(tabWidgetPointer->getCurrentTabTitle(), tabWidgetPointer->getCurrentTabUrl(),
- tabWidgetPointer->getCurrentTabFavoritIcon(), menuAndFolderIdPairPointer->second);
-
- // Update the displayed bookmarks when a new one is added.
- connect(addBookmarkDialogPointer, SIGNAL(bookmarkAdded()), this, SLOT(populateBookmarks()));
-
- // Show the dialog.
- addBookmarkDialogPointer->show();
- }
- );
-
- // Add the add folder action to the menu.
- menuAndFolderIdPairPointer->first->addAction(QIcon::fromTheme(QLatin1String("folder-add")), i18nc("The add folder action", "Add Folder"), [=]
- {
- // Instantiate an add folder dialog.
- AddFolderDialog *addFolderDialogPointer = new AddFolderDialog(tabWidgetPointer->getCurrentTabFavoritIcon(), menuAndFolderIdPairPointer->second);
-
- // Update the displayed bookmarks when a folder is added.
- connect(addFolderDialogPointer, SIGNAL(folderAdded()), this, SLOT(populateBookmarks()));
-
- // Show the dialog.
- addFolderDialogPointer->show();
- }
- );
-
- // Add a separator.
- menuAndFolderIdPairPointer->first->addSeparator();
-
- // Add the edit folder action to the menu.
- menuAndFolderIdPairPointer->first->addAction(QIcon::fromTheme(QLatin1String("edit-entry")), i18nc("The edit folder action", "Edit Folder"), [=]
- {
- // Get the current tab favorite icon.
- QIcon currentTabFavoriteIcon = tabWidgetPointer->getCurrentTabFavoritIcon();
-
- // Instantiate an edit folder dialog.
- QDialog *editFolderDialogPointer = new EditFolderDialog(BookmarksDatabase::getFolderDatabaseId(menuAndFolderIdPairPointer->second), currentTabFavoriteIcon);
-
- // Show the dialog.
- editFolderDialogPointer->show();
-
- // Process bookmark events.
- connect(editFolderDialogPointer, SIGNAL(folderSaved()), this, SLOT(populateBookmarks()));
- }
- );
-
- // Add the delete folder action to the menu.
- menuAndFolderIdPairPointer->first->addAction(QIcon::fromTheme(QLatin1String("delete")), i18nc("Delete folder context menu entry", "Delete Folder"), [=]
- {
- // Get the folder database ID.
- int folderDatabaseId = BookmarksDatabase::getFolderDatabaseId(menuAndFolderIdPairPointer->second);
-
- // Create an items to delete list.
- QList<int>* itemsToDeleteListPointer = new QList<int>;
-
- // Add the folder to the list of items to delete.
- itemsToDeleteListPointer->append(folderDatabaseId);
-
- // Add the folder contents to the list of items to delete.
- itemsToDeleteListPointer->append(*BookmarksDatabase::getFolderContentsDatabaseIdsRecursively(menuAndFolderIdPairPointer->second));
-
- // Instantiate a delete dialog message box.
- QMessageBox deleteDialogMessageBox;
-
- // Set the icon.
- deleteDialogMessageBox.setIcon(QMessageBox::Warning);
-
- // Set the window title.
- deleteDialogMessageBox.setWindowTitle(i18nc("Delete bookmarks dialog title", "Delete Bookmarks"));
-
- // Set the text.
- deleteDialogMessageBox.setText(i18ncp("Delete bookmarks dialog main message", "Delete %1 bookmark item?", "Delete %1 bookmark items?", itemsToDeleteListPointer->count()));
-
- // Set the informative text.
- deleteDialogMessageBox.setInformativeText(i18nc("Delete bookmarks dialog secondary message", "This cannot be undone."));
-
- // Set the standard buttons.
- deleteDialogMessageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
-
- // Set the default button.
- deleteDialogMessageBox.setDefaultButton(QMessageBox::No);
-
- // Display the dialog and capture the return value.
- int returnValue = deleteDialogMessageBox.exec();
-
- // Delete the domain if instructed.
- if (returnValue == QMessageBox::Yes)
- {
- // Get the parent folder ID.
- double parentFolderId = BookmarksDatabase::getParentFolderId(folderDatabaseId);
-
- // Delete the folder and its contents.
- for (const int databaseId : *itemsToDeleteListPointer)
- BookmarksDatabase::deleteBookmark(databaseId);
-
- // Update the display order of the bookmarks in the parent folder.
- BookmarksDatabase::updateFolderContentsDisplayOrder(parentFolderId);
-
- // Repopulate the bookmarks.
- populateBookmarks();
- }
- }
- );
+ // Populate the final bookmarks menu entries.
+ addFinalBookmarkFolderMenuActions(menuAndFolderIdPairPointer->first, menuAndFolderIdPairPointer->second);
}
}
tabWidgetPointer->refresh();
}
-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::showAddFolderDialog() const
-{
- // Instantiate an add folder dialog.
- AddFolderDialog *addFolderDialogPointer = new AddFolderDialog(tabWidgetPointer->getCurrentTabFavoritIcon());
-
- // Update the displayed bookmarks when a folder is added.
- connect(addFolderDialogPointer, SIGNAL(folderAdded()), this, SLOT(populateBookmarks()));
-
- // Show the dialog.
- addFolderDialogPointer->show();
-}
-
void BrowserWindow::showBookmarkContextMenu(const QPoint &point)
{
// Get the bookmark action.
// Create the menu according to the type.
if (BookmarksDatabase::isFolder(databaseId)) // A folder was clicked.
{
- // Get the folder ID.
- double folderId = BookmarksDatabase::getFolderId(databaseId);
-
- // Add the open folder in new tabs action to the menu.
- bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("tab-new")), i18nc("The open folder in new tabs action", "Open Folder in New Tabs"), [=]
- {
- // Get all the folder URLs.
- QList<QString> *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(folderId);
-
- // Open the URLs in new tabs. `true` removes the URL line edit focus, `false` does not load a background tab.
- for (QString url : *folderUrlsListPointer)
- tabWidgetPointer->addTab(true, false, url);
- }
- );
-
- // Add the open folder in background tabs action to the menu.
- bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("tab-new")), i18nc("The open folder in background tabs action", "Open Folder in Background Tabs"), [=]
- {
- // Get all the folder URLs.
- QList<QString> *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(folderId);
-
- // Open the URLs in new tabs. `true` removes the URL line edit focus, `true` loads a background tab.
- for (QString url : *folderUrlsListPointer)
- tabWidgetPointer->addTab(true, true, url);
- }
- );
-
- // Add the open folder in new window action to the menu.
- bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("window-new")), i18nc("The open folder in new window action", "Open Folder in New Window"), [=]
- {
- // Get all the folder URLs.
- QList<QString> *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(folderId);
-
- // Create a new browser window.
- BrowserWindow *browserWindowPointer = new BrowserWindow(false, &folderUrlsListPointer->first());
-
- // Get a count of the folder URLs.
- const int folderUrls = folderUrlsListPointer->count();
-
- // Load all the other URLs. `true` removes the URL line edit focus, `true` loads a background tab.
- for (int i = 1; i < folderUrls; ++i)
- browserWindowPointer->tabWidgetPointer->addTab(true, true, folderUrlsListPointer->value(i));
-
- // Show the new browser window.
- browserWindowPointer->show();
- }
- );
-
- // Add a separator.
- bookmarkContextMenuPointer->addSeparator();
-
- // Add the add bookmark action to the menu.
- bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("bookmark-new")), i18nc("The add bookmark action", "Add Bookmark"), [=]
- {
- // Instantiate an add bookmark dialog.
- AddBookmarkDialog *addBookmarkDialogPointer = new AddBookmarkDialog(tabWidgetPointer->getCurrentTabTitle(), tabWidgetPointer->getCurrentTabUrl(),
- tabWidgetPointer->getCurrentTabFavoritIcon(), folderId);
-
- // Update the displayed bookmarks when a new one is added.
- connect(addBookmarkDialogPointer, SIGNAL(bookmarkAdded()), this, SLOT(populateBookmarks()));
-
- // Show the dialog.
- addBookmarkDialogPointer->show();
- }
- );
-
- // Add the add folder action to the menu.
- bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("folder-add")), i18nc("The add folder action", "Add Folder"), [=]
- {
- // Instantiate an add folder dialog.
- AddFolderDialog *addFolderDialogPointer = new AddFolderDialog(tabWidgetPointer->getCurrentTabFavoritIcon(), folderId);
-
- // Update the displayed bookmarks when a folder is added.
- connect(addFolderDialogPointer, SIGNAL(folderAdded()), this, SLOT(populateBookmarks()));
-
- // Show the dialog.
- addFolderDialogPointer->show();
- }
- );
-
- // Add a separator.
- bookmarkContextMenuPointer->addSeparator();
-
- // Add the edit folder action to the menu.
- bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("edit-entry")), i18nc("The edit folder action", "Edit Folder"), [=]
- {
- // Get the current tab favorite icon.
- QIcon currentTabFavoriteIcon = tabWidgetPointer->getCurrentTabFavoritIcon();
-
- // Instantiate an edit folder dialog.
- QDialog *editFolderDialogPointer = new EditFolderDialog(BookmarksDatabase::getFolderDatabaseId(folderId), currentTabFavoriteIcon);
-
- // Show the dialog.
- editFolderDialogPointer->show();
-
- // Process bookmark events.
- connect(editFolderDialogPointer, SIGNAL(folderSaved()), this, SLOT(populateBookmarks()));
- }
- );
-
- // Add the delete folder action to the menu.
- bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("delete")), i18nc("Delete folder context menu entry", "Delete Folder"), [=]
- {
- // Get the folder database ID.
- int folderDatabaseId = BookmarksDatabase::getFolderDatabaseId(folderId);
-
- // Create an items to delete list.
- QList<int>* itemsToDeleteListPointer = new QList<int>;
-
- // Add the folder to the list of items to delete.
- itemsToDeleteListPointer->append(folderDatabaseId);
-
- // Add the folder contents to the list of items to delete.
- itemsToDeleteListPointer->append(*BookmarksDatabase::getFolderContentsDatabaseIdsRecursively(folderId));
-
- // Instantiate a delete dialog message box.
- QMessageBox deleteDialogMessageBox;
-
- // Set the icon.
- deleteDialogMessageBox.setIcon(QMessageBox::Warning);
-
- // Set the window title.
- deleteDialogMessageBox.setWindowTitle(i18nc("Delete bookmarks dialog title", "Delete Bookmarks"));
-
- // Set the text.
- deleteDialogMessageBox.setText(i18ncp("Delete bookmarks dialog main message", "Delete %1 bookmark item?", "Delete %1 bookmark items?", itemsToDeleteListPointer->count()));
-
- // Set the informative text.
- deleteDialogMessageBox.setInformativeText(i18nc("Delete bookmarks dialog secondary message", "This cannot be undone."));
-
- // Set the standard buttons.
- deleteDialogMessageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
-
- // Set the default button.
- deleteDialogMessageBox.setDefaultButton(QMessageBox::No);
-
- // Display the dialog and capture the return value.
- int returnValue = deleteDialogMessageBox.exec();
-
- // Delete the domain if instructed.
- if (returnValue == QMessageBox::Yes)
- {
- // Get the parent folder ID.
- double parentFolderId = BookmarksDatabase::getParentFolderId(folderDatabaseId);
-
- // Delete the folder and its contents.
- for (const int databaseId : *itemsToDeleteListPointer)
- BookmarksDatabase::deleteBookmark(databaseId);
-
- // Update the display order of the bookmarks in the parent folder.
- BookmarksDatabase::updateFolderContentsDisplayOrder(parentFolderId);
-
- // Repopulate the bookmarks.
- populateBookmarks();
- }
- }
- );
+ // Populate the final bookmarks menu entries.
+ addFinalBookmarkFolderMenuActions(bookmarkContextMenuPointer, BookmarksDatabase::getFolderId(databaseId));
}
else // A bookmark was clicked.
{
// Get the bookmark.
BookmarkStruct *bookmarkStructPointer = BookmarksDatabase::getBookmark(databaseId);
- // 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->url);
+ // Open the bookmark in a new tab. `true` removes the URL line edit focus, `true` opens the new tab in an adjacent tab. `false` does not load a background tab.
+ tabWidgetPointer->addTab(true, true, false, bookmarkStructPointer->url);
}
);
// Get the bookmark.
BookmarkStruct *bookmarkStructPointer = BookmarksDatabase::getBookmark(databaseId);
- // Open the bookmark in a new tab. `true` removes the URL line edit focus, `true` loads a background tab.
- tabWidgetPointer->addTab(true, true, bookmarkStructPointer->url);
+ // Open the bookmark in a new tab. `true` removes the URL line edit focus, `true` opens the new tab in an adjacent tab. `true` loads a background tab.
+ tabWidgetPointer->addTab(true, true, true, bookmarkStructPointer->url);
}
);
bookmarkContextMenuPointer->addSeparator();
// Add the edit action to the menu.
- bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("edit-entry")), i18nc("Edit bookmark context menu entry", "Edit"), [=]
+ bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("document-edit")), i18nc("Edit bookmark context menu entry", "Edit"), [=]
{
// Get the current tab favorite icon.
QIcon currentTabFavoriteIcon = tabWidgetPointer->getCurrentTabFavoritIcon();
editBookmarkDialogPointer->show();
// Process bookmark events.
- connect(editBookmarkDialogPointer, SIGNAL(bookmarkSaved()), this, SLOT(populateBookmarks()));
+ connect(editBookmarkDialogPointer, SIGNAL(bookmarkSaved()), this, SLOT(populateBookmarksInAllWindows()));
}
);
bookmarkContextMenuPointer->addSeparator();
// Add the delete action to the menu.
- bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("delete")), i18nc("Delete bookmark context menu entry", "Delete"), [=]
+ bookmarkContextMenuPointer->addAction(QIcon::fromTheme(QLatin1String("edit-delete")), i18nc("Delete bookmark context menu entry", "Delete"), [=]
{
// Get the parent folder ID.
double parentFolderId = BookmarksDatabase::getParentFolderId(databaseId);
BookmarksDatabase::updateFolderContentsDisplayOrder(parentFolderId);
// Repopulate the bookmarks.
- populateBookmarks();
+ populateBookmarksInAllWindows();
}
);
}
connect(cookiesDialogPointer, SIGNAL(deleteCookie(QNetworkCookie)), tabWidgetPointer, SLOT(deleteCookieFromStore(QNetworkCookie)));
}
-void BrowserWindow::showDownloadLocationBrowseDialog() const
+void BrowserWindow::showDownloadDirectoryBrowseDialog() const
{
- // Get the current download location.
- QString currentDownloadLocation = downloadLocationComboBoxPointer->currentText();
+ // Get the current download directory.
+ QString currentDownloadDirectory = downloadDirectoryComboBoxPointer->currentText();
// Resolve the system download directory if specified.
- if (currentDownloadLocation == QStringLiteral("System Download Directory"))
- currentDownloadLocation = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
+ if (currentDownloadDirectory == QStringLiteral("System Download Directory"))
+ currentDownloadDirectory = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
- // Get the new download location.
- QString newDownloadLocation = QFileDialog::getExistingDirectory(configDialogPointer, i18nc("Select download location dialog caption", "Select Download Location"), currentDownloadLocation);
+ // Get the new download directory.
+ QString newDownloadDirectory = QFileDialog::getExistingDirectory(configDialogPointer, i18nc("Select download directory dialog caption", "Select Download Directory"),
+ currentDownloadDirectory);
- // Populate the download location combo box according to the new download location.
- if (newDownloadLocation == QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)) // The default download location was selected.
+ // Populate the download directory combo box according to the new download location.
+ if (newDownloadDirectory == QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)) // The default download location was selected.
{
// Populate the download location with the default text.
- downloadLocationComboBoxPointer->setCurrentText("System Download Directory");
+ downloadDirectoryComboBoxPointer->setCurrentText("System Download Directory");
}
- else if (newDownloadLocation != QStringLiteral("")) // A different directory was selected.
+ else if (newDownloadDirectory != QStringLiteral("")) // A different directory was selected.
{
// Populate the download location.
- downloadLocationComboBoxPointer->setCurrentText(newDownloadLocation);
+ downloadDirectoryComboBoxPointer->setCurrentText(newDownloadDirectory);
}
}
// Show the progress bar.
progressBarPointer->show();
+
+ // Disable and hide the refresh action.
+ refreshActionPointer->setEnabled(false);
+ refreshActionPointer->setVisible(false);
+
+ // Enable and show the stop action.
+ stopActionPointer->setEnabled(true);
+ stopActionPointer->setVisible(true);
}
void BrowserWindow::showSettingsDialog()
userAgentLabelPointer = privacySettingsUi.userAgentLabel;
QComboBox *searchEngineComboBoxPointer = generalSettingsUi.kcfg_searchEngine;
searchEngineLabelPointer = generalSettingsUi.searchEngineLabel;
- downloadLocationComboBoxPointer = generalSettingsUi.kcfg_downloadLocation;
+ downloadDirectoryComboBoxPointer = generalSettingsUi.kcfg_downloadDirectory;
QPushButton *browseButtonPointer = generalSettingsUi.browseButton;
QListWidget *spellCheckListWidgetPointer = spellCheckSettingsUi.spellCheckListWidget;
connect(userAgentComboBoxPointer, SIGNAL(currentTextChanged(const QString)), this, SLOT(updateUserAgentLabel(const QString)));
connect(searchEngineComboBoxPointer, SIGNAL(currentTextChanged(const QString)), this, SLOT(updateSearchEngineLabel(const QString)));
- // Connect the download location directory browse button.
- connect(browseButtonPointer, SIGNAL(clicked()), this, SLOT(showDownloadLocationBrowseDialog()));
+ // Connect the download directory directory browse button.
+ connect(browseButtonPointer, SIGNAL(clicked()), this, SLOT(showDownloadDirectoryBrowseDialog()));
// Create a dictionaries QDir from the `QTWEBENGINE_DICTIONARIES_PATH` environment variable.
QDir dictionariesDir = QDir(qEnvironmentVariable("QTWEBENGINE_DICTIONARIES_PATH"));
return QSize(1500, 1200);
}
+void BrowserWindow::toggleBookmark()
+{
+ // Remove the focus from the URL line edit, which will have been focused when the user clicked on the bookmarked icon.
+ urlLineEditPointer->clearFocus();
+
+ // Create or delete the bookmark
+ if (bookmarkedActionPointer->isChecked()) // The user checked the toggle. Create a bookmark.
+ {
+ // Create a bookmark struct.
+ BookmarkStruct *bookmarkStructPointer = new BookmarkStruct;
+
+ // Populate the bookmark struct.
+ bookmarkStructPointer->name = tabWidgetPointer->getCurrentTabTitle();
+ bookmarkStructPointer->url = tabWidgetPointer->getCurrentTabUrl();
+ bookmarkStructPointer->parentFolderId = 0;
+ bookmarkStructPointer->favoriteIcon = tabWidgetPointer->getCurrentTabFavoritIcon();
+
+ // Add the bookmark.
+ BookmarksDatabase::addBookmark(bookmarkStructPointer);
+ }
+ else // The user unchecked the toggle. Delete all related bookmarks.
+ {
+ // Delete the bookmarks.
+ BookmarksDatabase::deleteBookmarks(urlLineEditPointer->text());
+
+
+ }
+
+ // Repopulate the bookmarks.
+ populateBookmarksInAllWindows();
+}
+
+void BrowserWindow::toggleDeveloperTools() const
+{
+ // Toggle the developer tools.
+ tabWidgetPointer->toggleDeveloperTools(developerToolsActionPointer->isChecked());
+}
+
void BrowserWindow::toggleDomStorage() const
{
// Remove the focus from the URL line edit.
url = url.prepend(QLatin1String("view-source:"));
}
- // Add the new tab. `true` removes the URL line edit focus, `false` does not open a background tab.
- tabWidgetPointer->addTab(true, false, url);
+ // Add the new tab. `true` removes the URL line edit focus, `true` opens the new tab in an adjacent tab. `false` does not open a background tab.
+ tabWidgetPointer->addTab(true, true, false, url);
+}
+
+void BrowserWindow::updateBookmarkedAction() const
+{
+ // Update the bookmarked action to reflect the current state.
+ if (bookmarkedActionPointer->isChecked())
+ bookmarkedActionPointer->setIcon(QIcon::fromTheme("starred-symbolic"));
+ else
+ bookmarkedActionPointer->setIcon(QIcon::fromTheme("non-starred-symbolic"));
}
void BrowserWindow::updateCookiesAction(const int numberOfCookies) const
void BrowserWindow::updateUrlLineEdit(const QUrl &newUrl)
{
- // Get the new URL string.
- QString newUrlString = newUrl.toString();
+ // Get the new URL string in encoded form, which displays punycode.
+ QString newUrlString = newUrl.toEncoded();
// Update the view source actions.
if (newUrlString.startsWith(QLatin1String("view-source:"))) // The source is currently being viewed.
// Update the URL line edit.
urlLineEditPointer->setText(newUrlString);
+ // Set the bookmarked action status.
+ bookmarkedActionPointer->setChecked(BookmarksDatabase::isBookmarked(newUrlString));
+
+ // Update the bookmarked action.
+ updateBookmarkedAction();
+
// Set the focus if the new URL is blank.
if (newUrlString == QStringLiteral(""))
urlLineEditPointer->setFocus();