1.42

1.   Modified the threadpool count to qCeil(1.5 * QThread::idealThreadCount()).
2.   Improved gcry_calloc_secure() failure detection in dcrypt::dcrypt().
3.   Corrected error messages.
4.   Version 1.17 introduced tab-only cookies; many, many years ago.
     The implementation was overly complex and yet quite primitive.
     Re-implemented. Accessible via a tab's context menu.
5.   Notifications of cookie exceptions were flawed. Corrected.

1.41

1.   Because of the large number of files that are released during the release
     process, some seven files, and the time required to perform this task,
     version 1.41 will only be targeted for Linux 64-bit, OS X 64-bit,
     and Windows platforms.
     A source distribution will also be included. The decision is also
     based on Sourceforge download statistics. Therefore, a total of four
     files will be uploaded. Free software must be sustained.
     Sustainability is not free.
2.   Resolved a tab-closing issue on OS X and Qt 5.0.1. The issue was most
     likely introduced by 1.40, item #29.
3.   Set the maximum input lengths of many textfield widgets to 2500.
4.   Adjusted bothersome layout margins.
5.   Per jonaspm, ignore Spot-On errors.
6.   Removed stale qDebug() statement.
7.   Version 1.40 did not include a bundle for FreeBSD. However, I performed
     some basic tests on FreeBSD with Qt 4.8.2 and Qt 4.8.4. Dooble
     was responsive.
     There are some libgcrypt warnings regarding the use of insecure memory.
     The warnings appear to be related to libspoton.so's initialization of
     libgcrypt. I'm unable to reproduce these warnings on other platforms.
     Also, the warnings eventually disappear. I may revisit this area if
     time permits.
8.   Decrypted data may be empty. Corrected dcrypt::decodedString().
9.   Purge QBuffer objects in dnetworkcache::remove().
10.  Corrected dnetworkcache::insertEntry(). The intent of the last
     statement is to remove the file if the encryption fails.
11.  Corrected
               if(ok)  <-- Incorrect.
                 data.clear();
               if(!ok) <-- Correct.
                 data.clear();
     in dnetworkcache::reencode().
12.  Evaluate indicators of dmisc::encodedString(). Objects that
     are not properly encrypted will not be recorded to databases.

1.40

1.   The manual clearing of cache items shall now be performed by
     a thread.
2.   Added architecture information to the About dialog.
3.   Windows Web font sizes have been set to 10 for all new installations.
4.   The cipherType was not properly saved to the INI file. Corrected.
5.   Fixed the state of the Authenticate Passphrase menu action. The state
     was incorrectly enabled after a proper authentication.
6.   Corrected casts in calls to gcry_cipher_decrypt() and
     gcry_cipher_encrypt().
7.   Approved Portuguese translation provided by smarquespt.
8.   Corrected shortcuts for generic search text widgets.
9.   Qt products have been upgraded to version 5.0.1 on Linux 64-bit
     and OS X platforms.
10.  FreeBSD support! A FreeBSD bundle of Dooble may be released with
     version 1.40 for x86_64 systems.
11.  The QNetworkReply::ContentNotFoundError network error was incorrectly
     managed in dwebpage::slotFinished().
12.  Added _PTHREAD_H_ to dmisc.cc in support of FreeBSD.
13.  The method dcrypt::decodedString() did not record positive results in
     the indicator variable. Corrected.
14.  dmisc::encodedString() will now recognize errors and report them
     via a new indicator variable.
15.  Version 1.28's item #3 is an interesting artifact. An experimental
     solution is to defer the deletion of the QNetworkReply objects.
16.  Included Galician translation files provided by Miguel Bouzada.
17.  QNetworkReply objects should not be deleted in dview as they
     are already purged by dnetworkaccessmanager.
18.  The Delete key is sometimes masked as the Backspace key. Corrected various
     keyboard event handlers.
19.  Allow users to save pages in the data URI scheme format. Very basic
     implementation.
20.  Corrected download units (KB to KiB, etc.).
21.  Modified the Downloads window such that download rates may be displayed
     in bits.
22.  Corrected dftp::get(). The order of commands should be:
               SIZE %1\r\nCOMMAND\r\n\RETR %1\r\n, where
     COMMAND is usually REST and %1 is the file name.
23.  Merged and corrected Vidalia support provided by milosolutions.pl.
     The project was funded by third parties.
     Please visit http://torbrowser.sourceforge.net or
     http://torbrowser.svn.sourceforge.net for some sort of
     information. Dooble is not affiliated with Tor nor TorBrowser.
     Please do not report Tor issues to Dooble.
24.  The method dcrypt::decodedString() incorrectly assumed that the
     successfully-decrypted data contained valid size information.
25.  Added the Faience theme.
26.  Corrected tab focus in the Bookmarks popup and window.
27.  Attempt to inspect plugins. Invalid plugins will not be listed in Addons.
28.  The plugins mechanism required major work. By their nature, plugins have
     singular instances. The old mechanism allowed multiple windows
     to open multiple instances of a plugin. However, the loading
     machinery created torn plugin tabs. Also, closing a window that housed
     a plugin destroyed the plugin's widgets. This led to Dooble eventually
     failing. Corrected.
29.  Dooble unknowingly removed multiple tabs if the Desktop or a plugin
     was closed.
30.  The libgcrypt library has been updated to version 1.5.0 on Windows.
     If you have bookmarks, please export them before upgrading. Expect
     massive data losses. You must also generate a new passphrase in order
     to take advantage of gcry_kdf_derive().
31.  Added support for the QWebPage::downloadRequested() signal.
32.  Prevent abuse of download prompts (see dview::downloadPrompt()).
33.  More logging in dcrypt.cc.

1.39

1.   This release is intended for OS X users.
2.   Corrected loader path errors, again. Thanks to apgza for reporting
     the problem.
3.   Log libspoton errors.
4.   Changed Dooble's default window size from 800x600 to 1024x768.

1.38

1.   Removed version 1.37 source.
2.   Enabled the Metal protocol on OS X systems. Removed the tab bar's
     corner widget on OS X systems only. Nice. (The Metal protocol is
     disabled for Qt 5.0.)
3.   Version 1.37 item #18 contained incorrect information. The interval
     at which the cache is reviewed is ten seconds.
4.   Corrected an odd re-encoding flaw. Dooble should not populate re-encoding
     containers if a passphrase has not been prepared by the user.
5.   Added Include.osx32 and Libraries.osx32 for developers.
6.   Corrected the OS X bundle and project file. The OS X executable included
     some incorrect loader paths.
7.   Updated libspoton.dll, libspoton.dylib, and libspoton.so.
8.   The file dooble.win.pro defined DOOBLE_GCRYPT_VERSION instead of
     DOOBLE_MINIMUM_GCRYPT_VERSION. Corrected.
9.   Created the dcrypt class. The new class will eliminate much of the
     bitter source in dmisc.cc. Another benefit of the new class is the
     removal of temporary containers that are used during data re-encoding.
     Please export your bookmarks before upgrading to version 1.38. Users
     should also expect data loss.
10.  Allow clearing of bookmarks from the Clear Containers window.
11.  Added the shortcut Control + Shift + Del to the Clear Containers
     window per ReactOS user request.
12.  Set the url_hash as the primary key in the favicons table. Expect
     data loss.
13.  Initialization vectors need not be stored in secure memory. Use
     gcry_calloc() instead of gcry_calloc_secure().
14.  Introduced the Salt Length option to the Settings window's Safe
     page.
15.  Updated Qt products to version 4.8.4 on 32-bit Linux, OS X, and Windows
     platforms. 64-bit Linux will feature Qt 5.0!
16.  Force downloads to be aborted during the exit process. Please
     see ticket 3593151.
17.  Qt 5.0 porting changes.
18.  Cache JavaScript objects.
19.  Added Include.osx64 and Libraries.osx64. Added Qt 5.0-specific project
     files.
20.  Increased the number of open files on OS X systems to OPEN_MAX.
     The increase only applies to the soft limit.
21.  The Accept third-party cookies checkbox (Settings window's Security
     panel) has been replaced by a pulldown in support of Qt 5.0. The
     new options are: always allowed, always blocked, and allowed with
     existing cookies.
22.  The Q_WS macros are not available in Qt 5.0. As a result, all
     Q_WS macros have been modified accordingly.
23.  Use non-native file dialogs on OS X. The QFileDialog::selectFile()
     is problematic.
24.  Embedded terminals have been removed for Unix systems and Qt 5.0.
25.  Allow disabling of the authentication dialog. Please see the Settings
     window's Safe panel.
26.  Added tooltips to various widgets.
27.  Inspect the status of data streams.
28.  Some pages do not emit the QWebFrame::initialLayoutCompleted()
     signal. As a result, the favicon will not be aquired. By also capturing
     the QWebFrame::urlChanged() signal, our chances of fetching
     the favicon increase.
29.  Replaced creat() with open() on Unix platforms.
30.  dmisc::decodedString() will now recognize errors and report them
     via a new variable. The process of updating every use of
     the function will take several releases.
31.  Fixed an incorrect if-statement in dreinstatedooble::dreinstatedooble()
     that had the potential of aborting Dooble during the restoration process.
32.  QString::toAscii() is not available in Qt 5.0. Replaced with
     QString::toLatin1().
33.  The minimum Web font size has been changed from 14 to 12. Only new
     installations will notice the change.
34.  If possible, automatically add the Nuvola icon theme.
35.  Do not inform the user of console events unless instructed to do so.

1.37

1.   Do not remove the iterationCount setting from Dooble.ini during
     a reset.
2.   A change to the iteration count must not be retained unless the
     passphrase has also been modified.
3.   Added the macro DOOBLE_URLFRAME_LAYOUT_SPACING. Developers should
     use this macro to control the layout spacing of the URL frame. The
     dooble.arm.pro project file currently prepares the macro with a value
     of 1.
4.   The favicons table's favicon field supports binary
     data. Storing base64 representations of binary data is
     inefficient. A similar approach has been applied to the
     applications.db database.
5.   The method dmisc::setActionForFileSuffix() created an incomplete
     applications table. Corrected.
6.   Added IF NOT EXISTS clauses to various CREATE TABLE instances.
7.   Integrated the libspoton library. The library will allow users to
     share links with Spot-On, a distributed search engine
     that features anonymity and privacy. Although Spot-On is not yet
     suitable for a production environment, the integration will
     introduce users to the engine.
9.   Renamed Include.win to Include.win32 and Libraries.win to
     Libraries.win32. Dooble has not been officially released for
     Windows 64-bit. A future release will provide additional support.
10.  Updated pthreadGC2.dll to version 2.9.1. Also added new include
     files specific to Pthreads-w32 to Include.win32.
11.  If the About dialog is shown, the URL handler must be set to the
     dialog's parent. Please note that since the About dialog is not modal and
     exists for each Dooble window, the default URL handler will be set
     to the most current About dialog's parent.
12.  Added the IRC Channel widget to the Settings window's Home panel.
13.  Now using gcry_randomize() instead of gcry_create_nonce() when creating
     a temporary passphrase. The quality level is currently set to
     GCRY_STRONG_RANDOM.
14.  Salts will now be generated via the gcry_randomize() function instead
     of gcry_create_nonce() with quality levels set to GCRY_STRONG_RANDOM.
15.  Improved dmisc::hashedString() such that the method utilizes a
     temporary 256-byte random key if s_passphraseHash is zero. The variable
     s_passphraseHash will be zero if gcry_calloc_secure() was unable
     to allocate the requested memory. Other issues will likely arise if
     memory allocation fails.
16.  All restoration files must be removed if the user purges the entire
     history of an authenticated session.
17.  Removed base64 conversions of icons from all databases. Some icon
     loss should be expected.
18.  The memory cache is a peculiar beast. Its existence places Dooble
     in peril. Therefore, the cache implementation has been redesigned.
     The memory cache has been replaced by a pure, and encoded, disk cache.
     Periodic purging of cache files will occur every ten seconds and
     will continue until 20% of cached content has been removed. Files
     are selected according to their modification times. The desire to
     store cached data in a SQLite database proved difficult because
     of the inherent locking and synchronization mechanisms.
     The Cache filenames adhere to the following:
     hex(keyed-hash(URL))(0, 2)/hex(keyed-hash(URL))_[data|meta_data]_[0|1],
     where 0 implies that the file belongs to an authenticated session and
     1 implies that the file is temporary.
19.  Button roles are quite annoying. Corrected, per the Schmidt.
20.  Removed compression usage from the cache environment.
21.  Removed the primary key constraint from the favicons.db database.
     The keyed hashes should provide sufficient uniqueness. Apologies
     for lost data.
22.  Added SQL indices to the favicons table.
23.  Use QSqlQuery::setForwardOnly() whenever applicable.
24.  Modified the threadpool count to qMax(QThread::idealThreadCount(), 100).
25.  Made many corrections to this file.
26.  Dooble selected a rather weak hash algorithm (sha1) if the
     settingsWindow/passphraseHashType's value was not recognized. Corrected.
27.  Corrected dmisc::hashedString(). The buffer created by
     gcry_md_read() has a size that's specific to the selected hash
     algorithm. The size must be respected.
28.  Guard portions of dmisc::hashedString() as the method may be accessed
     by multiple threads.
29.  Added a humongous ico file. Please thank the Schmidt.
30.  Moved dooble.clang.pro to the Trash directory. The file does not
     have a desire to remain current.
31.  The function gcry_md_get_algo_dlen() may return zero. Do be careful.
32.  Purged additional static variables.
33.  Do not attempt to download a site's favicon unless instructed to do so.
34.  Added database size information to the Settings window's Safe panel.
35.  Dooble shall now display an informative message for each denied
     3rd-party connection.
36.  The $HOME/.dooble/.crashed file should be removed after a successful
     restoration and not before.
37.  The custom load-error page should only be displayed if
     the content-length header is 0.
38.  Resolved a critical flaw. The encoding mechanism did not properly
     record plaintext lengths exceeding 255. Please export existing
     bookmarks before upgrading to version 1.37. Apologies.

1.36

1.   Added missing tr() statements (translations).
2.   Modified dmisc::isGnome() so that it returns true if
     DESKTOP_SESSION is set to ubuntu. You may experience initial
     discomfort if you're using an Ubuntu desktop.
3.   Added an experimental Always HTTPS feature. If set, Dooble
     will attempt to transform links contained on a page from HTTP
     to HTTPS.
4.   Prepared source for Qt 5.0.
5.   The user may close a plugin or restoration tab that may result
     in Dooble exiting if the tab that's about to be closed is the sole tab.
     This is not a problem, however, it may cause confusion.
6.   Consistent icons.
7.   Added the user-contributed nuvola icon set.
8.   Qt products have been upgraded to version 4.8.3 on Linux, OS X, and
     Windows platforms.
9.   Dooble will now attempt to restrict network traffic from a data
     scheme. Data schemes may be used to gain user credentials. If a user
     navigates to a data URL, Dooble shall disable the particular tab's
     network configuration. The user must manually navigate to a non-data
     URL before the tab's network configuration is restored. Navigating
     to links that may exist within the data page will also be prohibited.
     Also, any external content will not be gathered.
     The new feature is experimental and is intended to place a tab in
     total network isolation. Opening restricted links in new tabs or
     windows is the sole responsibility of the user.
10.  Resolved null scaled pixmap warnings.
11.  Updated project files so that they reference $$[QT_INSTALL_BINS] in
     the install targets.
12.  Removed 1.35-specific source.
13.  Please note that disk cache data are first encrypted and then
     compressed before being written to storage.
14.  The WolframAlpha search will now be performed via SSL.
15.  Added the MetaGer search engine.
16.  Uniform tab heights for non-OS X systems.
17.  If the Control key is depressed while a page initiates a load,
     a new tab will be created containing the new page. Corrected.
18.  Updated dwebpage::userAgentForUrl() in support of OS X 10.7 and 10.8.
19.  Replaced Bing with Blekko.
20.  Project files referenced qm files instead of ts files in translations
     sections. Corrected.
21.  Allow the user to select the cipher and hash types instead of
     forcing selections based on perceived strengths.
22.  The method dmisc::passphraseHash() incorrectly relied on a class
     member (s_hashType) instead of a method parameter (hashType).
23.  Eliminated dmisc::s_hashType.
24.  Corrected source comments.
25.  The Settings window's reset mechanism removed the cipher type
     from the Dooble.ini file. Corrected.
26.  Allow user to set the tool bar's icon size to 16.
27.  Bernd Stramm provided updates in support of advanced GCC versions.
28.  Integrated changes and suggestions provided by aapoaapo.
29.  Replaced _exit() with _Exit().
30.  Replaced std::cerr and std::cout calls with fprintf() and
     dmisc::logError().
31.  Removed static variables wherever possible.
32.  The location widget's completer must be hidden whenever the
     main window exits the full-screen mode while the location widget
     has focus. If the widget's visibility state is not set to false
     after exiting the full-screen mode, the widget's completer
     will be temporarily separated from the location widget.
33.  The dooble::s_settings container may be accessed from threads. The use
     of a mutex should prevent container corruption.
34.  The methods dnetworkcache::readCacheFromDisk() and
     dnetworkcache::writeCacheToDisk() must be as thread-safe as possible.
35.  Cache readers and writers must terminate if caches are disabled.
36.  Modified the cache reader and writer such that they do not convert
     data to base64. A similar approach may be adopted by other containers.

1.35

1.   Updated MacGPG2 software to version 2012.03.18.
     Because of the new libraries, users will lose their bookmarks.
     Please refer to item #3. Apologies.
2.   Qt products have been upgraded to version 4.8.2 for OS X.
3.   Added export and import facilities to the Bookmarks window. Only
     HTML files are supported. Folders are not exported because of
     potential compatibility issues with other browsers.
4.   Added the Applications panel to the Settings window. Dooble will
     automatically add file suffixes as it discovers them. A context
     menu available off of the Applications table allows for quick
     removal of file suffixes.
5.   An empty or invalid My Retrieved Files setting prevented Dooble from
     saving downloaded items. Resolved.
6.   Added more information to version 1.27's item #76.
7.   Restored tabs may have incomplete titles. Dooble will now
     correct such mishaps for display purposes.
8.   Removed the url command-line option. Dooble will now interpret
     arguments as URLs. The full-screen-mode continues to be supported.
9.   Duplicate exceptions should not be reported.
10.  Double-clicking on a downloaded item in the Downloads window will
     provide the user with an application-selection prompt as long
     as the item is downloaded.
11.  Created $HOME/.dooble/applications.db. The contents of the database
     are not encrypted.
12.  Modified dmisc::findUniqueFileName() so that the method does not
     introduce artificial file suffixes.
13.  The dcookies container shall now use a thread for writing
     contents to cookies.db.
14.  Ability to set the location tool bar's icon size. Currently-supported
     sizes are 24 and 32.
15.  Updated bundled Linux 64-bit libraries:
               libcrypto.so.0.9.8
               libcrypto.so.1.0.0
               libssl.so.0.9.8
               libssl.so.1.0.0
     The libraries are gathered from Ubuntu 12.04.
16.  The Linux binary is now built with level 3 optimization.
17.  The Home URL was not initialized correctly. Fixed.
18.  Dooble should initialize the My Retrieved Files setting.
19.  Removed dmisc::s_mutex and uses of it.
20.  New passphrases must be 16 characters or more.
21.  dview::load() failed to set the network manager's proxy for FTP URLs.
     Please note that QFtp has been replaced by dftp. The new class
     prepares its proxies.
22.  Dooble shall now provide a friendly reminder upon launch if
     a passphrase has not been prepared.
23.  The method dnetworkaccessmanager::createRequest() had the potential
     of raising an HTTP Referrer exception with incorrect information
     if a Third-Party Blocking exception was also thrown by the same
     request. Fixed.
24.  It's probably wise to populate dhistory's m_contentsList if and only
     if the data are about to be re-encoded.
25.  Re-encoding of history data was dysfunctional. Fixed.
26.  The cookies database has been modified. Instead of storing individual
     fields, the database will now contain encoded values of raw forms.
     Cookies shall be purged. Apologies.
27.  QByteArray::constData() may return 0-terminated data. Its use is
     not recommended when writing binary data. See version 1.27's
     item #12.
28.  Corrected confusing QSqlQuery::bindValue() calls in dbookmarkswindow.
29.  Removed hash information from all of the appropriate databases.
     An exception is the favicons.db database. Please see item #147.
     As a result, user data will be purged.
30.  Corrected dbookmarkspopup::exec(). The method must initialize
     class members since there is but one instance of dbookmarkspopup
     for the application. Please note that exec() has been replaced by
     populate().
31.  Removed ddownloadwindowitem's primaryKey() method.
32.  dview::slotUrlChanged() must set the network manager's proxy based
     on the new URL.
33.  Removed static members pertaining to the passphrase from the dmisc class.
     Introduced salted passphrase hashes. Users will need to provide new
     passphrases. The 256-byte salt is generated via gcry_create_nonce().
34.  Removed dmisc::saveCorrectCipherType().
35.  The method dmisc::setInitializationVector() has been modified in order
     to produce random initialization vectors. Heavy changes. Encrypted
     data will be prepended with initialization vectors before being
     recorded. The initialization vectors shall be extracted and applied
     during the decryption phase. Please thank rransom for providing
     helpful suggestions.
36.  Simplified database activity in the dcookies class.
37.  Removed sortby from downloads.db.
38.  Added basic checks to dreinstatedooble::dreinstatedooble()
     to verify the validity of the history items. Modification applies to
     session restoration.
39.  Issue a setOption(QFileDialog::DontUseNativeDialog, true) in
     ddesktopwidget::slotChangeDesktopBackground() if the native desktop
     is KDE. The setting prevents layered dialogs in the Desktop.
40.  Replaced getenv() with qgetenv().
41.  Removed the host fields from favicons.db and history.db.
42.  Added a myriad of buddies throughout the interface files. Think
     mnemonics!
43.  Dooble shall gather a key from the user's passphrase
     via gcry_kdf_derive(). If gcry_kdf_derive() is not available,
     Dooble shall use the official passphrase and generate a warning.
     The project files assume that the gcrypt library's version is
     a minimum of 1.5.0. The iteration count is set to 10000. The high
     iteration count may temporarily impede performance during launch.
     The count may be modified via the Settings window's Safe panel unless
     libgcrypt's version is less than 1.5.0.
44.  Some slots connected to QActions' triggered() signals used
     the states of the respective actions instead of the boolean parameters.
     It's possible that the states may disagree with the boolean parameters.
     Adjusted.
45.  Double-clicking on the tab bar did not create a new tab on OS X, assuming
     that Dooble was configured properly. Corrected.
46.  On Gnome desktops, restoreGeometry() and saveGeometry() are replaced
     by setGeometry() and geometry(). Please see version 1.30's item #9.
47.  Do not create a Desktop object unless explicitly requested to do so.
48.  Tabulate the number of expired cookies in the Cookies window.
49.  Added the Reload Tab action to the tab widget's context menu.
50.  Corrected comparison in dcookies::setCookiesFromUrl().
     (cookie.at(0).name() == all.at(j).domain())
51.  Download progress bar values are now based on percentages. Changes
     applied in version 1.31 (item #11) have been removed.
52.  Replaced QFtp with dftp in dftpbrowser. The new class provides
     a simple interface to FTP.
53.  The method dftpbrowser::slotListInfo() must disable the table
     widget's sorting mechanism before adding new content to the table.
     Corrected.
54.  Added the Session Restoration option to the Settings window's
     Security panel. The default value is on.
55.  Do not create a restoration file if a page's history is empty.
56.  Fixed dooble::newTab() with respect to session restoration. The
     method dview::recordRestorationHistory() must be called after
     the tab has been assigned to its new parent. Calling the method before
     a parent has been assigned will cause dview::tabIndex() to return a -1.
     Dooble shall attempt to respect the original order of a window's tabs
     during session restoration.
57.  Removed:
     if(!url.host().contains("ebay.com"))
       agent.replace("(KHTML, like Gecko)", "(KHTML, like Gecko) Version/5.0");
     from dwebpage::userAgentForUrl().
58.  Replaced FTP proxy configuration widgets in the Settings window's
     Proxy panel. The new mechanism supports Socks5. Please inspect
     your settings after launch as Dooble will initially reset the FTP
     proxy ports to 1080.
59.  Improved browsing of FTP directories containing many files.
     (ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles)
     Please don't try accessing the aforementioned directory on Firefox.
60.  Improved the appearance of the FTP manager.
61.  Added the DNT (Do-Not-Track) header to HTTP(S) requests. The default
     value is off. Exceptions provided, of course.
62.  Purged dview of redundant container (directoryView).
63.  The file and ftp managers shall now provide basic content statistics.
     The statistics shall be available in the status bars of the parent
     windows.
64.  The Desktop must repaint itself whenever a child window is destroyed.
65.  Ignore QWebPage::statusBarMessage() signals. Are these signals
     ever beneficial?
66.  Sort the Bookmarks window's table contents whenever data are modified.
67.  Control+F will now activate search widgets for applicable windows.
68.  Added search widgets to the exceptions windows.
69.  Removed redundant clear() instances. Destructors will eliminate
     contents.
70.  The Delete mechanism in the Cookies window would remove items that
     were hidden (filtered) if those items were selected.
71.  Did not properly filter items in the Bookmarks and Downloads windows.
     Corrected.
72.  Corrected Desktop background image reference.
73.  Trailing slashes should be removed from all URLs. One consequence of
     not removing trailing slashes is history items that only differ
     by trailing slashes.
74.  The method dfilemanager::prepareLabel() should use the system's
     native directory separator.
75.  Removed
     if(url.host().contains("ebay.com"))
       {
         agent.remove("(KHTML, like Gecko) ");
         agent.remove(" Safari/533.3");
         agent.remove(" Apple/533.3");
       }
     from dwebpage::userAgentForUrl().
76.  Added the Error Log window. The window is accessible off of the
     Windows menu. The log will contain all important and interesting events
     that occur during a session. The status bar shall be illuminated
     whenever an event occurs. The mechanism that's responsible for
     appending messages to the log is guaranteed to be thread-safe. The
     Error Log shall attempt to ignore repetitive errors.
77.  Favorite sites will now be depicted by gentle green backgrounds
     in the Cookies window.
78.  Because of the significant changes regarding encrypted database items,
     the dooble::saveHistoryItem() method has been replaced by
     dsavehistorythread. The intense objects must locate
     encrypted items without disturbing the user. Care has been taken to avoid
     database and process corruption. See item #81.
79.  Now recording Qt-generated messages in the Error Log.
80.  Some POST requests generated "content-type missing in HTTP POST,
     defaulting to application/octet-stream" warnings. Corrected. Interested
     parties should review dnetworkaccessmanager::createRequest().
81.  Modified dmisc::decodedString() and dmisc::encodedString() in support
     of threads. See item #78.
82.  The Back and Forward menus shall now be populated only on request.
83.  The Clear History mechanism was incomplete. The clearHistory() signal
     must be emitted and, if necessary, dview::slotClearHistory() must
     remove restoration files. Corrected.
84.  Improved the appearance of the bookmarks popup.
85.  The dwebview class neglected proxy settings when retrieving
     favicon data. Please note that favicon data are now retrieved by the
     dwebpage class.
86.  Incorrect proxy configuration in the ddownloadwindowitem class. The
     QNetworkAccessManager's proxy should probably be prepared before a get()
     request.
87.  Connected QNetworkReply's error() signal to deleteLater() where
     applicable.
88.  Removed the extra QNetworkAccessManager object that's responsible
     for retrieving favicon data.
89.  Follow some standards when retrieving a site's favicon.
90.  Removed redundant dmisc::iconForUrl() calls that were situated in
     the same contexts as calls to dview::icon(). The method dview::icon()
     relies on dmisc::iconForUrl().
91.  The History menu included duplicate items because of incorrect
     comparisons. The faulty logic may have also prepared incorrect icons
     for other menu actions.
92.  Dooble shall use Qt mutexes when preparing gcrypt's thread support
     callbacks if _PTHREAD_H is not defined. A reminder shall be
     logged in the Error Log. Please see dmisc.cc.
93.  Updated Include.win files. The files were gathered from
     http://files.gpg4win.org/gpg4win-src-2.1.0.exe. The Windows version of
     Dooble utilizes version 1.4.6 of the gcrypt library. As a result,
     the gcry_kdf_derive() function will not be available. A future version
     of Dooble will resolve this shortcoming. Please also note that the
     mentioned discrepancy may have resulted in data being stored as
     plain text. Apologies.
94.  Add-on tabs lacked tool tips. Corrected.
95.  The Tabs menu's actions contained incorrect icons. Fixed.
96.  Decisions, decisions, decisions. Qt/WebKit signals are not predictable.
     The iconChanged(), titleChanged(), and urlChanged() signals
     may not be emitted when expected.
97.  WebKit page caching has been disabled.
98.  Corrected various tab tool tips.
99.  Dooble will now display a fancy HTML page whenever a load request
     completes incorrectly. A summary of the failure will also be
     inserted into the error log.
100. Replaced all instances of Qt::ApplicationModal with Qt::WindowModal.
101. Added various container bound checks.
102. Replaced many instances of the [] operator with many instances of
     the at() method.
103. Dragging an item from the History sidebar onto the tab bar will
     set the tab widget's current index to the index at the location
     of the dragged item's coordinates.
104. Displayed file sizes were slightly incorrect. Also corrected labels.
105. Corrected assumptions of file sizes. Dooble assumed that file
     sizes were limited to 32-bit integers instead of 64-bit integers.
     The 64-bit limitation is imposed by Qt.
106. Must correct URL paths. For example, http://www.host.org/a//b will
     be replaced with http://www.host.org/a/b. Changes applied to:
              a. Bookmarks window.
              b. Downloads window.
              c. Dooble window.
              d. Settings window.
107. Folders in the Bookmarks menu were not properly ordered. Fixed.
108. Searching the local history via the search engines panel should not
     initiate a page load request. Corrected.
109. Simplified dragging and dropping of items from the History sidebar.
     Removed dfilemanagertable and dfilemanagertree.
110. The method dsettings::updateFontWidgets() had the potential of
     disrupting the provided combination box.
111. Fixed incorrect initialization of the cookie sweeper's units.
112. The method dsettings::exec() added items to the Character Encoding
     combination box without first clearing the widget.
113. The Linux 64-bit binary distribution and the Windows distribution
     shall include Qt 4.8.2.
114. Passwords may contain weird characters. A space is a strange character.
     Dooble should not prohibit users from being weird. Passwords
     and user names for proxies are weird too.
115. The method dcookiewindow::populate() must disable the
     QStandardItemModel::itemChanged() signal prior to populating the tree.
     If the signal is not disabled, the dcookies::allowDomain and
     dcookies::deleteAndSaveFavorites() methods shall be called numerous times.
     The dexceptionsmodel implementation was modified in a similar manner.
116. Added guards to all static pointers.
117. Corrected Unix install targets.
118. Introduced the Tests directory.
119. Dooble did not completely respect settings pertaining to the closing of
     modified tabs. Corrected.
120. Clear the Origin header if HTTP Referrer blocking is enabled.
121. Because of the complex and numerous states that a tab may be in,
     the location widget's bookmark button's state must adhere to some basic
     logic. Such strange logic has also been attached to the Bookmarks menu.
122. The tab widget's right corner widget has been anchored to the
     rightmost tab.
123. ddownloadwindowitem objects must create their own QNetworkAccessManager
     objects. After a QNetworkAccessManager object has been created, the
     object's cookie jar must be set to the global cookie jar. Unfortunately,
     download items may emit authentication signals. Users should expect
     additional prompts. The approach introduces simplicity in the
     implementation.
124. Test the availability of the xterm executable on X11 systems before
     creating a context menu on the Desktop.
125. Per http://trac.webkit.org/wiki/Fingerprinting, Dooble shall set
     the local timezone to UTC.
126. Added a mechanism for blocking images from selected sites.
127. Corrected various state relationships between checkboxes and pushbuttons
     in the Settings window.
128. Added a link to the #dooble IRC channel in the Locations menu. The channel
     is hosted by Freenode.
129. Searching encrypted history data is tedious. Searching encrypted
     history data whenever the user provides input is unpleasant. Dooble
     shall now provide the user with an artificial sense of sophistication.
     The timer intervals are based on unrealistic averages.
130. Dooble ought to remove restoration files after receiving a
     SIGTERM signal.
131. Dooble forced a raster graphics system on X11 systems. The user
     may now set a graphics system via the graphicssystem option.
132. The urlChanged() signal caused Dooble to issue incorrect calls to
     prepareWidgetsBasedOnView().
133. Introduced Web caches. Please review the Settings window's History panel.
     The cache shall not be committed to disk for temporary sessions.
     Caches are disabled until they are activated by the user. An offline
     mode may be enabled via File->Offline. Content that is written to disk
     is compressed via qCompress().
134. Dooble shall now issue SQLite vacuum statements whenever it exits or
     re-encodes data. Some additional cleaning will be performed on
     the applications.db database.
     The cookies.db database shall be vacuumed periodically.
135. Dooble did not properly define padding boundaries during encoding.
     The resolution implements the ANSI X.923 method.
136. Updated the Windows compilation flags in dooble.win.pro.
137. The minimum Web font has been changed from 9 to 14 on all platforms.
138. Updated OpenSSL libraries to version 1.0.1c on Windows.
139. Improved error reporting of gcrypt functions.
140. Added dooble.arm.pro. Please thank saiberion.
141. Exceptions windows will now extract the host fields from
     user-provided inputs prior to adding the inputs to the exceptions
     models. For example, http://www.freebsd.org will be transformed into
     www.freebsd.org.
142. The dfilemanager::load() method did not set the file system model's
     root path to the provided path. Watch the watcher.
143. The history panel and window should only be populated on request.
144. The mechanism that's responsible for re-encoding history
     data did not consider restoration information. Corrected.
145. Added lrelease and lupdate to the install targets. Project files
     considered: dooble.arm.pro, dooble.clang.pro, dooble.osx.pro, and
     dooble.pro. The Windows project file's install target is currently
     not maintained.
146. Fixed a recursive directory-loaded error. If the user navigates to
     the $HOME/.dooble directory, the loadFinished() signal may be
     emitted indefinitely.
147. The favicons.db database is the only database to contain keyed hashes.
     Dooble will gather the hash of the user's derived key (or passphrase)
     and use the value as the secret key. Please note that Dooble does not
     expose the hash of the passphrase in the Dooble.ini file.
     Please see item #33. Please also note that the new option does
     not restrict the behavior of favicon re-encoding with respect to
     existing data.
148. Allow the user to disable the favicons.db via the Settings window's
     Security panel. The favicons.db will be disabled until it has been
     activated by the user.
149. During re-encoding, some containers (bookmarks, favicons, history) must
     be populated with decoded data before being re-encoded. The temporary
     structures should be purged after the re-encoding processes complete.
150. Corrected the search routine in the page source window.
151. Replaced std::vector in dmisc::levenshteinDistance() with QVector.
152. Added the Clear Containers window. Window is accessible via the
     Windows menu.
153. Corrected the Zoom Text Only feature so that the setting is
     applied to the entire page and not only the current frame. The setting
     was also not properly applied to new tabs.
154. Did not record the Zoom Text Only checkbox's state. Adjusted.
155. Create a file manager object whenever a Desktop is created.
156. Resuming a paused download may result in a corrupted file if the server
     does not accept range requests. Dooble shall now inspect header
     information to determine if range requests are supported. If the
     Range HTTP header is not supported by the server, Dooble will disable
     pause and resume functionality.

1.32
1.33
1.34

1.   Please see version 1.35.

1.31

1.   The setting responsible for purging memory caches has been enabled
     by default.
2.   Protect various view containers against empty icons.
3.   Protect against empty QUrl::host().
4.   Open links in new tabs via the middle mouse button. This change only
     applies to Web links.
5.   Improved the update mechanism of the Cookies window.
6.   Fixed incorrect use of dcookies::slotDeleteAndSaveCookies().
7.   Qt products have been upgraded to version 4.8.1 for Linux and
     Windows distributions.
8.   Replaced the Qt Windows Style with the default Qt style.
9.   Added the black and white icon set.
10.  Added dates to items in the Downloads window.
11.  Downloading several items may increase CPU usage. This increase is caused
     by rapidly-updated progress bars. Improved.
12.  Activating actions of JavaScript windows via shortcuts caused Dooble
     to exit prematurely under some conditions (copying text followed
     by creating a new tab). Fixed.

1.30

1.   Corrected dfilemanager. QUrl::toLocalFile() should be used to
     retrieve a local file representation of a URL.
2.   Preparing the contents of the Favorites tool bar should only be performed
     if the tool bar is visible.
3.   Implemented dcookies::slotDeleteAndSaveCookies() for increased
     performance. The current implementation deletes and saves cookies
     to storage whenever Dooble is free of pending events.
4.   Added libcrypto.so.0.9.8 and libssl.so.0.9.8 to the Linux 64-bit
     binary distribution.
5.   Replaced DOOBLE_X11_FLASH_BYPASS with DOOBLE_USE_QGRAPHICSWEBVIEW.
6.   Clicking a link while the Control key is depressed must also open
     JavaScript windows in new tabs.
7.   Replaced while-loops intended to delete QMenu actions with
     instances of QMenu::clear().
8.   Introduced a new option to the Settings window's WebKit panel.
     If the option is enabled, Dooble will periodically purge memory caches.
9.   Use restoreGeometry() and saveGeometry(). Gnome users may experience
     issues. Please inspect Compiz settings.
     (https://bugreports.qt-project.org/browse/QTBUG-9358?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel)
10.  Exceptions windows table header states may not have been saved
     correctly. Fixed.
11.  Pressing the Tab key while the location widget has focus should
     place focus on the appropriate widget if the location widget's
     pulldown is not currently visible.
12.  Added dcookies::removeDomains(). The new method is invoked by
     dcookiewindow::slotDeleteAll().

1.29

1.   Dooble ignored the Show Hidden Files setting during initialization.
     Fixed.
2.   QNetworkReply objects will not be deleted in
     dnetworkaccessmanager::slotFinished() until it is safe to do so.
3.   Dooble did not respect case sensitivity when searching for text
     on a page. Fixed.
4.   Adjusted offsets for textfield widgets.
5.   Added libcrypto.so.1.0.0 and libssl.so.1.0.0 to the Linux 64-bit
     binary distribution.
6.   Corrected an incomplete load failure during a navigation from a file
     manager to an SSL page.
7.   JavaScript windows did not respect the location of the Favorites
     tool bar. Fixed.
8.   Purged old settings.
9.   Removed extra libraries from the Linux distribution.

1.28

1.   Add-ons tabs now register actions with the Tabs menu.
2.   Removed Windows-specific styles from the location and search widgets.
3.   Issuing deleteLater() on QNetworkReply objects from
     dnetworkaccessmanager::slotFinished() may cause Dooble to exit
     if there is a pending JavaScript prompt. Qt issue.
     (https://bugreports.qt-project.org/browse/QTBUG-9657)
     (https://bugreports.qt-project.org/browse/QTBUG-15859)
4.   dview::slotHandleUnsupportedContent() must delete the QNetworkReply
     object. Please refer to Qt documentation.
5.   If parents of modal dialogs vanish, so do the modal dialogs.
     Dooble should not assume that objects are valid after exec() returns.
6.   Added dwebpage::shouldInterruptJavaScript().
7.   Improved use of resources in dreinstatedooble::dreinstatedooble().
     Only one QWebPage object is required.

1.27

1.   Turned off HTTP referrer and redirect blocking. Yes!
2.   The History window was partially deleting entries having special
     characters. See item #10.
3.   Use UTF-8 whenever possible.
4.   Removed redundant conversions.
5.   Fixed a timing issue with dhistory::slotTimeout().
6.   Purged source responsible for removing obsolete settings.
7.   Corrected history navigation that was incorrectly modified
     in version 1.26. The problem is obvious with URLs having
     fragments. This item is obsolete as the history has been purged
     of custom containers.
8.   Ability to clear the recently-closed tabs menu.
9.   Added favicons.db. Database will house favicon icons. Users should
     expect a loss of Favorites' icons. The icons will adjust themselves
     in due time.
10.  Added url_hash columns to the history and downloads tables.
     Object ids would have been preferred. Header column settings may
     require user adjustment. Download and history information will
     be initially purged. Apologies.
11.  Modified horizontal scrolling from per-item to per-pixel. Smooth.
12.  Changed data() references to constData().
13.  Incorrect retention of cookie names and values. The cookies.db
     will be initially purged.
14.  Version 1.26 also included Linux installers provided by
     Bernd.
15.  The dooble::slotLoadFinished() method incorrectly prepared
     the back and forward menus. It assumed that the object issuing the
     loadFinished() signal was the one currently displayed.
16.  Super-simplified dcookies and dcookiewindow. The previous
     implementation caused the Cookies window to contain stale information.
17.  Enabled -mtune=generic and -O3 for OS X systems (dooble.osx.pro).
18.  If permitted, Dooble will notify the user via an action button located on
     the status bar if an exception was raised. User may review
     exception by a simple click. The exception tool button will be hidden
     after being clicked.
19.  The location widget's completer did not contain a complete set because
     of an incorrect use of QMap in dooble::initializeHistoryMenu(). The
     container that must be used is QMultiMap since the history
     table's primary key is the URL and not the visitation date.
20.  Added ability to decline third-party cookies. By default,
     third-party cookies will be accepted.
21.  Qt products have been upgraded to version 4.8 for Windows platforms.
22.  Override the application's cursor whenever intensive computations occur.
23.  Dooble will now remove previous content if a session has been
     authenticated via the File menu.
24.  Removed redundant containers.
25.  Bookmarks! Bookmarks! Bookmarks! Smart.
     Dooble allows identical bookmarks to span many folders. Uniqueness
     is determined via a sophisticated hash algorithm.
     Dooble attempts to maintain an extremely current Bookmarks menu while
     also remaining responsive.
26.  Improved uniqueness attributes of database queries. Be prepared
     to have most of your databases purged. Sincerely hoping for the best.
27.  Fundamental flaw discovered with dooble::copyDooble(). One can't
     trust findChildren() to return the Dooble window that contains
     the history as it exists on disk.
28.  Modified default JavaScript settings from false to true:
              Allow hiding of menu bar.
              Allow opening of new windows.
29.  Simplified database deletes. Prior to the change, Dooble would
     synchronize some widget contents based on query results.
     Since Dooble's stance on database activity is relaxed, the two
     systems should be independent.
30.  Improved verification of empty lists.
31.  Once again modified various purge() methods. The methods will
     now delete temporary data of non-authenticated sessions.
32.  Created dmisc::hash(). This method will be a replacement of
     QCryptographicHash::hash(), although Qt's method will be used
     if dmisc::hash() fails for any reason. After all, Dooble
     includes superior encoding algorithms.
33.  Modified dmisc::passphraseHash() so that it neglects MD5. The method
     will also use the UTF-8 representation of the passphrase. Finally,
     the method now uses QCryptographicHash::hash() on any failure.
34.  The Downloads window did not respect the user's choice of file name.
     Fixed.
35.  Updated MacGPG2 software to version 2011.12.24.
36.  Added the description field to the history table. This new field
     will contain a brief description of the page.
37.  Fixed incorrect FTP favicons.
38.  Added a reset mechanism to the Settings window. This option should be
     used with care.
39.  Bookmarks popup. Available off of the location widget's bookmark
     button. Developers, please note that dbookmarkspopup and dbookmarkswindow
     share a common folder model and some internal mechanisms.
40.  Fixed corrupted view. While navigating from a non-HTML page
     to an HTML page, the view will be temporarily-petite.
     This issue has only been discovered on products where
     DOOBLE_X11_FLASH_BYPASS is enabled.
41.  The OS X Metal Style may cause some widgets to appear distorted.
     Disabled.
42.  Purged Everaldo, MeeGo, and Nuvola icon sets.
43.  Improved use of setGeometry(). Created dmisc::balancedGeometry().
44.  The minimum Web font size shall be 9.
45.  Removed Language from the Settings window's Display panel. The option
     is not used.
46.  Attempt to provide uniform tab widths in a platform-independent
     manner.
47.  Attempted to standardize mnemonics across various menus.
48.  Corrected dooble::saveHandler(). The method was ignoring the
     provided file name.
49.  The ddownloadwindowitem class must register QNetworkReply's
     metaDataChanged() signal so as to properly download content.
50.  Removed application font options from the Settings window. The settings
     have the unfortunate potential of neutralizing Dooble if the
     font size is set to a sufficiently-large value. The only remedies
     after that is to either modify the Dooble.ini file or to select
     the proper size, if possible.
51.  A most excellent improvement has been implemented that will
     eliminate the need to store individual histories for file managers
     and ftp browsers. By extending WebKit, Dooble will be able to
     use QWebPage's history to record artificial visits to sites
     having "file://" and "ftp://" schemes. As a result, the dwebhistory and
     dwebhistoryitem classes have been removed.
52.  History items representing local directories will now contain
     "localhost" for the host field.
53.  Fixed dooble::promptForPassphrase(). The method should only return
     true if the user provides the correct passphrase.
54.  Fixed recursive calls in the dooble class:
              clearHistoryWidgets() -> slotClearHistory()
              slotClearHistory() -> clearHistoryWidgets()
55.  Adjusted the History bar's timer so that it fires only when there
     are model listeners.
56.  Dooble shall securely record internal states in order to restore itself
     after catastrophic failures. Only authenticated sessions will have
     this capability. Upon receiving a critical signal, Dooble
     will create a .crashed file in the user's home directory (or the
     current working directory for Windows). Dooble will prompt the user
     for guidance after a new authenticated session has been opened.
     Authenticated sessions shall record files for every tab and window.
     The names of the restoration files will be assigned so that proper
     tab order is maintained.
57.  Some window containers were populated redundantly after being displayed.
     Corrected. The Cookies and History windows will be populated whenever
     they are freshly displayed.
58.  The DuckDuckGo search engine may malfunction because of certain
     Dooble restrictions (HTTP redirect and referrer blocking). Corrected.
     Also, the post method has been replaced by a traditional load.
59.  Was missing the content-type header in HTTP post operations. Fixed.
60.  The progress dialog displayed during the re-encoding process has
     been replaced by individual progress bars.
61.  Fixed incorrect parameters passed to gcry_md_hash_buffer().
62.  When an item is selected from the back or forward menu,
     the history's current item must be set to the selected item. This allows
     for the proper traversal of history entries.
63.  The download process neglected to use approved credentials. As a result,
     some downloads completed prematurely. Corrected.
64.  Dooble must promote an item's index in the History menu after the
     page that's associated with the item has been visited recently. The
     item's title should also be updated.
65.  The Downloads window must prompt the user for credentials if requested
     to do so. This will occur whenever cached credentials have been
     purged or upon a new session.
66.  Removed sparsely-populated methods from subclasses.
     One less hop is one less stop.
67.  Segmentation fault caused by Desktop focus events on X11 systems.
     Setting the focus on the Desktop may cause Dooble
     to exit prematurely if the focus happens to cascade onto
     a terminal. Enabling a simple focus policy for terminal objects
     resolves the issue. This error only occurs on window systems that support
     embedded terminals and the resolution does not inhibit interaction with
     terminal objects.
68.  Modified the behavior of the Home button. The default behavior shall
     now open the Home URL. Pressing the Home button while the
     Control key is depressed will replicate previous behavior. Another
     change pertaining to the Home button is that Dooble will not
     validate URLs. It is now the user's responsibility.
69.  Modified the Settings window's default height with respect to its
     parent window. The window will now be 90% of its parent's height.
70.  The My Retrieved Files location is now optional. As such, Dooble will
     not impose any validation measures upon the location.
71.  Removed verbose "Loading..." text from tabs. The animated icon
     is sufficient.
72.  Increased use of guarded pointers.
73.  Explicitly ignore the SIGPIPE signal. Some plugins may
     not ignore this signal, thus causing Dooble to exit prematurely.
74.  Qt 4.6.x support has been removed.
75.  Reviewed all instances of qobject_cast. Adjusted accordingly.
76.  Added the "Accept alerts." option to the Settings window's Security
     panel. The option disables or enables JavaScript alerts.
77.  Removed use of QGraphicsView::fitInView() as it may distort fonts.
78.  Removed tab highlighting.
79.  Add-ons implementation did not adhere to basic tab functionality.
     Users should now be able to close Add-ons tabs without aborting
     Dooble.

1.26.1

1.   Version 1.26.1 is a Windows-only release.
2.   Fixed libinterface loading issues for Windows XP.
3.   The Windows installer includes version 1.30 of libinterface.
4.   Qt products have been upgraded to version 4.8 for Windows platforms.

1.26

1.   Avoid closed tabs when searching for tabs that may contain modified
     content.
2.   Disable Web plugins when a tab is closed.
3.   Corrected 1.25 grammar.
4.   Fixed sizing issues with items in the Downloads window.
5.   Downloads were missing HTTP Pipelining.
6.   JavaScript exceptions.
7.   Theme previews.
8.   Removed inconsistent prompts.
9.   Exceptions windows are now accessible via the Windows menu.
10.  Corrected issues with JavaScript popups.
11.  A significant modification was made to improve Flash
     support for X11 systems. As a result, QWebView was
     replaced by QGraphicsWebView. To eliminate the workaround,
     simply remove the DOOBLE_X11_FLASH_BYPASS macro from the
     appropriate project file before creating the application.
12.  Prevent use of invalid geometries, especially when preparing
     new JavaScript windows.
13.  Increased the maximum number of characters of menu actions
     from 50 to 100.
14.  Removed obsolete values from the settings file.
15.  Addons support. Thanks to Bernd Stramm.
16.  Eliminated "QProcess: Destroyed while process is still running."
     messages.
17.  Reset the status bar's contents after a tab has been closed.
18.  Corrected dooble::slotStatusBarMessage().
19.  Added support for preventing HTTP redirects. The default is set
     to enabled.
20.  QNetworkReply objects created by dnetworkaccessmanager::createRequest()
     must be deleted.
21.  Removed level 3 optimization flags. Removed dooble.linux-32.pro.
     Removed dooble.ultrasparc.pro.
22.  Modified the base class of dsettings from QDialog to QMainWindow.
23.  Allow the user to choose the sets that will be re-encoded after a
     passphrase change.
24.  Corrected the Settings window's Home widgets. Implementation suffered
     from inconsistent data (the Settings window is non-modal) and
     incorrect ancestry. As a bonus, the actions may also contain icons.
25.  Removed dview::slotFinished() as it causes infrequent segmentation
     faults.
26.  Removed dwebpage::handleUnsupportedContent() as it is obsolete.
27.  Re-added dview's extra network access manager (m_faviconManager).
     This will prevent contamination with dnetworkaccessmanager.
28.  Modified various purge() methods for consistency.
29.  Cookie, download, and exception information for session-based
     processes will not be stored to their respective databases.
30.  The dview::slotIconDownloadFinished() method will now attempt to
     process HTTP redirects.
31.  Resolved a segmentation fault caused by a deleted QNetworkReply
     object that was being referenced during a download request.
32.  Fixed widget state issues caused by aborted loads.
33.  Removed "journal_mode = OFF" settings for database queries in order to
     prevent database corruption that may be caused if Dooble
     malfunctions.
34.  The Downloads window did not properly manage deleted items. Fixed.
35.  Removed workaround for URLs containing fragments.
36.  Reimplemented the previously-closed tabs mechanism in order to
     preserve massive amounts of resources.
37.  Fixed inconsistent link icons with the URL widget's pulldown menu.
38.  Extracted mechanism responsible for download favicons from dview
     and deposited it into dwebview.
39.  Removed dmisc::canEncode().

1.25

1.   Updated MacGPG2 software to version 2.0.17-9.
     Previous content (cookies, etc.) may be lost as a result.
2.   Allow the user to modify the default Dooble Search page (Settings
     window's Home tab).
3.   Changed Dooble Search text (Settings window's Home tab) to
     Home.
4.   Changed default Arial sizes from 12 to 10 for Windows platforms.
5.   Removed redundant dview::load() calls during Dooble initialization.
6.   Resolved ticket 3399328. (Was saving a session passphrase.)
7.   Improved checking of settings (Dooble.ini) values.
8.   Modified dhistory's timer interval from 1 second to 2.5 seconds.
9.   Modified history purging so it only occurs during Dooble launch
     and termination. (Saving precious resources.)
10.  Qt products have been upgraded to version 4.7.4 on OS X and
     Windows platforms.
11.  Decreased tab widths.
12.  Improved Settings window sizing.
13.  Ability to hide the HTTP referrer.
14.  Ability to block third-party HTML frame content.
15.  The tab bar did not respect visibility setting after exiting
     the full-screen mode. Fixed.
16.  The file and FTP managers incorrectly displayed internal objects
     that were intended to be hidden.
17.  Clicking an FTP link from an HTML document failed to load
     the link. Fixed.
18.  Added the Wikinews search engine.
19.  Viewing of HTML frame source now provided.
20.  Prevent Dooble from deleting the user's input into the URL
     widget after the urlChanged() signal has been captured.
21.  Removed application modality from the Settings window.
22.  Removed references of obsolete settings (Dooble.ini).
23.  Added the XSS Auditing option under the Security tab of the Settings
     window.
24.  Improved dooble::slotFlashHack(). This slot is issued if
     Web plugins are enabled and the window system is X11. Its purpose
     is to correct potentially-distorted windows.
25.  Corrected version 1.24's item #44.
26.  Modified the tab-adding mechanism so that new tabs are added
     after the current tab. Option to simply append the tab is also provided.
27.  Clarified "switching to new tabs" option under the Settings window's
     Tabs panel.
28.  Dooble will, if permitted, display the current site's IP address in
     the window title. This feature may be a first in the browser
     world.
29.  Added missing QDialog::Accepted checks to various if-statements.
30.  Validate potentially-invalid (NULL) objects before use.
31.  Created a wonderful, yet troublesome, workaround for an event-loop
     issue. The signals emitted from dview::slotHandleUnsupportedContent()
     are captured by a slot that calls a function that launches a modal
     file dialog. At times, Qt decides to terminate because of this. Fixed.
32.  Downloads suffered from potential memory exhaustion. Fixed.
33.  Improved ddownloadwindowitem::isDownloading(). The previous
     version was weak.
34.  Beautified multiple aspects of the user experience.
35.  Added an install target to dooble.osx.pro. (sudo make install)
     At times, qmake does not properly create all required targets.
36.  Added dooble.ultrasparc.pro for g++ on Sun Ultra machines.
37.  Added support for providing credentials to proxies whenever
     they request such information.
38.  Beautified passphrase dialog.
39.  Wikinews and TheOpenGlobe RSS Ticker added to the default page
     (locale-based search.html).
40.  dsettingshomelinewidget widgets were not capturing iconsChanged()
     signals. Fixed. These widgets are the textfield widgets under the
     Settings window's Home panel.
41.  Changed QNetworkProxyQuery's query type from TcpSocket to
     UrlRequest. QNetworkProxyQuery is used for system-level proxies.
42.  Prevent Dooble from opening the same URL in the current page as well as
     a new tab (window) after a link has been clicked. Links should
     either be displayed in the current page or a new frame, but not
     both.
43.  Added toLower() to various QUrl::scheme() references.
44.  Modified QWebView's context menu so that it differentiates between
     links and e-mail addresses.
45.  Introduced the History sidebar. As a result of this new
     feature, the dhistorymodel class was implemented. The
     "one model, thousands of views" approach is quite powerful.
     Dragging items from the sidebar and dropping them onto a page
     will activate one or more load requests. Unlike other browsers,
     Dooble allows for multiple selections to be dragged and dropped.
46.  Introduced "PRAGMA journal_mode = OFF". Dooble does not explicitly
     use database transactions. Please note that cookies are not
     subjected to this setting.
47.  dmisc::setCipherPassphrase() must reset variables upon setKey()
     failure. The set of variables being reset was incomplete. Fixed.
48.  Renamed Bookmarks Toolbar to Favorites Toolbar. Dooble does not yet
     support bookmarks.
49.  The dfilemanager class now supports copying. Copying while
     dragging and dropping are directly supported by Qt via the
     Control key. OS X users may be required to use an alternative key.
50.  Added source information to the Downloads window.
51.  Fixed a monumental memory problem in dooble::initializeHistoryMenu().
52.  Optimized dooble constructors. New windows must inspect existing
     containers and use their contents whenever possible.
53.  A view's text size multiplier needs to be set after a QWebPage
     object has been assigned to the view. Fixed. The Qt documentation
     does not make a note of this behavior.
54.  Some containers have poor performance if iterators are not used
     to navigate their contents. Fixed.
55.  Tab icons will now reflect load activity.
56.  Downloads suffered from incorrect primary keys. The source URLs should
     not be designated as primary keys. Instead, the destination targets should
     be used. Since the downloads table required a redesign,
     existing information will be purged. Also corrected widget visibility
     states (the retry button should not be visible for HTML downloads).
57.  Removed dview's extra network access manager (m_faviconManager).
58.  Removed the mtune option from dooble.osx.pro.
59.  Replaced QWebView::reload() with dview::load(). QWebView's
     reload() implementation may fail to emit the loadFinished() signal.
     This adjustment has been attempted before.
60.  Created header and source files for the dwebview class.
61.  The Cookies and History windows' search mechanisms have been
     modified to perform case-insensitive searches.
62.  Added the History search to the search widget, per request.
63.  Removed unnecessary blockSignals() calls.
64.  Added dwebhistory.cc.
65.  Two URLs may be different if the only difference is a trailing
     slash. Adjusted comparisons.
66.  Qt does not emit urlChanged() signals for some pages
     (http://www.crypto-textbook.com). This is a known issue.
67.  Improved the look-and-feel of the Downloads window: alternating
     row colors and the ability to remove individual non-active items.
68.  Creating a new tab off of a JavaScript window enabled the search
     widget for that window. The search widget should not be
     available for such windows.
69.  Enabled HTTP pipelining (dnetworkaccessmanager::createRequest()).
     According to documentation
     (http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html),
     network performance should improve.
70.  Now processing QWebPage::statusBarMessage() signals.
71.  Modified the dftpbrowser so that it emits unsupportedContent()
     signals. This is an experimental feature.
72.  QFtp produces some incorrect QUrlInfo containers. The dftpbrowser
     class has been modified to accommodate the discrepancies.
73.  Clicking a link while the Control key is depressed will now open the
     link in a new tab.
74.  Resolved a timing issue related to the "close other tabs"
     mechanism.
75.  The location widget's completer's model's contents will now be
     date-ordered.
76.  Replaced QWebView::setUrl() with QWebView::load(). The setUrl()
     method causes QWebFrame segmentation faults with the April 2011 release
     of Qt 4.7.4. The problem has been reported and may have been resolved.
77.  If configured, Dooble will prompt the user before removing a modified
     tab.
78.  Improved the look-and-feel of the location widget.
79.  Dooble will now prompt the user before exiting if there are active
     downloads.
80.  Resolved an incorrect use of QFtp::list() (m_ftp->list(m_url.path())
     should have been m_ftp->list()).
81.  Navigating to a parent directory within the FTP browser has
     been improved.
82.  If configured, Dooble will prompt the user before navigating from
     a modified page.
83.  Do not clear the History window's search field while navigating
     through the tree.
84.  Added the File->Authenticate option. For the curious, this
     feature allows the user to provide the passphrase
     (if one had been previously set) without requiring to restart
     Dooble.
85.  Added missing QObject() to dwebhistoryitem's default constructor.
86.  Fixed an error in dcookiewindow::slotUpdateView(). When searching
     for potential items to remove, Dooble must inspect domains that
     match the url's host as well as domains that contain leading periods
     and that match the url's host.
87.  Modified purging of information upon exit. It will now be the
     user's responsibility to purge existing information if certain settings
     (cookies, downloads, etc.) are disabled.
88.  Added support for QTableWidget::itemActivated() within dftpbrowser().
     Pressing the Enter key on an existing directory will now be processed
     as a navigation request.
89.  The File and FTP browsers must inspect the url's contents. For example,
     ftp://ftp.debian.org/debian/.. should be interpreted as
     ftp://ftp.debian.org. However, the dftpbrowser should not attempt two
     directory changes (for this example).
90.  The dview class was incorrectly emitting urlChanged() and titleChanged()
     signals. This caused slots in the dooble class to
     populate containers with stale information.
91.  Was incorrectly setting tabs' texts under certain page
     load (dooble::loadPage()) attempts.
92.  Eliminated "data: invalid display value column" warning messages.
     The dfilesystemmodel::data() method was modified as a result.
93.  Dooble will now attempt to position JavaScript windows within the
     screen housing their parents.
94.  Improved creation of new windows, including JavaScript.
95.  Modified the click behavior of the FTP browser. Single clicks on
     directories are now interpreted as navigation requests. Removed support
     for the itemActivated() signal. Added support for opening directories
     in new tabs via the Control key.
96.  If available, a target's total size will now be displayed in the
     Downloads window.
97.  Fixed command-line validation. Also improved url validation
     of new process windows.
98.  Fixed incorrect processing of shortcuts.
99.  Added search capabilities to the Downloads window.
100. Activated the Delete key for the Cookies window, Downloads window,
     History window, and the History sidebar.
101. Added the JavaScript Popups Exceptions window.
102. Added the Third-Party Blocking Exceptions window.
103. Added the Suppress HTTP Referrer Exceptions window.
104. Added missing QSqlDatabase::close() calls to dcookies's methods.
105. The status bar will now be visible in full-screen mode, unless
     it's explicitly hidden by the user.
106. Purged obsolete methods from the dcookies class.
107. Prevent JavaScript change-requests from modifying non-JavaScript
     windows.
108. Incorrect for-loops modified the History->Clear History action's icon.
109. Respect the style's attributes as much as possible.
110. Text alignment for various table and tree headers has been set
     to left-alignment.
111. Per feature request 3421816, added the ixquick search engine.
112. Dooble will now remember the nth recently-closed tabs. A minimum
     of 1 and a maximum of 15 are provided, if enabled. Please note
     that the tabs are only retained for a session.
113. Added the Cookies Exceptions window. Cookies from exempt
     sites will not be accepted.
114. Updated the Favorites tool bar's maximum to 15.
115. Movable Favorites and Location tool bars.

1.24

1.  Improved durlwidget::setCompletion() via the Levenshtein Distance
    algorithm.
2.  Uniform tab heights on Unix systems.
3.  Fixed an issue with the history implementation: navigating to an item (via
    the back or forward button) that contains a fragment did not adjust
    the page offset.
4.  Fixed the tab widget's mangled style sheet.
5.  Removed the tab widget's remove button. Moved the add button to the
    right-hand side.
6.  Resolved an issue with the Close Other Tabs action. In short,
    the action's slot did not disable the close button on the remaining tab.
7.  The url widget's completer should initially be populated with date-ordered
    items.
8.  General optimizations.
9.  Fixed minor focus issue with the Settings window.
10. Fixed resize issue with the Settings window that was apparent after
    a font change.
11. Introduced system-level proxies.
12. Removed tab coloring on OS X.
13. Modified the url widget's behavior so that new items are always added at
    the beginning of the widget's internal model.
14. Improved container purging so that guest sessions are not
    able to remove user data.
15. Added the passphrase_hash field to the various database tables.
    This change will allow for faster queries.
16. Fixed a focus issue with the file manager.
17. Added the WolframAlpha search engine.
18. Windows portability. User files will now reside, if permissible, in
    Dooble's application directory. If not permissible, user files will
    reside in a user's home directory.
19. Fixed recording of URLs having percent encodings. If the information is
    incorrectly recorded, deleting it from within Dooble becomes impossible.
20. Added support for QWebPage::repaintRequested().
21. Modified durlwidget::setCompletion() so that searches are
    case-insensitive.
22. Fixed incorrect sorting of the Visits column in the History window, per
    the Schmidt.
23. Added the Bookmarks tool bar. Currently, the new tool bar houses the
    ten most-visited URLs.
24. Cookies, Downloads, and History windows may now be closed via
    the Esc key.
25. Introduced automatic purging of corrupt data.
26. It's not clear whether QWidget::removeAction() also deletes the action.
27. Modified the user-agent string for mail.google.com on OS X. The
    new string will contain the operating system's version.
28. Validate dmisc::setInitializationVector().
29. Recycle memory.
30. Fixed tool bar visibility issues associated with full/normal screen modes.
31. Fixed broken sensitivity with the Settings window's cookie widgets.
32. Improved the memory footprint of dview.
33. Removed initialization of dfilemanager object from ddesktopwidget's
    constructor.
34. Added missing QWebSettings::globalSettings()->setDefaultTextEncoding()
    in main().
35. Improved page rendering via QWebView::setRenderHints().
36. Moved the function that's responsible for setting the application's style.
    The function is now called after the main window has been shown.
37. Fixed previously-broken command-line options.
38. Added purge() method to the dcookies class. This method
    will deliberately remove "session" information upon launch
    and exit.
39. Fixed a broken for-loop in dsearchwidget's constructor.
40. Added a Text Size Multiplier option in the Settings window's
    Display panel.
41. HTML downloads are now recorded in the downloads.db database.
42. Prevent duplicate entries in the Downloads window.
43. Fixed broken column states on the FTP browser.
44. Created a single-shot timer to account for mail.google.com Flash
    corruption on X11. This timer fires if Web plugins are enabled and if
    the page's url's host contains mail.google.com. The timer fires 5
    seconds after the page has finished loading.

1.23

1.  Fixed a problem with the Cookies window's status bar. The displayed
    statistics were incorrect whenever the table was being populated and the
    search text was nonempty.
2.  Fixed an issue with dcookies::setCookiesFromUrl(): incorrect removal
    of cookies.
3.  Provided an deinstall link in the Windows Start menu.
4.  Fixed broken executable icon on Windows.

1.22

1.  Resolved trouble ticket 3292506, latest History menu items
    should be at the top while the oldest at the bottom.
2.  Modified dsettings::slotSelectIconCfgFile() so that the
    QFileDialog object's directory is initially set to the application's
    current directory.
3.  Fixed incorrect calls to setStyleSheet() in
    ddownloadwindow::slotItemClicked().
4.  The Downloads window will now display absolute file paths.
5.  Fixed bugs with dview's back() and forward() methods:
              if(prevIndex == currentIndex())'s false case should
              issue a load() call with the item object's url.
6.  Improved print previews.
7.  If applicable, zoom all frames.
8.  Qt products have been upgraded to version 4.7.3 on OS X and Windows
    platforms.
9.  Fixed title issues with the Tabs menu's actions.
10. Ability to copy selected URL in the History window.
11. Implemented the Safe. Dooble will automatically clear the following
    containers:
              Cookies
              Downloads
              History
12. Fixed distorted logic that prevented deleting of cookie favorites.
13. Fixed broken opening of new windows as processes.
14. Added backwards compatibility to Qt 4.6.x. Qt 4.7.3 is strongly
    recommended.
15. Fixed flawed if-statement (if items.at(0)) in
    dcookiewindow::slotUpdateView().
16. Fixed dhistory::slotDeletePage(). It now removes the
    intended entry from the history database table.
17. Fixed print-previews so that they are now available for
    both the file system browser and the FTP browser.
18. Fixed inconsistencies with the icons of the History menu's
    actions.
19  Modified the behavior of dhistory::purge() so that it does not
    consider time when determining which entries to remove. Instead,
    it will simply function off of dates.
20. OS X (x86) users should now be able to play Flash.
21. Secure connections will be illustrated via green gradients.
22. Fixed a popup blocking bug that prevented printing in Gmail.
23. Integrated GNU's libgcrypt library for encoding personal
    information.
24. Added missing icons to the Authentication Required dialog.
25. Added a P2P textfield widget to the Settings window's
    Home panel.
26. Removed for-loop in dooble::slotQuit() as it was causing
    segmentation faults. The for-loop is not necessary.
27. Corrected dview::view()'s return type,
    changing it from QWebView to dwebview.
28. Added additional actions to dview's context menu.
29. Mr. R.'s modifications:
              Default number of history days changed from 1 to 8.
              Enabled default browsing and download history from false to
              true.

1.21

1.  Corrected RELEASE-NOTES version information.
2.  Per Mr. R., corrected proxy configuration settings.
3.  Issue QWebView::update() whenever a page has been loaded. This small
    change improves font rendering.
4.  Implemented basic command-line options:
              full-screen-mode
              url URL (multiple instances allowed)
5.  Mr. R. updated Dooble's default page.
6.  Implemented character encodings.
7.  Fixed broken sensitivity states for the Back and Forward buttons.
8.  Mr. R. introduced colorful tabs.
9.  Per Mr. R., introduced a feature to inject URLs into the Settings window's
    Home widgets.
10. Closing a last tab will now close its parent window.
11. New Settings option: close the Downloads window after the downloads
    have completed.
12. Added an install target to Dooble's Unix project file (dooble.pro).
13. Mr. R. introduced the YaCy search engine.
14. Additional optimization.
15. Per Mr. R., restore and retain search choice.
16. Windows Qt libraries have been upgraded to version 4.7.3.

1.20.1

1.  Corrected version 1.20's item #2.
2.  Version 1.20 damaged loading of frames due to
    QWebPage::DelegateExternalLinks implementation. Rolled back.
3.  Disabled ability to hide HTTP referrers.

1.20

1.  If there is but one item selected in the History window, only
    display the context menu if the index at the current position
    represents the selected item.
2.  Added the Preserve column to the Cookies window's tree.
    Checked sites will not be removed whenever cookie sweeping occurs.
3.  Compressed the Settings window's toolbuttons.
4.  Incorrect use of QString::remove() in dcookiewindow::slotUpdateView().
    Removing "www." may result in corrupting host names.
5.  Fixed a flaw with the cookie storage mechanism.
    The cookie domain may be incorrect in some instances.
6.  The Cookies window will now display sites exactly as they
    are.
7.  Per Mr. Anonymous, added the DuckDuckGo search engine.
8.  Mr. R. added the MeeGo theme. Thanks.
9.  Adjusted QUrl equality tests. The Go Home function now behaves
    as intended.
10. Fixed a tabbing issue with the url widget's completer.
11. Added performance improvements to SQLite queries.
12. The Cookies and History windows will now capture and restore
    their geometries.
13. Reimplemented QWebPage::javaScriptPrompt().
14. Updated dwebhistory::add() so that only file, ftp, http,
    and https schemes are recorded.
15. HTTP referrers should now be blank due to enabling of
    QWebPage::DelegateExternalLinks.

1.19

1.  Removed QMAKE_CXX from dooble.pro. It appears that clang++ breaks
    findChildren() on some systems (Debian).
2.  Made JavaScript confirmation prompts application modal.
3.  Added item #38 to version 1.18.
4.  Fixed broken shortcuts:
              ALT + ENTER (open in new tab)
              CTRL + ENTER (.com complete)
              CTRL + SHIFT + ENTER (.org complete)
              SHIFT + ENTER (.net complete)
5.  Mr. R. added the Nuvola theme.
6.  If possible, set the main window's initial size to 85% of the user's
    screen size.
7.  On Windows systems, set the initial font size to 16 for the Fixed Web font.
8.  Fixed missing navigation menu items. Page anchors caused the issue.
9.  The Cookies window was not capturing the iconsChanged() signal. Fixed.
10. The Clear History and Show History menu actions were avoiding
    iconsChanged() signals. Fixed.
11. The Page Source window's find frame would become invisible whenever
    iconsChanged() signals were captured. Fixed.
12. Added missing JavaScript-enabled checks to various JavaScript actions.
13. The Google search has been modified to use SSL.
14. Added a timer to vacuum cookie crumbs.
15. Removed findChild() and findChildren() wherever possible.
16. Fixed Download window file name discrepancy.
17. Added the Everaldo theme. Thank you Mr. R.
18. Fixed the Cookies window's delete all implementation. Was incorrectly
    removing all cookies regardless of the current filter.

1.18

1.  If the user navigates to a page that is within the current page's
    domain, set the url widget's icon to the current page's icon.
2.  Support for preventing JavaScript to:
              hide the menu bar
              hide the status bar
              hide the tool bar
3.  Allow for hiding of tab bar whenever there is but a sole tab.
4.  Fixed a problem with the Download URL portion of the Downloads window.
    Dooble allowed for the download process to commence for invalid URLs.
5.  Fixed access issues with the proxies. All user name fields were incorrectly
    queried from the configuration file.
6.  Check for "inline" content dispositions to determine if Dooble should
    display a download dialog.
7.  OS X look-and-feel improvements.
8.  Implemented the Cookies window.
9.  The History window's headers are now movable.
10. Replaced QApplication::allWidgets() with QApplication::topLevelWidgets()
    where applicable.
11. Dooble will now download favicon files without the use of QWebView.
    Some sites (digg.com) are not supported.
12. Replaced QWebView::reload() with dview::load().
13. Retrieve and store URLs in the history table if page titles are
    unavailable.
14. Added the visits field to the history table.
15. Improved default font and font sizes for various operating systems.
16. Removed the CTRL+Q shortcut from the Dooble window.
17. Introduced the ability to record download information in the downloads.db
    database.
18. Added the History tab to the Settings window.
19. Now correctly removing the history.db file upon exit if history
    records are not desired.
20. A newly-created tab will be immediately visible if the tab was created
    via a menu action.
21. Cookie information is now stored in the cookies.db database.
22. Replaced many instances of QSettings. This minor change should improve
    performance as disk access will be minimized.
23. Extended the file manager's table view to include date accessed, owner,
    group, and permissions information. Owner and group information is
    only available on Unix-like operating systems.
24. Now displaying hidden files in the file manager's table view. The tree view
    will contain hidden directories.
25. Corrected lengths of History menu items as well as items under the Tabs
    menu.
26. Simplified sensitivity states of Edit menu items.
27. Added Spatial Navigation support to the Settings window. Care should
    be taken when this option is enabled as scrolling via the up and down keys
    may seem awkward.
28. Fixed an error with the url widget's completer. If the up or down arrow
    keys were pressed for an empty url, the completer's popup() was displayed
    for a brief moment.
29. Store various header states to the user's configuration file.
30. Improved the functionality of the url widget's completer.
31. Reimplemented QWebPage::javaScriptAlert() as the default implementation
    may cause segmentation faults.
32. Reusing QWebView's back(), forward(), and reload() methods.
    (Please refer to version 1.17's item #5.)
33. Set icons for various buttons.
34. Some pages (sf.net/projects/dooble) cause WebKit to emit loadStarted()
    signals after the page has been loaded. Why? As a temporary solution,
    Dooble will inquire its internal history while navigating backwards
    or forwards when it detects an inconsistency with QWebView's history.
35. Beautified the Settings window.
36. Corrected FTP proxies. QFtp is quite limited with respect to
    proxies.
37. Provided workarounds for anchor limitations.
38. Reimplemented QWebView::javaScriptConfirm() for display purposes.

1.17

1.  Fixed an incorrect popup block by adding:
              element.hasAttribute("src") &&
              QUrl(element.attribute("src")).isValid()
2.  New user tabs and windows will now have the option to inherit cookies
    from either the application or their parent windows.
3.  Tabs will be allowed to share their cookies with the application
    and their parent windows.
4.  New JavaScript option allows for the prevention of changes to
    window geometries.
5.  Fixed a bug with the history implementation. Some Web sites, after loading,
    redirect to themselves. This abuse prevents a user from navigating to
    another page via the back and forward buttons.
6.  The dcookies class now inherits from QNetworkCookieJar.
7.  Fixed wording (history instead of memory) on item #13 for version 1.15's
    release notes.
8.  Ability to clear tab cookies via a tab context menu.
9.  Removed the Private Browsing option and enabled private browsing
    by default since Dooble has its own history and page icon implementations.
10. Fixed a bug with the history date sort.
11. Introduced the "Remember history" option.
12. Added the host field to the SQLite history table. In order for the new
    field to be present, users must clear their histories.
13. Improved the url widget's completer. The modified implementation will
    now favor URLs in order of (with respect to the completion text):
              equality
              starts with
              ends with
              contains
14. Duplicate URLs will not be allowed in the url widget's completer.
15. Prevent the user from loading an invalid URL. Previously, this was
    accomplished by providing an empty URL.
16. The loadFinished() signal's ok argument must be inspected. Fixed.
17. Adjusted tab widths to prevent elastic behavior.

1.16

1.  Prevent dhistory's timer from firing if the History window is closed.
2.  CTRL + L did not highlight the URL while the url widget's
    pulldown menu was active. Fixed.
3.  Added support for window.print() (JavaScript).
4.  Modified source in support of JavaScript-initiated requests:
              hiding navigation items
              hiding the menu bar
              hiding the status bar
              resizing a newly-created window
5.  Populate the url widget's history upon application launch.
6.  Added checks to verify that certain settings existed prior to creating
    font objects based on the respective settings. This mishap caused
    Dooble to exit on OS X Snow Leopard.
7.  Smoother url completer view.
8.  Configuration settings will now be stored in
    $HOME/.dooble/Dooble/Dooble.ini.
9.  Fixed a font-distribution issue.
10. The History window's sort indicator should now be shown correctly.
11. Implemented a popup blocker.
12. Updated OS X style settings.
13. Implemented advanced Web fonts.
14. Enabled QWebSettings::SpatialNavigationEnabled.
    (The ability to navigate between focusable elements in a
     Web page, such as hyperlinks and form controls, by using
     Left, Right, Up and Down arrow keys. For example, if a
     user presses the Right key, heuristics determine whether
     there is an element he might be trying to reach towards
     the right and which element he probably wants.)
15. The contents of WebpageIcons.db will now be cleared whenever
    the history is cleared.

1.15

1.  Populate the History window's contents when show() is issued.
2.  Windows systems will use Qt's Windows style.
3.  Fixed date sorting issue with the History window.
4.  Added intelligence to the location widget.
5.  Improved the shortcut for the zoom feature.
6.  Removed the Google translate feature.
7.  The history should not be cleared if the user has enabled Private
    browsing.
8.  Fixed a placement issue with the goToolButton.
9.  Added support for downloading attachments.
10. Replaced QHttp with QNetworkAccessManager and QNetworkReply.
11. OS X and Windows Qt libraries have been updated to version 4.7.1.
12. Added missing support for clearing the histories of location widgets.
13. Upon clearing the history, the current URL's icon and title are
    potentially defunct. Fixed.
14. Fixed a broken url pulldown menu.
15. Added a feature to allow for re-downloading of files.
16. The Tabs menu now contains a list of the window's active tabs.
17. Dooble is now aware of JavaScript open-window requests.

1.14

1.  Fixed bugs associated with page saving.
2.  The History window's Delete All function should only delete
    entries relative to the selected date.
3.  Improved the History window with a search function.

1.13

1.  Ability to open new windows as new processes.
2.  Eliminated custom dwebpage::userAgentForUrl() implementation.
3.  Fixed a bug with cookies. Was returning an incorrect index in
    dview::indexForUrl() and therefore the cookie for the page was being
    misplaced.
4.  Implemented a function that allows closing of all tabs except for
    the current one.
5.  Improved the History window by adding a date filter.

1.12

1.  Bug fixes!
2.  Implemented a history window.

1.11

1.  Improved cookies.
2.  Improved history functionality.
3.  New shortcuts:
              ALT + ENTER (open in new tab)
              CTRL + ENTER (.com complete)
              CTRL + SHIFT + ENTER (.org complete)
              SHIFT + ENTER (.net complete)
4.  Numerous bug fixes.
5.  Plugins support.
6.  SSL support for Windows.
7.  Support for setting simple Web fonts.

1.10

1.  A comment. Who knows? Maybe good things will follow.
