1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 10:46:35 +01:00

[StatusBarIcons] Fixed crash when restoring session

All icons have now same parent SBI_Icon
This commit is contained in:
nowrep 2014-03-13 12:06:28 +01:00
parent d2528417d1
commit 9fda55d86d
9 changed files with 132 additions and 61 deletions

View File

@ -10,7 +10,8 @@ SOURCES += statusbariconsplugin.cpp \
sbi_proxywidget.cpp \
sbi_networkicondialog.cpp \
sbi_networkmanager.cpp \
sbi_settingsdialog.cpp
sbi_settingsdialog.cpp \
sbi_icon.cpp
HEADERS += statusbariconsplugin.h \
sbi_iconsmanager.h \
@ -21,7 +22,8 @@ HEADERS += statusbariconsplugin.h \
sbi_proxywidget.h \
sbi_networkicondialog.h \
sbi_networkmanager.h \
sbi_settingsdialog.h
sbi_settingsdialog.h \
sbi_icon.h
RESOURCES += statusbaricons.qrc

View File

@ -0,0 +1,59 @@
/* ============================================================
* StatusBarIcons - Extra icons in statusbar for QupZilla
* Copyright (C) 2014 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 "sbi_icon.h"
#include "browserwindow.h"
#include "tabbedwebview.h"
#include "webpage.h"
SBI_Icon::SBI_Icon(BrowserWindow* window, const QString &settingsPath)
: ClickableLabel(window)
, m_window(window)
, m_settingsFile(settingsPath + QLatin1String("extensions.ini"))
{
}
bool SBI_Icon::testCurrentPageWebAttribute(QWebSettings::WebAttribute attr) const
{
return currentPageSettings() && currentPageSettings()->testAttribute(attr);
}
void SBI_Icon::setCurrentPageWebAttribute(QWebSettings::WebAttribute attr, bool value)
{
if (currentPageSettings()) {
currentPageSettings()->setAttribute(attr, value);
}
}
QWebSettings* SBI_Icon::currentPageSettings() const
{
if (!m_window->weView()) {
return 0;
}
return m_window->weView()->page()->settings();
}
WebPage* SBI_Icon::currentPage() const
{
if (!m_window->weView()) {
return 0;
}
return m_window->weView()->page();
}

View File

@ -0,0 +1,46 @@
/* ============================================================
* StatusBarIcons - Extra icons in statusbar for QupZilla
* Copyright (C) 2014 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/>.
* ============================================================ */
#ifndef SBI_ICON_H
#define SBI_ICON_H
#include <QWebSettings>
#include "clickablelabel.h"
class BrowserWindow;
class WebPage;
class SBI_Icon : public ClickableLabel
{
Q_OBJECT
public:
explicit SBI_Icon(BrowserWindow* window, const QString &settingsPath = QString());
protected:
bool testCurrentPageWebAttribute(QWebSettings::WebAttribute attr) const;
void setCurrentPageWebAttribute(QWebSettings::WebAttribute attr, bool value);
QWebSettings* currentPageSettings() const;
WebPage* currentPage() const;
BrowserWindow* m_window;
QString m_settingsFile;
};
#endif // SBI_ICON_H

View File

@ -22,14 +22,11 @@
#include "webpage.h"
#include <QGraphicsColorizeEffect>
#include <QWebSettings>
#include <QSettings>
#include <QMenu>
SBI_ImagesIcon::SBI_ImagesIcon(BrowserWindow* window, const QString &settingsPath)
: ClickableLabel(window)
, m_window(window)
, m_settingsFile(settingsPath + "extensions.ini")
: SBI_Icon(window, settingsPath)
{
setCursor(Qt::PointingHandCursor);
setToolTip(tr("Modify images loading settings per-site and globally"));
@ -58,7 +55,7 @@ void SBI_ImagesIcon::showMenu(const QPoint &point)
QMenu menu;
menu.addAction(m_icon, tr("Current page settings"))->setFont(boldFont);
if (currentPageSettings()->testAttribute(QWebSettings::AutoLoadImages)) {
if (testCurrentPageWebAttribute(QWebSettings::AutoLoadImages)) {
menu.addAction(tr("Disable loading images (temporarily)"), this, SLOT(toggleLoadingImages()));
}
else {
@ -78,8 +75,8 @@ void SBI_ImagesIcon::showMenu(const QPoint &point)
void SBI_ImagesIcon::toggleLoadingImages()
{
bool current = currentPageSettings()->testAttribute(QWebSettings::AutoLoadImages);
currentPageSettings()->setAttribute(QWebSettings::AutoLoadImages, !current);
bool current = testCurrentPageWebAttribute(QWebSettings::AutoLoadImages);
setCurrentPageWebAttribute(QWebSettings::AutoLoadImages, !current);
// We should reload page on disabling images
if (current) {
@ -108,14 +105,9 @@ void SBI_ImagesIcon::setGlobalLoadingImages(bool enable)
}
}
QWebSettings* SBI_ImagesIcon::currentPageSettings()
{
return m_window->weView()->page()->settings();
}
void SBI_ImagesIcon::updateIcon()
{
if (currentPageSettings()->testAttribute(QWebSettings::AutoLoadImages)) {
if (testCurrentPageWebAttribute(QWebSettings::AutoLoadImages)) {
setGraphicsEffect(0);
}
else {

View File

@ -20,13 +20,9 @@
#include <QIcon>
#include "clickablelabel.h"
#include "sbi_icon.h"
class QWebSettings;
class BrowserWindow;
class SBI_ImagesIcon : public ClickableLabel
class SBI_ImagesIcon : public SBI_Icon
{
Q_OBJECT
@ -41,11 +37,6 @@ private slots:
void setGlobalLoadingImages(bool enable);
private:
QWebSettings* currentPageSettings();
BrowserWindow* m_window;
QString m_settingsFile;
QIcon m_icon;
bool m_loadingImages;
};

View File

@ -27,8 +27,7 @@
#include <QMenu>
SBI_JavaScriptIcon::SBI_JavaScriptIcon(BrowserWindow* window)
: ClickableLabel(window)
, m_window(window)
: SBI_Icon(window)
{
setCursor(Qt::PointingHandCursor);
setToolTip(tr("Modify JavaScript settings per-site and globally"));
@ -48,7 +47,7 @@ void SBI_JavaScriptIcon::showMenu(const QPoint &point)
QMenu menu;
menu.addAction(m_icon, tr("Current page settings"))->setFont(boldFont);
if (currentPageSettings()->testAttribute(QWebSettings::JavascriptEnabled)) {
if (testCurrentPageWebAttribute(QWebSettings::JavascriptEnabled)) {
menu.addAction(tr("Disable JavaScript (temporarily)"), this, SLOT(toggleJavaScript()));
}
else {
@ -56,7 +55,7 @@ void SBI_JavaScriptIcon::showMenu(const QPoint &point)
}
// JavaScript needs to be always enabled for qupzilla: sites
if (currentPage()->url().scheme() == QLatin1String("qupzilla")) {
if (currentPage() && currentPage()->url().scheme() == QLatin1String("qupzilla")) {
menu.actions().at(1)->setEnabled(false);
}
@ -68,7 +67,7 @@ void SBI_JavaScriptIcon::showMenu(const QPoint &point)
void SBI_JavaScriptIcon::updateIcon()
{
if (currentPageSettings()->testAttribute(QWebSettings::JavascriptEnabled)) {
if (testCurrentPageWebAttribute(QWebSettings::JavascriptEnabled)) {
setGraphicsEffect(0);
}
else {
@ -80,7 +79,12 @@ void SBI_JavaScriptIcon::updateIcon()
void SBI_JavaScriptIcon::toggleJavaScript()
{
bool current = currentPageSettings()->testAttribute(QWebSettings::JavascriptEnabled);
if (!currentPage()) {
return;
}
bool current = testCurrentPageWebAttribute(QWebSettings::JavascriptEnabled);
currentPage()->setJavaScriptEnabled(!current);
m_window->weView()->reload();
@ -93,13 +97,3 @@ void SBI_JavaScriptIcon::openJavaScriptSettings()
JsOptions dialog(m_window);
dialog.exec();
}
WebPage* SBI_JavaScriptIcon::currentPage()
{
return m_window->weView()->page();
}
QWebSettings* SBI_JavaScriptIcon::currentPageSettings()
{
return currentPage()->settings();
}

View File

@ -20,14 +20,9 @@
#include <QIcon>
#include "clickablelabel.h"
#include "sbi_icon.h"
class QWebSettings;
class BrowserWindow;
class WebPage;
class SBI_JavaScriptIcon : public ClickableLabel
class SBI_JavaScriptIcon : public SBI_Icon
{
Q_OBJECT
@ -42,10 +37,6 @@ private slots:
void openJavaScriptSettings();
private:
WebPage* currentPage();
QWebSettings* currentPageSettings();
BrowserWindow* m_window;
QIcon m_icon;
};

View File

@ -29,8 +29,7 @@
#include <QNetworkConfigurationManager>
SBI_NetworkIcon::SBI_NetworkIcon(BrowserWindow* window)
: ClickableLabel(window)
, m_window(window)
: SBI_Icon(window)
, m_networkConfiguration(new QNetworkConfigurationManager(this))
{
setCursor(Qt::PointingHandCursor);
@ -140,5 +139,5 @@ void SBI_NetworkIcon::enterEvent(QEvent* event)
{
updateToolTip();
ClickableLabel::enterEvent(event);
SBI_Icon::enterEvent(event);
}

View File

@ -20,13 +20,11 @@
#include <QNetworkAccessManager>
#include "clickablelabel.h"
#include "sbi_icon.h"
class QNetworkConfigurationManager;
class BrowserWindow;
class SBI_NetworkIcon : public ClickableLabel
class SBI_NetworkIcon : public SBI_Icon
{
Q_OBJECT
@ -44,7 +42,6 @@ private:
void updateToolTip();
void enterEvent(QEvent* event);
BrowserWindow* m_window;
QNetworkConfigurationManager* m_networkConfiguration;
};