From d0768817618143739b8fd81cfa9124e8f60e1b12 Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Fri, 25 Aug 2017 23:55:43 +0300
Subject: Validate destination name after it entered in mail edit window.

---
 src/gui/windows/maileditwindow.cpp | 34 +++++++++++++++++++++++++++++++++-
 src/gui/windows/maileditwindow.h   |  8 +++++++-
 2 files changed, 40 insertions(+), 2 deletions(-)

(limited to 'src/gui')

diff --git a/src/gui/windows/maileditwindow.cpp b/src/gui/windows/maileditwindow.cpp
index 47b4d409e..b3cfd560b 100644
--- a/src/gui/windows/maileditwindow.cpp
+++ b/src/gui/windows/maileditwindow.cpp
@@ -52,6 +52,7 @@ MailEditWindow::MailEditWindow() :
     // TRANSLATORS: mail edit window name
     Window(_("Edit mail"), Modal_false, nullptr, "mailedit.xml"),
     ActionListener(),
+    FocusListener(),
     // TRANSLATORS: mail edit window button
     mSendButton(new Button(this, _("Send"), "send", this)),
     // TRANSLATORS: mail edit window button
@@ -101,8 +102,8 @@ MailEditWindow::MailEditWindow() :
     mSubjectField->setWidth(100);
     mMessageField->setWidth(100);
     mItemScrollArea->setHeight(100);
-
     mItemScrollArea->setHorizontalScrollPolicy(ScrollArea::SHOW_NEVER);
+    mToField->addFocusListener(this);
 
     placer(0, 0, mToLabel);
     placer(1, 0, mToField, 3);
@@ -120,6 +121,7 @@ MailEditWindow::MailEditWindow() :
     placer(3, 6, mCloseButton);
 
     loadWindowState();
+    mSendButton->setEnabled(false);
     enableVisibleSound(true);
 }
 
@@ -177,6 +179,7 @@ void MailEditWindow::setSubject(const std::string &str)
 void MailEditWindow::setTo(const std::string &str)
 {
     mToField->setText(str);
+    mSendButton->setEnabled(true);
 }
 
 void MailEditWindow::setMessage(const std::string &str)
@@ -240,3 +243,32 @@ void MailEditWindow::updateItems()
 {
     mItemContainer->updateMatrix();
 }
+
+void MailEditWindow::focusLost(const Event &event)
+{
+    if (!mUseMail2)
+        return;
+
+    if (event.getSource() == mToField)
+    {
+        const std::string to = mToField->getText();
+        if (to != mail2Handler->getCheckedName())
+        {
+            mail2Handler->queueCheckName(MailQueueType::ValidateTo,
+                to,
+                std::string(),
+                std::string(),
+                0);
+            mSendButton->setEnabled(false);
+        }
+        else
+        {
+            mSendButton->setEnabled(true);
+        }
+    }
+}
+
+void MailEditWindow::validatedTo()
+{
+    mSendButton->setEnabled(true);
+}
diff --git a/src/gui/windows/maileditwindow.h b/src/gui/windows/maileditwindow.h
index 37d983c1c..2c6c5d0ef 100644
--- a/src/gui/windows/maileditwindow.h
+++ b/src/gui/windows/maileditwindow.h
@@ -24,6 +24,7 @@
 #include "gui/widgets/window.h"
 
 #include "listeners/actionlistener.h"
+#include "listeners/focuslistener.h"
 
 class Button;
 class IntTextField;
@@ -35,7 +36,8 @@ class ScrollArea;
 class TextField;
 
 class MailEditWindow final : public Window,
-                             public ActionListener
+                             public ActionListener,
+                             public FocusListener
 {
     public:
         MailEditWindow();
@@ -60,6 +62,10 @@ class MailEditWindow final : public Window,
 
         void updateItems();
 
+        void focusLost(const Event &event) override final;
+
+        void validatedTo();
+
     private:
         void sendMail();
 
-- 
cgit v1.2.3-70-g09d2