Don't show virtual keyboard SNI when no virtual keyboard is selected in the KCM

Not choosing any virtual keyboard is a valid option. In this case do not show the SNI since it isn't very useful then and takes up some space in the system tray.

BUG: 437171
This commit is contained in:
Nicolas Fella 2021-05-23 21:16:19 +02:00
parent a18cb8998e
commit 99b84a321a
2 changed files with 37 additions and 35 deletions

View file

@ -81,27 +81,8 @@ void InputMethod::init()
);
}
qCDebug(KWIN_VIRTUALKEYBOARD) << "Registering the SNI";
QMenu *sniMenu = new QMenu;
sniMenu->addAction(i18n("Configure virtual keyboards..."), this, [] {
QProcess::startDetached("systemsettings5", {"kcm_virtualkeyboard"});
});
m_sni = new KStatusNotifierItem(QStringLiteral("kwin-virtual-keyboard"), this);
m_sni->setStandardActionsEnabled(false);
m_sni->setCategory(KStatusNotifierItem::Hardware);
m_sni->setStatus(KStatusNotifierItem::Passive);
m_sni->setTitle(i18n("Virtual Keyboard"));
m_sni->setToolTipTitle(i18n("Whether to show the virtual keyboard on demand."));
m_sni->setStandardActionsEnabled(false);
m_sni->setContextMenu(sniMenu);
updateSni();
connect(m_sni, &KStatusNotifierItem::activateRequested, this,
[this] {
setEnabled(!m_enabled);
}
);
connect(this, &InputMethod::enabledChanged, this, &InputMethod::updateSni);
new VirtualKeyboardDBus(this);
@ -516,21 +497,42 @@ void InputMethod::adoptInputMethodContext()
void InputMethod::updateSni()
{
if (!m_sni) {
return;
}
if (m_inputMethodCommand.isEmpty()) {
m_sni->setIconByName(QStringLiteral("input-keyboard-virtual-on"));
m_sni->setOverlayIconByName(QStringLiteral("emblem-unavailable"));
m_sni->setTitle(i18n("No Virtual Keyboard configured"));
} else if (m_enabled) {
m_sni->setIconByName(QStringLiteral("input-keyboard-virtual-on"));
m_sni->setTitle(i18n("Virtual Keyboard: enabled"));
m_sni->setOverlayIconByName({});
if (!m_inputMethodCommand.isEmpty()) {
if (!m_sni) {
qCDebug(KWIN_VIRTUALKEYBOARD) << "Registering the SNI";
m_sni.reset(new KStatusNotifierItem(QStringLiteral("kwin-virtual-keyboard"), this));
connect(m_sni.get(), &KStatusNotifierItem::activateRequested, this,
[this] {
setEnabled(!m_enabled);
}
);
}
m_sni->setStandardActionsEnabled(false);
m_sni->setCategory(KStatusNotifierItem::Hardware);
m_sni->setStatus(KStatusNotifierItem::Passive);
m_sni->setTitle(i18n("Virtual Keyboard"));
m_sni->setToolTipTitle(i18n("Whether to show the virtual keyboard on demand."));
m_sni->setStandardActionsEnabled(false);
QMenu *sniMenu = new QMenu;
sniMenu->addAction(i18n("Configure virtual keyboards..."), this, [] {
QProcess::startDetached("systemsettings5", {"kcm_virtualkeyboard"});
});
m_sni->setContextMenu(sniMenu);
if (m_enabled) {
m_sni->setIconByName(QStringLiteral("input-keyboard-virtual-on"));
m_sni->setTitle(i18n("Virtual Keyboard: enabled"));
m_sni->setOverlayIconByName({});
} else {
m_sni->setIconByName(QStringLiteral("input-keyboard-virtual-off"));
m_sni->setTitle(i18n("Virtual Keyboard: disabled"));
m_sni->setOverlayIconByName({});
}
} else {
m_sni->setIconByName(QStringLiteral("input-keyboard-virtual-off"));
m_sni->setTitle(i18n("Virtual Keyboard: disabled"));
m_sni->setOverlayIconByName({});
m_sni.reset();
}
}

View file

@ -91,7 +91,7 @@ private:
bool m_enabled = false;
bool m_active = false;
KStatusNotifierItem *m_sni = nullptr;
QScopedPointer<KStatusNotifierItem> m_sni;
QPointer<AbstractClient> m_inputClient;
QPointer<AbstractClient> m_trackedClient;