aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2021-03-06 20:26:21 +0100
committerFelix (xq) Queißner <git@mq32.de>2021-03-06 20:29:50 +0100
commit0396fdb01d12e51bd2cc63478819b366c0453d29 (patch)
tree082fcd53b7b61c0dc2a0dc6b676729e155c07fd2 /src
parent21c821c49ef82d1e84b0b9c8c3d357dc559479d4 (diff)
downloadkristall-0396fdb01d12e51bd2cc63478819b366c0453d29.tar.gz
Moves all globals into a structure that can be deleted before the app exists. Fixes #193.
Diffstat (limited to 'src')
-rw-r--r--src/browsertab.cpp88
-rw-r--r--src/cachehandler.cpp8
-rw-r--r--src/dialogs/certificateselectiondialog.cpp10
-rw-r--r--src/dialogs/newidentitiydialog.cpp2
-rw-r--r--src/dialogs/settingsdialog.cpp10
-rw-r--r--src/documentstyle.cpp47
-rw-r--r--src/documentstyle.hpp9
-rw-r--r--src/favouritecollection.cpp11
-rw-r--r--src/favouritecollection.hpp12
-rw-r--r--src/kristall.hpp64
-rw-r--r--src/main.cpp124
-rw-r--r--src/mainwindow.cpp60
-rw-r--r--src/protocols/abouthandler.cpp4
-rw-r--r--src/protocols/filehandler.cpp2
-rw-r--r--src/protocols/geminiclient.cpp4
-rw-r--r--src/protocols/webclient.cpp4
-rw-r--r--src/renderers/geminirenderer.cpp4
-rw-r--r--src/renderers/gophermaprenderer.cpp2
-rw-r--r--src/renderers/renderhelpers.cpp2
-rw-r--r--src/widgets/browsertabbar.cpp4
-rw-r--r--src/widgets/kristalltextbrowser.cpp5
-rw-r--r--src/widgets/searchbar.cpp2
22 files changed, 263 insertions, 215 deletions
diff --git a/src/browsertab.cpp b/src/browsertab.cpp
index cb508be..bc36241 100644
--- a/src/browsertab.cpp
+++ b/src/browsertab.cpp
@@ -63,7 +63,7 @@ BrowserTab::BrowserTab(MainWindow *mainWindow) : QWidget(nullptr),
{
ui->setupUi(this);
- this->setUiDensity(kristall::options.ui_density);
+ this->setUiDensity(kristall::globals().options.ui_density);
addProtocolHandler<GeminiClient>();
addProtocolHandler<FingerClient>();
@@ -124,7 +124,7 @@ BrowserTab::BrowserTab(MainWindow *mainWindow) : QWidget(nullptr),
FavouritePopup * popup = new FavouritePopup(this->ui->fav_button, this);
connect(popup, &FavouritePopup::unfavourited, this, [this]() {
this->ui->fav_button->setChecked(false);
- kristall::favourites.removeUrl(this->current_location);
+ kristall::globals().favourites.removeUrl(this->current_location);
});
this->ui->fav_button->setPopupMode(QToolButton::DelayedPopup);
this->ui->fav_button->setMenu(popup);
@@ -135,7 +135,7 @@ BrowserTab::BrowserTab(MainWindow *mainWindow) : QWidget(nullptr),
// Update combobox
popup->fav_group->clear();
- QStringList groups = kristall::favourites.groups();
+ QStringList groups = kristall::globals().favourites.groups();
for (int i = 0; i < groups.length(); ++i)
{
popup->fav_group->addItem(groups[i]);
@@ -157,7 +157,7 @@ BrowserTab::BrowserTab(MainWindow *mainWindow) : QWidget(nullptr),
if (!popup->is_ready || index == -1) return;
// Change favourite's current group
- kristall::favourites.editFavouriteGroup(this->current_location,
+ kristall::globals().favourites.editFavouriteGroup(this->current_location,
popup->fav_group->currentText());
});
@@ -172,7 +172,7 @@ BrowserTab::~BrowserTab()
void BrowserTab::navigateTo(const QUrl &url, PushToHistory mode, RequestFlags flags)
{
- if (kristall::protocols.isSchemeSupported(url.scheme()) != ProtocolSetup::Enabled)
+ if (kristall::globals().protocols.isSchemeSupported(url.scheme()) != ProtocolSetup::Enabled)
{
QMessageBox::warning(this, tr("Kristall"), tr("URI scheme not supported or disabled: ") + url.scheme());
return;
@@ -185,7 +185,7 @@ void BrowserTab::navigateTo(const QUrl &url, PushToHistory mode, RequestFlags fl
}
// If this page is in cache, store the scroll position
- if (auto pg = kristall::cache.find(this->current_location); pg != nullptr)
+ if (auto pg = kristall::globals().cache.find(this->current_location); pg != nullptr)
{
pg->scroll_pos = this->ui->text_browser->verticalScrollBar()->value();
}
@@ -339,8 +339,8 @@ void BrowserTab::on_url_bar_returnPressed()
else
{
// Use the text as a search query.
- if (kristall::options.search_engine.isEmpty() ||
- !kristall::options.search_engine.contains("%1"))
+ if (kristall::globals().options.search_engine.isEmpty() ||
+ !kristall::globals().options.search_engine.contains("%1"))
{
QMessageBox::warning(this,
tr("Kristall"),
@@ -350,7 +350,7 @@ void BrowserTab::on_url_bar_returnPressed()
);
return;
}
- url = QUrl{QString(kristall::options.search_engine)
+ url = QUrl{QString(kristall::globals().options.search_engine)
.arg(this->ui->url_bar->text())};
}
}
@@ -615,11 +615,11 @@ void BrowserTab::renderPage(const QByteArray &data, const MimeType &mime)
this->outline.clear();
- auto doc_style = kristall::document_style.derive(this->current_location);
+ auto doc_style = kristall::globals().document_style.derive(this->current_location);
this->ui->text_browser->setStyleSheet(QString("QTextBrowser { background-color: %1; color: %2; }").arg(doc_style.background_color.name(), doc_style.standard_color.name()));
- bool plaintext_only = (kristall::options.text_display == GenericSettings::PlainText);
+ bool plaintext_only = (kristall::globals().options.text_display == GenericSettings::PlainText);
// Only cache text pages
bool will_cache = true;
@@ -663,7 +663,7 @@ void BrowserTab::renderPage(const QByteArray &data, const MimeType &mime)
else if (not plaintext_only and mime.is("text","x-kristall-theme"))
{
// ugly workaround for QSettings needing a file
- QFile temp_file { kristall::dirs::cache_root.absoluteFilePath("preview-theme.kthm") };
+ QFile temp_file { kristall::globals().dirs.cache_root.absoluteFilePath("preview-theme.kthm") };
if(temp_file.open(QFile::WriteOnly)) {
IoUtil::writeAll(temp_file, data);
@@ -820,7 +820,7 @@ void BrowserTab::renderPage(const QByteArray &data, const MimeType &mime)
!this->was_read_from_cache &&
!this->current_identity.isValid())
{
- kristall::cache.push(this->current_location, data, mime);
+ kristall::globals().cache.push(this->current_location, data, mime);
}
}
@@ -908,7 +908,7 @@ void BrowserTab::on_redirected(QUrl uri, bool is_permanent)
uri.setHost(current_location.host());
}
- if (redirection_count >= kristall::options.max_redirections)
+ if (redirection_count >= kristall::globals().options.max_redirections)
{
setErrorMessage(QString(tr("Too many consecutive redirections. The last redirection would have redirected you to:\r\n%1")).arg(uri.toString(QUrl::FullyEncoded)));
return;
@@ -919,7 +919,7 @@ void BrowserTab::on_redirected(QUrl uri, bool is_permanent)
bool is_cross_host = (this->current_location.host() != uri.host());
QString question;
- if(kristall::options.redirection_policy == GenericSettings::WarnAlways)
+ if(kristall::globals().options.redirection_policy == GenericSettings::WarnAlways)
{
question = QString(
tr("The location you visited wants to redirect you to another location:\r\n"
@@ -927,7 +927,7 @@ void BrowserTab::on_redirected(QUrl uri, bool is_permanent)
"Do you want to allow the redirection?")
).arg(uri.toString(QUrl::FullyEncoded));
}
- else if((kristall::options.redirection_policy & (GenericSettings::WarnOnHostChange | GenericSettings::WarnOnSchemeChange)) and is_cross_protocol and is_cross_host)
+ else if((kristall::globals().options.redirection_policy & (GenericSettings::WarnOnHostChange | GenericSettings::WarnOnSchemeChange)) and is_cross_protocol and is_cross_host)
{
question = QString(
tr("The location you visited wants to redirect you to another host and switch the protocol.\r\n"
@@ -936,7 +936,7 @@ void BrowserTab::on_redirected(QUrl uri, bool is_permanent)
"Do you want to allow the redirection?")
).arg(uri.scheme()).arg(uri.host());
}
- else if((kristall::options.redirection_policy & GenericSettings::WarnOnSchemeChange) and is_cross_protocol)
+ else if((kristall::globals().options.redirection_policy & GenericSettings::WarnOnSchemeChange) and is_cross_protocol)
{
question = QString(
tr("The location you visited wants to switch the protocol.\r\n"
@@ -944,7 +944,7 @@ void BrowserTab::on_redirected(QUrl uri, bool is_permanent)
"Do you want to allow the redirection?")
).arg(uri.scheme());
}
- else if((kristall::options.redirection_policy & GenericSettings::WarnOnHostChange) and is_cross_host)
+ else if((kristall::globals().options.redirection_policy & GenericSettings::WarnOnHostChange) and is_cross_host)
{
question = QString(
tr("The location you visited wants to redirect you to another host.\r\n"
@@ -999,9 +999,9 @@ void BrowserTab::pushToHistory(const QUrl &url)
void BrowserTab::showFavouritesPopup()
{
// We add it to favourites immediately.
- kristall::favourites.addUnsorted(this->current_location, this->page_title);
+ kristall::globals().favourites.addUnsorted(this->current_location, this->page_title);
- const Favourite fav = kristall::favourites.getFavourite(this->current_location);
+ const Favourite fav = kristall::globals().favourites.getFavourite(this->current_location);
this->ui->fav_button->setChecked(true);
FavouritePopup *popup = static_cast<FavouritePopup*>(this->ui->fav_button->menu());
@@ -1013,13 +1013,13 @@ void BrowserTab::showFavouritesPopup()
// Setup the group combobox
popup->fav_group->setCurrentIndex(-1);
popup->fav_group->clear();
- QStringList groups = kristall::favourites.groups();
+ QStringList groups = kristall::globals().favourites.groups();
for (int i = 0; i < groups.length(); ++i)
{
popup->fav_group->addItem(groups[i]);
// Set combobox index to current group
- if (groups[i] == kristall::favourites.groupForFavourite(fav.destination))
+ if (groups[i] == kristall::globals().favourites.groupForFavourite(fav.destination))
{
popup->fav_group->setCurrentIndex(i);
}
@@ -1038,7 +1038,7 @@ void BrowserTab::showFavouritesPopup()
this->ui->fav_button->showMenu();
// Update the favourites entry with what user inputted into menu
- kristall::favourites.editFavouriteTitle(this->current_location, popup->fav_title->text());
+ kristall::globals().favourites.editFavouriteTitle(this->current_location, popup->fav_title->text());
}
void BrowserTab::on_fav_button_clicked()
@@ -1090,10 +1090,10 @@ void BrowserTab::on_text_browser_anchorClicked(const QUrl &url, bool open_in_new
}
if(this->current_location.scheme() == "gemini") {
- kristall::trust::gemini.addTrust(this->current_location, this->current_server_certificate);
+ kristall::globals().trust.gemini.addTrust(this->current_location, this->current_server_certificate);
}
else if(this->current_location.scheme() == "https") {
- kristall::trust::https.addTrust(this->current_location, this->current_server_certificate);
+ kristall::globals().trust.https.addTrust(this->current_location, this->current_server_certificate);
}
else {
assert(false and "missing protocol implementation!");
@@ -1106,7 +1106,7 @@ void BrowserTab::on_text_browser_anchorClicked(const QUrl &url, bool open_in_new
if(is_theme_preview)
{
// ugly workaround for QSettings needing a file
- QFile temp_file { kristall::dirs::cache_root.absoluteFilePath("preview-theme.kthm") };
+ QFile temp_file { kristall::globals().dirs.cache_root.absoluteFilePath("preview-theme.kthm") };
if(temp_file.open(QFile::WriteOnly)) {
IoUtil::writeAll(temp_file, this->current_buffer);
@@ -1151,9 +1151,9 @@ void BrowserTab::on_text_browser_anchorClicked(const QUrl &url, bool open_in_new
{
fileName = DocumentStyle::createFileNameFromName(name, index);
index += 1;
- } while(kristall::dirs::styles.exists(fileName));
+ } while(kristall::globals().dirs.styles.exists(fileName));
- QFile target_file { kristall::dirs::styles.absoluteFilePath(fileName) };
+ QFile target_file { kristall::globals().dirs.styles.absoluteFilePath(fileName) };
if(target_file.open(QFile::WriteOnly)) {
IoUtil::writeAll(target_file, this->current_buffer);
@@ -1192,7 +1192,7 @@ void BrowserTab::on_text_browser_anchorClicked(const QUrl &url, bool open_in_new
if (real_url.isRelative())
real_url = this->current_location.resolved(url);
- auto support = kristall::protocols.isSchemeSupported(real_url.scheme());
+ auto support = kristall::globals().protocols.isSchemeSupported(real_url.scheme());
if (support == ProtocolSetup::Enabled)
{
@@ -1204,7 +1204,7 @@ void BrowserTab::on_text_browser_anchorClicked(const QUrl &url, bool open_in_new
}
else
{
- if (kristall::options.use_os_scheme_handler)
+ if (kristall::globals().options.use_os_scheme_handler)
{
if (not QDesktopServices::openUrl(url))
{
@@ -1247,7 +1247,7 @@ void BrowserTab::on_stop_button_clicked()
void BrowserTab::on_home_button_clicked()
{
- this->navigateTo(QUrl(kristall::options.start_page), BrowserTab::PushImmediate);
+ this->navigateTo(QUrl(kristall::globals().options.start_page), BrowserTab::PushImmediate);
}
void BrowserTab::on_requestProgress(qint64 transferred)
@@ -1259,7 +1259,7 @@ void BrowserTab::on_requestProgress(qint64 transferred)
emit this->fileLoaded(this->current_stats);
this->network_timeout_timer.stop();
- this->network_timeout_timer.start(kristall::options.network_timeout);
+ this->network_timeout_timer.start(kristall::globals().options.network_timeout);
}
void BrowserTab::on_back_button_clicked()
@@ -1288,7 +1288,7 @@ void BrowserTab::updateUI()
void BrowserTab::refreshFavButton()
{
this->ui->fav_button->setEnabled(this->successfully_loaded);
- this->ui->fav_button->setChecked(kristall::favourites.containsUrl(this->current_location));
+ this->ui->fav_button->setChecked(kristall::globals().favourites.containsUrl(this->current_location));
}
void BrowserTab::setUrlBarText(const QString & text)
@@ -1323,7 +1323,7 @@ void BrowserTab::updateUrlBarStyle()
// Set all text to default colour if url bar
// is focused, is at an about: location,
// or has an invalid URL.
- if (!kristall::options.fancy_urlbar ||
+ if (!kristall::globals().options.fancy_urlbar ||
this->ui->url_bar->hasFocus() ||
!url.isValid() ||
this->current_location.scheme() == "about")
@@ -1359,7 +1359,7 @@ void BrowserTab::updateUrlBarStyle()
// non-authority colour text (grey-ish, determined by theme in kristall:setTheme)
// The rest of the text is in default theme foreground colour.
QTextCharFormat f;
- f.setForeground(kristall::options.fancy_urlbar_dim_colour);
+ f.setForeground(kristall::globals().options.fancy_urlbar_dim_colour);
// Create format range for left-side of URL
QTextLayout::FormatRange fr_left;
@@ -1419,9 +1419,9 @@ void BrowserTab::updatePageMargins()
void BrowserTab::refreshOptionalToolbarItems()
{
- this->ui->home_button->setVisible(kristall::options.enable_home_btn);
- this->ui->root_button->setVisible(kristall::options.enable_root_btn);
- this->ui->parent_button->setVisible(kristall::options.enable_parent_btn);
+ this->ui->home_button->setVisible(kristall::globals().options.enable_home_btn);
+ this->ui->root_button->setVisible(kristall::globals().options.enable_root_btn);
+ this->ui->parent_button->setVisible(kristall::globals().options.enable_parent_btn);
}
void BrowserTab::refreshToolbarIcons()
@@ -1431,7 +1431,7 @@ void BrowserTab::refreshToolbarIcons()
"dark"
};
- QString ico_name = ICO_NAMES[(int)kristall::options.explicit_icon_theme];
+ QString ico_name = ICO_NAMES[(int)kristall::globals().options.explicit_icon_theme];
// Favourites button icons
QIcon ico_fav;
@@ -1566,7 +1566,7 @@ bool BrowserTab::startRequest(const QUrl &url, ProtocolHandler::RequestOptions o
}
}
else if(not this->current_identity.isValid()) {
- for(auto ident_ptr : kristall::identities.allIdentities())
+ for(auto ident_ptr : kristall::globals().identities.allIdentities())
{
if(ident_ptr->isAutomaticallyEnabledOn(url)) {
@@ -1598,7 +1598,7 @@ bool BrowserTab::startRequest(const QUrl &url, ProtocolHandler::RequestOptions o
this->current_location = url;
this->setUrlBarText(urlstr);
- this->network_timeout_timer.start(kristall::options.network_timeout);
+ this->network_timeout_timer.start(kristall::globals().options.network_timeout);
const auto req = [this, &url, &options]()
{
@@ -1612,8 +1612,8 @@ bool BrowserTab::startRequest(const QUrl &url, ProtocolHandler::RequestOptions o
}
// Check if we have the page in our cache.
- kristall::cache.clean();
- if (auto pg = kristall::cache.find(url); pg != nullptr)
+ kristall::globals().cache.clean();
+ if (auto pg = kristall::globals().cache.find(url); pg != nullptr)
{
qDebug() << "Reading page from cache";
this->was_read_from_cache = true;
@@ -1717,7 +1717,7 @@ void BrowserTab::on_text_browser_customContextMenuRequested(const QPoint pos)
});
connect(menu.addAction(tr("Copy link")), &QAction::triggered, [real_url]() {
- kristall::clipboard->setText(real_url.toString(QUrl::FullyEncoded));
+ qApp->clipboard()->setText(real_url.toString(QUrl::FullyEncoded));
});
menu.addSeparator();
diff --git a/src/cachehandler.cpp b/src/cachehandler.cpp
index d9c8836..35447f9 100644
--- a/src/cachehandler.cpp
+++ b/src/cachehandler.cpp
@@ -8,14 +8,14 @@ void CacheHandler::push(const QUrl &url, const QByteArray &body, const MimeType
{
// Skip if this item is above the cached item size threshold
int bodysize = body.size();
- if (bodysize > (kristall::options.cache_threshold * 1024))
+ if (bodysize > (kristall::globals().options.cache_threshold * 1024))
{
qDebug() << "cache: item exceeds threshold (" << IoUtil::size_human(body.size()) << ")";
return;
}
// Pop cached items until we are below the cache limit
- while ((bodysize + this->size()) > (kristall::options.cache_limit * 1024))
+ while ((bodysize + this->size()) > (kristall::globals().options.cache_limit * 1024))
{
this->popOldest();
}
@@ -78,7 +78,7 @@ int CacheHandler::size()
void CacheHandler::clean()
{
// Don't clean anything if we have unlimited item life.
- if (kristall::options.cache_unlimited_life) return;
+ if (kristall::globals().options.cache_unlimited_life) return;
// Find list of keys to delete
std::vector<QString> vec;
@@ -86,7 +86,7 @@ void CacheHandler::clean()
{
// Check if this cache item is expired.
if (QDateTime::currentDateTime() > i.second->time_cached
- .addSecs(kristall::options.cache_life * 60))
+ .addSecs(kristall::globals().options.cache_life * 60))
{
vec.emplace_back(std::move(i.first));
}
diff --git a/src/dialogs/certificateselectiondialog.cpp b/src/dialogs/certificateselectiondialog.cpp
index 2c08110..4d7d5ff 100644
--- a/src/dialogs/certificateselectiondialog.cpp
+++ b/src/dialogs/certificateselectiondialog.cpp
@@ -16,7 +16,7 @@ CertificateSelectionDialog::CertificateSelectionDialog(QWidget *parent) :
ui->setupUi(this);
this->ui->server_request->setVisible(false);
- this->ui->certificates->setModel(&kristall::identities);
+ this->ui->certificates->setModel(&kristall::globals().identities);
this->ui->certificates->expandAll();
connect(this->ui->certificates->selectionModel(), &QItemSelectionModel::currentChanged, this, &CertificateSelectionDialog::on_currentChanged);
@@ -86,7 +86,7 @@ void CertificateSelectionDialog::on_currentChanged(const QModelIndex &current, c
{
Q_UNUSED(current)
Q_UNUSED(previous)
- auto id = kristall::identities.getIdentity(current);
+ auto id = kristall::globals().identities.getIdentity(current);
this->ui->use_selected_cert->setEnabled(id.isValid());
}
@@ -103,7 +103,7 @@ void CertificateSelectionDialog::on_create_new_cert_clicked()
return;
id.is_persistent = true;
- kristall::identities.addCertificate(
+ kristall::globals().identities.addCertificate(
dialog.groupName(),
id);
}
@@ -111,7 +111,7 @@ void CertificateSelectionDialog::on_create_new_cert_clicked()
void CertificateSelectionDialog::on_use_selected_cert_clicked()
{
auto sel = this->ui->certificates->selectionModel()->currentIndex();
- this->cryto_identity = kristall::identities.getIdentity(sel);
+ this->cryto_identity = kristall::globals().identities.getIdentity(sel);
if(this->cryto_identity.isValid()) {
this->accept();
} else {
@@ -121,7 +121,7 @@ void CertificateSelectionDialog::on_use_selected_cert_clicked()
void CertificateSelectionDialog::on_certificates_doubleClicked(const QModelIndex &index)
{
- this->cryto_identity = kristall::identities.getIdentity(index);
+ this->cryto_identity = kristall::globals().identities.getIdentity(index);
if(this->cryto_identity.isValid()) {
this->accept();
} else {
diff --git a/src/dialogs/newidentitiydialog.cpp b/src/dialogs/newidentitiydialog.cpp
index aa2241c..567fc7d 100644
--- a/src/dialogs/newidentitiydialog.cpp
+++ b/src/dialogs/newidentitiydialog.cpp
@@ -19,7 +19,7 @@ NewIdentitiyDialog::NewIdentitiyDialog(QWidget *parent) :
ui->expiration_date->setTime(QTime(12, 00));
ui->group->clear();
- for(const auto &group_name : kristall::identities.groups())
+ for(const auto &group_name : kristall::globals().identities.groups())
{
ui->group->addItem(group_name);
}
diff --git a/src/dialogs/settingsdialog.cpp b/src/dialogs/settingsdialog.cpp
index 8072b43..862963b 100644
--- a/src/dialogs/settingsdialog.cpp
+++ b/src/dialogs/settingsdialog.cpp
@@ -52,10 +52,10 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
setGeminiStyle(DocumentStyle { });
this->predefined_styles.clear();
- for(auto const & fileName : kristall::dirs::styles.entryList())
+ for(auto const & fileName : kristall::globals().dirs.styles.entryList())
{
QSettings style_sheet {
- kristall::dirs::styles.absoluteFilePath(fileName),
+ kristall::globals().dirs.styles.absoluteFilePath(fileName),
QSettings::IniFormat
};
@@ -670,7 +670,7 @@ void SettingsDialog::on_preset_load_clicked()
void SettingsDialog::on_SettingsDialog_accepted()
{
- QStringList files = kristall::dirs::styles.entryList();
+ QStringList files = kristall::globals().dirs.styles.entryList();
for(auto const & style_name : this->predefined_styles.keys())
{
@@ -678,7 +678,7 @@ void SettingsDialog::on_SettingsDialog_accepted()
files.removeAll(fileName);
QSettings style_sheet {
- kristall::dirs::styles.absoluteFilePath(fileName),
+ kristall::globals().dirs.styles.absoluteFilePath(fileName),
QSettings::IniFormat
};
@@ -690,7 +690,7 @@ void SettingsDialog::on_SettingsDialog_accepted()
for(auto const & fileName : files)
{
- kristall::dirs::styles.remove(fileName);
+ kristall::globals().dirs.styles.remove(fileName);
}
}
diff --git a/src/documentstyle.cpp b/src/documentstyle.cpp
index c7d6696..91169c0 100644
--- a/src/documentstyle.cpp
+++ b/src/documentstyle.cpp
@@ -5,6 +5,7 @@
#include <QString>
#include <QStringList>
#include <QFontDatabase>
+#include <QFontInfo>
#include <QCryptographicHash>
#include <QDebug>
@@ -13,6 +14,20 @@
#include <array>
#include <cmath>
+DocumentStyle::DefaultFonts::DefaultFonts()
+{
+ // Initialise default fonts
+ #ifdef Q_OS_WIN32
+ // Windows default fonts are ugly, so we use standard ones.
+ family = "Segoe UI";
+ fixed = "Consolas";
+ #else
+ // *nix
+ regular = QFontDatabase::systemFont(QFontDatabase::GeneralFont).family();
+ fixed = QFontInfo(QFont("monospace")).family();
+ #endif
+}
+
static QString encodeCssFont (const QFont& refFont)
{
//-----------------------------------------------------------------------
@@ -117,7 +132,7 @@ static QString encodeCssFont (const QFont& refFont)
return cssFontStr;
}
-DocumentStyle::DocumentStyle(bool do_init) : theme(Fixed),
+DocumentStyle::DocumentStyle() : theme(Fixed),
standard_font(),
h1_font(),
h2_font(),
@@ -153,30 +168,32 @@ DocumentStyle::DocumentStyle(bool do_init) : theme(Fixed),
indent_size(15.0),
list_symbol(QTextListFormat::ListDisc)
{
- if (do_init) this->initialiseDefaultFonts();
+ this->initialiseDefaultFonts();
}
void DocumentStyle::initialiseDefaultFonts()
{
- preformatted_font.setFamily(kristall::default_font_family_fixed);
+ DefaultFonts default_fonts;
+
+ preformatted_font.setFamily(default_fonts.fixed);
preformatted_font.setPointSizeF(12.0);
- standard_font.setFamily(kristall::default_font_family);
+ standard_font.setFamily(default_fonts.regular);
standard_font.setPointSizeF(12.0);
- h1_font.setFamily(kristall::default_font_family);
+ h1_font.setFamily(default_fonts.regular);
h1_font.setBold(true);
h1_font.setPointSizeF(22.0);
- h2_font.setFamily(kristall::default_font_family);
+ h2_font.setFamily(default_fonts.regular);
h2_font.setBold(true);
h2_font.setPointSizeF(17.0);
- h3_font.setFamily(kristall::default_font_family);
+ h3_font.setFamily(default_fonts.regular);
h3_font.setBold(true);
h3_font.setPointSizeF(14.0);
- blockquote_font.setFamily(kristall::default_font_family);
+ blockquote_font.setFamily(default_fonts.regular);
blockquote_font.setItalic(true);
blockquote_font.setPointSizeF(12.0);
}
@@ -430,15 +447,17 @@ DocumentStyle DocumentStyle::derive(const QUrl &url) const
"JoyPixels",
};
- auto const patchup_font = [](QFont & font, bool fixed=false)
+ DefaultFonts default_fonts;
+
+ auto const patchup_font = [&default_fonts](QFont & font, bool fixed=false)
{
// Set the "fallback" font, just to be absolutely sure.
// Note the main purpose of this is to avoid emoji fonts
// from taking precedence over text fonts.
// (fixes *nix default font issues)
emojiFonts[1] = fixed
- ? kristall::default_font_family_fixed
- : kristall::default_font_family;
+ ? default_fonts.fixed
+ : default_fonts.regular;
// Set the primary font as the preferred font.
// We ensure that the font family is available first,
@@ -448,8 +467,8 @@ DocumentStyle DocumentStyle::derive(const QUrl &url) const
if (!db.families().contains(font.family()))
{
emojiFonts.front() = fixed
- ? kristall::default_font_family_fixed
- : kristall::default_font_family;
+ ? default_fonts.fixed
+ : default_fonts.regular;
}
else
{
@@ -458,7 +477,7 @@ DocumentStyle DocumentStyle::derive(const QUrl &url) const
// Set emoji fonts if supported and enabled.
if (kristall::EMOJIS_SUPPORTED &&
- kristall::options.emojis_enabled)
+ kristall::globals().options.emojis_enabled)
{
// Redundant check to make compiler happy...
#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
diff --git a/src/documentstyle.hpp b/src/documentstyle.hpp
index a960863..9f2decd 100644
--- a/src/documentstyle.hpp
+++ b/src/documentstyle.hpp
@@ -15,7 +15,14 @@ struct DocumentStyle
AutoLightTheme = 2
};
- DocumentStyle(bool do_init = true);
+ struct DefaultFonts
+ {
+ QString regular, fixed;
+
+ DefaultFonts();
+ };
+
+ DocumentStyle();
void initialiseDefaultFonts();
diff --git a/src/favouritecollection.cpp b/src/favouritecollection.cpp
index c5fa659..2e31297 100644
--- a/src/favouritecollection.cpp
+++ b/src/favouritecollection.cpp
@@ -39,6 +39,17 @@ FavouriteCollection::FavouriteCollection(const FavouriteCollection &other)
relayout();
}
+FavouriteCollection::FavouriteCollection(FavouriteCollection &&other)
+{
+ this->root.children = std::move(other.root.children);
+}
+
+
+FavouriteCollection::~FavouriteCollection()
+{
+
+}
+
FavouriteCollection &FavouriteCollection::operator=(const FavouriteCollection & other)
{
beginResetModel();
diff --git a/src/favouritecollection.hpp b/src/favouritecollection.hpp
index 9c18ec3..abc40b1 100644
--- a/src/favouritecollection.hpp
+++ b/src/favouritecollection.hpp
@@ -34,6 +34,8 @@ class FavouriteCollection : public QAbstractItemModel
std::vector<std::unique_ptr<Node>> children;
Type type;
explicit Node(Type t) : type(t) { }
+ Node(Node const &) = delete;
+ Node(Node &&) = delete;
virtual ~Node() = default;
template<typename T>
@@ -46,17 +48,23 @@ class FavouriteCollection : public QAbstractItemModel
struct FavouriteNode : Node {
::Favourite favourite;
FavouriteNode() : Node(Favourite) { }
+ FavouriteNode(FavouriteNode const &) = delete;
+ FavouriteNode(FavouriteNode &&) = delete;
~FavouriteNode() override = default;
};
struct GroupNode : Node {
QString title;
GroupNode() : Node(Group) { }
+ GroupNode(GroupNode const &) = delete;
+ GroupNode(GroupNode &&) = delete;
~GroupNode() override = default;
};
struct RootNode : Node {
RootNode() : Node(Root) { }
+ RootNode(RootNode const &) = delete;
+ RootNode(RootNode &&) = delete;
~RootNode() override = default;
};
@@ -65,6 +73,10 @@ public:
FavouriteCollection(FavouriteCollection const & other);
+ FavouriteCollection(FavouriteCollection && other);
+
+ ~FavouriteCollection();
+
FavouriteCollection & operator=(FavouriteCollection const &);
FavouriteCollection & operator=(FavouriteCollection &&);
diff --git a/src/kristall.hpp b/src/kristall.hpp
index f9d1c15..096c6e9 100644
--- a/src/kristall.hpp
+++ b/src/kristall.hpp
@@ -117,36 +117,53 @@ class MainWindow;
///
namespace kristall
{
- extern ProtocolSetup protocols;
-
- extern QSettings * settings;
- extern IdentityCollection identities;
- extern QClipboard * clipboard;
- extern FavouriteCollection favourites;
- extern GenericSettings options;
-
- extern DocumentStyle document_style;
+ //! Whether emojis are supprted in current build configuration
+ extern const bool EMOJIS_SUPPORTED;
- extern CacheHandler cache;
+ struct Trust
+ {
+ SslTrust gemini;
+ SslTrust https;
+ };
- namespace trust {
- extern SslTrust gemini;
- extern SslTrust https;
- }
+ struct Dirs
+ {
- namespace dirs {
- extern QDir config_root;
- extern QDir cache_root;
+ QDir config_root;
+ QDir cache_root;
//! Contains files per host
- extern QDir offline_pages;
+ QDir offline_pages;
//! Contains custom UI themes for kristall
- extern QDir themes;
+ QDir themes;
//! Contains custom document styles / presets
- extern QDir styles;
- }
+ QDir styles;
+ };
+
+ struct Globals
+ {
+
+ ProtocolSetup protocols;
+
+ QSettings * settings;
+ IdentityCollection identities;
+ QClipboard * clipboard;
+ FavouriteCollection favourites;
+ GenericSettings options;
+
+ DocumentStyle document_style;
+
+ CacheHandler cache;
+
+ Trust trust;
+
+ Dirs dirs;
+ };
+
+ //! returns the instance of the globals structure
+ Globals & globals();
//! Forwards the current settings to all windows
void applySettings();
@@ -176,11 +193,6 @@ namespace kristall
//! Opens a new window with the given list of urls.
//! If the list is empty, no new tab will spawned.
MainWindow * openNewWindow(QVector<QUrl> const & urls);
-
- extern QString default_font_family, default_font_family_fixed;
-
- //! Whether emojis are supprted in current build configuration
- extern const bool EMOJIS_SUPPORTED;
}
#endif // KRISTALL_HPP
diff --git a/src/main.cpp b/src/main.cpp
index 80f86f2..82a225f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -14,24 +14,21 @@
#include <QLibraryInfo>
#include <cassert>
-ProtocolSetup kristall::protocols;
-IdentityCollection kristall::identities;
-QSettings * kristall::settings;
-QClipboard * kristall::clipboard;
-SslTrust kristall::trust::gemini;
-SslTrust kristall::trust::https;
-FavouriteCollection kristall::favourites;
-GenericSettings kristall::options;
-DocumentStyle kristall::document_style(false);
-CacheHandler kristall::cache;
-QString kristall::default_font_family;
-QString kristall::default_font_family_fixed;
-
-QDir kristall::dirs::config_root;
-QDir kristall::dirs::cache_root;
-QDir kristall::dirs::offline_pages;
-QDir kristall::dirs::themes;
-QDir kristall::dirs::styles;
+static std::unique_ptr<kristall::Globals> main_globals;
+
+struct EnsureGlobalsReset
+{
+ ~EnsureGlobalsReset()
+ {
+ main_globals.reset();
+ }
+};
+
+kristall::Globals & kristall::globals()
+{
+ assert(main_globals != nullptr);
+ return *main_globals;
+}
// We need QFont::setFamilies for emojis to work properly,
// Qt versions below 5.13 don't support this.
@@ -364,6 +361,11 @@ int main(int argc, char *argv[])
QApplication app(argc, argv);
app.setApplicationVersion(SSTR(KRISTALL_VERSION));
+ main_globals = std::make_unique<kristall::Globals>( );
+
+ // this is relevant to delete kristall::Globals before the application itself.
+ EnsureGlobalsReset ensure_globals_reset;
+
QObject::connect(&app, &QApplication::focusChanged, [](QWidget *old, QWidget *now) {
// Determine the window for both, we're only interested in window focus changes.
if(old != nullptr) old = old->window();
@@ -392,22 +394,6 @@ int main(int argc, char *argv[])
app.installTranslator(&qttrans);
app.installTranslator(&trans);
- {
- // Initialise default fonts
- #ifdef Q_OS_WIN32
- // Windows default fonts are ugly, so we use standard ones.
- kristall::default_font_family = "Segoe UI";
- kristall::default_font_family_fixed = "Consolas";
- #else
- // *nix
- kristall::default_font_family = QFontDatabase::systemFont(QFontDatabase::GeneralFont).family();
- kristall::default_font_family_fixed = QFontInfo(QFont("monospace")).family();
- #endif
- kristall::document_style.initialiseDefaultFonts();
- }
-
- kristall::clipboard = app.clipboard();
-
addEmojiSubstitutions();
QCommandLineParser cli_parser;
@@ -503,18 +489,18 @@ int main(int argc, char *argv[])
QString cache_root = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
QString config_root = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
- kristall::dirs::config_root = QDir { config_root };
- kristall::dirs::cache_root = QDir { cache_root };
+ kristall::globals().dirs.config_root = QDir { config_root };
+ kristall::globals().dirs.cache_root = QDir { cache_root };
- kristall::dirs::offline_pages = derive_dir(kristall::dirs::cache_root, "offline-pages");
- kristall::dirs::themes = derive_dir(kristall::dirs::config_root, "themes");
+ kristall::globals().dirs.offline_pages = derive_dir(kristall::globals().dirs.cache_root, "offline-pages");
+ kristall::globals().dirs.themes = derive_dir(kristall::globals().dirs.config_root, "themes");
- kristall::dirs::styles = derive_dir(kristall::dirs::config_root, "styles");
- kristall::dirs::styles.setNameFilters(QStringList { "*.kthm" });
- kristall::dirs::styles.setFilter(QDir::Files);
+ kristall::globals().dirs.styles = derive_dir(kristall::globals().dirs.config_root, "styles");
+ kristall::globals().dirs.styles.setNameFilters(QStringList { "*.kthm" });
+ kristall::globals().dirs.styles.setFilter(QDir::Files);
QSettings app_settings {
- kristall::dirs::config_root.absoluteFilePath("config.ini"),
+ kristall::globals().dirs.config_root.absoluteFilePath("config.ini"),
QSettings::IniFormat
};
app_settings_ptr = &app_settings;
@@ -549,10 +535,10 @@ int main(int argc, char *argv[])
do {
fileName = DocumentStyle::createFileNameFromName(name, index);
index += 1;
- } while(kristall::dirs::styles.exists(fileName));
+ } while(kristall::globals().dirs.styles.exists(fileName));
QSettings style_sheet {
- kristall::dirs::styles.absoluteFilePath(fileName),
+ kristall::globals().dirs.styles.absoluteFilePath(fileName),
QSettings::IniFormat
};
style_sheet.setValue("name", name);
@@ -637,35 +623,35 @@ int main(int argc, char *argv[])
app_settings.endArray();
}
- kristall::settings = &app_settings;
+ kristall::globals().settings = &app_settings;
- kristall::options.load(app_settings);
+ kristall::globals().options.load(app_settings);
app_settings.beginGroup("Protocols");
- kristall::protocols.load(app_settings);
+ kristall::globals().protocols.load(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Client Identities");
- kristall::identities.load(app_settings);
+ kristall::globals().identities.load(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Trusted Servers");
- kristall::trust::gemini.load(app_settings);
+ kristall::globals().trust.gemini.load(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Trusted HTTPS Servers");
- kristall::trust::https.load(app_settings);
+ kristall::globals().trust.https.load(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Theme");
- kristall::document_style.load(app_settings);
+ kristall::globals().document_style.load(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Favourites");
- kristall::favourites.load(app_settings);
+ kristall::globals().favourites.load(app_settings);
app_settings.endGroup();
- kristall::setTheme(kristall::options.theme);
+ kristall::setTheme(kristall::globals().options.theme);
if(ipc_server != nullptr) {
QObject::connect(ipc_server.get(), &QLocalServer::newConnection, [&ipc_server]() {
@@ -830,8 +816,8 @@ void GenericSettings::save(QSettings &settings) const
void kristall::applySettings()
{
- kristall::setTheme(kristall::options.theme);
- kristall::setUiDensity(kristall::options.ui_density, false);
+ kristall::setTheme(kristall::globals().options.theme);
+ kristall::setUiDensity(kristall::globals().options.ui_density, false);
forAllAppWindows([](MainWindow * window)
{
@@ -845,30 +831,30 @@ void kristall::saveSettings()
QSettings & app_settings = *app_settings_ptr;
app_settings.beginGroup("Favourites");
- kristall::favourites.save(app_settings);
+ kristall::globals().favourites.save(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Protocols");
- kristall::protocols.save(app_settings);
+ kristall::globals().protocols.save(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Client Identities");
- kristall::identities.save(app_settings);
+ kristall::globals().identities.save(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Trusted Servers");
- kristall::trust::gemini.save(app_settings);
+ kristall::globals().trust.gemini.save(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Trusted HTTPS Servers");
- kristall::trust::https.save(app_settings);
+ kristall::globals().trust.https.save(app_settings);
app_settings.endGroup();
app_settings.beginGroup("Theme");
- kristall::document_style.save(app_settings);
+ kristall::globals().document_style.save(app_settings);
app_settings.endGroup();
- kristall::options.save(app_settings);
+ kristall::globals().options.save(app_settings);
app_settings.sync();
}
@@ -884,7 +870,7 @@ void kristall::setTheme(Theme theme)
// Use "mid" colour for our URL bar dim colour:
QColor col = qApp->palette().color(QPalette::WindowText);
col.setAlpha(150);
- kristall::options.fancy_urlbar_dim_colour = std::move(col);
+ kristall::globals().options.fancy_urlbar_dim_colour = std::move(col);
}
else if(theme == Theme::light)
{
@@ -893,7 +879,7 @@ void kristall::setTheme(Theme theme)
QTextStream stream(&file);
qApp->setStyleSheet(stream.readAll());
- kristall::options.fancy_urlbar_dim_colour = QColor(128, 128, 128, 255);
+ kristall::globals().options.fancy_urlbar_dim_colour = QColor(128, 128, 128, 255);
}
else if(theme == Theme::dark)
{
@@ -902,10 +888,10 @@ void kristall::setTheme(Theme theme)
QTextStream stream(&file);
qApp->setStyleSheet(stream.readAll());
- kristall::options.fancy_urlbar_dim_colour = QColor(150, 150, 150, 255);
+ kristall::globals().options.fancy_urlbar_dim_colour = QColor(150, 150, 150, 255);
}
- kristall::setIconTheme(kristall::options.icon_theme, theme);
+ kristall::setIconTheme(kristall::globals().options.icon_theme, theme);
forAllAppWindows([](MainWindow * main_window) {
if (main_window && main_window->curTab())
@@ -941,7 +927,7 @@ void kristall::setIconTheme(IconTheme icotheme, Theme uitheme)
QIcon::setThemeName("");
#endif
- kristall::options.explicit_icon_theme = IconTheme::dark;
+ kristall::globals().options.explicit_icon_theme = IconTheme::dark;
ret();
return;
@@ -949,14 +935,14 @@ void kristall::setIconTheme(IconTheme icotheme, Theme uitheme)
// Use icon theme based on UI theme
QIcon::setThemeName(icothemes[(int)uitheme]);
- kristall::options.explicit_icon_theme = (IconTheme)uitheme;
+ kristall::globals().options.explicit_icon_theme = (IconTheme)uitheme;
ret();
return;
}
// Use icon specified by user
QIcon::setThemeName(icothemes[(int)icotheme]);
- kristall::options.explicit_icon_theme = (IconTheme)icotheme;
+ kristall::globals().options.explicit_icon_theme = (IconTheme)icotheme;
ret();
}
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 005953e..dc87575 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -39,7 +39,7 @@ MainWindow::MainWindow(QApplication * app, QWidget *parent) :
this->statusBar()->addPermanentWidget(this->file_size);
this->statusBar()->addPermanentWidget(this->load_time);
- ui->favourites_view->setModel(&kristall::favourites);
+ ui->favourites_view->setModel(&kristall::globals().favourites);
this->ui->outline_window->setVisible(false);
this->ui->history_window->setVisible(false);
@@ -56,7 +56,7 @@ MainWindow::MainWindow(QApplication * app, QWidget *parent) :
connect(this->ui->menuNavigation, &QMenu::aboutToShow, [this]() {
BrowserTab * tab = this->curTab();
if(tab != nullptr) {
- ui->actionAdd_to_favourites->setChecked(kristall::favourites.containsUrl(tab->current_location));
+ ui->actionAdd_to_favourites->setChecked(kristall::globals().favourites.containsUrl(tab->current_location));
}
});
@@ -149,7 +149,7 @@ BrowserTab * MainWindow::addEmptyTab(bool focus_new, bool load_default)
}
if(load_default) {
- tab->navigateTo(QUrl(kristall::options.start_page), BrowserTab::PushImmediate);
+ tab->navigateTo(QUrl(kristall::globals().options.start_page), BrowserTab::PushImmediate);
tab->focusUrlBar();
} else {
tab->navigateTo(QUrl("about:blank"), BrowserTab::DontPush);
@@ -274,7 +274,7 @@ QString MainWindow::newGroupDialog()
if(dialog.exec() != QDialog::Accepted)
return QString { };
- kristall::favourites.addGroup(dialog.textValue());
+ kristall::globals().favourites.addGroup(dialog.textValue());
return dialog.textValue();
}
@@ -297,7 +297,7 @@ void MainWindow::applySettings()
tab->rerenderPage();
// Update new-tab button visibility.
- this->ui->browser_tabs->tab_bar->new_tab_btn->setVisible(kristall::options.enable_newtab_btn);
+ this->ui->browser_tabs->tab_bar->new_tab_btn->setVisible(kristall::globals().options.enable_newtab_btn);
}
void MainWindow::mousePressEvent(QMouseEvent *event)
@@ -427,24 +427,24 @@ void MainWindow::on_actionSettings_triggered()
{
SettingsDialog dialog;
- dialog.setGeminiStyle(kristall::document_style);
- dialog.setProtocols(kristall::protocols);
- dialog.setOptions(kristall::options);
- dialog.setGeminiSslTrust(kristall::trust::gemini);
- dialog.setHttpsSslTrust(kristall::trust::https);
+ dialog.setGeminiStyle(kristall::globals().document_style);
+ dialog.setProtocols(kristall::globals().protocols);
+ dialog.setOptions(kristall::globals().options);
+ dialog.setGeminiSslTrust(kristall::globals().trust.gemini);
+ dialog.setHttpsSslTrust(kristall::globals().trust.https);
if(dialog.exec() != QDialog::Accepted) {
- kristall::setTheme(kristall::options.theme);
- this->setUiDensity(kristall::options.ui_density, false);
+ kristall::setTheme(kristall::globals().options.theme);
+ this->setUiDensity(kristall::globals().options.ui_density, false);
return;
}
- kristall::trust::gemini = dialog.geminiSslTrust();
- kristall::trust::https = dialog.httpsSslTrust();
- kristall::options = dialog.options();
+ kristall::globals().trust.gemini = dialog.geminiSslTrust();
+ kristall::globals().trust.https = dialog.httpsSslTrust();
+ kristall::globals().options = dialog.options();
- kristall::protocols = dialog.protocols();
- kristall::document_style = dialog.geminiStyle();
+ kristall::globals().protocols = dialog.protocols();
+ kristall::globals().document_style = dialog.geminiStyle();
kristall::applySettings();
@@ -571,7 +571,7 @@ void MainWindow::on_actionGo_to_home_triggered()
{
BrowserTab * tab = this->curTab();
if(tab != nullptr) {
- tab->navigateTo(QUrl(kristall::options.start_page), BrowserTab::PushImmediate);
+ tab->navigateTo(QUrl(kristall::globals().options.start_page), BrowserTab::PushImmediate);
}
}
@@ -647,7 +647,7 @@ void MainWindow::on_history_view_customContextMenuRequested(const QPoint pos)
void MainWindow::on_favourites_view_customContextMenuRequested(const QPoint pos)
{
if(auto idx = this->ui->favourites_view->indexAt(pos); idx.isValid()) {
- if(QUrl url = kristall::favourites.getFavourite(idx).destination; url.isValid()) {
+ if(QUrl url = kristall::globals().favourites.getFavourite(idx).destination; url.isValid()) {
QMenu menu;
BrowserTab * tab = this->curTab();
@@ -668,12 +668,12 @@ void MainWindow::on_favourites_view_customContextMenuRequested(const QPoint pos)
dialog.setInputMode(QInputDialog::TextInput);
dialog.setLabelText(tr("Enter new location of this favourite:"));
- dialog.setTextValue(kristall::favourites.getFavourite(idx).destination.toString(QUrl::FullyEncoded));
+ dialog.setTextValue(kristall::globals().favourites.getFavourite(idx).destination.toString(QUrl::FullyEncoded));
if (dialog.exec() != QDialog::Accepted)
return;
- kristall::favourites.editFavouriteDest(idx, QUrl(dialog.textValue()));
+ kristall::globals().favourites.editFavouriteDest(idx, QUrl(dialog.textValue()));
});
connect(menu.addAction(tr("Rename")), &QAction::triggered, [this, idx]() {
@@ -681,23 +681,23 @@ void MainWindow::on_favourites_view_customContextMenuRequested(const QPoint pos)
dialog.setInputMode(QInputDialog::TextInput);
dialog.setLabelText(tr("New name of this favourite:"));
- dialog.setTextValue(kristall::favourites.getFavourite(idx).getTitle());
+ dialog.setTextValue(kristall::globals().favourites.getFavourite(idx).getTitle());
if (dialog.exec() != QDialog::Accepted)
return;
- kristall::favourites.editFavouriteTitle(idx, dialog.textValue());
+ kristall::globals().favourites.editFavouriteTitle(idx, dialog.textValue());
});
menu.addSeparator();
connect(menu.addAction(tr("Delete")), &QAction::triggered, [idx]() {
- kristall::favourites.destroyFavourite(idx);
+ kristall::globals().favourites.destroyFavourite(idx);
});
menu.exec(this->ui->favourites_view->mapToGlobal(pos));
}
- else if(QString group = kristall::favourites.group(idx); not group.isEmpty()) {
+ else if(QString group = kristall::globals().favourites.group(idx); not group.isEmpty()) {
QMenu menu;
connect(menu.addAction(tr("Rename group")), &QAction::triggered, [this, group]() {
@@ -710,7 +710,7 @@ void MainWindow::on_favourites_view_customContextMenuRequested(const QPoint pos)
if (dialog.exec() != QDialog::Accepted)
return;
- if (!kristall::favourites.renameGroup(group, dialog.textValue()))
+ if (!kristall::globals().favourites.renameGroup(group, dialog.textValue()))
QMessageBox::information(this, tr("Kristall"), tr("Rename failed: group name already in use."));
});
@@ -727,7 +727,7 @@ void MainWindow::on_favourites_view_customContextMenuRequested(const QPoint pos)
{
return;
}
- kristall::favourites.deleteGroupRecursive(kristall::favourites.group(idx));
+ kristall::globals().favourites.deleteGroupRecursive(kristall::globals().favourites.group(idx));
});
menu.exec(this->ui->favourites_view->mapToGlobal(pos));
@@ -753,11 +753,11 @@ void MainWindow::on_actionManage_Certificates_triggered()
{
CertificateManagementDialog dialog { this };
- dialog.setIdentitySet(kristall::identities);
+ dialog.setIdentitySet(kristall::globals().identities);
if(dialog.exec() != QDialog::Accepted)
return;
- kristall::identities = dialog.identitySet();
+ kristall::globals().identities = dialog.identitySet();
kristall::saveSettings();
}
@@ -779,7 +779,7 @@ void MainWindow::on_actionClose_Window_triggered()
void MainWindow::on_favourites_view_activated(const QModelIndex &index)
{
- if(auto url = kristall::favourites.getFavourite(index).destination; url.isValid()) {
+ if(auto url = kristall::globals().favourites.getFavourite(index).destination; url.isValid()) {
this->addNewTab(true, url);
}
}
diff --git a/src/protocols/abouthandler.cpp b/src/protocols/abouthandler.cpp
index 46fa643..13bc098 100644
--- a/src/protocols/abouthandler.cpp
+++ b/src/protocols/abouthandler.cpp
@@ -30,7 +30,7 @@ bool AboutHandler::startRequest(const QUrl &url, ProtocolHandler::RequestOptions
QString current_group;
- for (auto const &fav : kristall::favourites.allFavourites())
+ for (auto const &fav : kristall::globals().favourites.allFavourites())
{
if(current_group != fav.first) {
@@ -54,7 +54,7 @@ bool AboutHandler::startRequest(const QUrl &url, ProtocolHandler::RequestOptions
QByteArray document;
document.append("# Cache information\n");
- auto& cache = kristall::cache.getPages();
+ auto& cache = kristall::globals().cache.getPages();
long unsigned cache_usage = 0;
int cached_count = 0;
for (auto it = cache.begin(); it != cache.end(); ++it, ++cached_count)
diff --git a/src/protocols/filehandler.cpp b/src/protocols/filehandler.cpp
index dfb6243..9e76dcd 100644
--- a/src/protocols/filehandler.cpp
+++ b/src/protocols/filehandler.cpp
@@ -38,7 +38,7 @@ bool FileHandler::startRequest(const QUrl &url, RequestOptions options)
page += QString("# Index of %1\n").arg(url.path());
auto filters = QDir::Dirs | QDir::Files | QDir::NoDot;
- if (kristall::options.show_hidden_files_in_dirs) filters |= QDir::Hidden;
+ if (kristall::globals().options.show_hidden_files_in_dirs) filters |= QDir::Hidden;
dir.setFilter(filters);
// Iterate over files in the directory, and add links to each.
diff --git a/src/protocols/geminiclient.cpp b/src/protocols/geminiclient.cpp
index 30c79ac..9c5769c 100644
--- a/src/protocols/geminiclient.cpp
+++ b/src/protocols/geminiclient.cpp
@@ -65,7 +65,7 @@ bool GeminiClient::startRequest(const QUrl &url, RequestOptions options)
QSslConfiguration ssl_config = socket.sslConfiguration();
ssl_config.setProtocol(QSsl::TlsV1_2);
- if(not kristall::trust::gemini.enable_ca)
+ if(not kristall::globals().trust.gemini.enable_ca)
ssl_config.setCaCertificates(QList<QSslCertificate> { });
else
ssl_config.setCaCertificates(QSslConfiguration::systemCaCertificates());
@@ -341,7 +341,7 @@ void GeminiClient::sslErrors(QList<QSslError> const & errors)
bool ignore = false;
if(SslTrust::isTrustRelated(err.error()))
{
- switch(kristall::trust::gemini.getTrust(target_url, socket.peerCertificate()))
+ switch(kristall::globals().trust.gemini.getTrust(target_url, socket.peerCertificate()))
{
case SslTrust::Trusted:
ignore = true;
diff --git a/src/protocols/webclient.cpp b/src/protocols/webclient.cpp
index 58b3365..01c6b1b 100644
--- a/src/protocols/webclient.cpp
+++ b/src/protocols/webclient.cpp
@@ -40,7 +40,7 @@ bool WebClient::startRequest(const QUrl &url, RequestOptions options)
auto ssl_config = request.sslConfiguration();
// ssl_config.setProtocol(QSsl::TlsV1_2);
- if(kristall::trust::https.enable_ca)
+ if(kristall::globals().trust.https.enable_ca)
ssl_config.setCaCertificates(QSslConfiguration::systemCaCertificates());
else
ssl_config.setCaCertificates(QList<QSslCertificate> { });
@@ -188,7 +188,7 @@ void WebClient::on_sslErrors(const QList<QSslError> &errors)
if(SslTrust::isTrustRelated(err.error()))
{
auto cert = this->current_reply->sslConfiguration().peerCertificate();
- switch(kristall::trust::https.getTrust(this->current_reply->url(), cert))
+ switch(kristall::globals().trust.https.getTrust(this->current_reply->url(), cert))
{
case SslTrust::Trusted:
ignore = true;
diff --git a/src/renderers/geminirenderer.cpp b/src/renderers/geminirenderer.cpp
index 0649afb..0e62ef3 100644
--- a/src/renderers/geminirenderer.cpp
+++ b/src/renderers/geminirenderer.cpp
@@ -43,7 +43,7 @@ std::unique_ptr<GeminiDocument> GeminiRenderer::render(
renderhelpers::setPageMargins(result.get(), themed_style.margin_h, themed_style.margin_v);
result->setIndentWidth(themed_style.indent_size);
- bool emit_fancy_text = kristall::options.enable_text_decoration;
+ bool emit_fancy_text = kristall::globals().options.enable_text_decoration;
QTextCursor cursor{result.get()};
@@ -472,7 +472,7 @@ GeminiDocument::~GeminiDocument()
*/
static QByteArray replace_quotes(QByteArray &line)
{
- if (!kristall::options.fancy_quotes)
+ if (!kristall::globals().options.fancy_quotes)
return line;
int last_d = -1,
diff --git a/src/renderers/gophermaprenderer.cpp b/src/renderers/gophermaprenderer.cpp
index 02abebd..43017fa 100644
--- a/src/renderers/gophermaprenderer.cpp
+++ b/src/renderers/gophermaprenderer.cpp
@@ -27,7 +27,7 @@ std::unique_ptr<QTextDocument> GophermapRenderer::render(const QByteArray &input
external_link.setFont(themed_style.standard_font);
external_link.setForeground(QBrush(themed_style.external_link_color));
- bool emit_text_only = (kristall::options.gophermap_display == GenericSettings::PlainText);
+ bool emit_text_only = (kristall::globals().options.gophermap_display == GenericSettings::PlainText);
std::unique_ptr<QTextDocument> result = std::make_unique<QTextDocument>();
renderhelpers::setPageMargins(result.get(), themed_style.margin_h, themed_style.margin_v);
diff --git a/src/renderers/renderhelpers.cpp b/src/renderers/renderhelpers.cpp
index 5f9925b..442d18f 100644
--- a/src/renderers/renderhelpers.cpp
+++ b/src/renderers/renderhelpers.cpp
@@ -30,7 +30,7 @@ static void setColor(QTextCharFormat& format, unsigned char n, bool bg=false)
if (n < 16)
{
// The normal pre-defined typical 16 colors.
- color = QColor(kristall::document_style.ansi_colors[n]);
+ color = QColor(kristall::globals().document_style.ansi_colors[n]);
}
else if (n < 232)
{
diff --git a/src/widgets/browsertabbar.cpp b/src/widgets/browsertabbar.cpp
index 541ee96..4faaf67 100644
--- a/src/widgets/browsertabbar.cpp
+++ b/src/widgets/browsertabbar.cpp
@@ -13,7 +13,7 @@ BrowserTabBar::BrowserTabBar(QWidget *parent) :
new_tab_btn = new QPushButton("+", this);
new_tab_btn->setFixedSize(NEWTAB_BTN_SIZE, NEWTAB_BTN_SIZE);
connect(new_tab_btn, &QPushButton::clicked, this, &BrowserTabBar::on_newTabClicked);
- this->new_tab_btn->setVisible(kristall::options.enable_newtab_btn);
+ this->new_tab_btn->setVisible(kristall::globals().options.enable_newtab_btn);
}
void BrowserTabBar::mouseReleaseEvent(QMouseEvent *event)
@@ -27,7 +27,7 @@ void BrowserTabBar::mouseReleaseEvent(QMouseEvent *event)
void BrowserTabBar::moveNewTabButton()
{
- if (!kristall::options.enable_newtab_btn)
+ if (!kristall::globals().options.enable_newtab_btn)
{
return;
}
diff --git a/src/widgets/kristalltextbrowser.cpp b/src/widgets/kristalltextbrowser.cpp
index 67e7976..5f34c10 100644
--- a/src/widgets/kristalltextbrowser.cpp
+++ b/src/widgets/kristalltextbrowser.cpp
@@ -7,6 +7,7 @@
#include <QTouchDevice>
#include <QRegularExpression>
#include <QLineEdit>
+#include <QApplication>
const Qt::CursorShape KristallTextBrowser::NORMAL_CURSOR = Qt::IBeamCursor;
@@ -133,7 +134,7 @@ void KristallTextBrowser::betterCopy()
if (text.contains(REGEX_ONLY_QUOTES))
{
// Copy the original text.
- kristall::clipboard->setText(text);
+ qApp->clipboard()->setText(text);
return;
}
@@ -151,5 +152,5 @@ void KristallTextBrowser::betterCopy()
text.replace(QChar(0x2029), "\n");
#endif
- kristall::clipboard->setText(text);
+ qApp->clipboard()->setText(text);
}
diff --git a/src/widgets/searchbar.cpp b/src/widgets/searchbar.cpp
index d157912..24705f9 100644
--- a/src/widgets/searchbar.cpp
+++ b/src/widgets/searchbar.cpp
@@ -7,7 +7,7 @@
SearchBar::SearchBar(QWidget *parent) : QLineEdit(parent)
{
QCompleter *completer = new QCompleter(this);
- completer->setModel(&kristall::favourites);
+ completer->setModel(&kristall::globals().favourites);
completer->setCaseSensitivity(Qt::CaseInsensitive);
completer->setCompletionRole(Qt::DisplayRole);
this->setCompleter(completer);