add/enable option for MetaPressAndHold action

--user can now enable/disable the Meta pressAndHold
behavior that shows shortcuts badges. The new option
is located at Latte preferences.

BUG: 403840
pull/4/head
Michail Vourlakos 6 years ago
parent 7a95408c06
commit 20b76a182c

@ -79,8 +79,8 @@ Corona::Corona(bool defaultLayoutOnStartup, QString layoutNameOnStartUp, int use
m_layoutNameOnStartUp(layoutNameOnStartUp),
m_activityConsumer(new KActivities::Consumer(this)),
m_screenPool(new ScreenPool(KSharedConfig::openConfig(), this)),
m_globalShortcuts(new GlobalShortcuts(this)),
m_universalSettings(new UniversalSettings(KSharedConfig::openConfig(), this)),
m_globalShortcuts(new GlobalShortcuts(this)),
m_plasmaScreenPool(new PlasmaExtended::ScreenPool(this)),
m_themeExtended(new PlasmaExtended::Theme(KSharedConfig::openConfig(), this)),
m_layoutManager(new LayoutManager(this))

@ -177,8 +177,8 @@ private:
AbstractWindowInterface *m_wm{nullptr};
ScreenPool *m_screenPool{nullptr};
GlobalShortcuts *m_globalShortcuts{nullptr};
UniversalSettings *m_universalSettings{nullptr};
GlobalShortcuts *m_globalShortcuts{nullptr};
LayoutManager *m_layoutManager{nullptr};
PlasmaExtended::ScreenPool *m_plasmaScreenPool{nullptr};

@ -197,6 +197,7 @@ SettingsDialog::SettingsDialog(QWidget *parent, Latte::Corona *corona)
connect(ui->autostartChkBox, &QCheckBox::stateChanged, this, &SettingsDialog::updateApplyButtonsState);
connect(ui->metaPressChkBox, &QCheckBox::stateChanged, this, &SettingsDialog::updateApplyButtonsState);
connect(ui->metaPressHoldChkBox, &QCheckBox::stateChanged, this, &SettingsDialog::updateApplyButtonsState);
connect(ui->infoWindowChkBox, &QCheckBox::stateChanged, this, &SettingsDialog::updateApplyButtonsState);
connect(ui->tabWidget, &QTabWidget::currentChanged, this, &SettingsDialog::updateApplyButtonsState);
@ -754,6 +755,7 @@ void SettingsDialog::restoreDefaults()
ui->autostartChkBox->setChecked(true);
ui->infoWindowChkBox->setChecked(true);
ui->metaPressChkBox->setChecked(false);
ui->metaPressHoldChkBox->setChecked(true);
ui->noBordersForMaximizedChkBox->setChecked(false);
ui->highSensitivityBtn->setChecked(true);
ui->screenTrackerSpinBox->setValue(SCREENTRACKERDEFAULTVALUE);
@ -921,6 +923,7 @@ void SettingsDialog::loadSettings()
ui->autostartChkBox->setChecked(m_corona->universalSettings()->autostart());
ui->infoWindowChkBox->setChecked(m_corona->universalSettings()->showInfoWindow());
ui->metaPressChkBox->setChecked(m_corona->universalSettings()->metaForwardedToLatte());
ui->metaPressHoldChkBox->setChecked(m_corona->universalSettings()->metaPressAndHoldEnabled());
ui->noBordersForMaximizedChkBox->setChecked(m_corona->universalSettings()->canDisableBorders());
if (m_corona->universalSettings()->mouseSensitivity() == Types::LowSensitivity) {
@ -954,6 +957,7 @@ QList<int> SettingsDialog::currentSettings()
settings << (int)ui->autostartChkBox->isChecked();
settings << (int)ui->infoWindowChkBox->isChecked();
settings << (int)ui->metaPressChkBox->isChecked();
settings << (int)ui->metaPressHoldChkBox->isChecked();
settings << (int)ui->noBordersForMaximizedChkBox->isChecked();
settings << m_mouseSensitivityButtons->checkedId();
settings << ui->screenTrackerSpinBox->value();
@ -1209,6 +1213,7 @@ void SettingsDialog::updateApplyButtonsState()
if (!ui->autostartChkBox->isChecked()
|| ui->metaPressChkBox->isChecked()
|| !ui->metaPressHoldChkBox->isChecked()
|| !ui->infoWindowChkBox->isChecked()
|| ui->noBordersForMaximizedChkBox->isChecked()
|| !ui->highSensitivityBtn->isChecked()
@ -1333,13 +1338,15 @@ bool SettingsDialog::saveAllChanges()
//! Update universal settings
Latte::Types::MouseSensitivity sensitivity = static_cast<Latte::Types::MouseSensitivity>(m_mouseSensitivityButtons->checkedId());
bool autostart = ui->autostartChkBox->isChecked();
bool forwardMeta = ui->metaPressChkBox->isChecked();
bool forwardMetaPress = ui->metaPressChkBox->isChecked();
bool metaPressAndHold = ui->metaPressHoldChkBox->isChecked();
bool showInfoWindow = ui->infoWindowChkBox->isChecked();
bool noBordersForMaximized = ui->noBordersForMaximizedChkBox->isChecked();
m_corona->universalSettings()->setMouseSensitivity(sensitivity);
m_corona->universalSettings()->setAutostart(autostart);
m_corona->universalSettings()->forwardMetaToLatte(forwardMeta);
m_corona->universalSettings()->forwardMetaToLatte(forwardMetaPress);
m_corona->universalSettings()->setMetaPressAndHoldEnabled(metaPressAndHold);
m_corona->universalSettings()->setShowInfoWindow(showInfoWindow);
m_corona->universalSettings()->setCanDisableBorders(noBordersForMaximized);
m_corona->universalSettings()->setScreenTrackerInterval(ui->screenTrackerSpinBox->value());

@ -52,6 +52,7 @@ UniversalSettings::UniversalSettings(KSharedConfig::Ptr config, QObject *parent)
connect(this, &UniversalSettings::layoutsColumnWidthsChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::layoutsMemoryUsageChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::layoutsWindowSizeChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::metaPressAndHoldEnabledChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::mouseSensitivityChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::screenTrackerIntervalChanged, this, &UniversalSettings::saveConfig);
connect(this, &UniversalSettings::showInfoWindowChanged, this, &UniversalSettings::saveConfig);
@ -75,6 +76,9 @@ void UniversalSettings::load()
//! load configuration
loadConfig();
//! this is needed to inform globalshortcuts to update its modifiers tracking
emit metaPressAndHoldEnabledChanged();
}
bool UniversalSettings::showInfoWindow() const
@ -323,6 +327,22 @@ void UniversalSettings::kwin_forwardMetaToLatte(bool forward)
}
}
bool UniversalSettings::metaPressAndHoldEnabled() const
{
return m_metaPressAndHoldEnabled;
}
void UniversalSettings::setMetaPressAndHoldEnabled(bool enabled)
{
if (m_metaPressAndHoldEnabled == enabled) {
return;
}
m_metaPressAndHoldEnabled = enabled;
emit metaPressAndHoldEnabledChanged();
}
Types::LayoutsMemoryUsage UniversalSettings::layoutsMemoryUsage() const
{
return m_memoryUsage;
@ -363,6 +383,7 @@ void UniversalSettings::loadConfig()
m_layoutsWindowSize = m_universalGroup.readEntry("layoutsWindowSize", QSize(700, 450));
m_layoutsColumnWidths = m_universalGroup.readEntry("layoutsColumnWidths", QStringList());
m_launchers = m_universalGroup.readEntry("launchers", QStringList());
m_metaPressAndHoldEnabled = m_universalGroup.readEntry("metaPressAndHoldEnabled", true);
m_screenTrackerInterval = m_universalGroup.readEntry("screenTrackerInterval", 2500);
m_showInfoWindow = m_universalGroup.readEntry("showInfoWindow", true);
m_memoryUsage = static_cast<Types::LayoutsMemoryUsage>(m_universalGroup.readEntry("memoryUsage", (int)Types::SingleLayout));
@ -379,6 +400,7 @@ void UniversalSettings::saveConfig()
m_universalGroup.writeEntry("layoutsWindowSize", m_layoutsWindowSize);
m_universalGroup.writeEntry("layoutsColumnWidths", m_layoutsColumnWidths);
m_universalGroup.writeEntry("launchers", m_launchers);
m_universalGroup.writeEntry("metaPressAndHoldEnabled", m_metaPressAndHoldEnabled);
m_universalGroup.writeEntry("screenTrackerInterval", m_screenTrackerInterval);
m_universalGroup.writeEntry("showInfoWindow", m_showInfoWindow);
m_universalGroup.writeEntry("memoryUsage", (int)m_memoryUsage);

@ -72,6 +72,9 @@ public:
bool metaForwardedToLatte() const;
void forwardMetaToLatte(bool forward);
bool metaPressAndHoldEnabled() const;
void setMetaPressAndHoldEnabled(bool enabled);
bool showInfoWindow() const;
void setShowInfoWindow(bool show);
@ -120,6 +123,7 @@ signals:
void layoutsWindowSizeChanged();
void launchersChanged();
void layoutsMemoryUsageChanged();
void metaPressAndHoldEnabledChanged();
void mouseSensitivityChanged();
void screenTrackerIntervalChanged();
void showInfoWindowChanged();
@ -140,6 +144,7 @@ private:
private:
bool m_canDisableBorders{false};
bool m_metaPressAndHoldEnabled{true};
bool m_showInfoWindow{true};
//when there isnt a version it is an old universal file

@ -193,6 +193,16 @@ void GlobalShortcuts::init()
m_singleMetaAction = new QAction(this);
m_singleMetaAction->setShortcut(QKeySequence(Qt::META));
connect(m_corona->universalSettings(), &UniversalSettings::metaPressAndHoldEnabledChanged , this, [&]() {
if (!m_corona->universalSettings()->metaPressAndHoldEnabled()) {
m_modifierTracker->blockModifierTracking(Qt::Key_Super_L);
m_modifierTracker->blockModifierTracking(Qt::Key_Super_R);
} else {
m_modifierTracker->unblockModifierTracking(Qt::Key_Super_L);
m_modifierTracker->unblockModifierTracking(Qt::Key_Super_R);
}
});
//display shortcut badges while holding Meta
connect(m_modifierTracker, &ShortcutsPart::ModifierTracker::metaModifierPressed, this, [&]() {
m_metaShowedViews = true;

@ -76,7 +76,25 @@ void ModifierTracker::init()
bool ModifierTracker::modifierIsTracked(Qt::Key key)
{
return(key == Qt::Key_Super_L || key == Qt::Key_Super_R || key == Qt::Key_Control || key == Qt::Key_Alt || key == Qt::Key_Shift);
if (m_blockedModifiers.contains(key)) {
return false;
}
return (key == Qt::Key_Super_L || key == Qt::Key_Super_R || key == Qt::Key_Control || key == Qt::Key_Alt || key == Qt::Key_Shift);
}
void ModifierTracker::blockModifierTracking(Qt::Key key)
{
if (!m_blockedModifiers.contains(key)) {
m_blockedModifiers.append(key);
}
}
void ModifierTracker::unblockModifierTracking(Qt::Key key)
{
if (m_blockedModifiers.contains(key)) {
m_blockedModifiers.removeAll(key);
}
}
bool ModifierTracker::noModifierPressed()

@ -50,6 +50,9 @@ public:
//! only <key> is pressed and no other modifier
bool singleModifierPressed(Qt::Key key);
void blockModifierTracking(Qt::Key key);
void unblockModifierTracking(Qt::Key key);
signals:
void metaModifierPressed();
void modifiersChanged();
@ -67,6 +70,9 @@ private:
KModifierKeyInfo m_modifierKeyInfo;
QTimer m_metaPressedTimer;
//! modifiers that the user does not want to track anymore
QList<Qt::Key> m_blockedModifiers;
//! keep a record for modifiers
QHash<Qt::Key, bool> m_pressed;

Loading…
Cancel
Save