From fce69a87e8dfc0b4ebf641507f96295806419b19 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 9 Jun 2018 17:19:42 +0300 Subject: fixes #1406 (Scriver: sending by Shift+Enter) --- plugins/Scriver/res/resource.rc | 5 ++--- plugins/Scriver/src/chat_window.cpp | 16 +--------------- plugins/Scriver/src/globals.cpp | 21 +++++++++++++++++---- plugins/Scriver/src/globals.h | 10 ++++++++-- plugins/Scriver/src/input.cpp | 33 +++++++++++++++++++++++++++++++++ plugins/Scriver/src/msgdialog.cpp | 21 ++------------------- plugins/Scriver/src/msgoptions.cpp | 21 ++++++++------------- plugins/Scriver/src/msgs.h | 13 ++++++------- plugins/Scriver/src/resource.h | 10 ++++------ plugins/Scriver/src/version.h | 2 +- 10 files changed, 82 insertions(+), 70 deletions(-) (limited to 'plugins') diff --git a/plugins/Scriver/res/resource.rc b/plugins/Scriver/res/resource.rc index f352a038b6..1796a4459a 100644 --- a/plugins/Scriver/res/resource.rc +++ b/plugins/Scriver/res/resource.rc @@ -47,9 +47,8 @@ BEGIN EDITTEXT IDC_SECONDS,213,125,35,12,ES_RIGHT | ES_NUMBER CONTROL "",IDC_SECONDSSPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,239,125,11,14 LTEXT "seconds",IDC_STATIC,253,127,44,8 - CONTROL "Send message on 'Enter'",IDC_SENDONENTER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,144,293,10 - CONTROL "Send message on double 'Enter'",IDC_SENDONDBLENTER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,156,293,10 - CONTROL "Send message on 'Ctrl+Enter'",IDC_SENDONCTRLENTER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,6,168,293,10 + LTEXT "Send message on:",IDC_STATIC,6,142,192,8 + COMBOBOX IDC_SENDMODE,6,153,84,10,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_OPT_MSGTABS DIALOGEX 2, 0, 304, 230 diff --git a/plugins/Scriver/src/chat_window.cpp b/plugins/Scriver/src/chat_window.cpp index 87c4868053..079607028d 100644 --- a/plugins/Scriver/src/chat_window.cpp +++ b/plugins/Scriver/src/chat_window.cpp @@ -665,22 +665,8 @@ LRESULT CChatRoomDlg::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) case WM_KEYDOWN: if (wParam == VK_RETURN) { - replaceStrW(m_wszSearchQuery, nullptr); - replaceStrW(m_wszSearchResult, nullptr); - if ((isCtrl != 0) ^ (0 != db_get_b(0, SRMM_MODULE, SRMSGSET_SENDONENTER, SRMSGDEFSET_SENDONENTER))) { - PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); + if (CheckSend()) return 0; - } - if (db_get_b(0, SRMM_MODULE, SRMSGSET_SENDONDBLENTER, SRMSGDEFSET_SENDONDBLENTER)) { - if (m_iLastEnterTime + 2 < time(0)) - m_iLastEnterTime = time(0); - else { - m_message.SendMsg(WM_KEYDOWN, VK_BACK, 0); - m_message.SendMsg(WM_KEYUP, VK_BACK, 0); - PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); - return 0; - } - } } else m_iLastEnterTime = 0; diff --git a/plugins/Scriver/src/globals.cpp b/plugins/Scriver/src/globals.cpp index cb2632db08..f529234937 100644 --- a/plugins/Scriver/src/globals.cpp +++ b/plugins/Scriver/src/globals.cpp @@ -298,6 +298,22 @@ void InitGlobals() memset(&g_dat, 0, sizeof(struct GlobalMessageData)); g_dat.hParentWindowList = WindowList_Create(); + if (!db_get_b(0, "Compatibility", "Scriver", 0)) { + if (g_plugin.getByte("SendOnEnter")) + g_dat.sendMode = SEND_ON_ENTER; + else if (g_plugin.getByte("SendOnDblEnter")) + g_dat.sendMode = SEND_ON_DBL_ENTER; + else if (g_plugin.getByte("SendOnCtrlEnter")) + g_dat.sendMode = SEND_ON_CTRL_ENTER; + + g_plugin.setByte(SRMSGSET_SENDMODE, g_dat.sendMode); + + g_plugin.delSetting("SendOnEnter"); + g_plugin.delSetting("SendOnDblEnter"); + g_plugin.delSetting("SendOnCtrlEnter"); + db_set_b(0, "Compatibility", "Scriver", 1); + } + HookEvent(ME_PROTO_ACK, ackevent); ReloadGlobals(); g_dat.lastParent = nullptr; @@ -376,13 +392,10 @@ void ReloadGlobals() if (db_get_b(0, SRMM_MODULE, SRMSGSET_DELTEMP, SRMSGDEFSET_DELTEMP)) g_dat.flags |= SMF_DELTEMP; - if (db_get_b(0, SRMM_MODULE, SRMSGSET_SENDONENTER, SRMSGDEFSET_SENDONENTER)) - g_dat.flags |= SMF_SENDONENTER; - if (db_get_b(0, SRMM_MODULE, SRMSGSET_SENDONDBLENTER, SRMSGDEFSET_SENDONDBLENTER)) - g_dat.flags |= SMF_SENDONDBLENTER; if (db_get_b(0, SRMM_MODULE, SRMSGSET_INDENTTEXT, SRMSGDEFSET_INDENTTEXT)) g_dat.flags |= SMF_INDENTTEXT; + g_dat.sendMode = (SendMode)db_get_b(0, SRMM_MODULE, SRMSGSET_SENDMODE, SRMSGDEFSET_SENDMODE); g_dat.openFlags = db_get_dw(0, SRMM_MODULE, SRMSGSET_POPFLAGS, SRMSGDEFSET_POPFLAGS); g_dat.indentSize = db_get_w(0, SRMM_MODULE, SRMSGSET_INDENTSIZE, SRMSGDEFSET_INDENTSIZE); g_dat.logLineColour = db_get_dw(0, SRMM_MODULE, SRMSGSET_LINECOLOUR, SRMSGDEFSET_LINECOLOUR); diff --git a/plugins/Scriver/src/globals.h b/plugins/Scriver/src/globals.h index eb84086dc3..0800dda15f 100644 --- a/plugins/Scriver/src/globals.h +++ b/plugins/Scriver/src/globals.h @@ -29,8 +29,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define SMF_MINIMIZEONSEND 0x00000008 #define SMF_SAVEDRAFTS 0x00000040 #define SMF_DELTEMP 0x00000080 -#define SMF_SENDONENTER 0x00000100 -#define SMF_SENDONDBLENTER 0x00000200 #define SMF_SHOWPROGRESS 0x00000400 #define SMF_AVATAR 0x00000800 #define SMF_RTL 0x00004000 @@ -76,6 +74,13 @@ typedef struct ImageListUsageEntry_tag int used; } ImageListUsageEntry; +enum SendMode +{ + SEND_ON_ENTER, + SEND_ON_DBL_ENTER, + SEND_ON_CTRL_ENTER, + SEND_ON_SHIFT_ENTER +}; struct GlobalMessageData { @@ -85,6 +90,7 @@ struct GlobalMessageData DWORD limitNamesLength; int activeAlpha; int inactiveAlpha; + SendMode sendMode; int tabIconListUsageSize; int smileyAddInstalled; int popupInstalled; diff --git a/plugins/Scriver/src/input.cpp b/plugins/Scriver/src/input.cpp index 61acf8f9be..620db9d6b1 100644 --- a/plugins/Scriver/src/input.cpp +++ b/plugins/Scriver/src/input.cpp @@ -112,6 +112,39 @@ void InputAreaContextMenu(HWND hwnd, WPARAM, LPARAM lParam, MCONTACT hContact) DestroyMenu(hMenu); } +bool CScriverWindow::CheckSend() +{ + BOOL isShift = GetKeyState(VK_SHIFT) & 0x8000; + BOOL isCtrl = GetKeyState(VK_CONTROL) & 0x8000; + BOOL isAlt = GetKeyState(VK_MENU) & 0x8000; + + if (!isShift && !isCtrl && g_dat.sendMode == SEND_ON_ENTER) { + PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); + return true; + } + if (!isShift && isCtrl && g_dat.sendMode == SEND_ON_CTRL_ENTER) { + PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); + return true; + } + if (isShift && !isCtrl && g_dat.sendMode == SEND_ON_SHIFT_ENTER) { + PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); + return true; + } + + if (g_dat.sendMode == SEND_ON_DBL_ENTER) { + if (m_iLastEnterTime + 1000 < GetTickCount()) + m_iLastEnterTime = GetTickCount(); + else { + m_log.SendMsg(WM_KEYDOWN, VK_BACK, 0); + m_log.SendMsg(WM_KEYUP, VK_BACK, 0); + PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); + return true; + } + } + + return false; +} + int CScriverWindow::InputAreaShortcuts(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { BOOL isShift = GetKeyState(VK_SHIFT) & 0x8000; diff --git a/plugins/Scriver/src/msgdialog.cpp b/plugins/Scriver/src/msgdialog.cpp index 401371f491..85ca800e88 100644 --- a/plugins/Scriver/src/msgdialog.cpp +++ b/plugins/Scriver/src/msgdialog.cpp @@ -25,8 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define VALID_AVATAR(x) (x==PA_FORMAT_PNG||x==PA_FORMAT_JPEG||x==PA_FORMAT_ICON||x==PA_FORMAT_BMP||x==PA_FORMAT_GIF) -#define ENTERCLICKTIME 1000 //max time in ms during which a double-tap on enter will cause a send - static wchar_t* GetQuotedTextW(wchar_t *text) { size_t i, j, l = mir_wstrlen(text); @@ -1021,26 +1019,11 @@ LRESULT CSrmmWindow::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) if (result != -1) return result; - BOOL isCtrl = GetKeyState(VK_CONTROL) & 0x8000; - BOOL isAlt = GetKeyState(VK_MENU) & 0x8000; - switch (msg) { case WM_KEYDOWN: if (wParam == VK_RETURN) { - if ((isCtrl != 0) ^ (0 != (g_dat.flags & SMF_SENDONENTER))) { - PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); + if (CheckSend()) return 0; - } - if (g_dat.flags & SMF_SENDONDBLENTER) { - if (m_iLastEnterTime + ENTERCLICKTIME < GetTickCount()) - m_iLastEnterTime = GetTickCount(); - else { - m_log.SendMsg(WM_KEYDOWN, VK_BACK, 0); - m_log.SendMsg(WM_KEYUP, VK_BACK, 0); - PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); - return 0; - } - } } else m_iLastEnterTime = 0; break; @@ -1059,7 +1042,7 @@ LRESULT CSrmmWindow::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) case WM_SYSCHAR: m_iLastEnterTime = 0; - if ((wParam == 's' || wParam == 'S') && isAlt) { + if ((wParam == 's' || wParam == 'S') && (GetKeyState(VK_MENU) & 0x8000)) { PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); return 0; } diff --git a/plugins/Scriver/src/msgoptions.cpp b/plugins/Scriver/src/msgoptions.cpp index 2121c632df..5b4f434a2b 100644 --- a/plugins/Scriver/src/msgoptions.cpp +++ b/plugins/Scriver/src/msgoptions.cpp @@ -225,7 +225,7 @@ static const struct CheckBoxValues_t statusValues[] = class CMainOptionsDlg : public CBaseOptionDlg { CCtrlCheck chkAutoPopup, chkCascade, chkSavePerContact; - CCtrlCheck chkSendOnEnter, chkSendOnDblEnter, chkSendOnCtrlEnter; + CCtrlCombo cmbSendMode; CCtrlTreeView m_tree; void FillCheckBoxTree(const struct CheckBoxValues_t *values, int nValues, DWORD style) @@ -263,10 +263,8 @@ public: CBaseOptionDlg(IDD_OPT_MSGDLG), m_tree(this, IDC_POPLIST), chkCascade(this, IDC_CASCADE), + cmbSendMode(this, IDC_SENDMODE), chkAutoPopup(this, IDC_AUTOPOPUP), - chkSendOnEnter(this, IDC_SENDONENTER), - chkSendOnDblEnter(this, IDC_SENDONDBLENTER), - chkSendOnCtrlEnter(this, IDC_SENDONCTRLENTER), chkSavePerContact(this, IDC_SAVEPERCONTACT) { chkCascade.OnChange = Callback(this, &CMainOptionsDlg::onChange_Cascade); @@ -292,12 +290,11 @@ public: chkCascade.SetState(db_get_b(0, SRMM_MODULE, SRMSGSET_CASCADE, SRMSGDEFSET_CASCADE)); chkSavePerContact.SetState(db_get_b(0, SRMM_MODULE, SRMSGSET_SAVEPERCONTACT, SRMSGDEFSET_SAVEPERCONTACT)); - if (db_get_b(0, SRMM_MODULE, SRMSGSET_SENDONENTER, SRMSGDEFSET_SENDONENTER)) - CheckDlgButton(m_hwnd, IDC_SENDONENTER, BST_CHECKED); - else if (db_get_b(0, SRMM_MODULE, SRMSGSET_SENDONDBLENTER, SRMSGDEFSET_SENDONDBLENTER)) - CheckDlgButton(m_hwnd, IDC_SENDONDBLENTER, BST_CHECKED); - else - CheckDlgButton(m_hwnd, IDC_SENDONCTRLENTER, BST_CHECKED); + cmbSendMode.AddString(L"Enter"); + cmbSendMode.AddString(LPGENW("Double 'Enter'")); + cmbSendMode.AddString(L"Ctrl+Enter"); + cmbSendMode.AddString(L"Shift+Enter"); + cmbSendMode.SetCurSel(g_dat.sendMode); onChange_AutoPopup(0); } @@ -313,9 +310,7 @@ public: db_set_b(0, SRMM_MODULE, SRMSGSET_DELTEMP, (BYTE)IsDlgButtonChecked(m_hwnd, IDC_DELTEMP)); db_set_dw(0, SRMM_MODULE, SRMSGSET_MSGTIMEOUT, (DWORD)SendDlgItemMessage(m_hwnd, IDC_SECONDSSPIN, UDM_GETPOS, 0, 0) * 1000); - db_set_b(0, SRMM_MODULE, SRMSGSET_SENDONENTER, (BYTE)IsDlgButtonChecked(m_hwnd, IDC_SENDONENTER)); - db_set_b(0, SRMM_MODULE, SRMSGSET_SENDONDBLENTER, (BYTE)IsDlgButtonChecked(m_hwnd, IDC_SENDONDBLENTER)); - db_set_b(0, SRMM_MODULE, SRMSGSET_SENDONCTRLENTER, (BYTE)IsDlgButtonChecked(m_hwnd, IDC_SENDONCTRLENTER)); + db_set_b(0, SRMM_MODULE, SRMSGSET_SENDMODE, cmbSendMode.GetCurSel()); db_set_b(0, SRMM_MODULE, SRMSGSET_SAVEPERCONTACT, chkSavePerContact.GetState()); db_set_b(0, SRMM_MODULE, SRMSGSET_CASCADE, chkCascade.GetState()); diff --git a/plugins/Scriver/src/msgs.h b/plugins/Scriver/src/msgs.h index 8950709813..988499f21a 100644 --- a/plugins/Scriver/src/msgs.h +++ b/plugins/Scriver/src/msgs.h @@ -83,7 +83,8 @@ class CScriverWindow : public CSrmmBaseDialog protected: CScriverWindow(int iDialog, SESSION_INFO* = nullptr); - int InputAreaShortcuts(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); + bool CheckSend(); + int InputAreaShortcuts(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); public: void CloseTab() override; @@ -375,12 +376,6 @@ extern int fontOptionsListSize; #define SRMSGDEFSET_AUTOMIN 0 #define SRMSGSET_AUTOCLOSE "AutoClose" #define SRMSGDEFSET_AUTOCLOSE 0 -#define SRMSGSET_SENDONENTER "SendOnEnter" -#define SRMSGDEFSET_SENDONENTER 1 -#define SRMSGSET_SENDONDBLENTER "SendOnDblEnter" -#define SRMSGDEFSET_SENDONDBLENTER 0 -#define SRMSGSET_SENDONCTRLENTER "SendOnCtrlEnter" -#define SRMSGDEFSET_SENDONCTRLENTER 0 #define SRMSGSET_SENDBUTTON "UseSendButton" #define SRMSGDEFSET_SENDBUTTON 0 #define SRMSGSET_CHARCOUNT "ShowCharCount" @@ -485,4 +480,8 @@ extern int fontOptionsListSize; #define SRMSGSET_AUTORESIZELINES "AutoResizeLines" #define SRMSGDEFSET_AUTORESIZELINES 2 + +#define SRMSGSET_SENDMODE "SendMode" +#define SRMSGDEFSET_SENDMODE 0 + #endif diff --git a/plugins/Scriver/src/resource.h b/plugins/Scriver/src/resource.h index 138cce6651..a24cbd440f 100644 --- a/plugins/Scriver/src/resource.h +++ b/plugins/Scriver/src/resource.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. -// Used by ..\res\resource.rc +// Used by w:\miranda-ng\plugins\Scriver\res\resource.rc // #define VS_VERSION_INFO 1 #define IDD_MSGWIN 100 @@ -106,12 +106,10 @@ #define IDC_LOADCOUNTSPIN 1040 #define IDC_SHOWSTATUSBAR 1041 #define IDC_SHOWTOOLBAR 1042 -#define IDC_SENDONENTER 1043 -#define IDC_SENDONDBLENTER 1044 +#define IDC_SENDMODE 1043 #define IDC_LOADTIMEN 1045 #define IDC_LOADTIMESPIN 1046 #define IDC_LOADTIME 1047 -#define IDC_SENDONCTRLENTER 1048 #define IDC_SHOWTITLEBAR 1050 #define IDC_STMINSOLD 1051 #define IDC_SHOWPROGRESS 1052 @@ -248,9 +246,9 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_RESOURCE_VALUE 104 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1003 +#define _APS_NEXT_CONTROL_VALUE 1005 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/plugins/Scriver/src/version.h b/plugins/Scriver/src/version.h index 2da3d6bb5b..0cd894485b 100644 --- a/plugins/Scriver/src/version.h +++ b/plugins/Scriver/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 3 #define __MINOR_VERSION 0 #define __RELEASE_NUM 1 -#define __BUILD_NUM 9 +#define __BUILD_NUM 10 #include -- cgit v1.2.3