1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-23 20:26:34 +01:00
falkonOfficial/src/lib/tools/html5permissions/html5permissionsdialog.cpp
nowrep eb583d429b New dialog in preferences: HTML5 Permissions
Show all sites that will have permanent permissions (be always
blocked) to show desktop notifications / use geolocation.
2013-01-28 18:20:36 +01:00

144 lines
4.5 KiB
C++

/* ============================================================
* QupZilla - WebKit based browser
* Copyright (C) 2013 David Rosca <nowrep@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
* ============================================================ */
#include "html5permissionsdialog.h"
#include "ui_html5permissionsdialog.h"
#include "settings.h"
#include "mainapplication.h"
#include "html5permissionsmanager.h"
HTML5PermissionsDialog::HTML5PermissionsDialog(QWidget* parent) :
QDialog(parent),
ui(new Ui::HTML5PermissionsDialog)
{
ui->setupUi(this);
loadSettings();
foreach(const QString & site, m_notificationsGranted) {
QTreeWidgetItem* item = new QTreeWidgetItem(ui->notifTree);
item->setText(0, site);
item->setText(1, tr("Allow"));
item->setData(0, Qt::UserRole + 10, Allow);
ui->notifTree->addTopLevelItem(item);
}
foreach(const QString & site, m_notificationsDenied) {
QTreeWidgetItem* item = new QTreeWidgetItem(ui->notifTree);
item->setText(0, site);
item->setText(1, tr("Deny"));
item->setData(0, Qt::UserRole + 10, Deny);
ui->notifTree->addTopLevelItem(item);
}
foreach(const QString & site, m_geolocationGranted) {
QTreeWidgetItem* item = new QTreeWidgetItem(ui->geoTree);
item->setText(0, site);
item->setText(1, tr("Allow"));
item->setData(0, Qt::UserRole + 10, Allow);
ui->geoTree->addTopLevelItem(item);
}
foreach(const QString & site, m_geolocationDenied) {
QTreeWidgetItem* item = new QTreeWidgetItem(ui->geoTree);
item->setText(0, site);
item->setText(1, tr("Deny"));
item->setData(0, Qt::UserRole + 10, Deny);
ui->geoTree->addTopLevelItem(item);
}
ui->notifTree->header()->resizeSection(0, 220);
ui->geoTree->header()->resizeSection(0, 220);
connect(ui->notifRemove, SIGNAL(clicked()), this, SLOT(removeNotifEntry()));
connect(ui->geoRemove, SIGNAL(clicked()), this, SLOT(removeGeoEntry()));
connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(saveSettings()));
}
void HTML5PermissionsDialog::removeNotifEntry()
{
QTreeWidgetItem* item = ui->notifTree->currentItem();
if (!item) {
return;
}
Role role = static_cast<Role>(item->data(0, Qt::UserRole + 10).toInt());
QString site = item->text(0);
if (role == Allow) {
m_notificationsGranted.removeOne(site);
}
else {
m_notificationsDenied.removeOne(site);
}
delete item;
}
void HTML5PermissionsDialog::removeGeoEntry()
{
QTreeWidgetItem* item = ui->geoTree->currentItem();
if (!item) {
return;
}
Role role = static_cast<Role>(item->data(0, Qt::UserRole + 10).toInt());
QString site = item->text(0);
if (role == Allow) {
m_geolocationGranted.removeOne(site);
}
else {
m_geolocationDenied.removeOne(site);
}
delete item;
}
void HTML5PermissionsDialog::loadSettings()
{
Settings settings;
settings.beginGroup("HTML5Notifications");
m_notificationsGranted = settings.value("NotificationsGranted", QStringList()).toStringList();
m_notificationsDenied = settings.value("NotificationsDenied", QStringList()).toStringList();
m_geolocationGranted = settings.value("GeolocationGranted", QStringList()).toStringList();
m_geolocationDenied = settings.value("GeolocationDenied", QStringList()).toStringList();
settings.endGroup();
}
void HTML5PermissionsDialog::saveSettings()
{
Settings settings;
settings.beginGroup("HTML5Notifications");
settings.setValue("NotificationsGranted", m_notificationsGranted);
settings.setValue("NotificationsDenied", m_notificationsDenied);
settings.setValue("GeolocationGranted", m_geolocationGranted);
settings.setValue("GeolocationDenied", m_geolocationDenied);
settings.endGroup();
mApp->html5permissions()->loadSettings();
}
HTML5PermissionsDialog::~HTML5PermissionsDialog()
{
delete ui;
}