diff --git a/src/EditProfileDialog.cpp b/src/EditProfileDialog.cpp index a85cd5b3e9f151d3e1f8c038fb5ac06996be9b02..ec3216a8254f4104cafd9d1d483aa57e6cd43a77 100644 --- a/src/EditProfileDialog.cpp +++ b/src/EditProfileDialog.cpp @@ -1065,10 +1065,6 @@ void EditProfileDialog::setupMousePage(const Profile::Ptr profile) void EditProfileDialog::setupAdvancedPage(const Profile::Ptr profile) { BooleanOption options[] = { - { - _ui->enableUrlHints , Profile::EnableUrlHints , - SLOT(toggleEnableUrlHints(bool)) - }, { _ui->enableBlinkingTextButton , Profile::BlinkingTextEnabled , SLOT(toggleBlinkingText(bool)) @@ -1089,6 +1085,19 @@ void EditProfileDialog::setupAdvancedPage(const Profile::Ptr profile) }; setupCheckBoxes(options , profile); + // Setup the URL hints modifier checkboxes + { + int modifiers = profile->property(Profile::UrlHintsModifiers); + _ui->urlHintsModifierShift->setChecked(modifiers & Qt::ShiftModifier); + _ui->urlHintsModifierCtrl->setChecked(modifiers & Qt::ControlModifier); + _ui->urlHintsModifierAlt->setChecked(modifiers & Qt::AltModifier); + _ui->urlHintsModifierMeta->setChecked(modifiers & Qt::MetaModifier); + connect(_ui->urlHintsModifierShift, &QCheckBox::toggled, this, &EditProfileDialog::updateUrlHintsModifier); + connect(_ui->urlHintsModifierCtrl, &QCheckBox::toggled, this, &EditProfileDialog::updateUrlHintsModifier); + connect(_ui->urlHintsModifierAlt, &QCheckBox::toggled, this, &EditProfileDialog::updateUrlHintsModifier); + connect(_ui->urlHintsModifierMeta, &QCheckBox::toggled, this, &EditProfileDialog::updateUrlHintsModifier); + } + const int lineSpacing = profile->lineSpacing(); _ui->lineSpacingSpinner->setValue(lineSpacing); @@ -1197,9 +1206,14 @@ void EditProfileDialog::TripleClickModeChanged(int newValue) { updateTempProfileProperty(Profile::TripleClickMode, newValue); } -void EditProfileDialog::toggleEnableUrlHints(bool enable) +void EditProfileDialog::updateUrlHintsModifier(bool) { - updateTempProfileProperty(Profile::EnableUrlHints, enable); + Qt::KeyboardModifiers modifiers; + if (_ui->urlHintsModifierShift->isChecked()) modifiers |= Qt::ShiftModifier; + if (_ui->urlHintsModifierCtrl->isChecked()) modifiers |= Qt::ControlModifier; + if (_ui->urlHintsModifierAlt->isChecked()) modifiers |= Qt::AltModifier; + if (_ui->urlHintsModifierMeta->isChecked()) modifiers |= Qt::MetaModifier; + updateTempProfileProperty(Profile::UrlHintsModifiers, int(modifiers)); } void EditProfileDialog::toggleBlinkingText(bool enable) { diff --git a/src/EditProfileDialog.h b/src/EditProfileDialog.h index 1195c1400419892b3e492818543b2b0cec54f56c..bb2896f56050457385f3d6d99cc414c8f8591407 100644 --- a/src/EditProfileDialog.h +++ b/src/EditProfileDialog.h @@ -174,7 +174,7 @@ private slots: void togglebidiRendering(bool); void lineSpacingChanged(int); void toggleBlinkingCursor(bool); - void toggleEnableUrlHints(bool); + void updateUrlHintsModifier(bool); void setCursorShape(int); void autoCursorColor(); diff --git a/src/EditProfileDialog.ui b/src/EditProfileDialog.ui index 1acec377ba989ee983a94d3019539aed59fcb24d..8358bd3863f67131bdc507f3c5d9b2cf3db09fc5 100644 --- a/src/EditProfileDialog.ui +++ b/src/EditProfileDialog.ui @@ -1087,21 +1087,60 @@ - - - - 0 - 0 - - - - Show URL hint overlays that can be triggered when holding down CTRL. - + - Enable URL hints + Show URL hints when these keys are pressed: + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Shift + + + + + + + Control + + + + + + + Alt + + + + + + + Meta + + + + + diff --git a/src/Profile.cpp b/src/Profile.cpp index 06fe5b1eceaab985a70176a6d1997ccd1a237ab6..a8cec606c6be4c061a57792515b8cc75d1b6757a 100644 --- a/src/Profile.cpp +++ b/src/Profile.cpp @@ -91,7 +91,7 @@ const Profile::PropertyInfo Profile::DefaultPropertyNames[] = { , { ScrollFullPage , "ScrollFullPage" , SCROLLING_GROUP , QVariant::Bool } // Terminal Features - , { EnableUrlHints , "EnableUrlHints" , TERMINAL_GROUP , QVariant::Bool } + , { UrlHintsModifiers , "UrlHintsModifiers" , TERMINAL_GROUP , QVariant::Int } , { BlinkingTextEnabled , "BlinkingTextEnabled" , TERMINAL_GROUP , QVariant::Bool } , { FlowControlEnabled , "FlowControlEnabled" , TERMINAL_GROUP , QVariant::Bool } , { BidiRenderingEnabled , "BidiRenderingEnabled" , TERMINAL_GROUP , QVariant::Bool } @@ -176,7 +176,7 @@ FallbackProfile::FallbackProfile() setProperty(ScrollFullPage, false); setProperty(FlowControlEnabled, true); - setProperty(EnableUrlHints, false); + setProperty(UrlHintsModifiers, 0); setProperty(BlinkingTextEnabled, true); setProperty(UnderlineLinksEnabled, true); setProperty(OpenLinksByDirectClickEnabled, false); diff --git a/src/Profile.h b/src/Profile.h index de74afade4cf6715f872c98ee67de93441885e3f..84a0acca7125e505e6479b410e34bb6d3c03a7ff 100644 --- a/src/Profile.h +++ b/src/Profile.h @@ -252,10 +252,8 @@ public: * increases/decreases the terminal font size. */ MouseWheelZoomEnabled, - /** (bool) Enables showing a hint for all visible URLs - * which allows activating URLs with the keyboard. - */ - EnableUrlHints + /** (int) Keyboard modifiers to show URL hints */ + UrlHintsModifiers }; /** diff --git a/src/ProfileReader.cpp b/src/ProfileReader.cpp index 716f9ca3729e9780e8931d91f5acb1e796ae89a8..ab8d30a4128e957a1767252b4a913b6cb168ac31 100644 --- a/src/ProfileReader.cpp +++ b/src/ProfileReader.cpp @@ -37,6 +37,9 @@ using namespace Konsole; // FIXME: A dup line from Profile.cpp - redo these static const char GENERAL_GROUP[] = "General"; +static const char FEATURES_GROUP[] = "Terminal Features"; +static const char URLHINTS_KEY[] = "EnableUrlHints"; +static const char URLHINTSMODIFIERS_KEY[] = "UrlHintsModifiers"; QStringList KDE4ProfileReader::findProfiles() { @@ -94,6 +97,19 @@ bool KDE4ProfileReader::readProfile(const QString& path , Profile::Ptr profile , profile->setProperty(Profile::Arguments, shellCommand.arguments()); } + // Check if the user earlier had set the URL hints option, and in that case set the default + // URL hints modifier to the earlier default. + if (config.hasGroup(FEATURES_GROUP)) { + KConfigGroup features = config.group(FEATURES_GROUP); + if (features.hasKey(URLHINTS_KEY)) { + bool enable = features.readEntry(URLHINTS_KEY, false); + if (enable && !features.hasKey(URLHINTSMODIFIERS_KEY)) { + features.writeEntry(URLHINTSMODIFIERS_KEY, int(Qt::ControlModifier)); + } + features.deleteEntry(URLHINTS_KEY); + } + } + profile->setProperty(Profile::UntranslatedName, general.readEntryUntranslated("Name")); // Read remaining properties diff --git a/src/TerminalDisplay.cpp b/src/TerminalDisplay.cpp index 555a9913a14bea8a4ff9e5d8e2a393708c69a1db..abeeda1eabedd08c46927b9de25f09dde8ae8c6e 100644 --- a/src/TerminalDisplay.cpp +++ b/src/TerminalDisplay.cpp @@ -358,8 +358,8 @@ TerminalDisplay::TerminalDisplay(QWidget* parent) , _textBlinking(false) , _cursorBlinking(false) , _hasTextBlinker(false) + , _urlHintsModifiers(Qt::NoModifier) , _showUrlHint(false) - , _enableShowUrlHint(false) , _underlineLinks(true) , _openLinksByDirectClick(false) , _ctrlRequiredForDrag(true) @@ -3115,7 +3115,7 @@ void TerminalDisplay::scrollScreenWindow(enum ScreenWindow::RelativeScrollMode m void TerminalDisplay::keyPressEvent(QKeyEvent* event) { - if (_enableShowUrlHint && event->modifiers() & Qt::ControlModifier) { + if (event->modifiers() == _urlHintsModifiers) { int hintSelected = event->key() - 0x31; if (hintSelected >= 0 && hintSelected < 10 && hintSelected < _filterChain->hotSpots().count()) { _filterChain->hotSpots().at(hintSelected)->activate(); diff --git a/src/TerminalDisplay.h b/src/TerminalDisplay.h index 93c98abbc9d2d77c30570ef9203ef8533aad2c98..b3ffba7c06d659b33007808431050c31a4788c3a 100644 --- a/src/TerminalDisplay.h +++ b/src/TerminalDisplay.h @@ -461,17 +461,11 @@ public: } /** - * Enables or disables showing hints on URLs when ctrl is pressed + * Sets the modifiers that shows URL hints when they are pressed * Defaults to disabled. */ - void setEnableUrlHints(bool on) { - _enableShowUrlHint = on; - } - /** - * Returns the status of the BiDi rendering in this widget. - */ - bool areUrlHintsEnabled() const { - return _enableShowUrlHint; + void setUrlHintsModifiers(int modifiers) { + _urlHintsModifiers = Qt::KeyboardModifiers(modifiers); } /** @@ -887,8 +881,8 @@ private: QTimer* _blinkTextTimer; QTimer* _blinkCursorTimer; + Qt::KeyboardModifiers _urlHintsModifiers; bool _showUrlHint; - bool _enableShowUrlHint; bool _underlineLinks; // Underline URL and hosts on mouse hover bool _openLinksByDirectClick; // Open URL and hosts by single mouse click diff --git a/src/ViewManager.cpp b/src/ViewManager.cpp index b1efc0a3526935191e1c65697216bc3aa0cc4f8d..ba3b72ed337bbc2b50426b5985d178e7438eb643 100644 --- a/src/ViewManager.cpp +++ b/src/ViewManager.cpp @@ -813,7 +813,7 @@ void ViewManager::applyProfileToView(TerminalDisplay* view , const Profile::Ptr view->setOpenLinksByDirectClick(profile->property(Profile::OpenLinksByDirectClickEnabled)); - view->setEnableUrlHints(profile->property(Profile::EnableUrlHints)); + view->setUrlHintsModifiers(profile->property(Profile::UrlHintsModifiers)); int middleClickPasteMode = profile->property(Profile::MiddleClickPasteMode); if (middleClickPasteMode == Enum::PasteFromX11Selection)