Kaydet (Commit) d2f95590 authored tarafından Caolán McNamara's avatar Caolán McNamara

Related: tdf#115964 convert the problematic dialog to a native gtk3 one

Change-Id: I84e10f1c45dfbe267f9b350d74271ac149bdaf43
Reviewed-on: https://gerrit.libreoffice.org/51432Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 975a8164
......@@ -518,11 +518,11 @@ executePasswordDialog(
{
if (bIsSimplePasswordRequest)
{
ScopedVclPtrInstance<PasswordDialog> xDialog(pParent, nMode, aResLocale, aDocName,
bIsPasswordToModify, bIsSimplePasswordRequest);
std::unique_ptr<PasswordDialog> xDialog(new PasswordDialog(pParent ? pParent->GetFrameWeld() : nullptr, nMode,
aResLocale, aDocName, bIsPasswordToModify, bIsSimplePasswordRequest));
xDialog->SetMinLen(0);
rInfo.SetResult(xDialog->Execute() == RET_OK ? DialogMask::ButtonsOk : DialogMask::ButtonsCancel);
rInfo.SetResult(xDialog->run() == RET_OK ? DialogMask::ButtonsOk : DialogMask::ButtonsCancel);
rInfo.SetPassword(xDialog->GetPassword());
}
else
......@@ -541,11 +541,11 @@ executePasswordDialog(
}
else // enter password or reenter password
{
ScopedVclPtrInstance<PasswordDialog> xDialog(pParent, nMode, aResLocale, aDocName,
bIsPasswordToModify, bIsSimplePasswordRequest);
std::unique_ptr<PasswordDialog> xDialog(new PasswordDialog(pParent ? pParent->GetFrameWeld() : nullptr, nMode,
aResLocale, aDocName, bIsPasswordToModify, bIsSimplePasswordRequest));
xDialog->SetMinLen(0);
rInfo.SetResult(xDialog->Execute() == RET_OK ? DialogMask::ButtonsOk : DialogMask::ButtonsCancel);
rInfo.SetResult(xDialog->run() == RET_OK ? DialogMask::ButtonsOk : DialogMask::ButtonsCancel);
rInfo.SetPassword(bIsPasswordToModify ? OUString() : xDialog->GetPassword());
rInfo.SetPasswordToModify(bIsPasswordToModify ? xDialog->GetPassword() : OUString());
}
......
......@@ -27,100 +27,84 @@
using namespace ::com::sun::star;
PasswordDialog::PasswordDialog(vcl::Window* _pParent,
PasswordDialog::PasswordDialog(weld::Window* pParent,
task::PasswordRequestMode nDlgMode, const std::locale& rLocale,
const OUString& aDocURL, bool bOpenToModify, bool bIsSimplePasswordRequest)
: ModalDialog(_pParent, "PasswordDialog", "uui/ui/password.ui")
: GenericDialogController(pParent, "uui/ui/password.ui", "PasswordDialog")
, m_xFTPassword(m_xBuilder->weld_label("newpassFT"))
, m_xEDPassword(m_xBuilder->weld_entry("newpassEntry"))
, m_xFTConfirmPassword(m_xBuilder->weld_label("confirmpassFT"))
, m_xEDConfirmPassword(m_xBuilder->weld_entry("confirmpassEntry"))
, m_xOKBtn(m_xBuilder->weld_button("ok"))
, nMinLen(1)
, aPasswdMismatch(Translate::get(STR_PASSWORD_MISMATCH, rLocale))
, nDialogMode(nDlgMode)
, rResLocale(rLocale)
{
get(m_pFTPassword, "newpassFT");
get(m_pEDPassword, "newpassEntry");
get(m_pFTConfirmPassword, "confirmpassFT");
get(m_pEDConfirmPassword, "confirmpassEntry");
get(m_pOKBtn, "ok");
if( nDialogMode == task::PasswordRequestMode_PASSWORD_REENTER )
{
const char* pOpenToModifyErrStrId = bOpenToModify ? STR_ERROR_PASSWORD_TO_MODIFY_WRONG : STR_ERROR_PASSWORD_TO_OPEN_WRONG;
const char* pErrStrId = bIsSimplePasswordRequest ? STR_ERROR_SIMPLE_PASSWORD_WRONG : pOpenToModifyErrStrId;
OUString aErrorMsg(Translate::get(pErrStrId, rResLocale));
std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(_pParent ? _pParent->GetFrameWeld() : nullptr,
std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(pParent,
VclMessageType::Warning, VclButtonsType::Ok, aErrorMsg));
xBox->run();
}
// default settings for enter password or reenter passwd...
OUString aTitle(Translate::get(STR_TITLE_ENTER_PASSWORD, rResLocale));
m_pFTConfirmPassword->Hide();
m_pEDConfirmPassword->Hide();
m_pFTConfirmPassword->Enable( false );
m_pEDConfirmPassword->Enable( false );
m_xFTConfirmPassword->hide();
m_xEDConfirmPassword->hide();
m_xFTConfirmPassword->set_sensitive(false);
m_xEDConfirmPassword->set_sensitive(false);
// settings for create password
if (nDialogMode == task::PasswordRequestMode_PASSWORD_CREATE)
{
aTitle = Translate::get(STR_TITLE_CREATE_PASSWORD, rResLocale);
m_pFTConfirmPassword->SetText(Translate::get(STR_CONFIRM_SIMPLE_PASSWORD, rResLocale));
m_xFTConfirmPassword->set_label(Translate::get(STR_CONFIRM_SIMPLE_PASSWORD, rResLocale));
m_pFTConfirmPassword->Show();
m_pEDConfirmPassword->Show();
m_pFTConfirmPassword->Enable();
m_pEDConfirmPassword->Enable();
m_xFTConfirmPassword->show();
m_xEDConfirmPassword->show();
m_xFTConfirmPassword->set_sensitive(true);
m_xEDConfirmPassword->set_sensitive(true);
}
SetText( aTitle );
m_xDialog->set_title(aTitle);
const char* pStrId = bOpenToModify ? STR_ENTER_PASSWORD_TO_MODIFY : STR_ENTER_PASSWORD_TO_OPEN;
OUString aMessage(Translate::get(pStrId, rResLocale));
INetURLObject url(aDocURL);
aMessage += url.HasError()
? aDocURL : url.GetMainURL(INetURLObject::DecodeMechanism::Unambiguous);
m_pFTPassword->SetText(aMessage);
m_xFTPassword->set_label(aMessage);
if (bIsSimplePasswordRequest)
{
DBG_ASSERT( aDocURL.isEmpty(), "A simple password request should not have a document URL! Use document password request instead." );
m_pFTPassword->SetText(Translate::get(STR_ENTER_SIMPLE_PASSWORD, rResLocale));
m_xFTPassword->set_label(Translate::get(STR_ENTER_SIMPLE_PASSWORD, rResLocale));
}
m_pOKBtn->SetClickHdl( LINK( this, PasswordDialog, OKHdl_Impl ) );
}
PasswordDialog::~PasswordDialog()
{
disposeOnce();
}
void PasswordDialog::dispose()
{
m_pFTPassword.clear();
m_pEDPassword.clear();
m_pFTConfirmPassword.clear();
m_pEDConfirmPassword.clear();
m_pOKBtn.clear();
ModalDialog::dispose();
m_xOKBtn->connect_clicked(LINK(this, PasswordDialog, OKHdl_Impl));
}
IMPL_LINK_NOARG(PasswordDialog, OKHdl_Impl, Button*, void)
IMPL_LINK_NOARG(PasswordDialog, OKHdl_Impl, weld::Button&, void)
{
bool bEDPasswdValid = m_pEDPassword->GetText().getLength() >= nMinLen;
bool bPasswdMismatch = m_pEDConfirmPassword->GetText() != m_pEDPassword->GetText();
bool bValid = (!m_pEDConfirmPassword->IsVisible() && bEDPasswdValid) ||
(m_pEDConfirmPassword->IsVisible() && bEDPasswdValid && !bPasswdMismatch);
bool bEDPasswdValid = m_xEDPassword->get_text().getLength() >= nMinLen;
bool bPasswdMismatch = m_xEDConfirmPassword->get_text() != m_xEDPassword->get_text();
bool bValid = (!m_xEDConfirmPassword->get_visible() && bEDPasswdValid) ||
(m_xEDConfirmPassword->get_visible() && bEDPasswdValid && !bPasswdMismatch);
if (m_pEDConfirmPassword->IsVisible() && bPasswdMismatch)
if (m_xEDConfirmPassword->get_visible() && bPasswdMismatch)
{
std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
VclMessageType::Warning, VclButtonsType::Ok,
aPasswdMismatch));
xBox->run();
}
else if (bValid)
EndDialog( RET_OK );
m_xDialog->response(RET_OK);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......
......@@ -21,34 +21,27 @@
#define INCLUDED_UUI_SOURCE_PASSWORDDLG_HXX
#include <com/sun/star/task/PasswordRequestMode.hpp>
#include <vcl/button.hxx>
#include <vcl/dialog.hxx>
#include <vcl/edit.hxx>
#include <vcl/group.hxx>
#include <vcl/fixed.hxx>
#include <vcl/weld.hxx>
class PasswordDialog : public ModalDialog
class PasswordDialog : public weld::GenericDialogController
{
VclPtr<FixedText> m_pFTPassword;
VclPtr<Edit> m_pEDPassword;
VclPtr<FixedText> m_pFTConfirmPassword;
VclPtr<Edit> m_pEDConfirmPassword;
VclPtr<OKButton> m_pOKBtn;
std::unique_ptr<weld::Label> m_xFTPassword;
std::unique_ptr<weld::Entry> m_xEDPassword;
std::unique_ptr<weld::Label> m_xFTConfirmPassword;
std::unique_ptr<weld::Entry> m_xEDConfirmPassword;
std::unique_ptr<weld::Button> m_xOKBtn;
sal_uInt16 nMinLen;
OUString aPasswdMismatch;
DECL_LINK(OKHdl_Impl, Button*, void);
DECL_LINK(OKHdl_Impl, weld::Button&, void);
public:
PasswordDialog(vcl::Window* pParent, css::task::PasswordRequestMode nDlgMode, const std::locale& rLocale, const OUString& aDocURL,
PasswordDialog(weld::Window* pParent, css::task::PasswordRequestMode nDlgMode, const std::locale& rLocale, const OUString& aDocURL,
bool bOpenToModify, bool bIsSimplePasswordRequest);
virtual ~PasswordDialog() override;
virtual void dispose() override;
void SetMinLen( sal_uInt16 nMin ) { nMinLen = nMin; }
OUString GetPassword() const { return m_pEDPassword->GetText(); }
OUString GetPassword() const { return m_xEDPassword->get_text(); }
private:
css::task::PasswordRequestMode nDialogMode;
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 -->
<!-- Generated with glade 3.20.2 -->
<interface domain="uui">
<requires lib="gtk+" version="3.18"/>
<object class="GtkDialog" id="PasswordDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="password|PasswordDialog">Set Password</property>
<property name="modal">True</property>
<property name="default_width">0</property>
<property name="default_height">0</property>
<property name="type_hint">dialog</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
......@@ -80,9 +83,9 @@
<object class="GtkLabel" id="confirmpassFT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">confirmpassEntry</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
......@@ -93,9 +96,9 @@
<object class="GtkLabel" id="newpassFT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">newpassEntry</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
......@@ -108,6 +111,7 @@
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="visibility">False</property>
<property name="activates_default">True</property>
</object>
<packing>
<property name="left_attach">0</property>
......@@ -120,6 +124,7 @@
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="visibility">False</property>
<property name="activates_default">True</property>
</object>
<packing>
<property name="left_attach">0</property>
......@@ -136,10 +141,12 @@
</object>
</child>
<action-widgets>
<action-widget response="-5">ok</action-widget>
<action-widget response="-6">cancel</action-widget>
<action-widget response="-11">help</action-widget>
</action-widgets>
<child>
<placeholder/>
</child>
</object>
<object class="GtkSizeGroup" id="sizegroup1"/>
</interface>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment