<title>Credits and License</title>
<para>
- Program copyright 2016-2017,2021-2023 Soren Stoutner <ulink url="mailto:soren@stoutner.com">soren@stoutner.com</ulink>.
+ Privacy Browser PC copyright 2016-2017,2021-2023 Soren Stoutner <ulink url="mailto:soren@stoutner.com">soren@stoutner.com</ulink>.
</para>
- <para>
- Translators:
- <itemizedlist>
- <listitem><para>Translations will be added in a future release.</para></listitem>
- </itemizedlist>
- </para>
+ <!-- Program. -->
+ <sect1 id="program">
+ <title>Program</title>
- <!-- The program license. -->
- &underGPL;
+ <para>
+ The source code is available at <ulink url="https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=summary">gitweb.stoutner.com</ulink>
+ or by running <filename>git clone https://git.stoutner.com/PrivacyBrowserPC.git</filename>.
+ </para>
- <para>
- Documentation copyright 2023 Soren Stoutner <ulink url="mailto:soren@stoutner.com">soren@stoutner.com</ulink>.
- </para>
+ <para>
+ Translators:
+ <itemizedlist>
+ <listitem><para>Translations will be added in a future release.</para></listitem>
+ </itemizedlist>
+ </para>
+
+ <!-- The program license. -->
+ &underGPL;
+ </sect1>
+
+ <!-- Documentation. -->
+ <sect1 id="documentation">
+ <title>Documentation</title>
- <!-- The documentation license. -->
- &underFDL;
+ <para>
+ <filename>doc/index.docbook</filename> and <filename>src/com.stoutner.privacybrowser.appdata.xml</filename> are released under the
+ <ulink url="https://www.gnu.org/licenses/fdl-1.3.html">GFDL-1.3 license</ulink> with no Front-Cover or Back-Cover Texts or Invariant Sections.
+ All other documentation is released under the <ulink url="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</ulink>.
+ </para>
+
+ <!-- The documentation license. -->
+ &underFDL;
+ </sect1>
+
+ <!-- Icons. -->
+ <sect1 id="icons">
+ <title>Icons</title>
+
+ <para>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="privacy-browser.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>JavaScript</phrase>
+ </textobject>
+ </inlinemediaobject>
+
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="javascript.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>JavaScript</phrase>
+ </textobject>
+ </inlinemediaobject>
+
+ are derived from <filename>security</filename> and <filename>language</filename>, which are part of the <ulink url="https://fonts.google.com/icons">Android Material icon set</ulink>
+ and are released under the <ulink url="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</ulink>. Modifications copyright 2016-2017,2021-2023 Soren Stoutner.
+ The resulting images are released under the <ulink url="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</ulink>.
+ </para>
+
+ <para>
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="loading.gif" format="GIF"/>
+ </imageobject>
+ <textobject>
+ <phrase>Loading</phrase>
+ </textobject>
+ </inlinemediaobject>
+
+ comes from <ulink url="https://github.com/Codelessly/FlutterLoadingGIFs/blob/master/packages/cupertino_activity_indicator_selective.gif">FlutterLoadingGIFs</ulink>
+ where it is named <filename>cupertino_activity_indicator_selective.gif</filename>.
+ It is released under the <ulink url="https://opensource.org/license/0bsd/">Zero-Clause BSD License</ulink>.
+ </para>
+ </sect1>
</chapter>
</book>
// Display the add tab widget.
qTabWidgetPointer->setCornerWidget(addTabWidgetPointer);
+ // Create the loading favorite icon movie.
+ loadingFavoriteIconMoviePointer = new QMovie();
+
+ // Set the loading favorite icon movie file name.
+ loadingFavoriteIconMoviePointer->setFileName(QStringLiteral(":/icons/loading.gif"));
+
// Add the first tab.
addFirstTab();
int newTabIndex = qTabWidgetPointer->addTab(privacyWebEngineViewPointer, i18nc("New tab label.", "New Tab"));
// Set the default tab icon.
- qTabWidgetPointer->setTabIcon(newTabIndex, defaultTabIcon);
+ qTabWidgetPointer->setTabIcon(newTabIndex, defaultFavoriteIcon);
// Get handles for the WebEngine page and profile.
QWebEnginePage *webEnginePagePointer = privacyWebEngineViewPointer->page();
}
});
- // Update the progress bar when a load is started.
+ // Update the title when it changes.
+ connect(privacyWebEngineViewPointer, &PrivacyWebEngineView::titleChanged, [this, privacyWebEngineViewPointer] (const QString &title)
+ {
+ // Get the index for this tab.
+ int tabIndex = qTabWidgetPointer->indexOf(privacyWebEngineViewPointer);
+
+ // Update the title for this tab.
+ qTabWidgetPointer->setTabText(tabIndex, title);
+
+ // Update the window title if this is the current tab.
+ if (tabIndex == qTabWidgetPointer->currentIndex())
+ emit updateWindowTitle(title);
+ });
+
+ // Connect the loading favorite icon movie to the tab icon.
+ connect(loadingFavoriteIconMoviePointer, &QMovie::frameChanged, [privacyWebEngineViewPointer, this]
+ {
+ // Get the index for this tab.
+ int tabIndex = qTabWidgetPointer->indexOf(privacyWebEngineViewPointer);
+
+ // Display the loading favorite icon if this tab is loading.
+ if (privacyWebEngineViewPointer->isLoading)
+ qTabWidgetPointer->setTabIcon(tabIndex, loadingFavoriteIconMoviePointer->currentPixmap());
+ });
+
+ // Update the icon when it changes.
+ connect(privacyWebEngineViewPointer, &PrivacyWebEngineView::iconChanged, [privacyWebEngineViewPointer, this] (const QIcon &newFavoriteIcon)
+ {
+ // Store the favorite icon in the privacy web engine view.
+ if (newFavoriteIcon.isNull())
+ privacyWebEngineViewPointer->favoriteIcon = defaultFavoriteIcon;
+ else
+ privacyWebEngineViewPointer->favoriteIcon = newFavoriteIcon;
+
+ // Get the index for this tab.
+ int tabIndex = qTabWidgetPointer->indexOf(privacyWebEngineViewPointer);
+
+ // Update the icon for this tab.
+ if (newFavoriteIcon.isNull())
+ qTabWidgetPointer->setTabIcon(tabIndex, defaultFavoriteIcon);
+ else
+ qTabWidgetPointer->setTabIcon(tabIndex, newFavoriteIcon);
+ });
+
+ // Update the progress bar and the favorite icon when a load is started.
connect(privacyWebEngineViewPointer, &PrivacyWebEngineView::loadStarted, [privacyWebEngineViewPointer, this] ()
{
+ // Set the privacy web engine view to be loading.
+ privacyWebEngineViewPointer->isLoading = true;
+
// Store the load progress.
privacyWebEngineViewPointer->loadProgressInt = 0;
// Show the progress bar if this is the current tab.
if (privacyWebEngineViewPointer == currentPrivacyWebEngineViewPointer)
emit showProgressBar(0);
+
+ // Start the loading favorite icon movie.
+ loadingFavoriteIconMoviePointer->start();
});
// Update the progress bar when a load progresses.
// Update the progress bar when a load finishes.
connect(privacyWebEngineViewPointer, &PrivacyWebEngineView::loadFinished, [privacyWebEngineViewPointer, this] ()
{
+ // Set the privacy web engine view to be not loading.
+ privacyWebEngineViewPointer->isLoading = false;
+
// Store the load progress.
privacyWebEngineViewPointer->loadProgressInt = -1;
// Hide the progress bar if this is the current tab.
if (privacyWebEngineViewPointer == currentPrivacyWebEngineViewPointer)
emit hideProgressBar();
+
+ // Get the index for this tab.
+ int tabIndex = qTabWidgetPointer->indexOf(privacyWebEngineViewPointer);
+
+ // Display the current favorite icon
+ qTabWidgetPointer->setTabIcon(tabIndex, privacyWebEngineViewPointer->favoriteIcon);
+
+ // Create a no tabs loading variable.
+ bool noTabsLoading = true;
+
+ // Check to see if any other tabs are loading.
+ for (int i = 0; i < qTabWidgetPointer->count(); i++)
+ {
+ // Get the privacy WebEngine view for the tab.
+ PrivacyWebEngineView *webEngineViewPointer = qobject_cast<PrivacyWebEngineView*>(qTabWidgetPointer->widget(i));
+
+ // Check to see if it is currently loading.
+ if (webEngineViewPointer->isLoading)
+ noTabsLoading = false;
+ }
+
+ // Stop the loading favorite icon movie if there are no loading tabs.
+ if (noTabsLoading)
+ loadingFavoriteIconMoviePointer->stop();
});
// Display HTTP Ping blocked dialogs.
for (QNetworkCookie *cookiePointer : *durableCookiesListPointer)
addCookieToStore(*cookiePointer, webEngineCookieStorePointer);
- // Update the title when it changes.
- connect(privacyWebEngineViewPointer, &PrivacyWebEngineView::titleChanged, [this, privacyWebEngineViewPointer] (const QString &title)
- {
- // Get the index for this tab.
- int tabIndex = qTabWidgetPointer->indexOf(privacyWebEngineViewPointer);
-
- // Update the title for this tab.
- qTabWidgetPointer->setTabText(tabIndex, title);
-
- // Update the window title if this is the current tab.
- if (tabIndex == qTabWidgetPointer->currentIndex())
- emit updateWindowTitle(title);
- });
-
- // Update the icon when it changes.
- connect(privacyWebEngineViewPointer, &PrivacyWebEngineView::iconChanged, [privacyWebEngineViewPointer, this] (const QIcon &icon)
- {
- // Get the index for this tab.
- int tabIndex = qTabWidgetPointer->indexOf(privacyWebEngineViewPointer);
-
- // Update the icon for this tab.
- if (icon.isNull())
- qTabWidgetPointer->setTabIcon(tabIndex, defaultTabIcon);
- else
- qTabWidgetPointer->setTabIcon(tabIndex, icon);
- });
-
// Enable spell checking.
webEngineProfilePointer->setSpellCheckEnabled(true);