<!-- Set the language of this documentation. -->
<!ENTITY % English "INCLUDE">
-
- <!-- Default entries. May not be needed. -->
- <!ENTITY i18n-translatable-entity "<application>Translatable Entity</application>">
- <!ENTITY % addindex "IGNORE">
]>
<book id="privacybrowser" lang="&language;">
- <bookinfo>
- <title>The &privacybrowser; Handbook</title>
-
- <authorgroup>
- <author>&Soren.Stoutner; &Soren.Stoutner.mail;</author>
-
- <!-- Add translators here. TRANS:ROLES_OF_TRANSLATORS -->
- </authorgroup>
-
- <copyright>
- <year>2016-2017, 2021-2023</year>
- <holder>&Soren.Stoutner;</holder>
- </copyright>
-
- <!-- Documentation license. -->
- <legalnotice>&FDLNotice;</legalnotice>
-
- <!-- Last update. -->
- <date>2023-06-13</date>
-
- <!-- The version of Privacy Browser this documentation is written for. -->
- <releaseinfo>&privacybrowser; version 0.4</releaseinfo>
-
-
- <!-- Abstract about this handbook -->
- <abstract>
- <para>
- &privacybrowser; is a web browser that respects your privacy.
- </para>
-
- <para>
- The only way to prevent data from being abused is to prevent it from being collected in the first place.
- </para>
- </abstract>
-
- <!-- This is a set of Keywords for indexing by search engines. -->
- <keywordset>
- <keyword>KDE</keyword>
- <keyword>privacy</keyword>
- <keyword>browser</keyword>
- </keywordset>
- </bookinfo>
-
- <!-- Introduction. -->
- <chapter id="introduction">
- <title>Introduction</title>
-
- <para>
- &privacybrowser; is currently in an early alpha state.
- Most of the features are not yet implemented, but I thought it would be useful to publish it so that users can track the progress and submit feedback.
- </para>
-
- <para>
- To distinguish between the Android and the PC version, the website, issue tracker,
- and code base refer to this version as <ulink url="https://www.stoutner.com/privacy-browser-pc/">Privacy Browser PC</ulink>.
- </para>
-
- <para>
- The best place to discuss the development of Privacy Browser is <ulink url="https://redmine.stoutner.com/projects/privacy-browser-pc/boards">on the forum</ulink>.
- I also frequently post on my <ulink url="https://fosstodon.org/@privacybrowser">Mastodon account</ulink> regarding the development status.
- </para>
-
- <!-- Qt WebEngine. -->
- <sect1 id="qt-webengine">
- <title>Qt WebEngine</title>
-
- <para>
- Privacy Browser uses <ulink url="https://doc.qt.io/qt-5/qtwebengine-index.html">Qt WebEngine</ulink> to render websites.
- Qt WebEngine is based on the <ulink url="https://www.chromium.org/blink/">Chromium Blink</ulink> source code.
- Because Privacy Browser is built on the <ulink url="https://api.kde.org/frameworks/index.html">KDE Framework</ulink>,
- it currently uses the <ulink url="https://community.kde.org/Schedules/Plasma_6">Qt 5</ulink> packages.
- </para>
-
- <para>
- The current Qt 5 packages are in long-term support mode.
- From a feature perspective, Qt WebEngine 5.15.x is based on <ulink url="https://wiki.qt.io/QtWebEngine/ChromiumVersions">Chromium 87.0.4280.144</ulink>.
- Security fixes are backported every few months with <ulink url="https://wiki.qt.io/Qt_5.15_Release#Release_Plan">each release</ulink>.
- </para>
- </sect1>
+ <bookinfo>
+ <title>The &privacybrowser; Handbook</title>
- <!-- Bugs and missing features. -->
- <sect1 id="bugs-and-missing-features">
- <title>Bugs and Missing Features</title>
-
- <para>
- There is a list of feature requests and known bugs at <ulink url="https://redmine.stoutner.com/projects/privacy-browser-pc/issues">redmine.stoutner.com</ulink>.
- Users should anticipate that all the current features of <ulink url="https://www.stoutner.com/privacy-browser-android/">Privacy Browser Android</ulink>
- will also be implemented in Privacy Browser PC.
- There is no need at this point to create features requests for these as they will be added as I start working on each feature and have a better idea of how they will be implemented.
- However, each feature that has already been implemented should be bug free.
- If you discover a bug that is not already documented at <ulink url="https://redmine.stoutner.com/projects/privacy-browser-pc/issues">redmine.stoutner.com</ulink> please add it.
- </para>
-
- <para>
- Below is a list of known prominent bugs or missing features in this alpha release.
- </para>
-
- <itemizedlist>
- <listitem><para>The page zoom is <ulink url="https://redmine.stoutner.com/issues/799">momentarily reset</ulink> every time a new URL is loaded.</para></listitem>
- <listitem><para>If domain settings change the user agent, loading of the new URL is interrupted and the
- <ulink url="https://redmine.stoutner.com/issues/821">previous site is reloaded</ulink>.</para></listitem>
- <listitem><para>Browser <ulink url="https://redmine.stoutner.com/issues/831">error messages are not displayed</ulink> unless JavaScript is enabled.</para></listitem>
- <listitem><para>Bookmarks are <ulink url="https://redmine.stoutner.com/issues/968">not yet implemented</ulink>.</para></listitem>
- <listitem><para>Blocklists are <ulink url="https://redmine.stoutner.com/issues/969">not yet implemented</ulink>.</para></listitem>
- </itemizedlist>
- </sect1>
- </chapter>
-
- <!-- Using Privacy Browser. -->
- <chapter id="using-privacy-browser">
- <title>Using &privacybrowser;</title>
-
- <para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="privacybrowser-window.png" format="PNG"/>
- </imageobject>
- <textobject>
- <phrase>Screenshot</phrase>
- </textobject>
- </mediaobject>
- </para>
-
- <!-- JavaScript. -->
- <sect1 id="javascript">
- <title>JavaScript</title>
-
- <para>
- JavaScript allows web pages to run scripts (programs) on your device. It allows web pages to function more like apps, but it also allows web pages to spy on you.
- Most of the tracking on the internet does not work when JavaScript is disabled.
- JavaScript can be toggled by clicking on the privacy shield, which is blue if JavaScript is disabled and red when it is enabled.
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="javascript.png" format="PNG"/>
- </imageobject>
- <textobject>
- <phrase>JavaScript</phrase>
- </textobject>
- </inlinemediaobject>
- </para>
- </sect1>
+ <authorgroup>
+ <author>&Soren.Stoutner; &Soren.Stoutner.mail;</author>
- <!-- Local Storage. -->
- <sect1 id="local-storage">
- <title>Local Storage</title>
+ <!-- Add translators here.-->
+ </authorgroup>
- <para>
- <ulink url="https://doc.qt.io/qt-5/qwebenginecookiestore.html#setCookieFilter">Local storage</ulink>
- in Privacy Browser encompasses cookies, DOM storage, IndexedDB, service workers, and the filesystem API.
- Local storage can be toggled through an action on the toolbar.
- </para>
+ <copyright>
+ <year>2016-2017, 2021-2023</year>
+ <holder>&Soren.Stoutner;</holder>
+ </copyright>
- <!-- Cookies. -->
- <sect2 id="cookies">
- <title>Cookies</title>
+ <!-- Documentation license. -->
+ <legalnotice>&FDLNotice;</legalnotice>
- <para>
- <ulink url="https://en.wikipedia.org/wiki/HTTP_cookie">Cookies</ulink>
- allow websites to store small pieces of information for a specific host that are sent in the HTTP header every time the browser connects to that host.
- Privacy Browser allows a maximum of <ulink url="http://browsercookielimits.iain.guru/">180 cookies with a maximum size of 4096 bytes per cookie</ulink> to be set per domain.
- Cookies are often used to track users across the web, particularly third-party cookies (which are completely blocked in Privacy Browser).
- They are also used as a security mechanism on websites where you log in to identify it is you as you browse from page to page on a site.
- </para>
+ <!-- Last update. -->
+ <date>2023-10-10</date>
- <para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="cookies.png" format="PNG"/>
- </imageobject>
- <textobject>
- <phrase>Cookies</phrase>
- </textobject>
- </mediaobject>
- </para>
+ <!-- The version of Privacy Browser this documentation is written for. -->
+ <releaseinfo>&privacybrowser; version 0.5</releaseinfo>
- <para>
- The cookies dialog is opened from <xref linkend="settings-cookies"/>.
- Durable cookies are shared with all tabs that are opened after they are made durable and are preserved even when Privacy Browser is restarted.
- This allows users to stay logged in to sites of their choosing. No cookies are durable by default. Making a cookie durable requires specific user interaction.
- </para>
+ <!-- Abstract about this handbook -->
+ <abstract>
+ <para>
+ &privacybrowser; is a web browser that respects your privacy.
+ </para>
- <para>
- All other cookies are specific to the tab where they are created and are destroyed when the tab is closed.
- </para>
- </sect2>
+ <para>
+ The only way to prevent data from being abused is to prevent it from being collected in the first place.
+ </para>
+ </abstract>
+
+ <!-- This is a set of Keywords for indexing by search engines. -->
+ <keywordset>
+ <keyword>KDE</keyword>
+ <keyword>privacy</keyword>
+ <keyword>browser</keyword>
+ </keywordset>
+ </bookinfo>
- <!-- DOM storage. -->
- <sect2 id="dom-storage">
- <title>DOM storage</title>
+ <!-- Introduction. -->
+ <chapter id="introduction">
+ <title>Introduction</title>
<para>
- <ulink url="https://en.wikipedia.org/wiki/Web_storage">DOM (Document Object Model) storage</ulink>, also knows as web storage, allows web pages to store information on a client device.
- The storage capacity is larger than for cookies and the data is not automatically sent in the headers with every HTTP request.
- In Privacy Browser, each website is allowed to store a <ulink url="https://arty.name/localstorage.html">5 MB of data</ulink> in DOM storage.
- DOM storage requires JavaScript to function, and, in addition, requires an extra toggle to be enabled.
- In Privacy Browser, DOM storage is limited to the tab where it is created and is destroyed when the tab is closed.
+ &privacybrowser; is currently in an early alpha state.
+ Most of the features are not yet implemented, but I thought it would be useful to publish it so that users can track the progress and submit feedback.
</para>
- </sect2>
-
- <!-- IndexedDB. -->
- <sect2 id="indexeddb">
- <title>IndexedDB</title>
<para>
- <ulink url="https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API">IndexedDB</ulink>
- provides web pages with a local database where they can store “significant amounts of structured data”.
- There is disagreement on the internet about the maximum size of an IndexedDB database, probably because the various rendering engines keep changing their mind.
- But it is usually listed at somewhere between 20% and 80% of <emphasis>your entire hard drive</emphasis> with each individual domain limited to some segment of that.
- IndexedDB requires JavaScript to function.
- In Privacy Browser, this database is limited to the tab where it is created and is destroyed when the tab is closed.
+ To distinguish between the Android and the PC version, the website, issue tracker,
+ and code base refer to this version as <ulink url="https://www.stoutner.com/privacy-browser-pc/">Privacy Browser PC</ulink>.
</para>
- </sect2>
-
- <!-- Service Workers. -->
- <sect2 id="service-workers">
- <title>Service Workers</title>
<para>
- <ulink url="https://developer.chrome.com/docs/workbox/service-worker-overview/">Service workers</ulink> are offline JavaScript proxies of a website. They have their own cache that is usually hidden and hard to clear.
- They were designed by people who want the web browser to become the operating system and run full “apps”.
- In Privacy Browser, service workers are limited to the tab where they are created and are destroyed when the tab is closed.
+ The best place to discuss the development of Privacy Browser is <ulink url="https://redmine.stoutner.com/projects/privacy-browser-pc/boards">on the forum</ulink>.
+ I also frequently post on my <ulink url="https://fosstodon.org/@privacybrowser">Mastodon account</ulink> regarding the development status.
</para>
- </sect2>
- <!-- Filesystem API. -->
- <sect2 id="filesystem-api">
- <title>Filesystem API</title>
+ <!-- Qt WebEngine. -->
+ <sect1 id="qt-webengine">
+ <title>Qt WebEngine</title>
+
+ <para>
+ Privacy Browser uses <ulink url="https://doc.qt.io/qt-5/qtwebengine-index.html">Qt WebEngine</ulink> to render websites.
+ Qt WebEngine is based on the <ulink url="https://www.chromium.org/blink/">Chromium Blink</ulink> source code.
+ Because Privacy Browser is built on the <ulink url="https://api.kde.org/frameworks/index.html">KDE Framework</ulink>,
+ it currently uses the <ulink url="https://community.kde.org/Schedules/Plasma_6">Qt 5</ulink> packages.
+ </para>
+
+ <para>
+ The current Qt 5 packages are in long-term support mode.
+ From a feature perspective, Qt WebEngine 5.15.x is based on <ulink url="https://wiki.qt.io/QtWebEngine/ChromiumVersions">Chromium 87.0.4280.144</ulink>.
+ Security fixes are backported every few months with <ulink url="https://wiki.qt.io/Qt_5.15_Release#Release_Plan">each release</ulink>.
+ </para>
+ </sect1>
+
+ <!-- Bugs and missing features. -->
+ <sect1 id="bugs-and-missing-features">
+ <title>Bugs and Missing Features</title>
+
+ <para>
+ There is a list of feature requests and known bugs at <ulink url="https://redmine.stoutner.com/projects/privacy-browser-pc/issues">redmine.stoutner.com</ulink>.
+ Users should anticipate that all the current features of <ulink url="https://www.stoutner.com/privacy-browser-android/">Privacy Browser Android</ulink>
+ will also be implemented in Privacy Browser PC.
+ There is no need at this point to create features requests for these as they will be added as I start working on each feature and have a better idea of how they will be implemented.
+ However, each feature that has already been implemented should be bug free.
+ If you discover a bug that is not already documented at <ulink url="https://redmine.stoutner.com/projects/privacy-browser-pc/issues">redmine.stoutner.com</ulink> please add it.
+ </para>
+
+ <para>
+ Below is a list of known prominent bugs or missing features in this alpha release.
+ </para>
+
+ <itemizedlist>
+ <listitem><para>The page zoom is <ulink url="https://redmine.stoutner.com/issues/799">momentarily reset</ulink> every time a new URL is loaded.</para></listitem>
+ <listitem><para>If domain settings change the user agent, loading of the new URL is interrupted and the
+ <ulink url="https://redmine.stoutner.com/issues/821">previous site is reloaded</ulink>.</para></listitem>
+ <listitem><para>Browser <ulink url="https://redmine.stoutner.com/issues/831">error messages are not displayed</ulink> unless JavaScript is enabled.</para></listitem>
+ <listitem><para>Filter lists are <ulink url="https://redmine.stoutner.com/issues/969">not yet implemented</ulink>.</para></listitem>
+ </itemizedlist>
+ </sect1>
+ </chapter>
+
+ <!-- Using Privacy Browser. -->
+ <chapter id="using-privacy-browser">
+ <title>Using &privacybrowser;</title>
<para>
- The <ulink url="https://developer.chrome.com/articles/file-system-access/">filesystem API</ulink> grants the browser direct access to the files on your system.
- Like service workers, the filesystem API is a summarily bad idea thought up by those who want the browser to become an operating system.
- Even when JavaScript and local storage are enabled, the filesystem API does not work in Privacy Browser.
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="privacybrowser-window.png" format="PNG"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Screenshot</phrase>
+ </textobject>
+ </mediaobject>
</para>
- </sect2>
- </sect1>
-
- <!-- User Agent. -->
- <sect1 id="user-agent">
- <title>User Agent</title>
-
- <para>
- The user agent is a text string that is sent as part of every HTTP header that identifies the browser to the web server.
- Privacy Browser's default user agent is <code>PrivacyBrowser/1.0</code>.
- Qt WebEngine 5.15.12’s default user agent is <code>Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.12 Chrome/87.0.4280.144 Safari/537.36</code>.
- </para>
-
- <para>
- Over the years user agents have become quite lengthy,
- partially because they tend to include a <ulink url="https://webaim.org/blog/user-agent-string-history/">brief history of the internet</ulink>.
- In the modern world they serve almost no good purpose, but some web developers still think they need them so they can send different version of their website to different browsers.
- Some servers <ulink url="https://www.stoutner.com/user-agent-problems/">refuse to function correctly</ulink> if they don't like the user agent that is sent.
- </para>
-
- <para>
- At some point in the future Privacy Browser will send no user agent by default.
- Not only is that currently impossible because the Qt WebEngine doesn't allow you to not send a user agent (I will probably have to fork it to enable that functionality),
- but even web servers that don't care what the user agent is often refuse to send an answer if there is no user agent at all.
- Getting rid of this relic of the internet is going to take some time and a retraining of common expectations.
- </para>
- </sect1>
-
- <!-- Domain Settings. -->
- <sect1 id="domain-settings">
- <title>Domain Settings</title>
-
- <para>
- Domain setting make it easy to automatically change JavaScript, local storage, user agent, and other settings when the domain changes.
- Domain settings for the current domain can be accessed through the domain settings button at the far right of the URL line edit.
- Domain settings for all domains can be accessed through <xref linkend="settings-domain-settings"/>. When domain settings are active, the URL line edit will have a green background.
- </para>
- </sect1>
-
- <!-- HTTP Pings. -->
- <sect1 id="http-pings">
- <title>HTTP Pings</title>
-
- <para>
- HTTP hyperlinks can have an extra <ulink url="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#ping">ping attribute</ulink> that sends a POST request to a different URL.
- These HTTP pings are commonly used for tracking.
- <ulink url="https://www.theregister.com/2019/04/06/apple_safari_changes/">Most browsers</ulink> send HTTP pings without informing the user
- <ulink url="https://lists.w3.org/Archives/Public/public-html/2018May/0027.html">in any way</ulink>
- (despite what The Register article says, current versions of FireFox also happily send HTTP pings).
- </para>
-
- <para>
- Privacy Browser blocks all HTTP pings and presents a dialog informing the user every time the current tab attempts to send one.
- Hopefully, as more people become aware of what HTTP pings are, web sites will become more embarrassed about using them.
- This is a classic example of how those who wrote the HTTP specs do not have the best interests of internet users at heart. I would like the day to come when this is removed from both the internet and the spec.
- Here is an example of me <ulink url="https://forum.f-droid.org/t/the-f-droid-forum-should-stop-tracking-links-with-http-pings/">raising the issue</ulink> with F-Droid.
- </para>
- </sect1>
-
- <!-- Spell Checking. -->
- <sect1 id="spell-checking">
- <title>Spell Checking</title>
-
- <para>
- Privacy Browser uses the binary <filename>.bdic</filename> Hunspell dictionary format <ulink url="https://doc.qt.io/qt-5/qtwebengine-features.html#spellchecker">utilized by Qt WebEngine</ulink>
- which was <ulink url="https://sites.google.com/a/chromium.org/dev/developers/how-tos/editing-the-spell-checking-dictionaries">created by Google for Chromium</ulink>.
- Debian’s Hunspell dictionary language packages are slowly adding support for the <filename>.bdic</filename> format. Those which have are listed by Privacy Browser as suggested packages.
- </para>
- <para>
- Once a <filename>.bdic</filename> dictionary is installed, it can be enabled in Privacy Browser’s settings.
- </para>
- </sect1>
- </chapter>
-
- <!-- Commands. -->
- <chapter id="commands">
- <title>Command Reference</title>
-
- <!-- Main Window. -->
- <sect1 id="main-window">
- <title>Main Window</title>
-
- <!-- File. -->
- <sect2>
- <title>File</title>
-
- <variablelist>
- <!-- New Tab. -->
- <varlistentry id="file-new-tab">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>T</keycap></keycombo>
- </shortcut>
- <guimenu>File</guimenu>
- <guimenuitem>New Tab</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Create a new tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- New Window. -->
- <varlistentry id="file-new-window">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
- </shortcut>
- <guimenu>File</guimenu>
- <guimenuitem>New Window</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Create a new window.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Print. -->
- <varlistentry id="file-print">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>P</keycap></keycombo>
- </shortcut>
- <guimenu>File</guimenu>
- <guimenuitem>Print</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Print the document.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Print Preview. -->
- <varlistentry id="file-print-preview">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>P</keycap></keycombo>
- </shortcut>
- <guimenu>File</guimenu>
- <guimenuitem>Print Preview</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Display the print preview dialog.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Quit. -->
- <varlistentry id="file-quit">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
- </shortcut>
- <guimenu>File</guimenu>
- <guimenuitem>Quit</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Quit &privacybrowser;.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
-
- <!-- Edit. -->
- <sect2>
- <title>Edit</title>
-
- <variablelist>
- <!-- Find. -->
- <varlistentry id="edit-find">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>F</keycap></keycombo>
- </shortcut>
- <guimenu>Edit</guimenu>
- <guimenuitem>Find</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Display the find toolbar and focus the find text line edit. If the toolbar is already displayed, the find text line edit is refocused and the text it contains is selected.
- </para>
- </listitem>
- </varlistentry>
-
-
- <!-- Find Next. -->
- <varlistentry id="edit-find-next">
- <term>
- <menuchoice>
- <shortcut>
- <keycap>F3</keycap>
- </shortcut>
- <guimenu>Edit</guimenu>
- <guimenuitem>Find Next</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Find the next entry on the page that matches the specified text. This action is only displayed if the find toolbar is visible.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Find Previous. -->
- <varlistentry id="edit-find-previous">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Shift;<keycap>F3</keycap></keycombo>
- </shortcut>
- <guimenu>Edit</guimenu>
- <guimenuitem>Find Previous</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Find the previous entry on the page that matches the specified text. This action is only displayed if the find toolbar is visible.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
-
- <!-- View. -->
- <sect2>
- <title>View</title>
-
- <variablelist>
- <!-- Zoom In. -->
- <varlistentry id="zoom-in">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>+</keycap></keycombo>
- </shortcut>
- <guimenu>View</guimenu>
- <guimenuitem>Zoom In</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Increment the zoom factor by 0.25. Valid factors range from 0.25 to 5.00.
- </para>
- </listitem>
- </varlistentry>
-
-
- <!-- Zoom Out. -->
- <varlistentry id="zoom-out">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>-</keycap></keycombo>
- </shortcut>
- <guimenu>View</guimenu>
- <guimenuitem>Zoom Out</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Decrement the zoom factor by 0.25. Valid factors range from 0.25 to 5.00.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Refresh. -->
- <varlistentry id="view-refresh">
- <term>
- <menuchoice>
- <shortcut>
- <keycap>F5</keycap>
- </shortcut>
- <guimenu>View</guimenu>
- <guimenuitem>Refresh</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Reload the website in the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Reload and Bypass Cache. -->
- <varlistentry id="view-reload-and-bypass-cache">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>F5</keycap></keycombo>
- </shortcut>
- <guimenu>View</guimenu>
- <guimenuitem>Reload and Bypass Cache</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Reload the website in the current tab bypassing any information in the cache and loading everything from the webserver.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- View Source. -->
- <varlistentry id="view-source">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>U</keycap></keycombo>
- </shortcut>
- <guimenu>View</guimenu>
- <guimenuitem>View Source</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Toggle between viewing the source and viewing the rendered website.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- View Source in New Tab. -->
- <varlistentry id="view-source-in-new-tab">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>U</keycap></keycombo>
- </shortcut>
- <guimenu>View</guimenu>
- <guimenuitem>View Source in New Tab></guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Open a new tab displaying the source of the current tab, or a new tab displaying the rendered version if the source is already displayed. Note that right-clicking on the background of a rendered website will display a context menu with a "View page source" entry, which performs the first of these actions.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Full Screen Mode. -->
- <varlistentry id="view-full-screen-mode">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>F</keycap></keycombo>
- </shortcut>
- <guimenu>View</guimenu>
- <guimenuitem>Full Screen Mode</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Toggle full screen mode. This performs the same action as <xref linkend="f11"/>.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
-
- <!-- Go. -->
- <sect2>
- <title>Go</title>
-
- <variablelist>
- <!-- Back. -->
- <varlistentry id="go-back">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Alt;<keycap>Left</keycap></keycombo>
- </shortcut>
- <guimenu>Go</guimenu>
- <guimenuitem>Back</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Navigate back one step in the current tab’s history. The action is disabled if it is not possible to go back.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Forward. -->
- <varlistentry id="go-forward">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Alt;<keycap>Right</keycap></keycombo>
- </shortcut>
- <guimenu>Go</guimenu>
- <guimenuitem>Forward</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Navigate forward one step in the current tab’s history. The action is disabled if it is not possible to go forward.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Home. -->
- <varlistentry id="go-home">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Alt;<keycap>Home</keycap></keycombo>
- </shortcut>
- <guimenu>Go</guimenu>
- <guimenuitem>Home</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Load the home page in the current tab.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
-
- <!-- On-The-Fly Settings. -->
- <sect2>
- <title>On-The-Fly Settings</title>
-
- <variablelist>
- <!-- JavaScript. -->
- <varlistentry id="on-the-fly-settings-javascript">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>J</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guimenuitem>JavaScript</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Toggle JavaScript in the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Local Storage. -->
- <varlistentry id="on-the-fly-settings-local-storage">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>L</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guimenuitem>Local Storage</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Toggle local storage in the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- DOM Storage. -->
- <varlistentry id="on-the-fly-settings-dom-storage">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>D</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guimenuitem>DOM Storage</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Toggle DOM storage in the current tab.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
+ <!-- JavaScript. -->
+ <sect1 id="javascript">
+ <title>JavaScript</title>
+
+ <para>
+ JavaScript allows web pages to run scripts (programs) on your device. It allows web pages to function more like apps, but it also allows web pages to spy on you.
+ Most of the tracking on the internet does not work when JavaScript is disabled.
+ JavaScript can be toggled by clicking on the privacy shield, which is blue if JavaScript is disabled and red when it is enabled.
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="javascript.png" format="PNG"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>JavaScript</phrase>
+ </textobject>
+ </inlinemediaobject>
+ </para>
+ </sect1>
+
+ <!-- Local Storage. -->
+ <sect1 id="local-storage">
+ <title>Local Storage</title>
+
+ <para>
+ <ulink url="https://doc.qt.io/qt-5/qwebenginecookiestore.html#setCookieFilter">Local storage</ulink>
+ in Privacy Browser encompasses cookies, DOM storage, IndexedDB, service workers, and the filesystem API.
+ Local storage can be toggled through an action on the toolbar.
+ </para>
+
+ <!-- Cookies. -->
+ <sect2 id="cookies">
+ <title>Cookies</title>
- <!-- User Agent. -->
- <sect3>
- <title>User Agent</title>
-
- <variablelist>
- <!-- Privacy Browser. -->
- <varlistentry id="user-agent-privacy-browser">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Alt;<keycap>P</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>User Agent</guisubmenu>
- <guimenuitem>Privacy Browser</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Use the Privacy Browser user agent for the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- WebEngine Default. -->
- <varlistentry id="user-agent-webengine-default">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Alt;<keycap>W</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>User Agent</guisubmenu>
- <guimenuitem>WebEngine Default</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Use the WebEngine Default user agent for the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Firefox on Linux. -->
- <varlistentry id="user-agent-firefox-linux">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Alt;<keycap>F</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>User Agent</guisubmenu>
- <guimenuitem>Firefox on Linux</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Use the Firefox on Linux user agent for the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Chromium on Linux. -->
- <varlistentry id="user-agent-chromium-linux">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Alt;<keycap>C</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>User Agent</guisubmenu>
- <guimenuitem>Chromium on Linux</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Use the Chromium on Linux user agent for the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Firefox on Windows. -->
- <varlistentry id="user-agent-firefox-windows">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Alt;&Shift;<keycap>F</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>User Agent</guisubmenu>
- <guimenuitem>Firefox on Windows</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
<para>
- Use the Firefox on Windows user agent for the current tab.
+ <ulink url="https://en.wikipedia.org/wiki/HTTP_cookie">Cookies</ulink>
+ allow websites to store small pieces of information for a specific host that are sent in the HTTP header every time the browser connects to that host.
+ Privacy Browser allows a maximum of <ulink url="http://browsercookielimits.iain.guru/">180 cookies with a maximum size of 4096 bytes per cookie</ulink> to be set per domain.
+ Cookies are often used to track users across the web, particularly third-party cookies (which are completely blocked in Privacy Browser).
+ They are also used as a security mechanism on websites where you log in to identify it is you as you browse from page to page on a site.
</para>
- </listitem>
- </varlistentry>
-
- <!-- Chrome on Windows. -->
- <varlistentry id="user-agent-chrome-windows">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Alt;&Shift;<keycap>C</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>User Agent</guisubmenu>
- <guimenuitem>Chrome on Windows</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Use the Chrome on Windows user agent for the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Edge on Windows. -->
- <varlistentry id="user-agent-edge-windows">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Alt;<keycap>E</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>User Agent</guisubmenu>
- <guimenuitem>Edge on Windows</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Use the Edge on Windows user agent for the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Safari on macOS. -->
- <varlistentry id="user-agent-safari-macOS">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Alt;<keycap>S</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>User Agent</guisubmenu>
- <guimenuitem>Safari on macOS</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Use the Safari on macOS user agent for the current tab.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Custom User Agent. -->
- <varlistentry id="user-agent-custom">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Alt;&Shift;<keycap>C</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>User Agent</guisubmenu>
- <guimenuitem>Custom</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Use the custom user agent for the current tab. This action is only active if a custom user agent is set in the settings.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect3>
-
- <!-- Zoom. -->
- <sect3>
- <title>Zoom</title>
-
- <variablelist>
- <!-- Zoom Factor. -->
- <varlistentry id="on-the-fly-settings-zoom-factor">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Alt;<keycap>Z</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guimenuitem>Zoom Factor</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
+
<para>
- Display the zoom factor dialog.
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="cookies.png" format="PNG"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Cookies</phrase>
+ </textobject>
+ </mediaobject>
</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect3>
-
- <!-- Search Engine. -->
- <sect3>
- <title>Search Engine</title>
-
- <variablelist>
- <!-- Mojeek. -->
- <varlistentry id="search-engine-mojeek">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>M</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>Search Engine</guisubmenu>
- <guimenuitem>Mojeek</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
+
<para>
- Use Mojeek as the search engine.
+ The cookies dialog is opened from <xref linkend="settings-cookies"/>.
+ Durable cookies are shared with all tabs that are opened after they are made durable and are preserved even when Privacy Browser is restarted.
+ This allows users to stay logged in to sites of their choosing. No cookies are durable by default. Making a cookie durable requires specific user interaction.
</para>
- </listitem>
- </varlistentry>
-
- <!-- Monocles. -->
- <varlistentry id="search-engine-monocles">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>O</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>Search Engine</guisubmenu>
- <guimenuitem>Monocles</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
+
<para>
- Use Mojeek as the search engine.
+ All other cookies are specific to the tab where they are created and are destroyed when the tab is closed.
</para>
- </listitem>
- </varlistentry>
-
- <!-- MetaGer. -->
- <varlistentry id="search-engine-metager">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>E</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>Search Engine</guisubmenu>
- <guimenuitem>MetaGer</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
+ </sect2>
+
+ <!-- DOM storage. -->
+ <sect2 id="dom-storage">
+ <title>DOM storage</title>
+
<para>
- Use MetaGer as the search engine.
+ <ulink url="https://en.wikipedia.org/wiki/Web_storage">DOM (Document Object Model) storage</ulink>, also knows as web storage,
+ allows web pages to store information on a client device.
+ The storage capacity is larger than for cookies and the data is not automatically sent in the headers with every HTTP request.
+ In Privacy Browser, each website is allowed to store a <ulink url="https://arty.name/localstorage.html">5 MB of data</ulink> in DOM storage.
+ DOM storage requires JavaScript to function, and, in addition, requires an extra toggle to be enabled.
+ In Privacy Browser, DOM storage is limited to the tab where it is created and is destroyed when the tab is closed.
</para>
- </listitem>
- </varlistentry>
-
- <!-- Google. -->
- <varlistentry id="search-engine-google">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>G</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>Search Engine</guisubmenu>
- <guimenuitem>Google</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
+ </sect2>
+
+ <!-- IndexedDB. -->
+ <sect2 id="indexeddb">
+ <title>IndexedDB</title>
+
<para>
- Use Google as the search engine.
+ <ulink url="https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API">IndexedDB</ulink>
+ provides web pages with a local database where they can store “significant amounts of structured data”.
+ There is disagreement on the internet about the maximum size of an IndexedDB database, probably because the various rendering engines keep changing their mind.
+ But it is usually listed at somewhere between 20% and 80% of <emphasis>your entire hard drive</emphasis> with each individual domain limited to some segment of that.
+ IndexedDB requires JavaScript to function.
+ In Privacy Browser, this database is limited to the tab where it is created and is destroyed when the tab is closed.
</para>
- </listitem>
- </varlistentry>
-
- <!-- Bing. -->
- <varlistentry id="search-engine-bing">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>B</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>Search Engine</guisubmenu>
- <guimenuitem>Bing</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
+ </sect2>
+
+ <!-- Service Workers. -->
+ <sect2 id="service-workers">
+ <title>Service Workers</title>
+
<para>
- Use Bing as the search engine.
+ <ulink url="https://developer.chrome.com/docs/workbox/service-worker-overview/">Service workers</ulink> are offline JavaScript proxies of a website.
+ They have their own cache that is usually hidden and hard to clear.
+ They were designed by people who want the web browser to become the operating system and run full “apps”.
+ In Privacy Browser, service workers are limited to the tab where they are created and are destroyed when the tab is closed.
</para>
- </listitem>
- </varlistentry>
-
- <!-- Yahoo. -->
- <varlistentry id="search-engine-yahoo">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>Y</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>Search Engine</guisubmenu>
- <guimenuitem>Yahoo</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
+ </sect2>
+
+ <!-- Filesystem API. -->
+ <sect2 id="filesystem-api">
+ <title>Filesystem API</title>
+
<para>
- Use Yahoo as the search engine.
+ The <ulink url="https://developer.chrome.com/articles/file-system-access/">filesystem API</ulink> grants the browser direct access to the files on your system.
+ Like service workers, the filesystem API is a summarily bad idea thought up by those who want the browser to become an operating system.
+ Even when JavaScript and local storage are enabled, the filesystem API does not work in Privacy Browser.
</para>
- </listitem>
- </varlistentry>
-
- <!-- Custom Search Engine. -->
- <varlistentry id="search-engine-custom">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>C</keycap></keycombo>
- </shortcut>
- <guimenu>On-The-Fly Settings</guimenu>
- <guisubmenu>Search Engine</guisubmenu>
- <guimenuitem>Custom</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
+ </sect2>
+ </sect1>
+
+ <!-- User Agent. -->
+ <sect1 id="user-agent">
+ <title>User Agent</title>
+
+ <para>
+ The user agent is a text string that is sent as part of every HTTP header that identifies the browser to the web server.
+ Privacy Browser's default user agent is <code>PrivacyBrowser/1.0</code>.
+ Qt WebEngine 5.15.15’s default user agent is <code>Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.15 Chrome/87.0.4280.144 Safari/537.36</code>.
+ </para>
+
+ <para>
+ Over the years user agents have become quite lengthy,
+ partially because they tend to include a <ulink url="https://webaim.org/blog/user-agent-string-history/">brief history of the internet</ulink>.
+ In the modern world they serve almost no good purpose, but some web developers still think they need them so they can send different version of their website to different browsers.
+ Some servers <ulink url="https://www.stoutner.com/user-agent-problems/">refuse to function correctly</ulink> if they don't like the user agent that is sent.
+ </para>
+
+ <para>
+ At some point in the future Privacy Browser will send no user agent by default.
+ Not only is that currently impossible because the Qt WebEngine doesn't allow you to not send a user agent (I will probably have to fork it to enable that functionality),
+ but even web servers that don't care what the user agent is often refuse to send an answer if there is no user agent at all.
+ Getting rid of this relic of the internet is going to take some time and a retraining of common expectations.
+ </para>
+ </sect1>
+
+ <!-- Domain Settings. -->
+ <sect1 id="domain-settings">
+ <title>Domain Settings</title>
+
+ <para>
+ Domain setting make it easy to automatically change JavaScript, local storage, user agent, and other settings when the domain changes.
+ Domain settings for the current domain can be accessed through the domain settings button at the far right of the URL line edit.
+ Domain settings for all domains can be accessed through <xref linkend="settings-domain-settings"/>. When domain settings are active, the URL line edit will have a green background.
+ </para>
+ </sect1>
+
+ <!-- HTTP Pings. -->
+ <sect1 id="http-pings">
+ <title>HTTP Pings</title>
+
+ <para>
+ HTTP hyperlinks can have an extra <ulink url="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#ping">ping attribute</ulink> that sends a POST request to a different URL.
+ These HTTP pings are commonly used for tracking.
+ <ulink url="https://www.theregister.com/2019/04/06/apple_safari_changes/">Most browsers</ulink> send HTTP pings without informing the user
+ <ulink url="https://lists.w3.org/Archives/Public/public-html/2018May/0027.html">in any way</ulink>
+ (despite what The Register article says, current versions of FireFox also happily send HTTP pings).
+ </para>
+
+ <para>
+ Privacy Browser blocks all HTTP pings and presents a dialog informing the user every time the current tab attempts to send one.
+ Hopefully, as more people become aware of what HTTP pings are, web sites will become more embarrassed about using them.
+ This is a classic example of how those who wrote the HTTP specs do not have the best interests of internet users at heart.
+ I would like the day to come when this is removed from both the internet and the spec.
+ Here is an example of me <ulink url="https://forum.f-droid.org/t/the-f-droid-forum-should-stop-tracking-links-with-http-pings/">raising the issue</ulink> with F-Droid.
+ </para>
+ </sect1>
+
+ <!-- Spell Checking. -->
+ <sect1 id="spell-checking">
+ <title>Spell Checking</title>
+
+ <para>
+ Privacy Browser uses the binary <filename>.bdic</filename> Hunspell dictionary format
+ <ulink url="https://doc.qt.io/qt-5/qtwebengine-features.html#spellchecker">utilized by Qt WebEngine</ulink>
+ which was <ulink url="https://sites.google.com/a/chromium.org/dev/developers/how-tos/editing-the-spell-checking-dictionaries">created by Google for Chromium</ulink>.
+ Debian’s Hunspell dictionary language packages are slowly adding support for the <filename>.bdic</filename> format. Those which have are listed by Privacy Browser as suggested packages.
+ </para>
+
+ <para>
+ Once a <filename>.bdic</filename> dictionary is installed, it can be enabled in Privacy Browser’s settings.
+ </para>
+ </sect1>
+ </chapter>
+
+ <!-- Commands. -->
+ <chapter id="commands">
+ <title>Command Reference</title>
+
+ <!-- Main Window. -->
+ <sect1 id="main-window">
+ <title>Main Window</title>
+
+ <!-- File. -->
+ <sect2>
+ <title>File</title>
+
+ <variablelist>
+ <!-- New Tab. -->
+ <varlistentry id="file-new-tab">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>T</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>File</guimenu>
+
+ <guimenuitem>New Tab</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Create a new tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- New Window. -->
+ <varlistentry id="file-new-window">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>File</guimenu>
+
+ <guimenuitem>New Window</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Create a new window.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Print. -->
+ <varlistentry id="file-print">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>P</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>File</guimenu>
+
+ <guimenuitem>Print</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Print the document.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Print Preview. -->
+ <varlistentry id="file-print-preview">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>P</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>File</guimenu>
+
+ <guimenuitem>Print Preview</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Display the print preview dialog.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Quit. -->
+ <varlistentry id="file-quit">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>File</guimenu>
+
+ <guimenuitem>Quit</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Quit &privacybrowser;.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ <!-- Edit. -->
+ <sect2>
+ <title>Edit</title>
+
+ <variablelist>
+ <!-- Find. -->
+ <varlistentry id="edit-find">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>F</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Edit</guimenu>
+
+ <guimenuitem>Find</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Display the find toolbar and focus the find text line edit. If the toolbar is already displayed, the find text line edit is refocused and the text it contains is selected.
+ </para>
+ </listitem>
+ </varlistentry>
+
+
+ <!-- Find Next. -->
+ <varlistentry id="edit-find-next">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycap>F3</keycap>
+ </shortcut>
+
+ <guimenu>Edit</guimenu>
+
+ <guimenuitem>Find Next</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Find the next entry on the page that matches the specified text. This action is only displayed if the find toolbar is visible.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Find Previous. -->
+ <varlistentry id="edit-find-previous">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Shift;<keycap>F3</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Edit</guimenu>
+
+ <guimenuitem>Find Previous</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Find the previous entry on the page that matches the specified text. This action is only displayed if the find toolbar is visible.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ <!-- View. -->
+ <sect2>
+ <title>View</title>
+
+ <variablelist>
+ <!-- Zoom In. -->
+ <varlistentry id="zoom-in">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>+</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>View</guimenu>
+
+ <guimenuitem>Zoom In</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Increment the zoom factor by 0.25. Valid factors range from 0.25 to 5.00.
+ </para>
+ </listitem>
+ </varlistentry>
+
+
+ <!-- Zoom Out. -->
+ <varlistentry id="zoom-out">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>-</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>View</guimenu>
+
+ <guimenuitem>Zoom Out</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Decrement the zoom factor by 0.25. Valid factors range from 0.25 to 5.00.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Refresh. -->
+ <varlistentry id="view-refresh">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycap>F5</keycap>
+ </shortcut>
+
+ <guimenu>View</guimenu>
+
+ <guimenuitem>Refresh</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Reload the website in the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Reload and Bypass Cache. -->
+ <varlistentry id="view-reload-and-bypass-cache">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>F5</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>View</guimenu>
+
+ <guimenuitem>Reload and Bypass Cache</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Reload the website in the current tab bypassing any information in the cache and loading everything from the webserver.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- View Source. -->
+ <varlistentry id="view-source">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>U</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>View</guimenu>
+
+ <guimenuitem>View Source</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Toggle between viewing the source and viewing the rendered website.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- View Source in New Tab. -->
+ <varlistentry id="view-source-in-new-tab">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>U</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>View</guimenu>
+
+ <guimenuitem>View Source in New Tab></guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Open a new tab displaying the source of the current tab, or a new tab displaying the rendered version if the source is already displayed.
+ Note that right-clicking on the background of a rendered website will display a context menu with a "View page source" entry, which performs the first of these actions.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Full Screen Mode. -->
+ <varlistentry id="view-full-screen-mode">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>F</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>View</guimenu>
+
+ <guimenuitem>Full Screen Mode</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Toggle full screen mode. This performs the same action as <xref linkend="f11"/>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ <!-- Go. -->
+ <sect2>
+ <title>Go</title>
+
+ <variablelist>
+ <!-- Back. -->
+ <varlistentry id="go-back">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Alt;<keycap>Left</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Go</guimenu>
+
+ <guimenuitem>Back</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Navigate back one step in the current tab’s history. The action is disabled if it is not possible to go back.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Forward. -->
+ <varlistentry id="go-forward">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Alt;<keycap>Right</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Go</guimenu>
+
+ <guimenuitem>Forward</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Navigate forward one step in the current tab’s history. The action is disabled if it is not possible to go forward.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Home. -->
+ <varlistentry id="go-home">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Alt;<keycap>Home</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Go</guimenu>
+
+ <guimenuitem>Home</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Load the home page in the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ <!-- On-The-Fly Settings. -->
+ <sect2>
+ <title>On-The-Fly Settings</title>
+
+ <variablelist>
+ <!-- JavaScript. -->
+ <varlistentry id="on-the-fly-settings-javascript">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>J</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guimenuitem>JavaScript</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Toggle JavaScript in the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Local Storage. -->
+ <varlistentry id="on-the-fly-settings-local-storage">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>L</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guimenuitem>Local Storage</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Toggle local storage in the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- DOM Storage. -->
+ <varlistentry id="on-the-fly-settings-dom-storage">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>D</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guimenuitem>DOM Storage</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Toggle DOM storage in the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <!-- User Agent. -->
+ <sect3>
+ <title>User Agent</title>
+
+ <variablelist>
+ <!-- Privacy Browser. -->
+ <varlistentry id="user-agent-privacy-browser">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;<keycap>P</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>User Agent</guisubmenu>
+
+ <guimenuitem>Privacy Browser</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the Privacy Browser user agent for the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- WebEngine Default. -->
+ <varlistentry id="user-agent-webengine-default">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;<keycap>W</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>User Agent</guisubmenu>
+
+ <guimenuitem>WebEngine Default</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the WebEngine Default user agent for the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Firefox on Linux. -->
+ <varlistentry id="user-agent-firefox-linux">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;<keycap>F</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>User Agent</guisubmenu>
+
+ <guimenuitem>Firefox on Linux</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the Firefox on Linux user agent for the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Chromium on Linux. -->
+ <varlistentry id="user-agent-chromium-linux">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;<keycap>C</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>User Agent</guisubmenu>
+
+ <guimenuitem>Chromium on Linux</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the Chromium on Linux user agent for the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Firefox on Windows. -->
+ <varlistentry id="user-agent-firefox-windows">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;&Shift;<keycap>F</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>User Agent</guisubmenu>
+
+ <guimenuitem>Firefox on Windows</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the Firefox on Windows user agent for the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Chrome on Windows. -->
+ <varlistentry id="user-agent-chrome-windows">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;&Shift;<keycap>C</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>User Agent</guisubmenu>
+
+ <guimenuitem>Chrome on Windows</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the Chrome on Windows user agent for the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Edge on Windows. -->
+ <varlistentry id="user-agent-edge-windows">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;<keycap>E</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>User Agent</guisubmenu>
+
+ <guimenuitem>Edge on Windows</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the Edge on Windows user agent for the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Safari on macOS. -->
+ <varlistentry id="user-agent-safari-macOS">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;<keycap>S</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>User Agent</guisubmenu>
+
+ <guimenuitem>Safari on macOS</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the Safari on macOS user agent for the current tab.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Custom User Agent. -->
+ <varlistentry id="user-agent-custom">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Alt;&Shift;<keycap>C</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>User Agent</guisubmenu>
+
+ <guimenuitem>Custom</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the custom user agent for the current tab. This action is only active if a custom user agent is set in the settings.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+
+ <!-- Zoom. -->
+ <sect3>
+ <title>Zoom</title>
+
+ <variablelist>
+ <!-- Zoom Factor. -->
+ <varlistentry id="on-the-fly-settings-zoom-factor">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;<keycap>Z</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guimenuitem>Zoom Factor</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Display the zoom factor dialog.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+
+ <!-- Search Engine. -->
+ <sect3>
+ <title>Search Engine</title>
+
+ <variablelist>
+ <!-- Mojeek. -->
+ <varlistentry id="search-engine-mojeek">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>M</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>Search Engine</guisubmenu>
+
+ <guimenuitem>Mojeek</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use Mojeek as the search engine.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Monocles. -->
+ <varlistentry id="search-engine-monocles">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>O</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>Search Engine</guisubmenu>
+
+ <guimenuitem>Monocles</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use Mojeek as the search engine.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- MetaGer. -->
+ <varlistentry id="search-engine-metager">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>E</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>Search Engine</guisubmenu>
+
+ <guimenuitem>MetaGer</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use MetaGer as the search engine.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Google. -->
+ <varlistentry id="search-engine-google">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>G</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>Search Engine</guisubmenu>
+
+ <guimenuitem>Google</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use Google as the search engine.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Bing. -->
+ <varlistentry id="search-engine-bing">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>B</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>Search Engine</guisubmenu>
+
+ <guimenuitem>Bing</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use Bing as the search engine.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Yahoo. -->
+ <varlistentry id="search-engine-yahoo">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>Y</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>Search Engine</guisubmenu>
+
+ <guimenuitem>Yahoo</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use Yahoo as the search engine.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Custom Search Engine. -->
+ <varlistentry id="search-engine-custom">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>C</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>On-The-Fly Settings</guimenu>
+
+ <guisubmenu>Search Engine</guisubmenu>
+
+ <guimenuitem>Custom</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Use the custom search engine. This action is only active if a custom search engine is set in the settings.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+ </sect2>
+
+ <!-- Bookmarks. -->
+ <sect2>
+ <title>Bookmarks</title>
+
+ <variablelist>
+ <!-- Edit Bookmarks. -->
+ <varlistentry id="edit-bookmarks">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;&Shift;<keycap>B</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Bookmarks</guimenu>
+
+ <guimenuitem>Edit Bookamrks</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Open the bookmark editing dialog.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Add Bookmark. -->
+ <varlistentry id="add-bookmark">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>B</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Bookmarks</guimenu>
+
+ <guimenuitem>Add Bookmark</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Add a new bookmark.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Add Folder. -->
+ <varlistentry id="add-folder">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Meta;<keycap>F</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Bookmarks</guimenu>
+
+ <guimenuitem>Add Folder</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Add a bookmark folder. The meta key on most keyboards is the Windows key.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- View Bookmarks Toolbar. -->
+ <varlistentry id="view-bookmarks-toolbar">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Alt;<keycap>B</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Bookmarks</guimenu>
+
+ <guimenuitem>View Bookmarks Toolbar</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Toggle the visibility of the bookmarks toolbar.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ <!-- Settings. -->
+ <sect2>
+ <title>Settings</title>
+
+ <variablelist>
+ <!-- Domain Settings. -->
+ <varlistentry id="settings-domain-settings">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;&Shift;<keycap>D</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Settings</guimenu>
+
+ <guimenuitem>Domain Settings</guimenuitem>
+
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Display the domain settings dialog.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Cookies. -->
+ <varlistentry id="settings-cookies">
+ <term>
+ <menuchoice>
+ <shortcut>
+ <keycombo action="simul">&Ctrl;<keycap>;</keycap></keycombo>
+ </shortcut>
+
+ <guimenu>Settings</guimenu>
+
+ <guimenuitem>Cookies</guimenuitem>
+ </menuchoice>
+ </term>
+
+ <listitem>
+ <para>
+ Display the cookies dialog.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ <!-- Common Settings and Help Entries. -->
+ <sect2 id="common-settings-help-menus">
+ <title>Common Settings and Help Entries</title>
+
<para>
- Use the custom search engine. This action is only active if a custom search engine is set in the settings.
+ &privacybrowser; has many common &kde; <guimenu>Settings</guimenu> and <guimenu>Help</guimenu> menu items.
+ For more information read the sections about the <ulink url="help:/fundamentals/ui.html#menus-settings">Settings Menu</ulink>
+ and <ulink url="help:/fundamentals/ui.html#menus-help">Help Menu</ulink>.
</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect3>
- </sect2>
-
- <!-- Bookmarks. -->
- <sect2>
- <title>Bookmarks</title>
-
- <variablelist>
- <!-- Add Bookmark. -->
- <varlistentry id="add-bookmark">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>B</keycap></keycombo>
- </shortcut>
- <guimenu>Bookmarks</guimenu>
- <guimenuitem>Add Bookmark</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Add a new bookmark.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
-
- <!-- Settings. -->
- <sect2>
- <title>Settings</title>
-
- <variablelist>
- <!-- Domain Settings. -->
- <varlistentry id="settings-domain-settings">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;&Shift;<keycap>D</keycap></keycombo>
- </shortcut>
- <guimenu>Settings</guimenu>
- <guimenuitem>Domain Settings</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Display the domain settings dialog.
- </para>
- </listitem>
- </varlistentry>
-
-
- <!-- Cookies. -->
- <varlistentry id="settings-cookies">
- <term>
- <menuchoice>
- <shortcut>
- <keycombo action="simul">&Ctrl;<keycap>;</keycap></keycombo>
- </shortcut>
- <guimenu>Settings</guimenu>
- <guimenuitem>Cookies</guimenuitem>
- </menuchoice>
- </term>
-
- <listitem>
- <para>
- Display the cookies dialog.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
-
- <!-- Common Settings and Help Entries. -->
- <sect2 id="common-settings-help-menus">
- <title>Common Settings and Help Entries</title>
+ </sect2>
+
+ <!-- Other Commands. -->
+ <sect2>
+ <title>Other Commands</title>
+
+ <variablelist>
+ <!-- Find Case Sensitive. -->
+ <varlistentry id="find-case-sensitive">
+ <term>
+ <command>
+ &Ctrl;+<keycap>S</keycap>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Toggle find case sensitive if the find toolbar is visible.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Open link in new tab. -->
+ <varlistentry id="new-tab">
+ <term>
+ <command>
+ &Ctrl;+&Shift;+Click
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Open link in new tab. This performs the same action as right-clicking on the link and selecting “Open link in new tab”.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Open link in background tab. -->
+ <varlistentry id="new-background-tab">
+ <term>
+ <command>
+ &Ctrl;+Click
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Open link in new background tab. This performs the same action as right-clicking on the link and selecting “Open link in new background tab”.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Open link in new window. -->
+ <varlistentry id="new-window">
+ <term>
+ <command>
+ &Shift;+Click
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Open link in new window. This performs the same action as right-clicking on the link and selecting “Open link in new window”.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Save link. -->
+ <varlistentry id="save-link">
+ <term>
+ <command>
+ &Alt;+Click
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Save link. This performs the same action as right-clicking on the link and selecting “Save link”.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- F11. -->
+ <varlistentry id="f11">
+ <term>
+ <command>
+ <keycap>F11</keycap>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Toggle full screen mode. This performs the same action as <xref linkend="view-full-screen-mode"/>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Escape. -->
+ <varlistentry id="escape">
+ <term>
+ <command>
+ <keycap>&Esc;</keycap>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Escape runs the first command that applies from the following list.
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Exit full screen browsing.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Clear the find text line edit and the find text highlights.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Hide the find text toolbar.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+ </sect1>
+
+ <!-- Cookies Dialog. -->
+ <sect1 id="cookies-dialog">
+ <title>Cookies Dialog</title>
<para>
- &privacybrowser; has many common &kde; <guimenu>Settings</guimenu> and <guimenu>Help</guimenu> menu items.
- For more information read the sections about the <ulink url="help:/fundamentals/ui.html#menus-settings">Settings Menu</ulink>
- and <ulink url="help:/fundamentals/ui.html#menus-help">Help Menu</ulink>.
+ The cookies dialog is accessed through <xref linkend="settings-cookies"/> (see <xref linkend="cookies"/>).
</para>
- </sect2>
-
- <!-- Other Commands. -->
- <sect2>
- <title>Other Commands</title>
-
- <variablelist>
- <!-- Find Case Sensitive. -->
- <varlistentry id="find-case-sensitive">
- <term>
- <command>
- &Ctrl;+<keycap>S</keycap>
- </command>
- </term>
-
- <listitem>
- <para>
- Toggle find case sensitive if the find toolbar is visible.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Open link in new tab. -->
- <varlistentry id="new-tab">
- <term>
- <command>
- &Ctrl;+&Shift;+Click
- </command>
- </term>
-
- <listitem>
- <para>
- Open link in new tab. This performs the same action as right-clicking on the link and selecting “Open link in new tab”.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Open link in background tab. -->
- <varlistentry id="new-background-tab">
- <term>
- <command>
- &Ctrl;+Click
- </command>
- </term>
-
- <listitem>
- <para>
- Open link in new background tab. This performs the same action as right-clicking on the link and selecting “Open link in new background tab”.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Open link in new window. -->
- <varlistentry id="new-window">
- <term>
- <command>
- &Shift;+Click
- </command>
- </term>
-
- <listitem>
- <para>
- Open link in new window. This performs the same action as right-clicking on the link and selecting “Open link in new window”.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Save link. -->
- <varlistentry id="save-link">
- <term>
- <command>
- &Alt;+Click
- </command>
- </term>
-
- <listitem>
- <para>
- Save link. This performs the same action as right-clicking on the link and selecting “Save link”.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- F11. -->
- <varlistentry id="f11">
- <term>
- <command>
- <keycap>F11</keycap>
- </command>
- </term>
-
- <listitem>
- <para>
- Toggle full screen mode. This performs the same action as <xref linkend="view-full-screen-mode"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Escape. -->
- <varlistentry id="escape">
- <term>
- <command>
- <keycap>&Esc;</keycap>
- </command>
- </term>
-
- <listitem>
- <para>
- Escape runs the first command that applies from the following list.
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Exit full screen browsing.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Clear the find text line edit and the find text highlights.
- </para>
- </listitem>
-
- <listitem>
- <para>
- Hide the find text toolbar.
- </para>
- </listitem>
- </itemizedlist>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
- </sect1>
- <!-- Cookies Dialog. -->
- <sect1 id="cookies-dialog">
- <title>Cookies Dialog</title>
-
- <para>
- The cookies dialog is accessed through <xref linkend="settings-cookies"/> (see <xref linkend="cookies"/>).
- </para>
-
- <sect2 id="cookies-dialog-commands">
- <title>Commands</title>
-
- <variablelist>
- <!-- Add Cookie. -->
- <varlistentry id="add-cookie">
- <term>
- <command>
- <keycap>A</keycap>
- </command>
- </term>
-
- <listitem>
- <para>
- Open the add cookie dialog.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Edit Cookie. -->
- <varlistentry id="edit-cookie">
- <term>
- <command>
- <keycap>E</keycap>
- </command>
- </term>
-
- <listitem>
- <para>
- Open the edit cookie dialog. This command is only valid if a cookie is currently selected.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Delete Cookies. -->
- <varlistentry id="delete-cookies">
- <term>
- <command>
- <keycap>D</keycap> or <keycap>∇</keycap>
- </command>
- </term>
-
- <listitem>
- <para>
- Delete the currently selected cookies. A dialog will confirm the deletion before it is processed.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Delete All Cookies. -->
- <varlistentry id="delete-all-cookie">
- <term>
- <command>
- <keycap>L</keycap>
- </command>
- </term>
-
- <listitem>
- <para>
- Delete all the cookies. A dialog will confirm the deletion before it is processed.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Close. -->
- <varlistentry id="close-cookies-dialog">
- <term>
- <command>
- <keycap>C</keycap> or <keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
- </command>
- </term>
-
- <listitem>
- <para>
- Close the cookies dialog.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
+ <sect2 id="cookies-dialog-commands">
+ <title>Commands</title>
+
+ <variablelist>
+ <!-- Add Cookie. -->
+ <varlistentry id="add-cookie">
+ <term>
+ <command>
+ <keycap>A</keycap>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Open the add cookie dialog.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Edit Cookie. -->
+ <varlistentry id="edit-cookie">
+ <term>
+ <command>
+ <keycap>E</keycap>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Open the edit cookie dialog. This command is only valid if a cookie is currently selected.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Delete Cookies. -->
+ <varlistentry id="delete-cookies">
+ <term>
+ <command>
+ <keycap>D</keycap> or <keycap>∇</keycap>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Delete the currently selected cookies. A dialog will confirm the deletion before it is processed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Delete All Cookies. -->
+ <varlistentry id="delete-all-cookie">
+ <term>
+ <command>
+ <keycap>L</keycap>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Delete all the cookies. A dialog will confirm the deletion before it is processed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Close. -->
+ <varlistentry id="close-cookies-dialog">
+ <term>
+ <command>
+ <keycap>C</keycap> or <keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Close the cookies dialog.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
</sect1>
<!-- Save Dialog. -->
<sect1 id="save-dialog">
- <title>Save Dialog</title>
-
- <para>
- The save dialog pops up when a download is initiated.
- </para>
-
- <sect2 id="save-dialog-commands">
- <title>Commands</title>
-
- <variablelist>
- <!-- Save. -->
- <varlistentry id="save-dialog-save">
- <term>
- <command>
- <keycap>S</keycap>
- </command>
- </term>
-
- <listitem>
- <para>
- Save the file.
- </para>
- </listitem>
- </varlistentry>
-
- <!-- Close. -->
- <varlistentry id="save-dialog-close">
- <term>
- <command>
- <keycap>C</keycap> or <keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
- </command>
- </term>
-
- <listitem>
- <para>
- Close the save dialog without saving the file.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
- </sect1>
- </chapter>
-
- <!-- Changelog. -->
- <chapter id="changelog">
- <title>Changelog</title>
-
- <!-- Version 0.4. -->
- <sect1 id="version_0.4">
- <title><ulink url="https://www.stoutner.com/privacy-browser-pc-0-4/">0.4</ulink> -
- <ulink url="https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff;h=b4c8c8d02113d14c2a07751eb3b0c1bdeec7abb4">13 June 2023</ulink></title>
-
- <itemizedlist>
- <listitem><para>Add a setting to <ulink url="https://redmine.stoutner.com/issues/1002">control spatial navigation</ulink>.</para></listitem>
- <listitem><para>Add an action to <ulink url="https://redmine.stoutner.com/issues/982">reload and bypass cache</ulink>.</para></listitem>
- <listitem><para>Fix a crash if one Privacy Browser window is closed while a <ulink url="https://redmine.stoutner.com/issues/1010">tab within it is loading</ulink>.</para></listitem>
- <listitem><para>Add <ulink url="https://redmine.stoutner.com/issues/1009">keyboard+click commands</ulink> to the Handbook.</para></listitem>
- </itemizedlist>
- </sect1>
-
- <!-- Version 0.3. -->
- <sect1 id="version_0.3">
- <title><ulink url="https://www.stoutner.com/privacy-browser-pc-0-3/">0.3</ulink> -
- <ulink url="https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff;h=ace098e8677ac0d6468b825c73e65b82c0d6993e">8 May 2023</ulink></title>
-
- <itemizedlist>
- <listitem><para>Add the changelog <ulink url="https://redmine.stoutner.com/issues/1000">to the Handbook</ulink>.</para></listitem>
- <listitem><para>Add the missing <ulink url="https://redmine.stoutner.com/issues/999">current domain settings icon</ulink> on Gnome and Xfce.</para></listitem>
- <listitem><para>Make changes to <ulink url="https://redmine.stoutner.com/issues/1005">build on Guix</ulink>.</para></listitem>
- </itemizedlist>
- </sect1>
-
- <!-- Version 0.2. -->
- <sect1 id="version_0.2">
- <title><ulink url="https://www.stoutner.com/privacy-browser-pc-0-2/">0.2</ulink> -
- <ulink url="https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff;h=44b5d3a1f6a5e7fc2aa8530845f26eba7bc26f9a">17 April 2023</ulink></title>
-
- <itemizedlist>
- <listitem><para>Fix a crash on GNOME when <ulink url="https://redmine.stoutner.com/issues/994">downloading a file</ulink> with local storage disabled.</para></listitem>
- <listitem><para>Fix problems with <ulink url="https://redmine.stoutner.com/issues/992">missing</ulink>
- <ulink url="https://redmine.stoutner.com/issues/993">icons</ulink> on GNOME.</para></listitem>
- <listitem><para>Display an <ulink url="https://redmine.stoutner.com/issues/980">animated favorite icon</ulink> while a webpage is loading.</para></listitem>
- <listitem><para><ulink url="https://redmine.stoutner.com/issues/975">Fix the Handbook</ulink> on non-KDE systems.</para></listitem>
- <listitem><para>Change the <ulink url="https://redmine.stoutner.com/issues/978">order of entries</ulink> in the WebEngine context menu.</para></listitem>
- <listitem><para>Make spellcheck languages <ulink url="https://redmine.stoutner.com/issues/958">easier to click on</ulink>.</para></listitem>
- <listitem><para>Only generate a HTTP ping dialog if the <ulink url="https://redmine.stoutner.com/issues/979">request is made by the current tab</ulink>.</para></listitem>
- <listitem><para>Add a section to the Handbook about <ulink url="https://redmine.stoutner.com/issues/976">HTTP pings</ulink>.</para></listitem>
- </itemizedlist>
- </sect1>
+ <title>Save Dialog</title>
- <!-- Version 0.1. -->
- <sect1 id="version_0.1">
- <title><ulink url="https://www.stoutner.com/privacy-browser-pc-0-1/">0.1</ulink> -
- <ulink url="https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff;h=73459c6685ec5e58d776f2594c9b587802363b1c">11 March 2023</ulink></title>
+ <para>
+ The save dialog pops up when a download is initiated.
+ </para>
- <itemizedlist>
- <listitem><para>Initial release.</para></listitem>
- </itemizedlist>
- </sect1>
- </chapter>
-
- <!-- FAQ. -->
- <chapter id="faq">
- <title>Questions and Answers</title>
-
- <qandaset id="faqlist">
- <qandaentry>
- <!-- Why are there no questions. -->
- <question>
- <para>Why are there no questions?</para>
- </question>
-
- <answer>
- <para>Because Privacy Browser is so perfectly designed that none have ever been asked. Also, because this is an alpha release and nobody has had a chance to ask them yet. ;)</para>
- </answer>
- </qandaentry>
- </qandaset>
- </chapter>
-
- <!-- Credits. -->
- <chapter id="credits">
- <title>Credits and License</title>
-
- <para>
- Privacy Browser PC copyright 2016-2017,2021-2023 Soren Stoutner <ulink url="mailto:soren@stoutner.com">soren@stoutner.com</ulink>.
- </para>
-
- <!-- Program. -->
- <sect1 id="program">
- <title>Program</title>
-
- <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>
- Translators:
- <itemizedlist>
- <listitem><para>Translations will be added in a future release.</para></listitem>
- </itemizedlist>
- </para>
-
- <!-- The program license. -->
- &underGPL;
+ <sect2 id="save-dialog-commands">
+ <title>Commands</title>
+
+ <variablelist>
+ <!-- Save. -->
+ <varlistentry id="save-dialog-save">
+ <term>
+ <command>
+ <keycap>S</keycap>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Save the file.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <!-- Close. -->
+ <varlistentry id="save-dialog-close">
+ <term>
+ <command>
+ <keycap>C</keycap> or <keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
+ </command>
+ </term>
+
+ <listitem>
+ <para>
+ Close the save dialog without saving the file.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
</sect1>
+ </chapter>
+
+ <!-- Changelog. -->
+ <chapter id="changelog">
+ <title>Changelog</title>
+
+ <!-- Version 0.4. -->
+ <sect1 id="version_0.4">
+ <title><ulink url="https://www.stoutner.com/privacy-browser-pc-0-4/">0.4</ulink> -
+ <ulink url="https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff;h=b4c8c8d02113d14c2a07751eb3b0c1bdeec7abb4">13 June 2023</ulink></title>
+
+ <itemizedlist>
+ <listitem><para>Add a setting to <ulink url="https://redmine.stoutner.com/issues/1002">control spatial navigation</ulink>.</para></listitem>
+ <listitem><para>Add an action to <ulink url="https://redmine.stoutner.com/issues/982">reload and bypass cache</ulink>.</para></listitem>
+ <listitem><para>Fix a crash if one Privacy Browser window is closed while a <ulink url="https://redmine.stoutner.com/issues/1010">tab within it is loading</ulink>.</para></listitem>
+ <listitem><para>Add <ulink url="https://redmine.stoutner.com/issues/1009">keyboard+click commands</ulink> to the Handbook.</para></listitem>
+ </itemizedlist>
+ </sect1>
+
+ <!-- Version 0.3. -->
+ <sect1 id="version_0.3">
+ <title><ulink url="https://www.stoutner.com/privacy-browser-pc-0-3/">0.3</ulink> -
+ <ulink url="https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff;h=ace098e8677ac0d6468b825c73e65b82c0d6993e">8 May 2023</ulink></title>
+
+ <itemizedlist>
+ <listitem><para>Add the changelog <ulink url="https://redmine.stoutner.com/issues/1000">to the Handbook</ulink>.</para></listitem>
+ <listitem><para>Add the missing <ulink url="https://redmine.stoutner.com/issues/999">current domain settings icon</ulink> on Gnome and Xfce.</para></listitem>
+ <listitem><para>Make changes to <ulink url="https://redmine.stoutner.com/issues/1005">build on Guix</ulink>.</para></listitem>
+ </itemizedlist>
+ </sect1>
+
+ <!-- Version 0.2. -->
+ <sect1 id="version_0.2">
+ <title><ulink url="https://www.stoutner.com/privacy-browser-pc-0-2/">0.2</ulink> -
+ <ulink url="https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff;h=44b5d3a1f6a5e7fc2aa8530845f26eba7bc26f9a">17 April 2023</ulink></title>
+
+ <itemizedlist>
+ <listitem><para>Fix a crash on GNOME when <ulink url="https://redmine.stoutner.com/issues/994">downloading a file</ulink> with local storage disabled.</para></listitem>
+ <listitem><para>Fix problems with <ulink url="https://redmine.stoutner.com/issues/992">missing</ulink>
+ <ulink url="https://redmine.stoutner.com/issues/993">icons</ulink> on GNOME.</para></listitem>
+ <listitem><para>Display an <ulink url="https://redmine.stoutner.com/issues/980">animated favorite icon</ulink> while a webpage is loading.</para></listitem>
+ <listitem><para><ulink url="https://redmine.stoutner.com/issues/975">Fix the Handbook</ulink> on non-KDE systems.</para></listitem>
+ <listitem><para>Change the <ulink url="https://redmine.stoutner.com/issues/978">order of entries</ulink> in the WebEngine context menu.</para></listitem>
+ <listitem><para>Make spellcheck languages <ulink url="https://redmine.stoutner.com/issues/958">easier to click on</ulink>.</para></listitem>
+ <listitem><para>Only generate a HTTP ping dialog if the <ulink url="https://redmine.stoutner.com/issues/979">request is made by the current tab</ulink>.</para></listitem>
+ <listitem><para>Add a section to the Handbook about <ulink url="https://redmine.stoutner.com/issues/976">HTTP pings</ulink>.</para></listitem>
+ </itemizedlist>
+ </sect1>
+
+ <!-- Version 0.1. -->
+ <sect1 id="version_0.1">
+ <title><ulink url="https://www.stoutner.com/privacy-browser-pc-0-1/">0.1</ulink> -
+ <ulink url="https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff;h=73459c6685ec5e58d776f2594c9b587802363b1c">11 March 2023</ulink></title>
+
+ <itemizedlist>
+ <listitem><para>Initial release.</para></listitem>
+ </itemizedlist>
+ </sect1>
+ </chapter>
+
+ <!-- FAQ. -->
+ <chapter id="faq">
+ <title>Questions and Answers</title>
+
+ <qandaset id="faqlist">
+ <qandaentry>
+ <!-- Why are there no questions. -->
+ <question>
+ <para>
+ Why are there no questions?
+ </para>
+ </question>
+
+ <answer>
+ <para>
+ Because Privacy Browser is so perfectly designed that none have ever been asked. Also, because this is an alpha release and nobody has had a chance to ask them yet. ;)
+ </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+ </chapter>
+
+ <!-- Credits. -->
+ <chapter id="credits">
+ <title>Credits and License</title>
- <!-- Documentation. -->
- <sect1 id="documentation">
- <title>Documentation</title>
-
- <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>
+ <para>
+ Privacy Browser PC copyright 2016-2017,2021-2023 Soren Stoutner <ulink url="mailto:soren@stoutner.com">soren@stoutner.com</ulink>.
+ </para>
- <!-- Icons. -->
- <sect1 id="icons">
- <title>Icons</title>
-
- <para>
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="privacybrowser.png" format="PNG"/>
- </imageobject>
- <textobject>
- <phrase>Privacy Browser</phrase>
- </textobject>
- </inlinemediaobject>
-
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="javascript.png" format="PNG"/>
- </imageobject>
- <textobject>
- <phrase>JavaScript</phrase>
- </textobject>
- </inlinemediaobject>
-
- <inlinemediaobject>
- <imageobject>
- <imagedata fileref="privacybrowser-monochrome.png" format="PNG"/>
- </imageobject>
- <textobject>
- <phrase>Privacy Browser Monochrome</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>
+ <!-- Program. -->
+ <sect1 id="program">
+ <title>Program</title>
+
+ <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>
+ 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>
+
+ <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="privacybrowser.png" format="PNG"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>
+ Privacy Browser
+ </phrase>
+ </textobject>
+ </inlinemediaobject>
+
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="javascript.png" format="PNG"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>
+ JavaScript
+ </phrase>
+ </textobject>
+ </inlinemediaobject>
+
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="privacybrowser-monochrome.png" format="PNG"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>
+ Privacy Browser Monochrome
+ </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>
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);
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);
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"));
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));
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")));
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"))));
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+;"));
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);
connect(viewSourceActionPointer, SIGNAL(triggered()), this, SLOT(toggleViewSource()));
connect(viewSourceInNewTabActionPointer, SIGNAL(triggered()), this, SLOT(toggleViewSourceInNewTab()));
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()));
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*>();
}
}
-void BrowserWindow::addFinalBookmarkFolderMenuEntries(QMenu *menuPointer, double folderId)
+void BrowserWindow::addFinalBookmarkFolderMenuActions(QMenu *menuPointer, double folderId)
{
// Get the database ID.
int folderDatabaseId = BookmarksDatabase::getFolderDatabaseId(folderId);
menuPointer->addSeparator();
// Add the add bookmark action to the menu.
- menuPointer->addAction(QIcon::fromTheme(QLatin1String("bookmark-new")), i18nc("The add bookmark action", "Add Bookmark"), [=]
+ 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(),
);
// Add the add folder action to the menu.
- menuPointer->addAction(QIcon::fromTheme(QLatin1String("folder-add")), i18nc("The add folder action", "Add Folder"), [=]
+ 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);
menuPointer->addSeparator();
// Add the open folder in new tabs action to the menu.
- menuPointer->addAction(QIcon::fromTheme(QLatin1String("tab-new")), i18nc("The open folder in new tabs action", "Open Folder in New Tabs"), [=]
+ 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);
);
// Add the open folder in background tabs action to the menu.
- menuPointer->addAction(QIcon::fromTheme(QLatin1String("tab-new")), i18nc("The open folder in background tabs action", "Open Folder in Background Tabs"), [=]
+ 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);
);
// Add the open folder in new window action to the menu.
- menuPointer->addAction(QIcon::fromTheme(QLatin1String("window-new")), i18nc("The open folder in new window action", "Open Folder in New Window"), [=]
+ 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);
// Add a separator.
menuPointer->addSeparator();
- // Add the edit folder action to the menu.
- menuPointer->addAction(QIcon::fromTheme(QLatin1String("edit-entry")), i18nc("The edit folder action", "Edit Folder"), [=]
- {
- // Get the current tab favorite icon.
- QIcon currentTabFavoriteIcon = tabWidgetPointer->getCurrentTabFavoritIcon();
+ // 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("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(folderDatabaseId, currentTabFavoriteIcon);
+ // Instantiate an edit folder dialog.
+ QDialog *editFolderDialogPointer = new EditFolderDialog(folderDatabaseId, currentTabFavoriteIcon);
- // Show the dialog.
- editFolderDialogPointer->show();
+ // Show the dialog.
+ editFolderDialogPointer->show();
- // Process bookmark events.
- connect(editFolderDialogPointer, SIGNAL(folderSaved()), this, SLOT(populateBookmarks()));
- }
- );
+ // Process bookmark events.
+ connect(editFolderDialogPointer, SIGNAL(folderSaved()), this, SLOT(populateBookmarks()));
+ }
+ );
+
+ // 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.
- menuPointer->addAction(QIcon::fromTheme(QLatin1String("delete")), i18nc("Delete folder context menu entry", "Delete Folder"), [=]
+ QAction *deleteFolderActionPointer = menuPointer->addAction(QIcon::fromTheme(QLatin1String("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.
- itemsToDeleteListPointer->append(folderDatabaseId);
+ // 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));
}
}
);
+
+ // 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
void BrowserWindow::populateBookmarks()
{
+ // 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 *> *bookmarkMenuActionPairPointer : bookmarksMenuActionList)
{
}
// Add the extra items at the bottom of the menu.
- addFinalBookmarkFolderMenuEntries(menuPointer, folderId);
+ addFinalBookmarkFolderMenuActions(menuPointer, folderId);
}
void BrowserWindow::populateBookmarksToolBar()
for (QPair<QMenu *, const double> *menuAndFolderIdPairPointer : bookmarksToolBarMenuList)
{
// Populate the final bookmarks menu entries.
- addFinalBookmarkFolderMenuEntries(menuAndFolderIdPairPointer->first, menuAndFolderIdPairPointer->second);
+ 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.
if (BookmarksDatabase::isFolder(databaseId)) // A folder was clicked.
{
// Populate the final bookmarks menu entries.
- addFinalBookmarkFolderMenuEntries(bookmarkContextMenuPointer, BookmarksDatabase::getFolderId(databaseId));
+ addFinalBookmarkFolderMenuActions(bookmarkContextMenuPointer, BookmarksDatabase::getFolderId(databaseId));
}
else // A bookmark was clicked.
{