diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -143,6 +143,7 @@ other/browsinglibrary.cpp other/clearprivatedata.cpp other/checkboxdialog.cpp + other/defaultzoommanager.cpp other/iconchooser.cpp other/licenseviewer.cpp other/qzsettings.cpp @@ -160,6 +161,7 @@ popupwindow/popupwindow.cpp preferences/acceptlanguage.cpp preferences/autofillmanager.cpp + preferences/defaultzoomdialog.cpp preferences/jsoptions.cpp preferences/pluginlistdelegate.cpp preferences/pluginsmanager.cpp @@ -265,6 +267,7 @@ preferences/acceptlanguage.ui preferences/addacceptlanguage.ui preferences/autofillmanager.ui + preferences/defaultzoomdialog.ui preferences/jsoptions.ui preferences/pluginslist.ui preferences/preferences.ui diff --git a/src/lib/app/mainapplication.h b/src/lib/app/mainapplication.h --- a/src/lib/app/mainapplication.h +++ b/src/lib/app/mainapplication.h @@ -52,6 +52,7 @@ class ProxyStyle; class SessionManager; class ClosedWindowsManager; +class DefaultZoomManager; class FALKON_EXPORT MainApplication : public QtSingleApplication { @@ -104,6 +105,7 @@ SessionManager* sessionManager(); DownloadManager* downloadManager(); UserAgentManager* userAgentManager(); + DefaultZoomManager *defaultZoomManager(); SearchEnginesManager* searchEnginesManager(); ClosedWindowsManager* closedWindowsManager(); HTML5PermissionsManager* html5PermissionsManager(); @@ -178,6 +180,7 @@ SessionManager* m_sessionManager; DownloadManager* m_downloadManager; UserAgentManager* m_userAgentManager; + DefaultZoomManager *m_defaultZoomManager; SearchEnginesManager* m_searchEnginesManager; ClosedWindowsManager* m_closedWindowsManager; HTML5PermissionsManager* m_html5PermissionsManager; diff --git a/src/lib/app/mainapplication.cpp b/src/lib/app/mainapplication.cpp --- a/src/lib/app/mainapplication.cpp +++ b/src/lib/app/mainapplication.cpp @@ -47,6 +47,7 @@ #include "sessionmanager.h" #include "closedwindowsmanager.h" #include "../config.h" +#include "defaultzoommanager.h" #include #include @@ -97,6 +98,7 @@ , m_sessionManager(0) , m_downloadManager(0) , m_userAgentManager(0) + , m_defaultZoomManager(0) , m_searchEnginesManager(0) , m_closedWindowsManager(0) , m_html5PermissionsManager(0) @@ -572,6 +574,14 @@ return m_userAgentManager; } +DefaultZoomManager *MainApplication::defaultZoomManager() +{ + if (!m_defaultZoomManager) { + m_defaultZoomManager = new DefaultZoomManager(this); + } + return m_defaultZoomManager; +} + SearchEnginesManager* MainApplication::searchEnginesManager() { if (!m_searchEnginesManager) { diff --git a/src/lib/navigation/locationbarpopup.cpp b/src/lib/navigation/locationbarpopup.cpp --- a/src/lib/navigation/locationbarpopup.cpp +++ b/src/lib/navigation/locationbarpopup.cpp @@ -37,9 +37,11 @@ parent = parent->parentWidget(); - // Calculate sizes before showing - layout()->invalidate(); - layout()->activate(); + if (layout()) { + // Calculate sizes before showing + layout()->invalidate(); + layout()->activate(); + } QPoint p = parent->mapToGlobal(QPoint(0, 0)); diff --git a/src/lib/other/defaultzoommanager.h b/src/lib/other/defaultzoommanager.h new file mode 100644 --- /dev/null +++ b/src/lib/other/defaultzoommanager.h @@ -0,0 +1,54 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#ifndef DEFAULTZOOMMANAGER_H +#define DEFAULTZOOMMANAGER_H + +#include +#include + +#include "qzcommon.h" + +class QUrl; + +class FALKON_EXPORT DefaultZoomManager : QObject +{ + Q_OBJECT + +public: + explicit DefaultZoomManager(QObject *parent = 0); + + void loadSettings(); + + int globalZoomLevel() const; + int defaultZoomLevel() const; + + bool usePerDomainZoomLevels() const; + QHash perDomainZoomLevelsList() const; + + int getZoomLevelForDomain(const QString &domain, const int &curentZoomLevel) const; + void addDomain(const QString &domain, const int &zoomLevel); + +private: + int m_globaZoomLevel; + int m_defaultZoomLevel; + + bool m_usePerDomainZoomLevel; + QHash m_zoomLevelsList; +}; + +#endif // DEFAULTZOOMMANAGER_H diff --git a/src/lib/other/defaultzoommanager.cpp b/src/lib/other/defaultzoommanager.cpp new file mode 100644 --- /dev/null +++ b/src/lib/other/defaultzoommanager.cpp @@ -0,0 +1,114 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "defaultzoommanager.h" +#include "browserwindow.h" +#include "qztools.h" +#include "settings.h" +#include "webview.h" + +DefaultZoomManager::DefaultZoomManager(QObject *parent) + : QObject(parent) + , m_usePerDomainZoomLevel(false) +{ + m_defaultZoomLevel = WebView::zoomLevels().indexOf(100); + loadSettings(); +} + +void DefaultZoomManager::loadSettings() +{ + Settings settings; + settings.beginGroup("Web-Browser-Settings"); + m_globaZoomLevel = settings.value("DefaultZoomLevel", m_defaultZoomLevel).toInt(); + settings.endGroup(); + + settings.beginGroup("Default-Zoom-Settings"); + m_usePerDomainZoomLevel = settings.value("UsePerDomainZoomLevel", false).toBool(); + QStringList domainList = settings.value("DomainList", QStringList()).toStringList(); + QList zoomLevelsList = settings.value("ZoomLevelsList").value >(); + settings.endGroup(); + + m_usePerDomainZoomLevel = (m_usePerDomainZoomLevel && domainList.count() == zoomLevelsList.count()); + + if (m_usePerDomainZoomLevel) { + for (int i = 0; i < domainList.count(); ++i) { + m_zoomLevelsList[domainList.at(i)] = zoomLevelsList.at(i); + } + } +} + +int DefaultZoomManager::globalZoomLevel() const +{ + return m_globaZoomLevel; +} + +int DefaultZoomManager::defaultZoomLevel() const +{ + return m_defaultZoomLevel; +} + +bool DefaultZoomManager::usePerDomainZoomLevels() const +{ + return m_usePerDomainZoomLevel; +} + +QHash DefaultZoomManager::perDomainZoomLevelsList() const +{ + return m_zoomLevelsList; +} + +int DefaultZoomManager::getZoomLevelForDomain(const QString &domain, const int ¤tZoomLevel) const +{ + int zoomLevel = currentZoomLevel; + if (m_usePerDomainZoomLevel) { + if (m_zoomLevelsList.contains(domain)) { + zoomLevel = m_zoomLevelsList[domain]; + } + } + return zoomLevel; +} + +void DefaultZoomManager::addDomain(const QString &domain, const int &zoomLevel) +{ + if (domain.isNull()) { + return; + } + Settings settings; + settings.beginGroup("Default-Zoom-Settings"); + QStringList domainList = settings.value("DomainList", QStringList()).toStringList(); + QList zoomLevelsList = settings.value("ZoomLevelsList").value >(); + if (domainList.contains(domain)) { + int index = domainList.indexOf(domain); + zoomLevelsList.removeAt(index); + if (zoomLevel == m_defaultZoomLevel) { + domainList.removeAt(index); + } else { + zoomLevelsList.insert(index, zoomLevel); + } + } else { + if (zoomLevel == m_defaultZoomLevel) { + settings.endGroup(); + return; + } + domainList.append(domain); + zoomLevelsList.append(zoomLevel); + } + settings.setValue("UsePerDomainZoomLevel", true); + settings.setValue("DomainList", domainList); + settings.setValue("ZoomLevelsList", QVariant::fromValue(zoomLevelsList)); + settings.endGroup(); +} diff --git a/src/lib/preferences/defaultzoomdialog.h b/src/lib/preferences/defaultzoomdialog.h new file mode 100644 --- /dev/null +++ b/src/lib/preferences/defaultzoomdialog.h @@ -0,0 +1,56 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#ifndef DEFAULTZOOMDIALOG_H +#define DEFAULTZOOMDIALOG_H + +#include + +#include "qzcommon.h" + +class DefaultZoomManager; + +namespace Ui +{ +class DefaultZoomDialog; +} + +class FALKON_EXPORT DefaultZoomDialog : public QDialog +{ + Q_OBJECT + +public: + explicit DefaultZoomDialog(QWidget *parent = 0); + ~DefaultZoomDialog(); + +private Q_SLOTS: + void addSite(); + void removeSite(); + void editSite(); + + void accept(); + + void enablePerSiteFrame(bool enable); + +private: + bool showEditDialog(const QString &title, QString *rSite, int &zoomLevel); + + Ui::DefaultZoomDialog *ui; + DefaultZoomManager *m_manager; +}; + +#endif // DEFAULTZOOMDIALOG_H diff --git a/src/lib/preferences/defaultzoomdialog.cpp b/src/lib/preferences/defaultzoomdialog.cpp new file mode 100644 --- /dev/null +++ b/src/lib/preferences/defaultzoomdialog.cpp @@ -0,0 +1,231 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "defaultzoomdialog.h" +#include "ui_defaultzoomdialog.h" +#include "defaultzoommanager.h" +#include "qztools.h" +#include "mainapplication.h" +#include "settings.h" +#include "networkmanager.h" +#include "webview.h" + +#include +#include +#include +#include + +DefaultZoomDialog::DefaultZoomDialog(QWidget* parent) + : QDialog(parent) + , ui(new Ui::DefaultZoomDialog) + , m_manager(mApp->defaultZoomManager()) +{ + setAttribute(Qt::WA_DeleteOnClose); + m_manager->loadSettings(); + + ui->setupUi(this); + ui->defaultZoomLevel->setLayoutDirection(Qt::LeftToRight); + foreach (int level, WebView::zoomLevels()) { + ui->defaultZoomLevel->addItem(QString("%1%").arg(level)); + } + Settings settings; + settings.beginGroup("Web-Browser-Settings"); + ui->defaultZoomLevel->setCurrentIndex(settings.value("DefaultZoomLevel", m_manager->defaultZoomLevel()).toInt()); + settings.endGroup(); + ui->table->setLayoutDirection(Qt::LeftToRight); + ui->table->setColumnWidth(0, 200); + + ui->changePerSite->setChecked(m_manager->usePerDomainZoomLevels()); + + QHashIterator i(m_manager->perDomainZoomLevelsList()); + while (i.hasNext()) { + i.next(); + + QTableWidgetItem* siteItem = new QTableWidgetItem(i.key()); + int zoomLevel = i.value(); + int zoomValue = WebView::zoomLevels().at(zoomLevel); + QTableWidgetItem* zoomValueItem = new QTableWidgetItem(QString::number(zoomValue)); + + int row = ui->table->rowCount(); + + ui->table->insertRow(row); + ui->table->setItem(row, 0, siteItem); + ui->table->setItem(row, 1, zoomValueItem); + } + + ui->table->sortByColumn(-1); + + connect(ui->add, SIGNAL(clicked()), this, SLOT(addSite())); + connect(ui->remove, SIGNAL(clicked()), this, SLOT(removeSite())); + connect(ui->edit, SIGNAL(clicked()), this, SLOT(editSite())); + connect(ui->table, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(editSite())); + + connect(ui->changePerSite, SIGNAL(clicked(bool)), this, SLOT(enablePerSiteFrame(bool))); + + enablePerSiteFrame(ui->changePerSite->isChecked()); +} + +void DefaultZoomDialog::addSite() +{ + QString site; + Settings settings; + settings.beginGroup("Web-Browser-Settings"); + int zoomLevel = settings.value("DefaultZoomLevel", WebView::zoomLevels().indexOf(100)).toInt(); + settings.endGroup(); + + if (showEditDialog(tr("Add new site"), &site, zoomLevel)) { + QTableWidgetItem* siteItem = new QTableWidgetItem(site); + int zoomValue = WebView::zoomLevels().at(zoomLevel); + QTableWidgetItem* zoomValueItem = new QTableWidgetItem(QString::number(zoomValue)); + + int row = ui->table->rowCount(); + + ui->table->insertRow(row); + ui->table->setItem(row, 0, siteItem); + ui->table->setItem(row, 1, zoomValueItem); + } +} + +void DefaultZoomDialog::removeSite() +{ + int row = ui->table->currentRow(); + + QTableWidgetItem* siteItem = ui->table->item(row, 0); + QTableWidgetItem* zoomValueItem = ui->table->item(row, 1); + + if (siteItem && zoomValueItem) { + delete siteItem; + delete zoomValueItem; + + ui->table->removeRow(row); + } +} + +void DefaultZoomDialog::editSite() +{ + int row = ui->table->currentRow(); + + QTableWidgetItem* siteItem = ui->table->item(row, 0); + QTableWidgetItem* zoomValueItem = ui->table->item(row, 1); + + if (siteItem && zoomValueItem) { + QString site = siteItem->text(); + int zoomValue = zoomValueItem->text().toInt(); + int zoomLevel = WebView::zoomLevels().indexOf(zoomValue); + + if (showEditDialog(tr("Edit site"), &site, zoomLevel)) { + siteItem->setText(site); + zoomValue = WebView::zoomLevels().at(zoomLevel); + zoomValueItem->setText(QString::number(zoomValue)); + } + } +} + +void DefaultZoomDialog::accept() +{ + int globalZoomLevel = ui->defaultZoomLevel->currentIndex(); + QStringList domainList; + QList zoomLevelsList; + + for (int i = 0; i < ui->table->rowCount(); ++i) { + QTableWidgetItem* siteItem = ui->table->item(i, 0); + QTableWidgetItem* zoomValueItem = ui->table->item(i, 1); + + if (!siteItem || !zoomValueItem) { + continue; + } + + QString domain = siteItem->text().trimmed(); + int zoomValue = zoomValueItem->text().toInt(); + int zoomLevel = WebView::zoomLevels().indexOf(zoomValue); + + if (domain.isEmpty()) { + continue; + } + + domainList.append(domain); + zoomLevelsList.append(zoomLevel); + } + + Settings settings; + settings.beginGroup("Web-Browser-Settings"); + settings.setValue("DefaultZoomLevel", globalZoomLevel); + settings.endGroup(); + + settings.beginGroup("Default-Zoom-Settings"); + settings.setValue("UsePerDomainZoomLevel", ui->changePerSite->isChecked()); + settings.setValue("DomainList", domainList); + settings.setValue("ZoomLevelsList", QVariant::fromValue(zoomLevelsList)); + settings.endGroup(); + + m_manager->loadSettings(); + close(); +} + +void DefaultZoomDialog::enablePerSiteFrame(bool enable) +{ + ui->perSiteFrame->setEnabled(enable); +} + +bool DefaultZoomDialog::showEditDialog(const QString &title, QString* rSite, int &zoomLevel) +{ + if (!rSite) { + return false; + } + + QDialog* dialog = new QDialog(this); + QFormLayout* layout = new QFormLayout(dialog); + QLineEdit* editSite = new QLineEdit(dialog); + QComboBox* editZoom = new QComboBox(dialog); + editZoom->setLayoutDirection(Qt::LeftToRight); + foreach (int level, WebView::zoomLevels()) { + editZoom->addItem(QString("%1%").arg(level)); + } + editZoom->setCurrentIndex(zoomLevel); + + QDialogButtonBox* box = new QDialogButtonBox(dialog); + box->addButton(QDialogButtonBox::Ok); + box->addButton(QDialogButtonBox::Cancel); + + connect(box, SIGNAL(rejected()), dialog, SLOT(reject())); + connect(box, SIGNAL(accepted()), dialog, SLOT(accept())); + + layout->addRow(new QLabel(tr("Site domain: ")), editSite); + layout->addRow(new QLabel(tr("Zoom Level: ")), editZoom); + layout->addRow(box); + + editSite->setText(*rSite); + + editSite->setFocus(); + + dialog->setWindowTitle(title); + dialog->setMinimumSize(550, 100); + dialog->setMaximumWidth(550); + + if (dialog->exec()) { + *rSite = editSite->text(); + zoomLevel = editZoom->currentIndex(); + return !rSite->isEmpty(); + } + + return false; +} + +DefaultZoomDialog::~DefaultZoomDialog() +{ + delete ui; +} diff --git a/src/lib/preferences/defaultzoomdialog.cpp.orig b/src/lib/preferences/defaultzoomdialog.cpp.orig new file mode 100644 --- /dev/null +++ b/src/lib/preferences/defaultzoomdialog.cpp.orig @@ -0,0 +1,231 @@ +/* ============================================================ +* Falkon - Qt web browser +* Copyright (C) 2018 Anmol Gautam +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* ============================================================ */ +#include "defaultzoomdialog.h" +#include "ui_defaultzoomdialog.h" +#include "defaultzoommanager.h" +#include "qztools.h" +#include "mainapplication.h" +#include "settings.h" +#include "networkmanager.h" +#include "webview.h" + +#include +#include +#include +#include + +DefaultZoomDialog::DefaultZoomDialog(QWidget* parent) + : QDialog(parent) + , ui(new Ui::DefaultZoomDialog) + , m_manager(mApp->defaultZoomManager()) +{ + setAttribute(Qt::WA_DeleteOnClose); + m_manager->loadSettings(); + + ui->setupUi(this); + ui->defaultZoomLevel->setLayoutDirection(Qt::LeftToRight); + foreach (int level, WebView::zoomLevels()) { + ui->defaultZoomLevel->addItem(QString("%1%").arg(level)); + } + Settings settings; + settings.beginGroup("Web-Browser-Settings"); + ui->defaultZoomLevel->setCurrentIndex(settings.value("DefaultZoomLevel", m_manager->defaultZoomLevel()).toInt()); + settings.endGroup(); + ui->table->setLayoutDirection(Qt::LeftToRight); + ui->table->setColumnWidth(0,200); + + ui->changePerSite->setChecked(m_manager->usePerDomainZoomLevels()); + + QHashIterator i(m_manager->perDomainZoomLevelsList()); + while (i.hasNext()) { + i.next(); + + QTableWidgetItem* siteItem = new QTableWidgetItem(i.key()); + int zoomLevel = i.value(); + int zoomValue = WebView::zoomLevels().at(zoomLevel); + QTableWidgetItem* zoomValueItem = new QTableWidgetItem(QString::number(zoomValue)); + + int row = ui->table->rowCount(); + + ui->table->insertRow(row); + ui->table->setItem(row, 0, siteItem); + ui->table->setItem(row, 1, zoomValueItem); + } + + ui->table->sortByColumn(-1); + + connect(ui->add, SIGNAL(clicked()), this, SLOT(addSite())); + connect(ui->remove, SIGNAL(clicked()), this, SLOT(removeSite())); + connect(ui->edit, SIGNAL(clicked()), this, SLOT(editSite())); + connect(ui->table, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(editSite())); + + connect(ui->changePerSite, SIGNAL(clicked(bool)), this, SLOT(enablePerSiteFrame(bool))); + + enablePerSiteFrame(ui->changePerSite->isChecked()); +} + +void DefaultZoomDialog::addSite() +{ + QString site; + Settings settings; + settings.beginGroup("Web-Browser-Settings"); + int zoomLevel = settings.value("DefaultZoomLevel", WebView::zoomLevels().indexOf(100)).toInt(); + settings.endGroup(); + + if (showEditDialog(tr("Add new site"), &site, zoomLevel)) { + QTableWidgetItem* siteItem = new QTableWidgetItem(site); + int zoomValue = WebView::zoomLevels().at(zoomLevel); + QTableWidgetItem* zoomValueItem = new QTableWidgetItem(QString::number(zoomValue)); + + int row = ui->table->rowCount(); + + ui->table->insertRow(row); + ui->table->setItem(row, 0, siteItem); + ui->table->setItem(row, 1, zoomValueItem); + } +} + +void DefaultZoomDialog::removeSite() +{ + int row = ui->table->currentRow(); + + QTableWidgetItem* siteItem = ui->table->item(row, 0); + QTableWidgetItem* zoomValueItem = ui->table->item(row, 1); + + if (siteItem && zoomValueItem) { + delete siteItem; + delete zoomValueItem; + + ui->table->removeRow(row); + } +} + +void DefaultZoomDialog::editSite() +{ + int row = ui->table->currentRow(); + + QTableWidgetItem* siteItem = ui->table->item(row, 0); + QTableWidgetItem* zoomValueItem = ui->table->item(row, 1); + + if (siteItem && zoomValueItem) { + QString site = siteItem->text(); + int zoomValue = zoomValueItem->text().toInt(); + int zoomLevel = WebView::zoomLevels().indexOf(zoomValue); + + if (showEditDialog(tr("Edit site"), &site, zoomLevel)) { + siteItem->setText(site); + zoomValue = WebView::zoomLevels().at(zoomLevel); + zoomValueItem->setText(QString::number(zoomValue)); + } + } +} + +void DefaultZoomDialog::accept() +{ + int globalZoomLevel = ui->defaultZoomLevel->currentIndex(); + QStringList domainList; + QList zoomLevelsList; + + for (int i = 0; i < ui->table->rowCount(); ++i) { + QTableWidgetItem* siteItem = ui->table->item(i, 0); + QTableWidgetItem* zoomValueItem = ui->table->item(i, 1); + + if (!siteItem || !zoomValueItem) { + continue; + } + + QString domain = siteItem->text().trimmed(); + int zoomValue = zoomValueItem->text().toInt(); + int zoomLevel = WebView::zoomLevels().indexOf(zoomValue); + + if (domain.isEmpty()) { + continue; + } + + domainList.append(domain); + zoomLevelsList.append(zoomLevel); + } + + Settings settings; + settings.beginGroup("Web-Browser-Settings"); + settings.setValue("DefaultZoomLevel", globalZoomLevel); + settings.endGroup(); + + settings.beginGroup("Default-Zoom-Settings"); + settings.setValue("UsePerDomainZoomLevel", ui->changePerSite->isChecked()); + settings.setValue("DomainList", domainList); + settings.setValue("ZoomLevelsList", QVariant::fromValue(zoomLevelsList)); + settings.endGroup(); + + m_manager->loadSettings(); + close(); +} + +void DefaultZoomDialog::enablePerSiteFrame(bool enable) +{ + ui->perSiteFrame->setEnabled(enable); +} + +bool DefaultZoomDialog::showEditDialog(const QString &title, QString* rSite, int &zoomLevel) +{ + if (!rSite) { + return false; + } + + QDialog* dialog = new QDialog(this); + QFormLayout* layout = new QFormLayout(dialog); + QLineEdit* editSite = new QLineEdit(dialog); + QComboBox* editZoom = new QComboBox(dialog); + editZoom->setLayoutDirection(Qt::LeftToRight); + foreach (int level, WebView::zoomLevels()) { + editZoom->addItem(QString("%1%").arg(level)); + } + editZoom->setCurrentIndex(zoomLevel); + + QDialogButtonBox* box = new QDialogButtonBox(dialog); + box->addButton(QDialogButtonBox::Ok); + box->addButton(QDialogButtonBox::Cancel); + + connect(box, SIGNAL(rejected()), dialog, SLOT(reject())); + connect(box, SIGNAL(accepted()), dialog, SLOT(accept())); + + layout->addRow(new QLabel(tr("Site domain: ")), editSite); + layout->addRow(new QLabel(tr("Zoom Level: ")), editZoom); + layout->addRow(box); + + editSite->setText(*rSite); + + editSite->setFocus(); + + dialog->setWindowTitle(title); + dialog->setMinimumSize(550, 100); + dialog->setMaximumWidth(550); + + if (dialog->exec()) { + *rSite = editSite->text(); + zoomLevel = editZoom->currentIndex(); + return !rSite->isEmpty(); + } + + return false; +} + +DefaultZoomDialog::~DefaultZoomDialog() +{ + delete ui; +} diff --git a/src/lib/preferences/defaultzoomdialog.ui b/src/lib/preferences/defaultzoomdialog.ui new file mode 100644 --- /dev/null +++ b/src/lib/preferences/defaultzoomdialog.ui @@ -0,0 +1,196 @@ + + + DefaultZoomDialog + + + + 0 + 0 + 504 + 377 + + + + Default Zoom Manager + + + + + + + + Default Zoom on pages + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + + + + + Use different zoom levels for specified sites + + + + + + + + 4 + + + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + true + + + true + + + false + + + 25 + + + + Site + + + + + Zoom level + + + + + + + + + + Add + + + + + + + Remove + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Edit + + + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + DefaultZoomDialog + accept() + + + 251 + 355 + + + 251 + 188 + + + + + buttonBox + rejected() + DefaultZoomDialog + reject() + + + 251 + 355 + + + 251 + 188 + + + + + diff --git a/src/lib/preferences/preferences.h b/src/lib/preferences/preferences.h --- a/src/lib/preferences/preferences.h +++ b/src/lib/preferences/preferences.h @@ -64,6 +64,7 @@ void openUserAgentManager(); void openJsOptions(); void openSearchEnginesManager(); + void openDefaultZoomManager(); void searchFromAddressBarChanged(bool state); void saveHistoryChanged(bool state); diff --git a/src/lib/preferences/preferences.cpp b/src/lib/preferences/preferences.cpp --- a/src/lib/preferences/preferences.cpp +++ b/src/lib/preferences/preferences.cpp @@ -47,6 +47,7 @@ #include "searchenginesdialog.h" #include "webscrollbarmanager.h" #include "../config.h" +#include "defaultzoomdialog.h" #include #include @@ -288,10 +289,6 @@ ui->disableVideoAutoPlay->setChecked(settings.value("DisableVideoAutoPlay", false).toBool()); ui->webRTCPublicIpOnly->setChecked(settings.value("WebRTCPublicIpOnly", true).toBool()); - foreach (int level, WebView::zoomLevels()) { - ui->defaultZoomLevel->addItem(QString("%1%").arg(level)); - } - ui->defaultZoomLevel->setCurrentIndex(settings.value("DefaultZoomLevel", WebView::zoomLevels().indexOf(100)).toInt()); ui->closeAppWithCtrlQ->setChecked(settings.value("closeAppWithCtrlQ", true).toBool()); //Cache @@ -504,6 +501,7 @@ connect(ui->uaManager, SIGNAL(clicked()), this, SLOT(openUserAgentManager())); connect(ui->jsOptionsButton, SIGNAL(clicked()), this, SLOT(openJsOptions())); connect(ui->searchEngines, SIGNAL(clicked()), this, SLOT(openSearchEnginesManager())); + connect(ui->defaultZoomManager, SIGNAL(clicked()), this, SLOT(openDefaultZoomManager())); connect(ui->listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(showStackedPage(QListWidgetItem*))); ui->listWidget->setItemSelected(ui->listWidget->itemAt(5, 5), true); @@ -933,7 +931,6 @@ settings.setValue("DoNotTrack", ui->doNotTrack->isChecked()); settings.setValue("CheckUpdates", ui->checkUpdates->isChecked()); settings.setValue("LoadTabsOnActivation", ui->dontLoadTabsUntilSelected->isChecked()); - settings.setValue("DefaultZoomLevel", ui->defaultZoomLevel->currentIndex()); settings.setValue("XSSAuditing", ui->xssAuditing->isChecked()); settings.setValue("PrintElementBackground", ui->printEBackground->isChecked()); settings.setValue("closeAppWithCtrlQ", ui->closeAppWithCtrlQ->isChecked()); @@ -1069,3 +1066,9 @@ setProgressBarColorIcon(newColor); } } + +void Preferences::openDefaultZoomManager() +{ + DefaultZoomDialog *dialog = new DefaultZoomDialog(this); + dialog->open(); +} diff --git a/src/lib/preferences/preferences.ui b/src/lib/preferences/preferences.ui --- a/src/lib/preferences/preferences.ui +++ b/src/lib/preferences/preferences.ui @@ -145,8 +145,8 @@ 0 0 - 582 - 534 + 596 + 464 @@ -168,7 +168,7 @@ Qt::NoFocus - 0 + 3 @@ -1119,12 +1119,16 @@ - Default zoom on pages: + Manage default zoom on pages: - + + + Default Zoom Manager + + @@ -2393,8 +2397,8 @@ 0 0 - 96 - 31 + 98 + 32 diff --git a/src/lib/webengine/webview.cpp b/src/lib/webengine/webview.cpp --- a/src/lib/webengine/webview.cpp +++ b/src/lib/webengine/webview.cpp @@ -35,6 +35,7 @@ #include "scripts.h" #include "webhittestresult.h" #include "webscrollbarmanager.h" +#include "defaultzoommanager.h" #include @@ -307,7 +308,7 @@ void WebView::applyZoom() { setZoomFactor(qreal(zoomLevels().at(m_currentZoomLevel)) / 100.0); - + mApp->defaultZoomManager()->addDomain(url().host(), zoomLevel()); emit zoomLevelChanged(m_currentZoomLevel); } @@ -441,7 +442,8 @@ m_progress = progress; } - // QtWebEngine sometimes forgets applied zoom factor + m_currentZoomLevel = mApp->defaultZoomManager()->getZoomLevelForDomain(url().host(), m_currentZoomLevel); + if (!qFuzzyCompare(zoomFactor(), zoomLevels().at(m_currentZoomLevel) / 100.0)) { applyZoom(); } diff --git a/src/main/main.cpp b/src/main/main.cpp --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -30,6 +30,7 @@ #include #include #include +#include void falkon_signal_handler(int s) { @@ -121,6 +122,8 @@ } #endif +Q_DECLARE_METATYPE(QList) + int main(int argc, char* argv[]) { QT_REQUIRE_VERSION(argc, argv, "5.8.0"); @@ -145,6 +148,8 @@ argv = args; } + qRegisterMetaTypeStreamOperators >("QList"); + MainApplication app(argc, argv); if (app.isClosing())