File indexing completed on 2024-05-05 05:00:08

0001 /*
0002     "Misc Options" Tab for KFM configuration
0003 
0004     SPDX-FileCopyrightText: 1998 Sven Radej
0005     SPDX-FileCopyrightText: 1998 David Faure
0006     SPDX-FileCopyrightText: 2001 Waldo Bastian <bastian@kde.org>
0007 */
0008 
0009 // Own
0010 #include "htmlopts.h"
0011 
0012 // Qt
0013 #include <QGroupBox>
0014 #include <QFormLayout>
0015 #include <QVBoxLayout>
0016 #include <QPushButton>
0017 #include <QDBusMessage>
0018 #include <QDBusConnection>
0019 #include <QSpinBox>
0020 
0021 // KDE
0022 #include <KLocalizedString>
0023 #include <KConfigGroup>
0024 #include <KPluginFactory>
0025 #include <KSharedConfig>
0026 
0027 //-----------------------------------------------------------------------------
0028 
0029 KMiscHTMLOptions::KMiscHTMLOptions(QObject *parent, const KPluginMetaData &md, const QVariantList &)
0030     : KCModule(parent, md), m_groupname(QStringLiteral("HTML Settings"))
0031 {
0032     m_pConfig = KSharedConfig::openConfig(QStringLiteral("konquerorrc"), KConfig::NoGlobals);
0033     QVBoxLayout *lay = new QVBoxLayout(widget());
0034 
0035     QGroupBox *bgBookmarks = new QGroupBox(i18n("Boo&kmarks"));
0036     QVBoxLayout *laygroup1 = new QVBoxLayout;
0037 
0038     m_pAdvancedAddBookmarkCheckBox = new QCheckBox(i18n("Ask for name and folder when adding bookmarks"));
0039     laygroup1->addWidget(m_pAdvancedAddBookmarkCheckBox);
0040 
0041     m_pAdvancedAddBookmarkCheckBox->setToolTip(i18n("If this box is checked, Konqueror will allow you to"
0042             " change the title of the bookmark and choose a folder"
0043             " in which to store it when you add a new bookmark."));
0044     connect(m_pAdvancedAddBookmarkCheckBox, QOverload<bool>::of(&QAbstractButton::toggled), this, &KMiscHTMLOptions::markAsChanged);
0045     bgBookmarks->setLayout(laygroup1);
0046 
0047     m_pOnlyMarkedBookmarksCheckBox = new QCheckBox(i18n("Show only marked bookmarks in bookmark toolbar"), bgBookmarks);
0048     laygroup1->addWidget(m_pOnlyMarkedBookmarksCheckBox);
0049     m_pOnlyMarkedBookmarksCheckBox->setToolTip(i18n("If this box is checked, Konqueror will show only those"
0050             " bookmarks in the bookmark toolbar which you have marked to do so in the bookmark editor."));
0051     connect(m_pOnlyMarkedBookmarksCheckBox, QOverload<bool>::of(&QAbstractButton::toggled), this, &KMiscHTMLOptions::markAsChanged);
0052 
0053     lay->addWidget(bgBookmarks);
0054 
0055     // Form completion
0056     m_pFormCompletionCheckBox = new QGroupBox(i18n("Form Com&pletion"), widget());
0057     m_pFormCompletionCheckBox->setCheckable(true);
0058     QFormLayout *laygroup2 = new QFormLayout(m_pFormCompletionCheckBox);
0059 
0060     m_pFormCompletionCheckBox->setToolTip(i18n("If this box is checked, Konqueror will remember"
0061                                             " the data you enter in web forms and suggest it in similar fields for all forms."));
0062     connect(m_pFormCompletionCheckBox, &QGroupBox::toggled, this, &KMiscHTMLOptions::markAsChanged);
0063 
0064     m_pMaxFormCompletionItems = new QSpinBox(widget());
0065     m_pMaxFormCompletionItems->setRange(0, 100);
0066     laygroup2->addRow(i18n("&Maximum completions:"), m_pMaxFormCompletionItems);
0067     m_pMaxFormCompletionItems->setToolTip(
0068         i18n("Here you can select how many values Konqueror will remember for a form field."));
0069     connect(m_pMaxFormCompletionItems, QOverload<int>::of(&QSpinBox::valueChanged), this, &KMiscHTMLOptions::markAsChanged);
0070     connect(m_pFormCompletionCheckBox, &QGroupBox::toggled, m_pMaxFormCompletionItems, &QWidget::setEnabled);
0071 
0072     lay->addWidget(m_pFormCompletionCheckBox);
0073 
0074     // Mouse behavior
0075     QGroupBox *bgMouse = new QGroupBox(i18n("Mouse Beha&vior"));
0076     QVBoxLayout *laygroup3 = new QVBoxLayout(bgMouse);
0077 
0078     m_cbCursor = new QCheckBox(i18n("Chan&ge cursor over links"));
0079     laygroup3->addWidget(m_cbCursor);
0080     m_cbCursor->setToolTip(i18n("If this option is set, the shape of the cursor will change "
0081                                   "(usually to a hand) if it is moved over a hyperlink."));
0082     connect(m_cbCursor, QOverload<bool>::of(&QAbstractButton::toggled), this, &KMiscHTMLOptions::markAsChanged);
0083 
0084     m_pOpenMiddleClick = new QCheckBox(i18n("M&iddle click opens URL in selection"), bgMouse);
0085     laygroup3->addWidget(m_pOpenMiddleClick);
0086     m_pOpenMiddleClick->setToolTip(i18n(
0087                                          "If this box is checked, you can open the URL in the selection by middle clicking on a "
0088                                          "Konqueror view."));
0089     connect(m_pOpenMiddleClick, QOverload<bool>::of(&QAbstractButton::toggled), this, &KMiscHTMLOptions::markAsChanged);
0090 
0091     m_pBackRightClick = new QCheckBox(i18n("Right click goes &back in history"), bgMouse);
0092     laygroup3->addWidget(m_pBackRightClick);
0093     m_pBackRightClick->setToolTip(i18n(
0094                                         "If this box is checked, you can go back in history by right clicking on a Konqueror view. "
0095                                         "To access the context menu, press the right mouse button and move."));
0096     connect(m_pBackRightClick, QOverload<bool>::of(&QAbstractButton::toggled), this, &KMiscHTMLOptions::markAsChanged);
0097 
0098     lay->addWidget(bgMouse);
0099 
0100     // Misc
0101     QGroupBox *bgMisc = new QGroupBox(i18nc("@title:group", "Miscellaneous"));
0102     QFormLayout *fl = new QFormLayout(bgMisc);
0103 
0104     m_pAutoRedirectCheckBox = new QCheckBox(i18n("Allow automatic delayed &reloading/redirecting"), widget());
0105     m_pAutoRedirectCheckBox->setToolTip(i18n("Some web pages request an automatic reload or redirection after"
0106                                           " a certain period of time. By unchecking this box Konqueror will ignore these requests."));
0107     connect(m_pAutoRedirectCheckBox, QOverload<bool>::of(&QAbstractButton::toggled), this, &KMiscHTMLOptions::markAsChanged);
0108     fl->addRow(m_pAutoRedirectCheckBox);
0109 
0110     // Checkbox to enable/disable Access Key activation through the Ctrl key.
0111     m_pAccessKeys = new QCheckBox(i18n("Enable Access Ke&y activation with Ctrl key"), widget());
0112     m_pAccessKeys->setToolTip(i18n("Pressing the Ctrl key when viewing webpages activates Access Keys. Unchecking this box will disable this accessibility feature. (Konqueror needs to be restarted for this change to take effect.)"));
0113     connect(m_pAccessKeys, QOverload<bool>::of(&QAbstractButton::toggled), this, &KMiscHTMLOptions::markAsChanged);
0114     fl->addRow(m_pAccessKeys);
0115 
0116     m_pDoNotTrack = new QCheckBox(i18n("Send the DNT header to tell web sites you do not want to be tracked"), widget());
0117     m_pDoNotTrack->setToolTip(i18n("Check this box if you want to inform a web site that you do not want your web browsing habits tracked."));
0118     connect(m_pDoNotTrack, QOverload<bool>::of(&QAbstractButton::toggled), this, &KMiscHTMLOptions::markAsChanged);
0119     fl->addRow(m_pDoNotTrack);
0120 
0121     m_pOfferToSaveWebsitePassword = new QCheckBox(i18n("Offer to save website passwords"), widget());
0122     m_pOfferToSaveWebsitePassword->setToolTip(i18n("Uncheck this box to prevent being prompted to save website passwords"));
0123     connect(m_pOfferToSaveWebsitePassword, QOverload<bool>::of(&QAbstractButton::toggled), this, &KMiscHTMLOptions::markAsChanged);
0124     fl->addRow(m_pOfferToSaveWebsitePassword);
0125 
0126     m_pdfViewer = new QCheckBox(i18n("Display online PDF files using WebEngine"));
0127     m_pdfViewer->setToolTip(i18n("Uncheck this box to display online PDF files as configured in System Settings"));
0128     fl->addRow(m_pdfViewer);
0129     connect(m_pdfViewer, &QCheckBox::toggled, this, &KMiscHTMLOptions::markAsChanged);
0130 
0131     lay->addWidget(bgMisc);
0132     lay->addStretch(5);
0133 
0134     setNeedsSave(false);
0135 }
0136 
0137 KMiscHTMLOptions::~KMiscHTMLOptions()
0138 {
0139 }
0140 
0141 void KMiscHTMLOptions::load()
0142 {
0143     KSharedConfigPtr khtmlrcConfig = KSharedConfig::openConfig(QStringLiteral("khtmlrc"), KConfig::NoGlobals);
0144 
0145     // Read the configuration from konquerorrc with khtmlrc as fall back.
0146     KConfigGroup cg(m_pConfig, "MainView Settings");
0147     KConfigGroup cg2(khtmlrcConfig, "MainView Settings");
0148     m_pOpenMiddleClick->setChecked(cg.readEntry("OpenMiddleClick", cg2.readEntry("OpenMiddleClick", true)));
0149     m_pBackRightClick->setChecked(cg.readEntry("BackRightClick", cg2.readEntry("BackRightClick", false)));
0150 
0151     cg = KConfigGroup(m_pConfig, "HTML Settings");
0152     cg2 = KConfigGroup(khtmlrcConfig, "HTML Settings");
0153     m_cbCursor->setChecked(cg.readEntry("ChangeCursor", cg2.readEntry("ChangeCursor", true)));
0154     m_pAutoRedirectCheckBox->setChecked(cg.readEntry("AutoDelayedActions", true));
0155     m_pFormCompletionCheckBox->setChecked(cg.readEntry("FormCompletion", true));
0156     m_pMaxFormCompletionItems->setValue(cg.readEntry("MaxFormCompletionItems", 10));
0157     m_pMaxFormCompletionItems->setEnabled(m_pFormCompletionCheckBox->isChecked());
0158     m_pOfferToSaveWebsitePassword->setChecked(cg.readEntry("OfferToSaveWebsitePassword", true));
0159 
0160     m_pdfViewer->setChecked(cg.readEntry("InternalPdfViewer", false));
0161 
0162     cg2 = KConfigGroup(khtmlrcConfig, "Access Keys");
0163     m_pAccessKeys->setChecked(cg2.readEntry("Enabled", true));
0164 
0165     cg = KConfigGroup(KSharedConfig::openConfig(QStringLiteral("kbookmarkrc"), KConfig::NoGlobals), "Bookmarks");
0166     m_pAdvancedAddBookmarkCheckBox->setChecked(cg.readEntry("AdvancedAddBookmarkDialog", false));
0167     m_pOnlyMarkedBookmarksCheckBox->setChecked(cg.readEntry("FilteredToolbar", false));
0168 
0169     cg = KConfigGroup(KSharedConfig::openConfig(QStringLiteral("kioslaverc"), KConfig::NoGlobals), QString());
0170     m_pDoNotTrack->setChecked(cg.readEntry("DoNotTrack", false));
0171 
0172     KCModule::load();
0173 }
0174 
0175 void KMiscHTMLOptions::defaults()
0176 {
0177     bool old = m_pConfig->readDefaults();
0178     m_pConfig->setReadDefaults(true);
0179     load();
0180     m_pConfig->setReadDefaults(old);
0181     m_pAdvancedAddBookmarkCheckBox->setChecked(false);
0182     m_pOnlyMarkedBookmarksCheckBox->setChecked(false);
0183     m_pDoNotTrack->setChecked(false);
0184     m_pOfferToSaveWebsitePassword->setChecked(true);
0185 
0186     m_pdfViewer->setChecked(false);
0187 
0188 #if QT_VERSION_MAJOR > 5
0189     setRepresentsDefaults(true);
0190 #endif
0191 }
0192 
0193 void KMiscHTMLOptions::save()
0194 {
0195     KConfigGroup cg(m_pConfig, "MainView Settings");
0196     cg.writeEntry("OpenMiddleClick", m_pOpenMiddleClick->isChecked());
0197     cg.writeEntry("BackRightClick", m_pBackRightClick->isChecked());
0198 
0199     cg = KConfigGroup(m_pConfig, "HTML Settings");
0200     cg.writeEntry("ChangeCursor", m_cbCursor->isChecked());
0201     cg.writeEntry("AutoDelayedActions", m_pAutoRedirectCheckBox->isChecked());
0202     cg.writeEntry("FormCompletion", m_pFormCompletionCheckBox->isChecked());
0203     cg.writeEntry("MaxFormCompletionItems", m_pMaxFormCompletionItems->value());
0204     cg.writeEntry("OfferToSaveWebsitePassword", m_pOfferToSaveWebsitePassword->isChecked());
0205     cg.writeEntry("InternalPdfViewer", m_pdfViewer->isChecked());
0206     cg.sync();
0207 
0208     // Writes the value of m_pAccessKeys into khtmlrc to affect all applications using KHTML
0209     cg = KConfigGroup(KSharedConfig::openConfig(QStringLiteral("khtmlrc"), KConfig::NoGlobals), "Access Keys");
0210     cg.writeEntry("Enabled", m_pAccessKeys->isChecked());
0211     cg.sync();
0212 
0213     cg = KConfigGroup(KSharedConfig::openConfig(QStringLiteral("kbookmarkrc"), KConfig::NoGlobals), "Bookmarks");
0214     cg.writeEntry("AdvancedAddBookmarkDialog", m_pAdvancedAddBookmarkCheckBox->isChecked());
0215     cg.writeEntry("FilteredToolbar", m_pOnlyMarkedBookmarksCheckBox->isChecked());
0216     cg.sync();
0217 
0218     cg = KConfigGroup(KSharedConfig::openConfig(QStringLiteral("kioslaverc"), KConfig::NoGlobals), QString());
0219     cg.writeEntry("DoNotTrack", m_pDoNotTrack->isChecked());
0220     cg.sync();
0221 
0222     // Send signal to all konqueror instances
0223     QDBusConnection sessionBus(QDBusConnection::sessionBus());
0224     sessionBus.send(QDBusMessage::createSignal(QStringLiteral("/KonqMain"), QStringLiteral("org.kde.Konqueror.Main"), QStringLiteral("reparseConfiguration")));
0225     sessionBus.send(QDBusMessage::createSignal(QStringLiteral("/KBookmarkManager/konqueror"), QStringLiteral("org.kde.KIO.KBookmarkManager"), QStringLiteral("bookmarkConfigChanged")));
0226     sessionBus.send(QDBusMessage::createSignal(QStringLiteral("/KIO/Scheduler"), QStringLiteral("org.kde.KIO.Scheduler"), QStringLiteral("reparseSlaveConfiguration")));
0227 
0228     KCModule::save();
0229 }