diff --git a/src/services/pam/conversation.cpp b/src/services/pam/conversation.cpp index a06ee88..c58f4fe 100644 --- a/src/services/pam/conversation.cpp +++ b/src/services/pam/conversation.cpp @@ -123,12 +123,7 @@ void PamConversation::onMessage() { if (!ok) goto fail; - this->message( - QString::fromUtf8(message), - /*flags.echo*/ true, - flags.error, - flags.responseRequired - ); + this->message(QString::fromUtf8(message), flags.error, flags.responseRequired, flags.echo); } else { qCCritical(logPam) << "Unexpected message from subprocess."; goto fail; diff --git a/src/services/pam/qml.cpp b/src/services/pam/qml.cpp index c849f35..01a0295 100644 --- a/src/services/pam/qml.cpp +++ b/src/services/pam/qml.cpp @@ -193,6 +193,7 @@ void PamContext::setUser(QString user) { QString PamContext::message() const { return this->mMessage; } bool PamContext::messageIsError() const { return this->mMessageIsError; } bool PamContext::isResponseRequired() const { return this->mIsResponseRequired; } +bool PamContext::isResponseVisible() const { return this->mIsResponseVisible; } void PamContext::onCompleted(PamResult::Enum result) { this->abortConversation(); @@ -207,20 +208,23 @@ void PamContext::onError(PamError::Enum error) { void PamContext::onMessage( QString message, - bool messageChanged, bool isError, - bool responseRequired + bool responseRequired, + bool responseVisible ) { - if (messageChanged) { - if (message != this->mMessage) { - this->mMessage = std::move(message); - emit this->messageChanged(); - } + if (message != this->mMessage) { + this->mMessage = std::move(message); + emit this->messageChanged(); + } - if (isError != this->mMessageIsError) { - this->mMessageIsError = isError; - emit this->messageIsErrorChanged(); - } + if (isError != this->mMessageIsError) { + this->mMessageIsError = isError; + emit this->messageIsErrorChanged(); + } + + if (responseVisible != this->mIsResponseVisible) { + this->mIsResponseVisible = responseVisible; + emit this->responseVisibleChanged(); } if (responseRequired != this->mIsResponseRequired) { diff --git a/src/services/pam/qml.hpp b/src/services/pam/qml.hpp index 5d741f8..c6e3509 100644 --- a/src/services/pam/qml.hpp +++ b/src/services/pam/qml.hpp @@ -46,6 +46,8 @@ class PamContext /// /// Responses can be returned with the `respond()` function. Q_PROPERTY(bool responseRequired READ isResponseRequired NOTIFY responseRequiredChanged); + /// If the user's response should be visible. Only valid when `responseRequired` is true. + Q_PROPERTY(bool responseVisible READ isResponseVisible NOTIFY responseVisibleChanged); // clang-format on QML_ELEMENT; @@ -84,6 +86,7 @@ public: [[nodiscard]] QString message() const; [[nodiscard]] bool messageIsError() const; [[nodiscard]] bool isResponseRequired() const; + [[nodiscard]] bool isResponseVisible() const; signals: /// Emitted whenever authentication completes. @@ -104,11 +107,12 @@ signals: void messageChanged(); void messageIsErrorChanged(); void responseRequiredChanged(); + void responseVisibleChanged(); private slots: void onCompleted(PamResult::Enum result); void onError(PamError::Enum error); - void onMessage(QString message, bool messageChanged, bool isError, bool responseRequired); + void onMessage(QString message, bool isError, bool responseRequired, bool responseVisible); private: PamConversation* conversation = nullptr; @@ -121,4 +125,5 @@ private: QString mMessage; bool mMessageIsError = false; bool mIsResponseRequired = false; + bool mIsResponseVisible = false; };