From d98ad554670ccc8e3f2bc932a818e5121ac7ff25 Mon Sep 17 00:00:00 2001 From: Selva Nair Date: Sun, 24 Dec 2017 21:21:46 -0500 Subject: [PATCH 1/2] Change OK button style to BS_DEFPUSHBUTTON in auth-user-pass dialog - Make the OK button appear highlighted as the default action so that the user can press enter and submit the form. This also gives a clearer indication of the default action when automatic submission of saved username/password activates. Signed-off-by: Selva Nair --- res/openvpn-gui-res-cs.rc | 2 +- res/openvpn-gui-res-de.rc | 2 +- res/openvpn-gui-res-dk.rc | 2 +- res/openvpn-gui-res-en.rc | 2 +- res/openvpn-gui-res-es.rc | 2 +- res/openvpn-gui-res-fi.rc | 2 +- res/openvpn-gui-res-fr.rc | 2 +- res/openvpn-gui-res-it.rc | 2 +- res/openvpn-gui-res-jp.rc | 2 +- res/openvpn-gui-res-kr.rc | 2 +- res/openvpn-gui-res-nl.rc | 2 +- res/openvpn-gui-res-no.rc | 2 +- res/openvpn-gui-res-pl.rc | 2 +- res/openvpn-gui-res-pt.rc | 2 +- res/openvpn-gui-res-ru.rc | 2 +- res/openvpn-gui-res-se.rc | 2 +- res/openvpn-gui-res-tr.rc | 2 +- res/openvpn-gui-res-ua.rc | 2 +- res/openvpn-gui-res-zh-hant.rc | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/res/openvpn-gui-res-cs.rc b/res/openvpn-gui-res-cs.rc index acfd432..4164bfc 100644 --- a/res/openvpn-gui-res-cs.rc +++ b/res/openvpn-gui-res-cs.rc @@ -48,7 +48,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Uložit heslo", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Zrušit", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-de.rc b/res/openvpn-gui-res-de.rc index 80960cc..686fcdd 100644 --- a/res/openvpn-gui-res-de.rc +++ b/res/openvpn-gui-res-de.rc @@ -48,7 +48,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Passwort speichern", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "Ok", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "Ok", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Abbrechen", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-dk.rc b/res/openvpn-gui-res-dk.rc index faf5f73..a14ca72 100644 --- a/res/openvpn-gui-res-dk.rc +++ b/res/openvpn-gui-res-dk.rc @@ -49,7 +49,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Save password", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Annuller", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-en.rc b/res/openvpn-gui-res-en.rc index 07a09be..d23abea 100644 --- a/res/openvpn-gui-res-en.rc +++ b/res/openvpn-gui-res-en.rc @@ -48,7 +48,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Save password", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Cancel", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-es.rc b/res/openvpn-gui-res-es.rc index da48737..1536f66 100644 --- a/res/openvpn-gui-res-es.rc +++ b/res/openvpn-gui-res-es.rc @@ -47,7 +47,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Save password", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Cancelar", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-fi.rc b/res/openvpn-gui-res-fi.rc index 7c8c973..85d8c32 100644 --- a/res/openvpn-gui-res-fi.rc +++ b/res/openvpn-gui-res-fi.rc @@ -48,7 +48,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Tallenna salasana", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Peruuta", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-fr.rc b/res/openvpn-gui-res-fr.rc index b68ad9d..28b9b38 100644 --- a/res/openvpn-gui-res-fr.rc +++ b/res/openvpn-gui-res-fr.rc @@ -47,7 +47,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Se souvenir du mot de passe", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Annuler", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-it.rc b/res/openvpn-gui-res-it.rc index 0dd22e4..d1b0f22 100644 --- a/res/openvpn-gui-res-it.rc +++ b/res/openvpn-gui-res-it.rc @@ -47,7 +47,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Save password", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Annulla", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-jp.rc b/res/openvpn-gui-res-jp.rc index aaca22a..3036ab2 100644 --- a/res/openvpn-gui-res-jp.rc +++ b/res/openvpn-gui-res-jp.rc @@ -50,7 +50,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Save password", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "キャンセル", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-kr.rc b/res/openvpn-gui-res-kr.rc index d9d1a56..3e98536 100644 --- a/res/openvpn-gui-res-kr.rc +++ b/res/openvpn-gui-res-kr.rc @@ -49,7 +49,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 35, 6, 115, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 35, 23, 115, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "암호 저장", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "확인", IDOK, 25, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "확인", IDOK, 25, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "취소", IDCANCEL, 85, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-nl.rc b/res/openvpn-gui-res-nl.rc index e30d189..0104e75 100644 --- a/res/openvpn-gui-res-nl.rc +++ b/res/openvpn-gui-res-nl.rc @@ -47,7 +47,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Wachtwoord opslaan", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Annuleren", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-no.rc b/res/openvpn-gui-res-no.rc index 6c8fde1..449656b 100644 --- a/res/openvpn-gui-res-no.rc +++ b/res/openvpn-gui-res-no.rc @@ -48,7 +48,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Husk passord", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Avbryt", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-pl.rc b/res/openvpn-gui-res-pl.rc index 340d4a2..7198144 100644 --- a/res/openvpn-gui-res-pl.rc +++ b/res/openvpn-gui-res-pl.rc @@ -49,7 +49,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Save password", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Anuluj", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-pt.rc b/res/openvpn-gui-res-pt.rc index 0259359..b60b8ff 100644 --- a/res/openvpn-gui-res-pt.rc +++ b/res/openvpn-gui-res-pt.rc @@ -47,7 +47,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Save password", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Cancelar", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-ru.rc b/res/openvpn-gui-res-ru.rc index f9ed50e..e612e39 100644 --- a/res/openvpn-gui-res-ru.rc +++ b/res/openvpn-gui-res-ru.rc @@ -49,7 +49,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 80, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 80, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Запомнить", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 30, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 30, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Отмена", IDCANCEL, 100, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 180, 10 END diff --git a/res/openvpn-gui-res-se.rc b/res/openvpn-gui-res-se.rc index 834fdb3..64a0d53 100644 --- a/res/openvpn-gui-res-se.rc +++ b/res/openvpn-gui-res-se.rc @@ -47,7 +47,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Save password", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Avbryt", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-tr.rc b/res/openvpn-gui-res-tr.rc index ca48e0f..3831037 100644 --- a/res/openvpn-gui-res-tr.rc +++ b/res/openvpn-gui-res-tr.rc @@ -49,7 +49,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 50, 6, 104, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 50, 23, 104, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Save password", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "Tamam", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "Tamam", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Çıkış", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END diff --git a/res/openvpn-gui-res-ua.rc b/res/openvpn-gui-res-ua.rc index 11b3b62..da8037c 100644 --- a/res/openvpn-gui-res-ua.rc +++ b/res/openvpn-gui-res-ua.rc @@ -47,7 +47,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 80, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 80, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "Запам'ятати", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "OK", IDOK, 30, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "OK", IDOK, 30, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "Скасувати", IDCANCEL, 100, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 180, 10 END diff --git a/res/openvpn-gui-res-zh-hant.rc b/res/openvpn-gui-res-zh-hant.rc index d739492..de12463 100644 --- a/res/openvpn-gui-res-zh-hant.rc +++ b/res/openvpn-gui-res-zh-hant.rc @@ -50,7 +50,7 @@ BEGIN EDITTEXT ID_EDT_AUTH_USER, 60, 6, 94, 12, ES_AUTOHSCROLL EDITTEXT ID_EDT_AUTH_PASS, 60, 23, 94, 12, ES_PASSWORD | ES_AUTOHSCROLL CHECKBOX "儲存密碼", ID_CHK_SAVE_PASS, 6, 42, 100, 10 - PUSHBUTTON "確認", IDOK, 20, 58, 50, 14, BS_PUSHBUTTON | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "確認", IDOK, 20, 58, 50, 14, BS_DEFPUSHBUTTON | WS_TABSTOP | WS_DISABLED PUSHBUTTON "取消", IDCANCEL, 90, 58, 52, 14 LTEXT "", ID_TXT_WARNING, 6, 74, 150, 10 END From 5fb23f6ad9b6127dfec3fd8bc6114c599202c348 Mon Sep 17 00:00:00 2001 From: Selva Nair Date: Wed, 20 Sep 2017 20:52:02 -0400 Subject: [PATCH 2/2] Auto submit saved auth-user-pass credentials after a brief delay - Effective only when username and password are saved. - The user may interrupt auto submission and edit the username/password. - If silent_connection is on the dialog is bypassed without any delay. v2 changes: - Display message in normal text color and show remaining time Signed-off-by: Selva Nair --- openvpn-gui-res.h | 1 + openvpn.c | 118 +++++++++++++++++++++++++++++++++++++- res/openvpn-gui-res-en.rc | 1 + 3 files changed, 117 insertions(+), 3 deletions(-) diff --git a/openvpn-gui-res.h b/openvpn-gui-res.h index 0ffb625..a46b263 100644 --- a/openvpn-gui-res.h +++ b/openvpn-gui-res.h @@ -305,6 +305,7 @@ /* Token password dialog related */ #define IDS_NFO_TOKEN_PASSWORD_CAPTION 2100 #define IDS_NFO_TOKEN_PASSWORD_REQUEST 2101 +#define IDS_NFO_AUTO_CONNECT 2102 /* Password retry messages */ #define IDS_NFO_AUTH_PASS_RETRY 2150 diff --git a/openvpn.c b/openvpn.c index e9d6a0a..db216cc 100644 --- a/openvpn.c +++ b/openvpn.c @@ -294,6 +294,88 @@ OnStateChange(connection_t *c, char *data) } } +static void +SimulateButtonPress(HWND hwnd, UINT btn) +{ + SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(btn, BN_CLICKED), (LPARAM)GetDlgItem(hwnd, btn)); +} + +/* A private struct to keep autoclose parameters */ +typedef struct autoclose { + UINT start; /* start time in msec */ + UINT timeout; /* timeout in msec at which autoclose triggers */ + UINT btn; /* button which is 'pressed' for autoclose */ + UINT txtid; /* id of a text control to display an informaltional message */ + UINT txtres; /* resource id of localized text to use for message: + LoadLocalizedString(txtid, time_remaining_in_seconds) + is used to generate the message */ + COLORREF txtclr; /* color for message text */ +} autoclose; + +/* Cancel scheduled auto close of a dialog */ +static void +AutoCloseCancel(HWND hwnd) +{ + autoclose *ac = (autoclose *)GetProp(hwnd, L"AutoClose"); + if (!ac) + return; + + if (ac->txtid) + SetDlgItemText(hwnd, ac->txtid, L""); + KillTimer(hwnd, 1); + RemoveProp(hwnd, L"AutoClose"); + free(ac); +} + +/* Called when autoclose timer expires. */ +static void CALLBACK +AutoCloseHandler(HWND hwnd, UINT UNUSED msg, UINT_PTR id, DWORD now) +{ + autoclose *ac = (autoclose *)GetProp(hwnd, L"AutoClose"); + if (!ac) + return; + + UINT end = ac->start + ac->timeout; + if (now >= end) + { + SimulateButtonPress(hwnd, ac->btn); + AutoCloseCancel(hwnd); + } + else + { + SetDlgItemText(hwnd, ac->txtid, LoadLocalizedString(ac->txtres, (end - now)/1000)); + SetTimer(hwnd, id, 500, AutoCloseHandler); + } +} + +/* Schedule an event to automatically activate specified btn after timeout seconds. + * Used for automatically closing a dialog after some delay unless user interrupts. + * Optionally a txtid and txtres resource may be specified to display a message. + * %u in the message is replaced by time remaining before timeout will trigger. + * Call AutoCloseCancel to cancel the scheduled event and clear the displayed + * text. + */ +static void +AutoCloseSetup(HWND hwnd, UINT btn, UINT timeout, UINT txtid, UINT txtres) +{ + if (timeout == 0) + SimulateButtonPress(hwnd, btn); + else + { + autoclose *ac = GetPropW(hwnd, L"AutoClose"); /* reuse if set */ + if (!ac && (ac = malloc(sizeof(autoclose))) == NULL) + return; + + *ac = (autoclose) {.start = GetTickCount(), .timeout = timeout*1000, .btn = btn, + .txtid = txtid, .txtres = txtres, .txtclr = GetSysColor(COLOR_WINDOWTEXT)}; + + SetTimer(hwnd, 1, 500, AutoCloseHandler); /* using timer id = 1 */ + if (txtid && txtres) + SetDlgItemText(hwnd, txtid, LoadLocalizedString(txtres, timeout)); + SetPropW(hwnd, L"AutoClose", (HANDLE) ac); + } +} + /* * DialogProc for OpenVPN username/password/challenge auth dialog windows */ @@ -301,8 +383,8 @@ INT_PTR CALLBACK UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { auth_param_t *param; - WCHAR username[USER_PASS_LEN]; - WCHAR password[USER_PASS_LEN]; + WCHAR username[USER_PASS_LEN] = L""; + WCHAR password[USER_PASS_LEN] = L""; switch (msg) { @@ -338,6 +420,16 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { SetDlgItemTextW(hwndDlg, ID_EDT_AUTH_PASS, password); SecureZeroMemory(password, sizeof(password)); + if (username[0] != L'\0' && !(param->flags & FLAG_CR_TYPE_SCRV1)) + { + /* user/pass available and no challenge response needed: skip dialog + * if silent_connection is on, else auto submit after a few seconds. + * User can interrupt. + */ + SetFocus(GetDlgItem(hwndDlg, IDOK)); + UINT timeout = o.silent_connection ? 0 : 6; /* in seconds */ + AutoCloseSetup(hwndDlg, IDOK, timeout, ID_TXT_WARNING, IDS_NFO_AUTO_CONNECT); + } } if (param->c->flags & FLAG_DISABLE_SAVE_PASS) ShowWindow(GetDlgItem (hwndDlg, ID_CHK_SAVE_PASS), SW_HIDE); @@ -355,6 +447,14 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) break; + case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: + case WM_NCLBUTTONDOWN: + case WM_NCRBUTTONDOWN: + /* user interrupt */ + AutoCloseCancel(hwndDlg); + break; + case WM_COMMAND: param = (auth_param_t *) GetProp(hwndDlg, cfgProp); switch (LOWORD(wParam)) @@ -365,6 +465,11 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) int len = Edit_GetTextLength((HWND) lParam); EnableWindow(GetDlgItem(hwndDlg, IDOK), (len ? TRUE : FALSE)); } + AutoCloseCancel(hwndDlg); /* user interrupt */ + break; + + case ID_EDT_AUTH_PASS: + AutoCloseCancel(hwndDlg); /* user interrupt */ break; case ID_CHK_SAVE_PASS: @@ -376,6 +481,7 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) DeleteSavedAuthPass(param->c->config_name); Button_SetCheck(GetDlgItem (hwndDlg, ID_CHK_SAVE_PASS), BST_UNCHECKED); } + AutoCloseCancel(hwndDlg); /* user interrupt */ break; case IDOK: @@ -420,8 +526,13 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) case WM_CTLCOLORSTATIC: if (GetDlgCtrlID((HWND) lParam) == ID_TXT_WARNING) { + autoclose *ac = (autoclose *)GetProp(hwndDlg, L"AutoClose"); HBRUSH br = (HBRUSH) DefWindowProc(hwndDlg, msg, wParam, lParam); - SetTextColor((HDC) wParam, o.clr_warning); + /* This text id is used for auth failure warning or autoclose message. Use appropriate color */ + COLORREF clr = o.clr_warning; + if (ac && ac->txtid == ID_TXT_WARNING) + clr = ac->txtclr; + SetTextColor((HDC) wParam, clr); return (INT_PTR) br; } break; @@ -433,6 +544,7 @@ UserAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) case WM_NCDESTROY: param = (auth_param_t *) GetProp(hwndDlg, cfgProp); free_auth_param (param); + AutoCloseCancel(hwndDlg); RemoveProp(hwndDlg, cfgProp); break; } diff --git a/res/openvpn-gui-res-en.rc b/res/openvpn-gui-res-en.rc index d23abea..ba87b96 100644 --- a/res/openvpn-gui-res-en.rc +++ b/res/openvpn-gui-res-en.rc @@ -460,4 +460,5 @@ BEGIN IDS_NFO_KEY_PASS_RETRY "Wrong password. Try again..." IDS_ERR_INVALID_PASSWORD_INPUT "Invalid character in password" IDS_ERR_INVALID_USERNAME_INPUT "Invalid character in username" + IDS_NFO_AUTO_CONNECT "Connecting automatically in %u seconds..." END