X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=src%2Fviews%2FBrowserView.cpp;h=b3f593ff93352a1d023a895207cb5832af21e036;hb=273588ac3f6077b62c1fb2b55b9cdc6b5e200fad;hp=09afd60f44971e257cb3bcacdca7159715f318d9;hpb=730c65f4a8c48df65ed0fcd8ddfbbc9bcfda0c1f;p=PrivacyBrowserPC.git diff --git a/src/views/BrowserView.cpp b/src/views/BrowserView.cpp index 09afd60..b3f593f 100644 --- a/src/views/BrowserView.cpp +++ b/src/views/BrowserView.cpp @@ -31,6 +31,9 @@ // Qt framework headers. #include +#include +#include +#include // Initialize the public static variables. QString BrowserView::webEngineDefaultUserAgent = QStringLiteral(""); @@ -59,6 +62,9 @@ BrowserView::BrowserView(QWidget *parent) : QWidget(parent) // Set the WebEngine page. webEngineViewPointer->setPage(webEnginePagePointer); + // Handle full screen requests. + connect(webEnginePagePointer, SIGNAL(fullScreenRequested(QWebEngineFullScreenRequest)), this, SLOT(fullScreenRequested(QWebEngineFullScreenRequest))); + // Get handles for the aspects of the WebEngine. webEngineHistoryPointer = webEnginePagePointer->history(); webEngineSettingsPointer = webEngineViewPointer->settings(); @@ -210,7 +216,7 @@ void BrowserView::applyApplicationSettings() searchEngineUrl = SearchEngineHelper::getSearchUrl(Settings::searchEngine()); // Emit the update search engine actions signal. - emit updateSearchEngineActions(Settings::searchEngine()); + emit updateSearchEngineActions(Settings::searchEngine(), true); } // This exists as a separate function from `applyDomainSettings()` so it can be listed as a slot and function without the need for a boolean argument. @@ -374,14 +380,12 @@ void BrowserView::applyDomainSettings(const QString &hostname, const bool reload emit updateJavaScriptAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::JavascriptEnabled)); emit updateLocalStorageAction(currentPrivacyWebEnginePointer->localStorageEnabled); emit updateDomStorageAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled)); - emit updateUserAgentActions(webEngineProfilePointer->httpUserAgent()); + emit updateUserAgentActions(webEngineProfilePointer->httpUserAgent(), true); emit updateZoomFactorAction(webEngineViewPointer->zoomFactor()); // Reload the website if requested. if (reloadWebsite) - { webEngineViewPointer->reload(); - } } void BrowserView::applyOnTheFlySearchEngine(QAction *searchEngineActionPointer) @@ -396,7 +400,7 @@ void BrowserView::applyOnTheFlySearchEngine(QAction *searchEngineActionPointer) searchEngineUrl = SearchEngineHelper::getSearchUrl(searchEngineName); // Update the search engine actionas. - emit updateSearchEngineActions(searchEngineName); + emit updateSearchEngineActions(searchEngineName, false); } void BrowserView::applyOnTheFlyUserAgent(QAction *userAgentActionPointer) const @@ -411,7 +415,7 @@ void BrowserView::applyOnTheFlyUserAgent(QAction *userAgentActionPointer) const webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getUserAgentFromTranslatedName(userAgentName)); // Update the user agent actions. - emit updateUserAgentActions(webEngineProfilePointer->httpUserAgent()); + emit updateUserAgentActions(webEngineProfilePointer->httpUserAgent(), false); // Reload the website. webEngineViewPointer->reload(); @@ -463,6 +467,15 @@ void BrowserView::forward() const webEngineViewPointer->forward(); } +void BrowserView::fullScreenRequested(QWebEngineFullScreenRequest fullScreenRequest) const +{ + // Make it so. + emit fullScreenRequested(fullScreenRequest.toggleOn()); + + // Accept the request. + fullScreenRequest.accept(); +} + void BrowserView::home() const { // Load the homepage. @@ -567,6 +580,60 @@ void BrowserView::pageLinkHovered(const QString &linkUrl) const emit linkHovered(linkUrl); } +void BrowserView::print() const +{ + // Create a printer. + QPrinter printer; + + // Set the resolution to be 300 dpi. + printer.setResolution(300); + + // Create a printer dialog. + QPrintDialog printDialog(&printer, webEngineViewPointer); + + // Display the dialog and print the page if instructed. + if (printDialog.exec() == QDialog::Accepted) + printWebpage(&printer); +} + +void BrowserView::printPreview() const +{ + // Create a printer. + QPrinter printer; + + // Set the resolution to be 300 dpi. + printer.setResolution(300); + + // Create a print preview dialog. + QPrintPreviewDialog printPreviewDialog(&printer, webEngineViewPointer); + + // Generate the print preview. + connect(&printPreviewDialog, SIGNAL(paintRequested(QPrinter *)), this, SLOT(printWebpage(QPrinter *))); + + // Display the dialog. + printPreviewDialog.exec(); +} + +void BrowserView::printWebpage(QPrinter *printerPointer) const +{ + // Create an event loop. For some reason, the print preview doesn't produce any output unless it is run inside an event loop. + QEventLoop eventLoop; + + // Print the webpage, converting the callback above into a `QWebEngineCallback`. + // Printing requires that the printer be a pointer, not a reference, or it will crash with much cursing. + webEnginePagePointer->print(printerPointer, [&eventLoop](bool printSuccess) + { + // Instruct the compiler to ignore the unused parameter. + (void) printSuccess; + + // Quit the loop. + eventLoop.quit(); + }); + + // Execute the loop. + eventLoop.exec(); +} + void BrowserView::refresh() const { // Reload the website.