kde-plasma/kscreenlocker: Fix redundant unlock button

KDE-bug: https://bugs.kde.org/show_bug.cgi?id=485520

Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
This commit is contained in:
Andreas Sturmlechner
2024-07-08 19:00:21 +02:00
parent d4df6ac2e3
commit 8bccc0d6db
2 changed files with 167 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
From 6297d4d2e37abadfab0f7389aec9aa4af7f928bc Mon Sep 17 00:00:00 2001
From: Xaver Hugl <xaver.hugl@gmail.com>
Date: Tue, 2 Jul 2024 20:07:06 +0000
Subject: [PATCH] greeter/authenticators: add a property for if a prompt was
shown in the past
This is needed to properly check for whether or not to show an unlock button
CCBUG: 485520
(cherry picked from commit bc1e4a18ce37d1f40cb6a50acf3d9c53b052bf5e)
Co-authored-by: Xaver Hugl <xaver.hugl@gmail.com>
---
greeter/pamauthenticators.cpp | 14 ++++++++++++++
greeter/pamauthenticators.h | 5 +++++
2 files changed, 19 insertions(+)
diff --git a/greeter/pamauthenticators.cpp b/greeter/pamauthenticators.cpp
index 8fcbb6d5..d564420 100644
--- a/greeter/pamauthenticators.cpp
+++ b/greeter/pamauthenticators.cpp
@@ -17,6 +17,7 @@ struct PamAuthenticators::Private {
PamAuthenticator::NoninteractiveAuthenticatorTypes computedTypes = PamAuthenticator::NoninteractiveAuthenticatorType::None;
AuthenticatorsState state = AuthenticatorsState::Idle;
bool graceLocked = false;
+ bool hadPrompt = false;
void recomputeNoninteractiveAuthenticationTypes()
{
@@ -83,10 +84,18 @@ PamAuthenticators::PamAuthenticators(std::unique_ptr<PamAuthenticator> &&interac
Q_EMIT busyChanged();
});
connect(d->interactive.get(), &PamAuthenticator::prompt, this, [this] {
+ if (!d->hadPrompt) {
+ d->hadPrompt = true;
+ Q_EMIT hadPromptChanged();
+ }
qCDebug(KSCREENLOCKER_GREET) << "PamAuthenticators: Normal prompt from interactive authenticator" << qUtf8Printable(d->interactive->service());
Q_EMIT promptChanged();
});
connect(d->interactive.get(), &PamAuthenticator::promptForSecret, this, [this] {
+ if (!d->hadPrompt) {
+ d->hadPrompt = true;
+ Q_EMIT hadPromptChanged();
+ }
qCDebug(KSCREENLOCKER_GREET) << "PamAuthenticators: Secret prompt from interactive authenticator" << qUtf8Printable(d->interactive->service());
Q_EMIT promptForSecretChanged();
});
@@ -198,3 +207,8 @@ void PamAuthenticators::setGraceLocked(bool b)
{
d->graceLocked = b;
}
+
+bool PamAuthenticators::hadPrompt() const
+{
+ return d->hadPrompt;
+}
diff --git a/greeter/pamauthenticators.h b/greeter/pamauthenticators.h
index e82f77b..9184e7e 100644
--- a/greeter/pamauthenticators.h
+++ b/greeter/pamauthenticators.h
@@ -31,6 +31,8 @@ class PamAuthenticators : public QObject
Q_PROPERTY(AuthenticatorsState state READ state NOTIFY stateChanged)
+ Q_PROPERTY(bool hadPrompt READ hadPrompt NOTIFY hadPromptChanged)
+
public:
PamAuthenticators(std::unique_ptr<PamAuthenticator> &&interactive,
std::vector<std::unique_ptr<PamAuthenticator>> &&noninteractive,
@@ -78,6 +80,9 @@ public:
void setGraceLocked(bool b);
+ bool hadPrompt() const;
+ Q_SIGNAL void hadPromptChanged();
+
private:
struct Private;
QScopedPointer<Private> d;
--
2.45.2

View File

@@ -0,0 +1,82 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
ECM_TEST="forceoptional"
KFMIN=6.3.0
PVCUT=$(ver_cut 1-3)
QTMIN=6.7.1
inherit ecm plasma.kde.org pam
DESCRIPTION="Library and components for secure lock screen architecture"
LICENSE="GPL-2" # TODO: CHECK
SLOT="6"
KEYWORDS="~amd64 ~arm64 ~riscv"
IUSE=""
RESTRICT="test"
# qtbase slot op: GuiPrivate use in greeter
COMMON_DEPEND="
dev-libs/wayland
>=dev-qt/qtbase-${QTMIN}:6=[dbus,gui,network,widgets]
>=dev-qt/qtdeclarative-${QTMIN}:6
>=kde-frameworks/kcmutils-${KFMIN}:6
>=kde-frameworks/kconfig-${KFMIN}:6[qml]
>=kde-frameworks/kconfigwidgets-${KFMIN}:6
>=kde-frameworks/kcoreaddons-${KFMIN}:6
>=kde-frameworks/kcrash-${KFMIN}:6
>=kde-frameworks/kglobalaccel-${KFMIN}:6
>=kde-frameworks/ki18n-${KFMIN}:6
>=kde-frameworks/kidletime-${KFMIN}:6
>=kde-frameworks/kio-${KFMIN}:6
>=kde-frameworks/knotifications-${KFMIN}:6
>=kde-frameworks/ksvg-${KFMIN}:6
>=kde-frameworks/kwindowsystem-${KFMIN}:6
>=kde-frameworks/solid-${KFMIN}:6
>=kde-plasma/layer-shell-qt-${PVCUT}:6
>=kde-plasma/libplasma-${PVCUT}:6
>=kde-plasma/libkscreen-${PVCUT}:6
sys-libs/pam
x11-libs/libX11
x11-libs/libXi
x11-libs/libxcb
x11-libs/xcb-util-keysyms
"
DEPEND="${COMMON_DEPEND}
x11-base/xorg-proto
"
RDEPEND="${COMMON_DEPEND}
>=kde-frameworks/kirigami-${KFMIN}:6
>=kde-plasma/libplasma-${PVCUT}:6
"
BDEPEND="
dev-util/wayland-scanner
>=kde-frameworks/kcmutils-${KFMIN}:6
"
PDEPEND=">=kde-plasma/kde-cli-tools-${PVCUT}:*"
PATCHES=( "${FILESDIR}/${P}-greeter-unlock-button.patch" ) # KDE-bug 485520
src_prepare() {
ecm_src_prepare
use test || cmake_run_in greeter cmake_comment_add_subdirectory autotests
}
src_test() {
# requires running environment
local myctestargs=(
-E x11LockerTest
)
ecm_src_test
}
src_install() {
ecm_src_install
newpamd "${FILESDIR}/kde-r1.pam" kde
newpamd "${FILESDIR}/kde-fingerprint.pam" kde-fingerprint
newpamd "${FILESDIR}/kde-smartcard.pam" kde-smartcard
}