okular/part/dlggeneral.cpp
Eduardo Cruz ea04c61faf Add a configuration option to disable drag-scrolling beyond screen edges
The mouse cursor wrap feature while drag-scrolling can be undesirable in some
cases; for example it can be annoying to have the cursor jump accidentally to
the distant edge of a big screen. Now users can disable this feature if they
prefer.

BUG: 421040
FIXED-IN: 22.12
2022-09-28 00:10:56 +00:00

213 lines
10 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
SPDX-FileCopyrightText: 2006 Pino Toscano <toscano.pino@tiscali.it>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "dlggeneral.h"
#include <KAuthorized>
#include <KColorButton>
#include <KLocalizedString>
#include <QCheckBox>
#include <QComboBox>
#include <QFormLayout>
#include <QGuiApplication>
#include <QHBoxLayout>
#include <QLabel>
#include <QSpinBox>
#include <config-okular.h>
#include "settings.h"
DlgGeneral::DlgGeneral(QWidget *parent, Okular::EmbedMode embedMode)
: QWidget(parent)
{
QFormLayout *layout = new QFormLayout(this);
// BEGIN Appearance section
// Checkbox: use smooth scrolling
QCheckBox *useSmoothScrolling = new QCheckBox(this);
useSmoothScrolling->setText(i18nc("@option:check Config dialog, general page", "Use smooth scrolling"));
useSmoothScrolling->setObjectName(QStringLiteral("kcfg_SmoothScrolling"));
layout->addRow(i18nc("@title:group Config dialog, general page", "Appearance:"), useSmoothScrolling);
// Checkbox: show scrollbars
QCheckBox *showScrollbars = new QCheckBox(this);
showScrollbars->setText(i18nc("@option:check Config dialog, general page", "Show scrollbars"));
showScrollbars->setObjectName(QStringLiteral("kcfg_ShowScrollBars"));
layout->addRow(QString(), showScrollbars);
if (embedMode != Okular::ViewerWidgetMode) {
// Checkbox: scroll thumbnails automatically
QCheckBox *scrollThumbnails = new QCheckBox(this);
scrollThumbnails->setText(i18nc("@option:check Config dialog, general page", "Link the thumbnails with the page"));
scrollThumbnails->setObjectName(QStringLiteral("kcfg_SyncThumbnailsViewport"));
layout->addRow(QString(), scrollThumbnails);
}
// Checkbox: Show welcoming messages (the balloons or OSD)
QCheckBox *showOSD = new QCheckBox(this);
showOSD->setText(i18nc("@option:check Config dialog, general page", "Show hints and info messages"));
showOSD->setObjectName(QStringLiteral("kcfg_ShowOSD"));
layout->addRow(QString(), showOSD);
// Checkbox: Notify about embedded files, forms, or signatures
QCheckBox *showEmbeddedContentMessages = new QCheckBox(this);
showEmbeddedContentMessages->setText(i18nc("@option:check Config dialog, general page", "Notify about embedded files, forms, or signatures"));
showEmbeddedContentMessages->setObjectName(QStringLiteral("kcfg_ShowEmbeddedContentMessages"));
layout->addRow(QString(), showEmbeddedContentMessages);
if (embedMode != Okular::ViewerWidgetMode) {
// Checkbox: display document title in titlebar
QCheckBox *showTitle = new QCheckBox(this);
showTitle->setText(i18nc("@option:check Config dialog, general page", "Display document title in titlebar if available"));
showTitle->setObjectName(QStringLiteral("kcfg_DisplayDocumentTitle"));
layout->addRow(QString(), showTitle);
// Combobox: prefer file name or full path in titlebar
QComboBox *nameOrPath = new QComboBox(this);
nameOrPath->addItem(i18nc("item:inlistbox Config dialog, general page", "Display file name only"));
nameOrPath->addItem(i18nc("item:inlistbox Config dialog, general page", "Display full file path"));
nameOrPath->setObjectName(QStringLiteral("kcfg_DisplayDocumentNameOrPath"));
layout->addRow(i18nc("label:listbox Config dialog, general page", "When not displaying document title:"), nameOrPath);
}
// Checkbox and color button: custom background color
QCheckBox *useCustomColor = new QCheckBox(this);
useCustomColor->setText(QString());
useCustomColor->setObjectName(QStringLiteral("kcfg_UseCustomBackgroundColor"));
KColorButton *customColor = new KColorButton(this);
customColor->setObjectName(QStringLiteral("kcfg_BackgroundColor"));
QHBoxLayout *customColorLayout = new QHBoxLayout();
customColorLayout->addWidget(useCustomColor);
useCustomColor->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
customColorLayout->addWidget(customColor);
layout->addRow(i18nc("@label:listbox Config dialog, general page", "Use custom background color:"), customColorLayout);
useCustomColor->setChecked(false);
customColor->setEnabled(false);
connect(useCustomColor, &QCheckBox::toggled, customColor, &QWidget::setEnabled);
// END Appearance section
layout->addRow(new QLabel(this));
// BEGIN Program features section
bool programFeaturesLabelPlaced = false;
/**
* This ensures the and only the first checkbox gets the “Program features:” label.
*
* (Right now I could move @c showBackendSelectionDialog to the first row,
* but maybe someone wants to make it conditional too later.)
*/
auto programFeaturesLabel = [&programFeaturesLabelPlaced]() -> QString {
if (programFeaturesLabelPlaced) {
return QString();
} else {
programFeaturesLabelPlaced = true;
return i18nc("@title:group Config dialog, general page", "Program features:");
}
};
if (embedMode == Okular::NativeShellMode) {
// Two checkboxes: use tabs, switch to open tab
QCheckBox *useTabs = new QCheckBox(this);
useTabs->setText(i18nc("@option:check Config dialog, general page", "Open new files in tabs"));
useTabs->setObjectName(QStringLiteral("kcfg_ShellOpenFileInTabs"));
layout->addRow(programFeaturesLabel(), useTabs);
QCheckBox *switchToTab = new QCheckBox(this);
switchToTab->setText(i18nc("@option:check Config dialog, general page", "Switch to existing tab if file is already open"));
switchToTab->setObjectName(QStringLiteral("kcfg_SwitchToTabIfOpen"));
layout->addRow(QString(), switchToTab);
useTabs->setChecked(false);
switchToTab->setEnabled(false);
connect(useTabs, &QCheckBox::toggled, switchToTab, &QWidget::setEnabled);
}
#if !OKULAR_FORCE_DRM
if (KAuthorized::authorize(QStringLiteral("skip_drm"))) {
// Checkbox: Obey DRM
QCheckBox *obeyDrm = new QCheckBox(this);
obeyDrm->setText(i18nc("@option:check Config dialog, general page", "Obey DRM limitations"));
obeyDrm->setObjectName(QStringLiteral("kcfg_ObeyDRM"));
layout->addRow(programFeaturesLabel(), obeyDrm);
}
#endif
if (embedMode != Okular::ViewerWidgetMode) {
// Checkbox: watch file for changes
QCheckBox *watchFile = new QCheckBox(this);
watchFile->setText(i18nc("@option:check Config dialog, general page", "Reload document on file change"));
watchFile->setObjectName(QStringLiteral("kcfg_WatchFile"));
layout->addRow(programFeaturesLabel(), watchFile);
}
// Checkbox: show backend selection dialog
QCheckBox *showBackendSelectionDialog = new QCheckBox(this);
showBackendSelectionDialog->setText(i18nc("@option:check Config dialog, general page", "Show backend selection dialog"));
showBackendSelectionDialog->setObjectName(QStringLiteral("kcfg_ChooseGenerators"));
layout->addRow(programFeaturesLabel(), showBackendSelectionDialog);
if (embedMode != Okular::ViewerWidgetMode) { // TODO Makes sense?
// Checkbox: RTL document layout
QCheckBox *useRtl = new QCheckBox(this);
useRtl->setText(i18nc("@option:check Config dialog, general page", "Right to left reading direction"));
useRtl->setObjectName(QStringLiteral("kcfg_rtlReadingDirection"));
layout->addRow(programFeaturesLabel(), useRtl);
}
QCheckBox *openInContinuousModeByDefault = new QCheckBox(this);
openInContinuousModeByDefault->setText(i18nc("@option:check Config dialog, general page", "Open in continuous mode by default"));
openInContinuousModeByDefault->setObjectName(QStringLiteral("kcfg_ViewContinuous"));
layout->addRow(programFeaturesLabel(), openInContinuousModeByDefault);
// Under Wayland the cursor wrap feature is unavailable
if (QGuiApplication::platformName() != QLatin1String("wayland")) {
QCheckBox *dragBeyondScreenEdges = new QCheckBox(this);
dragBeyondScreenEdges->setText(i18nc("@option:check Config dialog, general page", "When using Browse Tool, wrap cursor at screen edges"));
dragBeyondScreenEdges->setObjectName(QStringLiteral("kcfg_DragBeyondScreenEdges"));
layout->addRow(programFeaturesLabel(), dragBeyondScreenEdges);
}
// END Program features section
// If no Program features section, dont add a second spacer:
if (programFeaturesLabelPlaced) {
layout->addRow(new QLabel(this));
}
// BEGIN View options section
// Spinbox: overview columns
QSpinBox *overviewColumns = new QSpinBox(this);
overviewColumns->setMinimum(3);
overviewColumns->setMaximum(10);
overviewColumns->setObjectName(QStringLiteral("kcfg_ViewColumns"));
layout->addRow(i18nc("@label:spinbox Config dialog, general page", "Overview columns:"), overviewColumns);
// Spinbox: page up/down overlap
QSpinBox *pageUpDownOverlap = new QSpinBox(this);
pageUpDownOverlap->setMinimum(0);
pageUpDownOverlap->setMaximum(50);
pageUpDownOverlap->setSingleStep(5);
pageUpDownOverlap->setSuffix(i18nc("Page Up/Down overlap, spinbox suffix", "%"));
pageUpDownOverlap->setToolTip(i18nc("@info:tooltip Config dialog, general page", "Defines how much of the current viewing area will still be visible when pressing the Page Up/Down keys."));
pageUpDownOverlap->setObjectName(QStringLiteral("kcfg_ScrollOverlap"));
layout->addRow(i18nc("@label:spinbox Config dialog, general page", "Page Up/Down overlap:"), pageUpDownOverlap);
// Combobox: prefer file name or full path in titlebar
QComboBox *defaultZoom = new QComboBox(this);
defaultZoom->addItem(i18nc("item:inlistbox Config dialog, general page, default zoom", "100%"));
defaultZoom->addItem(i18nc("item:inlistbox Config dialog, general page, default zoom", "Fit Width"));
defaultZoom->addItem(i18nc("item:inlistbox Config dialog, general page, default zoom", "Fit Page"));
defaultZoom->addItem(i18nc("item:inlistbox Config dialog, general page, default zoom", "Auto Fit"));
defaultZoom->setToolTip(i18nc("item:inlistbox Config dialog, general page, default zoom", "Defines the default zoom mode for files which were never opened before. For files which were opened before the previous zoom is applied."));
defaultZoom->setObjectName(QStringLiteral("kcfg_ZoomMode"));
layout->addRow(i18nc("label:listbox Config dialog, general page, default zoom", "Default zoom:"), defaultZoom);
// END View options section
}