From 90c87cac6ad51642d1dd9d9a2400450e667e1da7 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 26 Mar 2022 15:41:27 +0300 Subject: =?UTF-8?q?fixes=20#3057=20(=D0=A3=D0=BD=D0=B8=D1=84=D0=B8=D1=86?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BD=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D1=83=20=D0=B3=D0=BE=D1=80=D1=8F?= =?UTF-8?q?=D1=87=D0=B8=D1=85=20=D0=BA=D0=BB=D0=B0=D0=B2=D0=B8=D1=88=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/m_hotkeys.h | 4 +- include/m_srmm_int.h | 8 +- libs/win32/mir_app.lib | Bin 225328 -> 225554 bytes libs/win64/mir_app.lib | Bin 221068 -> 221278 bytes plugins/Scriver/res/resource.rc | 2 - plugins/Scriver/src/chat_main.cpp | 2 + plugins/Scriver/src/globals.cpp | 17 -- plugins/Scriver/src/globals.h | 17 +- plugins/Scriver/src/input.cpp | 30 --- plugins/Scriver/src/msgdialog.cpp | 17 -- plugins/Scriver/src/msgoptions.cpp | 10 - plugins/Scriver/src/msgs.h | 3 +- plugins/Scriver/src/resource.h | 1 - plugins/TabSRMM/src/chat_main.cpp | 2 + plugins/TabSRMM/src/generic_msghandlers.cpp | 7 - plugins/TabSRMM/src/globals.cpp | 3 - plugins/TabSRMM/src/globals.h | 3 - plugins/TabSRMM/src/hotkeyhandler.cpp | 1 - plugins/TabSRMM/src/msgdialog.cpp | 46 +---- plugins/TabSRMM/src/msgoptions.cpp | 3 - plugins/TabSRMM/src/msgs.h | 305 ++++++++++++++-------------- protocols/JabberG/src/jabber_thread.cpp | 5 +- src/core/stdmsg/res/resource.rc | 4 - src/core/stdmsg/src/chat_manager.cpp | 4 +- src/core/stdmsg/src/chat_window.cpp | 2 +- src/core/stdmsg/src/cmdlist.cpp | 2 +- src/core/stdmsg/src/globals.cpp | 53 +---- src/core/stdmsg/src/globals.h | 74 ------- src/core/stdmsg/src/msgdialog.cpp | 110 ++++------ src/core/stdmsg/src/msglog.cpp | 16 +- src/core/stdmsg/src/msgoptions.cpp | 124 ++++++----- src/core/stdmsg/src/msgs.cpp | 14 +- src/core/stdmsg/src/msgs.h | 1 - src/core/stdmsg/src/resource.h | 3 - src/core/stdmsg/src/srmm.cpp | 42 +++- src/core/stdmsg/src/stdafx.h | 42 +++- src/core/stdmsg/src/tabs.cpp | 10 +- src/core/stdmsg/stdmsg.vcxproj | 1 - src/core/stdmsg/stdmsg.vcxproj.filters | 3 - src/mir_app/src/chat.h | 2 + src/mir_app/src/hotkeys.cpp | 2 +- src/mir_app/src/miranda.h | 2 + src/mir_app/src/srmm_base.cpp | 12 ++ src/mir_app/src/srmm_log.cpp | 2 +- src/mir_app/src/srmm_util.cpp | 24 +++ 45 files changed, 420 insertions(+), 615 deletions(-) delete mode 100644 src/core/stdmsg/src/globals.h diff --git a/include/m_hotkeys.h b/include/m_hotkeys.h index d1a4adc0cf..61728eca8b 100644 --- a/include/m_hotkeys.h +++ b/include/m_hotkeys.h @@ -35,8 +35,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. struct HOTKEYDESC { const char *pszName; // name to refer to hotkey when playing and in db - MAllStrings szDescription; // description for options dialog - MAllStrings szSection; // section name used to group sounds (NULL is acceptable) + MAllCStrings szDescription; // description for options dialog + MAllCStrings szSection; // section name used to group sounds (NULL is acceptable) const char *pszService; // Service to call when HotKey Pressed uint16_t DefHotKey; // default hot key for action uint32_t dwFlags; // one of HKD_* constants diff --git a/include/m_srmm_int.h b/include/m_srmm_int.h index 24fcadda68..bb7d29f411 100644 --- a/include/m_srmm_int.h +++ b/include/m_srmm_int.h @@ -210,7 +210,6 @@ protected: CCtrlRichEdit m_message; SESSION_INFO *m_si; COLORREF m_clrInputBG, m_clrInputFG; - time_t m_iLastEnterTime; // user typing support; uint32_t m_nLastTyping = 0; @@ -219,7 +218,7 @@ protected: const USERINFO* m_pUserTyping = nullptr; CCtrlListBox m_nickList; - CCtrlButton m_btnColor, m_btnBkColor; + CCtrlButton m_btnColor, m_btnBkColor, m_btnOk; CCtrlButton m_btnBold, m_btnItalic, m_btnUnderline; CCtrlButton m_btnHistory, m_btnChannelMgr, m_btnNickList, m_btnFilter; @@ -288,6 +287,11 @@ EXTERN_C MIR_APP_DLL(DWORD) CALLBACK Srmm_LogStreamCallback(DWORD_PTR dwCookie, EXTERN_C MIR_APP_DLL(void) Srmm_Broadcast(UINT, WPARAM, LPARAM); +///////////////////////////////////////////////////////////////////////////////////////// +// creates plugin-specific hot key for sending messages + +EXTERN_C MIR_APP_DLL(void) Srmm_CreateHotkey(const char *pszSection, const char *pszDescription); + ///////////////////////////////////////////////////////////////////////////////////////// // finds a SRMM window using hContact diff --git a/libs/win32/mir_app.lib b/libs/win32/mir_app.lib index fa41ea0a59..41f431c6ac 100644 Binary files a/libs/win32/mir_app.lib and b/libs/win32/mir_app.lib differ diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib index b2e3e9b86c..6357328d82 100644 Binary files a/libs/win64/mir_app.lib and b/libs/win64/mir_app.lib differ diff --git a/plugins/Scriver/res/resource.rc b/plugins/Scriver/res/resource.rc index 4164a6a1af..24af2de9b0 100644 --- a/plugins/Scriver/res/resource.rc +++ b/plugins/Scriver/res/resource.rc @@ -47,8 +47,6 @@ 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 - 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_main.cpp b/plugins/Scriver/src/chat_main.cpp index c3f59fb6e1..d06974eb58 100644 --- a/plugins/Scriver/src/chat_main.cpp +++ b/plugins/Scriver/src/chat_main.cpp @@ -159,6 +159,8 @@ int Chat_Load() g_chatApi.OnFlashHighlight = OnFlashHighlight; g_chatApi.ShowRoom = ShowRoom; + Srmm_CreateHotkey(LPGEN("Messaging"), LPGEN("Action: Send message")); + oldDoPopup = g_chatApi.DoPopup; g_chatApi.DoPopup = DoPopup; oldDoTrayIcon = g_chatApi.DoTrayIcon; g_chatApi.DoTrayIcon = DoTrayIcon; g_chatApi.ReloadSettings(); diff --git a/plugins/Scriver/src/globals.cpp b/plugins/Scriver/src/globals.cpp index 03b1fe1cb5..2b735d9d3c 100644 --- a/plugins/Scriver/src/globals.cpp +++ b/plugins/Scriver/src/globals.cpp @@ -269,22 +269,6 @@ 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; @@ -346,7 +330,6 @@ void ReloadGlobals() g_dat.flags.bSaveDrafts = g_plugin.bSaveDrafts; g_dat.flags.bDelTemp = g_plugin.bDelTemp; - g_dat.sendMode = (SendMode)g_plugin.getByte(SRMSGSET_SENDMODE, SRMSGDEFSET_SENDMODE); g_dat.openFlags = g_plugin.iPopFlags; g_dat.indentSize = g_plugin.iIndentSize; g_dat.logLineColour = g_plugin.getDword(SRMSGSET_LINECOLOUR, SRMSGDEFSET_LINECOLOUR); diff --git a/plugins/Scriver/src/globals.h b/plugins/Scriver/src/globals.h index af10248c72..5a125e5039 100644 --- a/plugins/Scriver/src/globals.h +++ b/plugins/Scriver/src/globals.h @@ -23,18 +23,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef SRMM_GLOBALS_H #define SRMM_GLOBALS_H -typedef struct ImageListUsageEntry_tag +struct ImageListUsageEntry { int index; int used; -} ImageListUsageEntry; - -enum SendMode -{ - SEND_ON_ENTER, - SEND_ON_DBL_ENTER, - SEND_ON_CTRL_ENTER, - SEND_ON_SHIFT_ENTER }; struct WindowFlags @@ -99,11 +91,10 @@ struct GlobalMessageData TabFlags flags2; }; - uint32_t openFlags; - uint32_t limitNamesLength; + uint32_t openFlags; + uint32_t limitNamesLength; int activeAlpha; int inactiveAlpha; - SendMode sendMode; int tabIconListUsageSize; int smileyAddInstalled; int limitTabsNum; @@ -116,7 +107,7 @@ struct GlobalMessageData HBRUSH hInfobarBrush; int toolbarPosition; HWND hFocusWnd; - uint32_t logLineColour; + uint32_t logLineColour; int logPixelSX; int logPixelSY; HICON hMsgIcon; diff --git a/plugins/Scriver/src/input.cpp b/plugins/Scriver/src/input.cpp index 9dbb22f1b3..bc6da8d3d9 100644 --- a/plugins/Scriver/src/input.cpp +++ b/plugins/Scriver/src/input.cpp @@ -112,36 +112,6 @@ void InputAreaContextMenu(HWND hwnd, WPARAM, LPARAM lParam, MCONTACT hContact) DestroyMenu(hMenu); } -bool CMsgDialog::CheckSend() -{ - BOOL isShift = GetKeyState(VK_SHIFT) & 0x8000; - BOOL isCtrl = GetKeyState(VK_CONTROL) & 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 { - PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); - return true; - } - } - - return false; -} - int CMsgDialog::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 024c43fe97..6890f3c971 100644 --- a/plugins/Scriver/src/msgdialog.cpp +++ b/plugins/Scriver/src/msgdialog.cpp @@ -105,7 +105,6 @@ CMsgDialog::CMsgDialog(MCONTACT hContact, bool bIncoming) : m_splitterX(this, IDC_SPLITTERX), m_splitterY(this, IDC_SPLITTERY), - m_btnOk(this, IDOK), m_btnAdd(this, IDC_ADD), m_btnQuote(this, IDC_QUOTE), m_btnDetails(this, IDC_DETAILS), @@ -126,7 +125,6 @@ CMsgDialog::CMsgDialog(SESSION_INFO *si) : m_splitterX(this, IDC_SPLITTERX), m_splitterY(this, IDC_SPLITTERY), - m_btnOk(this, IDOK), m_btnAdd(this, IDC_ADD), m_btnQuote(this, IDC_QUOTE), m_btnDetails(this, IDC_DETAILS), @@ -858,12 +856,6 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) switch (msg) { case WM_KEYDOWN: - if (wParam == VK_RETURN) { - if (CheckSend()) - return 0; - } - else m_iLastEnterTime = 0; - if (isChat()) { bool isShift = (GetKeyState(VK_SHIFT) & 0x8000) != 0; bool isCtrl = (GetKeyState(VK_CONTROL) & 0x8000) != 0; @@ -918,16 +910,7 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) SetActiveWindow(m_hwnd); break; - case WM_MOUSEWHEEL: - case WM_LBUTTONDOWN: - case WM_RBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_KILLFOCUS: - m_iLastEnterTime = 0; - break; - case WM_SYSCHAR: - m_iLastEnterTime = 0; 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 9b0f0c8d57..8ddb352a08 100644 --- a/plugins/Scriver/src/msgoptions.cpp +++ b/plugins/Scriver/src/msgoptions.cpp @@ -244,7 +244,6 @@ class CMainOptionsDlg : public CBaseOptionDlg CCtrlSpin spinTimeout; CCtrlCheck chkAutoMin, chkAutoPopup, chkCascade, chkSavePerContact, chkStayMinimized; CCtrlCheck chkSaveDrafts, chkDelTemp, chkHideContainer; - CCtrlCombo cmbSendMode; CCtrlTreeView m_tree; public: @@ -255,7 +254,6 @@ public: chkAutoMin(this, IDC_AUTOMIN), chkCascade(this, IDC_CASCADE), chkDelTemp(this, IDC_DELTEMP), - cmbSendMode(this, IDC_SENDMODE), chkAutoPopup(this, IDC_AUTOPOPUP), chkSaveDrafts(this, IDC_SAVEDRAFTS), chkHideContainer(this, IDC_HIDECONTAINERS), @@ -280,20 +278,12 @@ public: { SetWindowLongPtr(m_tree.GetHwnd(), GWL_STYLE, (GetWindowLongPtr(m_tree.GetHwnd(), GWL_STYLE) & ~WS_BORDER) | TVS_NOHSCROLL | TVS_CHECKBOXES); FillCheckBoxTree(statusValues, _countof(statusValues), g_plugin.iPopFlags); - - cmbSendMode.AddString(TranslateT("Enter")); - cmbSendMode.AddString(TranslateT("Double 'Enter'")); - cmbSendMode.AddString(TranslateT("Ctrl+Enter")); - cmbSendMode.AddString(TranslateT("Shift+Enter")); - cmbSendMode.SetCurSel(g_dat.sendMode); return true; } bool OnApply() override { g_plugin.iPopFlags = MakeCheckBoxTreeFlags(); - - g_plugin.setByte(SRMSGSET_SENDMODE, cmbSendMode.GetCurSel()); return true; } diff --git a/plugins/Scriver/src/msgs.h b/plugins/Scriver/src/msgs.h index 7a24047769..98588d167b 100644 --- a/plugins/Scriver/src/msgs.h +++ b/plugins/Scriver/src/msgs.h @@ -87,7 +87,6 @@ class CMsgDialog : public CSrmmBaseDialog friend struct ParentWindowData; friend INT_PTR CALLBACK InfobarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); - bool CheckSend(void); void ClearLog(void); HICON GetTabIcon(void); void GetTitlebarIcon(struct TitleBarData *tbd); @@ -145,7 +144,7 @@ class CMsgDialog : public CSrmmBaseDialog wchar_t *m_wszSearchQuery, *m_wszSearchResult; SESSION_INFO *m_pLastSession; - CCtrlButton m_btnOk, m_btnAdd, m_btnUserMenu, m_btnQuote, m_btnDetails; + CCtrlButton m_btnAdd, m_btnUserMenu, m_btnQuote, m_btnDetails; CSplitter m_splitterX, m_splitterY; public: diff --git a/plugins/Scriver/src/resource.h b/plugins/Scriver/src/resource.h index 4793e60cde..acb675f715 100644 --- a/plugins/Scriver/src/resource.h +++ b/plugins/Scriver/src/resource.h @@ -98,7 +98,6 @@ #define IDC_LOADCOUNTSPIN 1040 #define IDC_SHOWSTATUSBAR 1041 #define IDC_SHOWTOOLBAR 1042 -#define IDC_SENDMODE 1043 #define IDC_LOADTIMEN 1045 #define IDC_LOADTIMESPIN 1046 #define IDC_LOADTIME 1047 diff --git a/plugins/TabSRMM/src/chat_main.cpp b/plugins/TabSRMM/src/chat_main.cpp index 00c4806289..5150712a36 100644 --- a/plugins/TabSRMM/src/chat_main.cpp +++ b/plugins/TabSRMM/src/chat_main.cpp @@ -371,6 +371,8 @@ int Chat_Load() g_chatApi.ShowRoom = stubShowRoom; g_chatApi.OnLoadSettings = OnLoadSettings; + Srmm_CreateHotkey(TABSRMM_HK_SECTION_GENERIC, LPGEN("Send Message")); + // this operation is unsafe, that's why we restore the old pci state on exit g_chatApi.DoSoundsFlashPopupTrayStuff = DoSoundsFlashPopupTrayStuff; g_chatApi.IsHighlighted = IsHighlighted; diff --git a/plugins/TabSRMM/src/generic_msghandlers.cpp b/plugins/TabSRMM/src/generic_msghandlers.cpp index 6e816b548c..33f53404b2 100644 --- a/plugins/TabSRMM/src/generic_msghandlers.cpp +++ b/plugins/TabSRMM/src/generic_msghandlers.cpp @@ -135,13 +135,6 @@ bool CMsgDialog::DM_GenericHotkeysCheck(MSG *message) m_pContainer->OptionsDialog(); return true; - case TABSRMM_HK_SEND: - if (!(GetWindowLongPtr(m_message.GetHwnd(), GWL_STYLE) & ES_READONLY)) { - PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); - return true; - } - break; - case TABSRMM_HK_TOGGLEINFOPANEL: m_pPanel.setActive(!m_pPanel.isActive()); m_pPanel.showHide(); diff --git a/plugins/TabSRMM/src/globals.cpp b/plugins/TabSRMM/src/globals.cpp index 2e6e269b0f..1e495f0c33 100644 --- a/plugins/TabSRMM/src/globals.cpp +++ b/plugins/TabSRMM/src/globals.cpp @@ -120,9 +120,6 @@ void CGlobals::reloadSettings(bool fReloadSkins) m_ncm.cbSize = sizeof(NONCLIENTMETRICS); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &m_ncm, 0); - m_bSendOnShiftEnter = M.GetBool("sendonshiftenter", false); - m_bSendOnEnter = M.GetBool(SRMSGSET_SENDONENTER, SRMSGDEFSET_SENDONENTER); - m_bSendOnDblEnter = M.GetBool("SendOnDblEnter", false); m_bAutoSwitchTabs = M.GetBool("autoswitchtabs", true); m_iTabNameLimit = db_get_w(0, SRMSGMOD_T, "cut_at", 15); m_bCutContactNameOnTabs = M.GetBool("cuttitle", false); diff --git a/plugins/TabSRMM/src/globals.h b/plugins/TabSRMM/src/globals.h index 22fa93b00f..1b68521a53 100644 --- a/plugins/TabSRMM/src/globals.h +++ b/plugins/TabSRMM/src/globals.h @@ -79,9 +79,6 @@ public: // dynamic options, need reload when options change int m_iTabNameLimit; bool m_bAllowTab; - bool m_bSendOnShiftEnter; - bool m_bSendOnEnter; - bool m_bSendOnDblEnter; bool m_bAutoSwitchTabs; bool m_bCutContactNameOnTabs; bool m_bHideOnClose; diff --git a/plugins/TabSRMM/src/hotkeyhandler.cpp b/plugins/TabSRMM/src/hotkeyhandler.cpp index 8137c49756..63420a6f0c 100644 --- a/plugins/TabSRMM/src/hotkeyhandler.cpp +++ b/plugins/TabSRMM/src/hotkeyhandler.cpp @@ -49,7 +49,6 @@ static HOTKEYDESC _hotkeydescs[] = { { "tabsrmm_clear", LPGEN("Clear message area"), TABSRMM_HK_SECTION_IM, nullptr, HOTKEYCODE(HOTKEYF_CONTROL, 'K'), 0, TABSRMM_HK_CLEARMSG }, { "tabsrmm_sendlater", LPGEN("Toggle send later"), TABSRMM_HK_SECTION_IM, nullptr, HOTKEYCODE(HOTKEYF_CONTROL | HOTKEYF_SHIFT, 'S'), 0, TABSRMM_HK_TOGGLESENDLATER }, - { "tabsrmm_send", LPGEN("Send message"), TABSRMM_HK_SECTION_GENERIC, nullptr, 0, 0, TABSRMM_HK_SEND }, { "tabsrmm_hist", LPGEN("Show message history"), TABSRMM_HK_SECTION_GENERIC, nullptr, HOTKEYCODE(HOTKEYF_ALT, 'H'), 0, TABSRMM_HK_HISTORY }, { "tabsrmm_sendmenu", LPGEN("Show send menu"), TABSRMM_HK_SECTION_IM, nullptr, HOTKEYCODE(HOTKEYF_CONTROL, 'S'), 0, TABSRMM_HK_SENDMENU }, { "tabsrmm_protomenu", LPGEN("Show protocol menu"), TABSRMM_HK_SECTION_IM, nullptr, HOTKEYCODE(HOTKEYF_CONTROL, 'P'), 0, TABSRMM_HK_PROTOMENU }, diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp index d008b50f8d..f10b41b967 100644 --- a/plugins/TabSRMM/src/msgdialog.cpp +++ b/plugins/TabSRMM/src/msgdialog.cpp @@ -313,7 +313,6 @@ CMsgDialog::CMsgDialog(int iDlgId, MCONTACT hContact) : CSuper(g_plugin, iDlgId), m_pPanel(this), timerAwayMsg(this, 4), - m_btnOk(this, IDOK), m_btnAdd(this, IDC_ADD), m_btnQuote(this, IDC_QUOTE), m_btnCancelAdd(this, IDC_CANCELADD) @@ -331,7 +330,6 @@ CMsgDialog::CMsgDialog(SESSION_INFO *si) : CSuper(g_plugin, IDD_CHANNEL, si), m_pPanel(this), timerAwayMsg(this, 4), - m_btnOk(this, IDOK), m_btnAdd(this, IDC_ADD), m_btnQuote(this, IDC_QUOTE), m_btnCancelAdd(this, IDC_CANCELADD) @@ -1505,6 +1503,7 @@ int CMsgDialog::OnFilter(MSGFILTER *pFilter) RedrawWindow(m_hwnd, nullptr, nullptr, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN); return _dlgReturn(m_hwnd, 1); } + if (DM_GenericHotkeysCheck(&message)) { m_bkeyProcessed = true; return _dlgReturn(m_hwnd, 1); @@ -1786,8 +1785,6 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) case WM_MOUSEWHEEL: if (DM_MouseWheelHandler(wParam, lParam) == 0) return 0; - - m_iLastEnterTime = 0; break; case EM_PASTESPECIAL: @@ -1857,47 +1854,11 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) replaceStrW(m_wszSearchResult, nullptr); } - if (wParam == VK_RETURN) { - if (m_bEditNotesActive) - break; - - if (isShift) { - if (PluginConfig.m_bSendOnShiftEnter) { - PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); - return 0; - } - else break; - } - if ((isCtrl && !isShift) ^ (0 != PluginConfig.m_bSendOnEnter)) { - PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); - return 0; - } - if (PluginConfig.m_bSendOnEnter || PluginConfig.m_bSendOnDblEnter) { - if (isCtrl) - break; - - if (PluginConfig.m_bSendOnDblEnter) { - if (m_iLastEnterTime + 2 < time(0)) { - m_iLastEnterTime = time(0); - break; - } - 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; - } - } - PostMessage(m_hwnd, WM_COMMAND, IDOK, 0); - return 0; - } - else break; - } - else m_iLastEnterTime = 0; + if (wParam == VK_RETURN && m_bEditNotesActive) + break; if (isCtrl && !isAlt && !isShift) { if (wParam == VK_UP || wParam == VK_DOWN) { // input history scrolling (ctrl-up / down) - m_iLastEnterTime = 0; m_cache->inputHistoryEvent(wParam); return 0; } @@ -1912,7 +1873,6 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) case VK_END: WPARAM wp = 0; - m_iLastEnterTime = 0; if (wParam == VK_UP) wp = MAKEWPARAM(SB_LINEUP, 0); else if (wParam == VK_PRIOR) diff --git a/plugins/TabSRMM/src/msgoptions.cpp b/plugins/TabSRMM/src/msgoptions.cpp index 98199536a6..fce1efd134 100644 --- a/plugins/TabSRMM/src/msgoptions.cpp +++ b/plugins/TabSRMM/src/msgoptions.cpp @@ -476,9 +476,6 @@ static TOptionListGroup lvGroupsMsg[] = static TOptionListItem lvItemsMsg[] = { - { 0, LPGENW("Send on Shift+Enter"), 0, LOI_TYPE_SETTING, (UINT_PTR)"sendonshiftenter", 1 }, - { 0, LPGENW("Send message on 'Enter'"), SRMSGDEFSET_SENDONENTER, LOI_TYPE_SETTING, (UINT_PTR)SRMSGSET_SENDONENTER, 1 }, - { 0, LPGENW("Send message on double 'Enter'"), 0, LOI_TYPE_SETTING, (UINT_PTR)"SendOnDblEnter", 1 }, { 0, LPGENW("Minimize the message window on send"), SRMSGDEFSET_AUTOMIN, LOI_TYPE_SETTING, (UINT_PTR)SRMSGSET_AUTOMIN, 1 }, { 0, LPGENW("Close the message window on send"), 0, LOI_TYPE_SETTING, (UINT_PTR)"AutoClose", 1 }, { 0, LPGENW("Always flash contact list and tray icon for new messages"), 0, LOI_TYPE_SETTING, (UINT_PTR)"flashcl", 0 }, diff --git a/plugins/TabSRMM/src/msgs.h b/plugins/TabSRMM/src/msgs.h index 1df4c26ae1..671fd02512 100644 --- a/plugins/TabSRMM/src/msgs.h +++ b/plugins/TabSRMM/src/msgs.h @@ -415,11 +415,6 @@ class CMsgDialog : public CSrmmBaseDialog friend class CLogWindow; friend class CProxyWindow; - void BB_InitDlgButtons(void); - void BB_RefreshTheme(void); - BOOL BB_SetButtonsPos(void); - void BB_RedrawButtons(void); - std::map mapHidden; __forceinline bool BB_IsDisplayed(CustomButtonData *cbd) const @@ -427,160 +422,165 @@ class CMsgDialog : public CSrmmBaseDialog return (!isChat() && cbd->m_bIMButton) || (isChat() && cbd->m_bChatButton); } - void CB_DestroyAllButtons(void); - void CB_DestroyButton(uint32_t dwButtonCID, uint32_t dwFlags); - void CB_ChangeButton(CustomButtonData *cbd); - - void DM_AddDivider(void); - HWND DM_CreateClist(void); - void DM_DismissTip(const POINT& pt); - void DM_ErrorDetected(int type, int flag); - void DM_EventAdded(WPARAM wParam, LPARAM lParam); - void DM_FreeTheme(void); - bool DM_GenericHotkeysCheck(MSG *message); - void DM_HandleAutoSizeRequest(REQRESIZE *rr); - void DM_InitRichEdit(void); - void DM_InitTip(void); - LRESULT DM_MouseWheelHandler(WPARAM wParam, LPARAM lParam); - LRESULT DM_MsgWindowCmdHandler(UINT cmd, WPARAM wParam, LPARAM lParam); - void DM_NotifyTyping(int mode); - void DM_SetDBButtonStates(); - int DM_SplitterGlobalEvent(WPARAM wParam, LPARAM lParam); - void DM_ThemeChanged(void); - void DM_Typing(bool fForceOff); - void DM_UpdateLastMessage(void) const; - - void AdjustBottomAvatarDisplay(void); - void CalcDynamicAvatarSize(BITMAP *bminfo); - void DetermineMinHeight(void); - BOOL DoRtfToTags(CMStringW &pszText) const; - void FindFirstEvent(void); - int FindRTLLocale(void); - void FlashOnClist(MEVENT hEvent, DBEVENTINFO *dbei); - void FlashTab(bool bInvertMode); - LRESULT GetSendButtonState(); - void GetSendFormat(void); - HICON GetXStatusIcon() const; - void HandlePasteAndSend(void); - void Init(void); - void LoadContactAvatar(void); - void LoadOwnAvatar(void); - void LoadSplitter(void); - void PlayIncomingSound(void) const; - LRESULT ProcessHotkeysByMsgFilter(const CCtrlBase &pCtrl, UINT msg, WPARAM wParam, LPARAM lParam); - void SaveAvatarToFile(HBITMAP hbm, int isOwnPic); - void SendHBitmapAsFile(HBITMAP hbmp) const; - void ShowPopupMenu(const CCtrlBase&, POINT pt); - void StreamEvents(MEVENT, int, bool); - void UpdateWindowIcon(void); - void UpdateWindowState(UINT msg); - void VerifyProxy(void); - LRESULT WMCopyHandler(UINT uMsg, WPARAM wParam, LPARAM lParam); - - uint16_t m_wStatus, m_wOldStatus; - size_t m_iSendBufferSize; - int m_iSendLength; // message length in utf-8 octets - HICON m_hSmileyIcon; - HWND m_hwndContactPic, m_hwndPanelPic, m_hwndPanelPicParent; - UINT m_bbLSideWidth, m_bbRSideWidth; - uint8_t kstate[256]; + void BB_InitDlgButtons(void); + void BB_RefreshTheme(void); + BOOL BB_SetButtonsPos(void); + void BB_RedrawButtons(void); + + void CB_DestroyAllButtons(void); + void CB_DestroyButton(uint32_t dwButtonCID, uint32_t dwFlags); + void CB_ChangeButton(CustomButtonData *cbd); + + void DM_AddDivider(void); + HWND DM_CreateClist(void); + void DM_DismissTip(const POINT& pt); + void DM_ErrorDetected(int type, int flag); + void DM_EventAdded(WPARAM wParam, LPARAM lParam); + void DM_FreeTheme(void); + bool DM_GenericHotkeysCheck(MSG *message); + void DM_HandleAutoSizeRequest(REQRESIZE *rr); + void DM_InitRichEdit(void); + void DM_InitTip(void); + LRESULT DM_MouseWheelHandler(WPARAM wParam, LPARAM lParam); + LRESULT DM_MsgWindowCmdHandler(UINT cmd, WPARAM wParam, LPARAM lParam); + void DM_NotifyTyping(int mode); + void DM_SetDBButtonStates(); + int DM_SplitterGlobalEvent(WPARAM wParam, LPARAM lParam); + void DM_ThemeChanged(void); + void DM_Typing(bool fForceOff); + void DM_UpdateLastMessage(void) const; + + void AdjustBottomAvatarDisplay(void); + void CalcDynamicAvatarSize(BITMAP *bminfo); + void DetermineMinHeight(void); + BOOL DoRtfToTags(CMStringW &pszText) const; + void FindFirstEvent(void); + int FindRTLLocale(void); + void FlashOnClist(MEVENT hEvent, DBEVENTINFO *dbei); + void FlashTab(bool bInvertMode); + LRESULT GetSendButtonState(); + void GetSendFormat(void); + HICON GetXStatusIcon() const; + void HandlePasteAndSend(void); + void Init(void); + void LoadContactAvatar(void); + void LoadOwnAvatar(void); + void LoadSplitter(void); + void PlayIncomingSound(void) const; + LRESULT ProcessHotkeysByMsgFilter(const CCtrlBase &pCtrl, UINT msg, WPARAM wParam, LPARAM lParam); + void SaveAvatarToFile(HBITMAP hbm, int isOwnPic); + void SendHBitmapAsFile(HBITMAP hbmp) const; + void ShowPopupMenu(const CCtrlBase&, POINT pt); + void StreamEvents(MEVENT, int, bool); + void UpdateWindowIcon(void); + void UpdateWindowState(UINT msg); + void VerifyProxy(void); + LRESULT WMCopyHandler(UINT uMsg, WPARAM wParam, LPARAM lParam); + + uint16_t m_wStatus, m_wOldStatus; + size_t m_iSendBufferSize; + int m_iSendLength; // message length in utf-8 octets + HICON m_hSmileyIcon; + HWND m_hwndContactPic, m_hwndPanelPic, m_hwndPanelPicParent; + UINT m_bbLSideWidth, m_bbRSideWidth; + uint8_t kstate[256]; - RECT m_rcNick, m_rcUIN, m_rcStatus, m_rcPic; - int m_originalSplitterY; - SIZE m_minEditBoxSize; - uint32_t m_lastMessage; - uint32_t m_dwTickLastEvent; - HBITMAP m_hOwnPic; - SIZE m_pic; + RECT m_rcNick, m_rcUIN, m_rcStatus, m_rcPic; + int m_originalSplitterY; + SIZE m_minEditBoxSize; + uint32_t m_lastMessage; + uint32_t m_dwTickLastEvent; + HBITMAP m_hOwnPic; + SIZE m_pic; CMStringW m_szStatusText; - HICON m_szStatusIcon; - bool m_bStatusSet; + HICON m_szStatusIcon; + bool m_bStatusSet; - bool m_bShowInfoAvatar, m_bShowUIElements; - bool m_bFlashClist, m_bScrollingDisabled, m_bAwayMsgTimer; - bool m_bDelayedSplitter, m_bWarnClose; - bool m_bUseOffset; - bool m_bkeyProcessed; - bool m_fLimitedUpdate; - bool m_bClrAdded; - bool m_bInsertMode, m_bInitMode = true; - bool m_bDeferredScroll, m_bDeferredRemakeLog; - bool m_bWasBackgroundCreate; - - int m_iRealAvatarHeight; - int m_iButtonBarReallyNeeds; - uint32_t m_dwLastActivity; - MEVENT m_hFlashingEvent; - int m_SendFormat; - LCID m_lcid; - wchar_t m_lcID[10]; - int m_iPanelAvatarX, m_iPanelAvatarY; - HWND m_hwndTip; - uint32_t m_panelStatusCX; - int m_textLen; // current text len - LONG m_ipFieldHeight; - WPARAM m_wParam; // used for "delayed" actions like moved splitters in minimized windows - LPARAM m_lParam; - int m_iHaveRTLLang; + bool m_bShowInfoAvatar, m_bShowUIElements; + bool m_bFlashClist, m_bScrollingDisabled, m_bAwayMsgTimer; + bool m_bDelayedSplitter, m_bWarnClose; + bool m_bUseOffset; + bool m_bkeyProcessed; + bool m_fLimitedUpdate; + bool m_bClrAdded; + bool m_bInsertMode, m_bInitMode = true; + bool m_bDeferredScroll, m_bDeferredRemakeLog; + bool m_bWasBackgroundCreate; + + int m_iRealAvatarHeight; + int m_iButtonBarReallyNeeds; + uint32_t m_dwLastActivity; + MEVENT m_hFlashingEvent; + int m_SendFormat; + LCID m_lcid; + wchar_t m_lcID[10]; + int m_iPanelAvatarX, m_iPanelAvatarY; + HWND m_hwndTip; + uint32_t m_panelStatusCX; + int m_textLen; // current text len + LONG m_ipFieldHeight; + WPARAM m_wParam; // used for "delayed" actions like moved splitters in minimized windows + LPARAM m_lParam; + int m_iHaveRTLLang; - uint32_t m_iSplitterSaved; - POINT m_ptTipActivation; + uint32_t m_iSplitterSaved; + POINT m_ptTipActivation; protected: - void GetMYUIN(); + void GetMYUIN(); public: - char *m_szProto; - int m_iTabID; - int m_iLogMode; - - bool m_bIsHistory, m_bNotOnList, m_bIsIdle; - bool m_bActualHistory; - bool m_bIsAutosizingInput; - bool m_bCanFlashTab, m_bTabFlash; - bool m_bEditNotesActive; - bool m_bShowAvatar; - bool m_bSaveBtn, m_bNeedCheckSize; - bool m_bForcedClose; - bool m_bErrorState; - bool m_bDividerWanted, m_bDividerSet; - bool m_bSplitterOverride; - bool m_bRtlText; - bool m_bLastParaDeleted; - - int m_sendMode; - HKL m_hkl; // keyboard layout identifier - uint32_t m_idle; - uint32_t m_dwFlags; - uint32_t m_dwUnread; - HANDLE m_hTheme, m_hThemeIP, m_hThemeToolbar; - HICON m_hXStatusIcon, m_hTabStatusIcon, m_hTabIcon, m_iFlashIcon, m_hTaskbarIcon, m_hClientIcon; - MEVENT m_hDbEventFirst, m_hDbEventLast; - HANDLE m_hTimeZone; - MEVENT *m_hHistoryEvents; - time_t m_lastEventTime; - int m_iLastEventType; - int m_iOpenJobs; - int m_iInputAreaHeight = -1; - int m_maxHistory, m_curHistory; - int m_iCurrentQueueError; - int m_iSplitterY, m_dynaSplitter; - int m_savedSplitterY, m_savedDynaSplit; - char *m_sendBuffer; - - wchar_t m_wszMyNickname[130]; - wchar_t m_wszStatus[50]; - wchar_t m_wszTitle[130]; // tab title... - wchar_t m_myUin[80]; - wchar_t m_wszStatusBar[100]; - char m_szMicroLf[128]; - - int m_iMultiSplit; - int msgTop, rcLogBottom; - bool m_bActivate, m_bWantPopup, m_bIsMeta; - - wchar_t *wszInitialText; + char* m_szProto; + int m_iTabID; + int m_iLogMode; + + bool m_bIsHistory, m_bNotOnList, m_bIsIdle; + bool m_bActualHistory; + bool m_bIsAutosizingInput; + bool m_bCanFlashTab, m_bTabFlash; + bool m_bEditNotesActive; + bool m_bShowAvatar; + bool m_bSaveBtn, m_bNeedCheckSize; + bool m_bForcedClose; + bool m_bErrorState; + bool m_bDividerWanted, m_bDividerSet; + bool m_bSplitterOverride; + bool m_bRtlText; + bool m_bLastParaDeleted; + + int m_sendMode; + HKL m_hkl; // keyboard layout identifier + uint32_t m_idle; + uint32_t m_dwFlags; + uint32_t m_dwUnread; + HANDLE m_hTheme, m_hThemeIP, m_hThemeToolbar; + HICON m_hXStatusIcon, m_hTabStatusIcon, m_hTabIcon, m_iFlashIcon, m_hTaskbarIcon, m_hClientIcon; + MEVENT m_hDbEventFirst, m_hDbEventLast; + HANDLE m_hTimeZone; + MEVENT* m_hHistoryEvents; + time_t m_lastEventTime; + int m_iLastEventType; + int m_iOpenJobs; + int m_iInputAreaHeight = -1; + int m_maxHistory, m_curHistory; + int m_iCurrentQueueError; + int m_iSplitterY, m_dynaSplitter; + int m_savedSplitterY, m_savedDynaSplit; + char* m_sendBuffer; + + wchar_t m_wszMyNickname[130]; + wchar_t m_wszStatus[50]; + wchar_t m_wszTitle[130]; // tab title... + wchar_t m_myUin[80]; + wchar_t m_wszStatusBar[100]; + char m_szMicroLf[128]; + + int m_iMultiSplit; + int msgTop, rcLogBottom; + bool m_bActivate, m_bWantPopup, m_bIsMeta; + + wchar_t* wszInitialText; TOOLINFO ti; CInfoPanel m_pPanel; CProxyWindow *m_pWnd; // proxy window object (win7+, for taskbar support). @@ -599,7 +599,7 @@ public: SESSION_INFO *m_pLastSession; CTimer timerAwayMsg; - CCtrlButton m_btnOk, m_btnAdd, m_btnQuote, m_btnCancelAdd; + CCtrlButton m_btnAdd, m_btnQuote, m_btnCancelAdd; public: CMsgDialog(int dlgId, MCONTACT hContact); @@ -817,8 +817,6 @@ struct TIconDescW #define SRMSGDEFSET_AUTOPOPUP false #define SRMSGSET_AUTOMIN "AutoMin" #define SRMSGDEFSET_AUTOMIN 0 -#define SRMSGSET_SENDONENTER "SendOnEnter" -#define SRMSGDEFSET_SENDONENTER true #define SRMSGSET_MSGTIMEOUT "MessageTimeout" #define SRMSGDEFSET_MSGTIMEOUT 30000 #define SRMSGSET_MSGTIMEOUT_MIN 5000 // minimum value (5 seconds) @@ -1018,7 +1016,6 @@ struct SIDEBARITEM #define TABSRMM_HK_CONTAINEROPTIONS 10 #define TABSRMM_HK_SENDFILE 12 #define TABSRMM_HK_QUOTEMSG 13 -#define TABSRMM_HK_SEND 14 #define TABSRMM_HK_CLEARMSG 15 #define TABARMM_HK_TOGGLEINFOPANEL 16 #define TABSRMM_HK_HISTORY 17 diff --git a/protocols/JabberG/src/jabber_thread.cpp b/protocols/JabberG/src/jabber_thread.cpp index 8a9d408fc6..78d696d6f4 100755 --- a/protocols/JabberG/src/jabber_thread.cpp +++ b/protocols/JabberG/src/jabber_thread.cpp @@ -1570,9 +1570,8 @@ void CJabberProto::OnProcessPresence(const TiXmlElement *node, ThreadData *info) } hContact = DBCreateContact(from, nick, true, true); } - if (hContact && m_bUseOMEMO) - { - char szBareJid[JABBER_MAX_JID_LEN]; + + if (hContact && m_bUseOMEMO) { XmlNodeIq iq("get", SerialNext()); iq << XATTR("from", m_ThreadInfo->fullJID); iq << XATTR("to", from); diff --git a/src/core/stdmsg/res/resource.rc b/src/core/stdmsg/res/resource.rc index 752f5c20a8..44b399894c 100644 --- a/src/core/stdmsg/res/resource.rc +++ b/src/core/stdmsg/res/resource.rc @@ -60,10 +60,6 @@ BEGIN CONTROL "Show character count",IDC_CHARCOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,179,135,10 CONTROL "Show toolbar buttons on top row",IDC_SHOWBUTTONLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,192,139,10 - CONTROL "Send message on double 'Enter'",IDC_SENDONDBLENTER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,150,166,150,10 - CONTROL "Send message on 'Enter'",IDC_SENDONENTER,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,150,179,150,10 - CONTROL "Send message on 'Ctrl+Enter'",IDC_SENDONCTRLENTER, "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,150,192,150,10 - LTEXT "Show warning when message has not been received after",IDC_STATIC,8,208,211,8 EDITTEXT IDC_SECONDS,223,206,25,12,ES_AUTOHSCROLL LTEXT "seconds",IDC_STATIC,253,208,44,8 diff --git a/src/core/stdmsg/src/chat_manager.cpp b/src/core/stdmsg/src/chat_manager.cpp index 3bcb8a3296..4ee8d5be72 100644 --- a/src/core/stdmsg/src/chat_manager.cpp +++ b/src/core/stdmsg/src/chat_manager.cpp @@ -205,7 +205,7 @@ static void ShowRoom(SESSION_INFO *si) int OnCheckPlugins(WPARAM, LPARAM) { - g_dat.bSmileyInstalled = ServiceExists(MS_SMILEYADD_REPLACESMILEYS); + g_plugin.bSmileyInstalled = ServiceExists(MS_SMILEYADD_REPLACESMILEYS); return 0; } @@ -225,6 +225,8 @@ void Load_ChatModule() g_chatApi.OnFlashHighlight = OnFlashHighlight; g_chatApi.ShowRoom = ShowRoom; + Srmm_CreateHotkey(LPGEN("Messaging"), LPGEN("Send message")); + oldDoPopup = g_chatApi.DoPopup; g_chatApi.DoPopup = DoPopup; oldDoTrayIcon = g_chatApi.DoTrayIcon; g_chatApi.DoTrayIcon = DoTrayIcon; g_chatApi.ReloadSettings(); diff --git a/src/core/stdmsg/src/chat_window.cpp b/src/core/stdmsg/src/chat_window.cpp index 39dce9b2a4..39edc37781 100644 --- a/src/core/stdmsg/src/chat_window.cpp +++ b/src/core/stdmsg/src/chat_window.cpp @@ -174,7 +174,7 @@ void CLogWindow::LogEvents(LOGINFO *lin, bool bRedraw) m_rtf.SendMsg(EM_STREAMIN, wp, (LPARAM)&stream); // do smileys - if (g_dat.bSmileyInstalled && (bRedraw || (lin->ptszText && lin->iType != GC_EVENT_JOIN && lin->iType != GC_EVENT_NICK && lin->iType != GC_EVENT_ADDSTATUS && lin->iType != GC_EVENT_REMOVESTATUS))) { + if (g_plugin.bSmileyInstalled && (bRedraw || (lin->ptszText && lin->iType != GC_EVENT_JOIN && lin->iType != GC_EVENT_NICK && lin->iType != GC_EVENT_ADDSTATUS && lin->iType != GC_EVENT_REMOVESTATUS))) { CHARRANGE newsel; newsel.cpMax = -1; newsel.cpMin = sel.cpMin; diff --git a/src/core/stdmsg/src/cmdlist.cpp b/src/core/stdmsg/src/cmdlist.cpp index a82acfa495..7f8a420cbe 100644 --- a/src/core/stdmsg/src/cmdlist.cpp +++ b/src/core/stdmsg/src/cmdlist.cpp @@ -34,7 +34,7 @@ static VOID CALLBACK MsgTimer(HWND, UINT, UINT_PTR, DWORD dwTime) mir_cslock lck(csMsgQueue); for (auto &it : msgQueue.rev_iter()) - if (dwTime - it->ts > g_dat.msgTimeout) { + if (dwTime - it->ts > g_plugin.msgTimeout) { arTimedOut.insert(it); msgQueue.removeItem(&it); } diff --git a/src/core/stdmsg/src/globals.cpp b/src/core/stdmsg/src/globals.cpp index a2d6e175fe..de2ca11c6d 100644 --- a/src/core/stdmsg/src/globals.cpp +++ b/src/core/stdmsg/src/globals.cpp @@ -97,65 +97,14 @@ static int AvatarChanged(WPARAM hContact, LPARAM lParam) ///////////////////////////////////////////////////////////////////////////////////////// -GlobalMessageData g_dat; - -GlobalMessageData::GlobalMessageData() : - bShowDate(SRMMMOD, "ShowDate", false), - bShowTime(SRMMMOD, "ShowTime", true), - bShowSecs(SRMMMOD, "ShowSeconds", true), - bShowIcons(SRMMMOD, "ShowLogIcon", true), - bShowAvatar(SRMMMOD, "AvatarEnable", true), - bShowButtons(SRMMMOD, "ShowButtonLine", true), - - bTypingNew(SRMMMOD, "DefaultTyping", true), - bTypingUnknown(SRMMMOD, "UnknownTyping", false), - - bShowTyping(SRMMMOD, "ShowTyping", true), - bShowTypingWin(SRMMMOD, "ShowTypingWin", true), - bShowTypingTray(SRMMMOD, "ShowTypingTray", false), - bShowTypingClist(SRMMMOD, "ShowTypingClist", true), - - bCascade(SRMMMOD, "Cascade", true), - bAutoMin(SRMMMOD, "AutoMin", false), - bAutoClose(SRMMMOD, "AutoClose", false), - bShowNames(SRMMMOD, "ShowNames", false), - bShowFormat(SRMMMOD, "ShowFormatting", true), - bSendButton(SRMMMOD, "UseSendButton", false), - bSendOnEnter(SRMMMOD, "SendOnEnter", true), - bCtrlSupport(SRMMMOD, "SupportCtrlUpDn", true), - bShowReadChar(SRMMMOD, "ShowCharCount", false), - bSendOnDblEnter(SRMMMOD, "SendOnDblEnter", false), - bSendOnCtrlEnter(SRMMMOD, "SendOnCtrlEnter", false), - bDeleteTempCont(SRMMMOD, "DeleteTempCont", false), - bSavePerContact(SRMMMOD, "SavePerContact", false), - bDoNotStealFocus(SRMMMOD, "DoNotStealFocus", false), - bUseStatusWinIcon(SRMMMOD, "UseStatusWinIcon", true), - - bLimitAvatarHeight(SRMMMOD, "AvatarLimitHeight", true), - iAvatarHeight(SRMMMOD, "AvatarHeight", 60), - - popupFlags(SRMMMOD, "PopupFlags", 0), - nFlashMax(SRMMMOD, "FlashMax", 5), - - msgTimeout(SRMMMOD, "MessageTimeout", 65000), - - iLoadHistory(SRMMMOD, "LoadHistory", LOADHISTORY_UNREAD), - nLoadCount(SRMMMOD, "LoadCount", 10), - nLoadTime(SRMMMOD, "LoadTime", 10) -{ -} - void InitGlobals() { int iOldValue = g_plugin.getByte("HideNames", -1); if (iOldValue != -1) { - g_dat.bShowNames = !iOldValue; + g_plugin.bShowNames = !iOldValue; g_plugin.delSetting("HideNames"); } - if (!g_dat.bSendOnEnter && !g_dat.bSendOnDblEnter) - g_dat.bSendOnCtrlEnter = true; - HookEvent(ME_DB_EVENT_ADDED, dbaddedevent); HookEvent(ME_DB_EVENT_EDITED, dbaddedevent); HookEvent(ME_PROTO_ACK, ackevent); diff --git a/src/core/stdmsg/src/globals.h b/src/core/stdmsg/src/globals.h deleted file mode 100644 index 031357356b..0000000000 --- a/src/core/stdmsg/src/globals.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - -Copyright 2000-12 Miranda IM, 2012-22 Miranda NG team, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#ifndef SRMM_GLOBALS_H -#define SRMM_GLOBALS_H - -struct GlobalMessageData -{ - GlobalMessageData(); - - CMOption bShowButtons; - CMOption bSendButton; - CMOption bShowTyping; - CMOption bShowTypingWin; - CMOption bShowTypingTray; - CMOption bShowTypingClist; - CMOption bShowIcons; - CMOption bShowTime; - CMOption bShowDate; - CMOption bShowAvatar; - CMOption bShowNames; - CMOption bShowSecs; - CMOption bShowReadChar; - CMOption bSendOnEnter; - CMOption bSendOnDblEnter; - CMOption bSendOnCtrlEnter; - CMOption bAutoClose; - CMOption bAutoMin; - CMOption bTypingNew; - CMOption bTypingUnknown; - CMOption bCtrlSupport; - CMOption bShowFormat; - CMOption bSavePerContact; - CMOption bDoNotStealFocus; - CMOption bCascade; - CMOption bDeleteTempCont; - CMOption bUseStatusWinIcon; - - CMOption bLimitAvatarHeight; - CMOption iAvatarHeight; - - CMOption popupFlags; - CMOption msgTimeout; - CMOption nFlashMax; - - CMOption iLoadHistory; - CMOption nLoadCount, nLoadTime; - - bool bSmileyInstalled = false; -}; - -void InitGlobals(); - -extern GlobalMessageData g_dat; - -#endif diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index 24472cf153..a01dee62e3 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -37,7 +37,6 @@ LIST g_arDialogs(10, PtrKeySortT); CMsgDialog::CMsgDialog(CTabbedWindow *pOwner, MCONTACT hContact) : CSuper(g_plugin, IDD_MSG), - m_btnOk(this, IDOK), m_avatar(this, IDC_AVATAR), m_splitterX(this, IDC_SPLITTERX), m_splitterY(this, IDC_SPLITTERY), @@ -50,7 +49,6 @@ CMsgDialog::CMsgDialog(CTabbedWindow *pOwner, MCONTACT hContact) : CMsgDialog::CMsgDialog(CTabbedWindow *pOwner, SESSION_INFO *si) : CSuper(g_plugin, IDD_MSG, si), - m_btnOk(this, IDOK), m_avatar(this, IDC_AVATAR), m_splitterX(this, IDC_SPLITTERX), m_splitterY(this, IDC_SPLITTERY), @@ -77,7 +75,7 @@ void CMsgDialog::Init() m_szTabSave[0] = 0; m_autoClose = 0; m_forceResizable = true; - m_bNoActivate = g_dat.bDoNotStealFocus; + m_bNoActivate = g_plugin.bDoNotStealFocus; g_arDialogs.insert(this); @@ -112,7 +110,7 @@ bool CMsgDialog::OnInitDialog() } // avatar stuff - m_limitAvatarH = g_dat.bLimitAvatarHeight ? g_dat.iAvatarHeight : 0; + m_limitAvatarH = g_plugin.bLimitAvatarHeight ? g_plugin.iAvatarHeight : 0; if (m_hContact && m_szProto != nullptr) { m_wStatus = db_get_w(m_hContact, m_szProto, "Status", ID_STATUS_OFFLINE); @@ -128,7 +126,7 @@ bool CMsgDialog::OnInitDialog() timerType.Start(1000); GetWindowRect(m_message.GetHwnd(), &m_minEditInit); - m_iSplitterY = g_plugin.getDword(g_dat.bSavePerContact ? m_hContact : 0, "splitterPos", m_minEditInit.bottom - m_minEditInit.top); + m_iSplitterY = g_plugin.getDword(g_plugin.bSavePerContact ? m_hContact : 0, "splitterPos", m_minEditInit.bottom - m_minEditInit.top); UpdateSizeBar(); m_message.SendMsg(EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS | ENM_CHANGE); @@ -154,9 +152,9 @@ bool CMsgDialog::OnInitDialog() { DB::ECPTR pCursor(DB::EventsRev(m_hContact, m_hDbEventFirst)); - switch (g_dat.iLoadHistory) { + switch (g_plugin.iLoadHistory) { case LOADHISTORY_COUNT: - for (int i = g_dat.nLoadCount; i--;) { + for (int i = g_plugin.nLoadCount; i--;) { MEVENT hPrevEvent = pCursor.FetchNext(); if (hPrevEvent == 0) break; @@ -176,7 +174,7 @@ bool CMsgDialog::OnInitDialog() else db_event_get(m_hDbEventFirst, &dbei); - uint32_t firstTime = dbei.timestamp - 60 * g_dat.nLoadTime; + uint32_t firstTime = dbei.timestamp - 60 * g_plugin.nLoadTime; while (MEVENT hPrevEvent = pCursor.FetchNext()) { dbei.cbBlob = 0; db_event_get(hPrevEvent, &dbei); @@ -258,7 +256,7 @@ void CMsgDialog::OnDestroy() mir_free(it); m_cmdList.destroy(); - MCONTACT hContact = (g_dat.bSavePerContact) ? m_hContact : 0; + MCONTACT hContact = (g_plugin.bSavePerContact) ? m_hContact : 0; g_plugin.setDword(hContact ? m_hContact : 0, "splitterPos", m_iSplitterY); if (m_hFont) { @@ -287,7 +285,7 @@ void CMsgDialog::OnDestroy() CSuper::OnDestroy(); // a temporary contact should be destroyed after removing window from the window list to prevent recursion - if (m_hContact && g_dat.bDeleteTempCont) + if (m_hContact && g_plugin.bDeleteTempCont) if (!Contact_OnList(m_hContact)) db_delete_contact(m_hContact); } @@ -385,9 +383,9 @@ void CMsgDialog::onClick_Ok(CCtrlButton *pButton) m_message.SetText(L""); if (!g_Settings.bTabsEnable) { - if (g_dat.bAutoClose) + if (g_plugin.bAutoClose) ::PostMessage(m_hwndParent, WM_CLOSE, 0, 0); - else if (g_dat.bAutoMin) + else if (g_plugin.bAutoMin) ::ShowWindow(m_hwndParent, SW_MINIMIZE); } } @@ -416,7 +414,7 @@ void CMsgDialog::onChange_Text(CCtrlEdit*) void CMsgDialog::OnFlash(CTimer *) { FixTabIcons(); - if (!g_dat.nFlashMax || m_nFlash < 2 * g_dat.nFlashMax) + if (!g_plugin.nFlashMax || m_nFlash < 2 * g_plugin.nFlashMax) FlashWindow(m_pOwner->GetHwnd(), TRUE); m_nFlash++; } @@ -435,7 +433,7 @@ void CMsgDialog::OnType(CTimer*) } else { UpdateLastMessage(); - if (g_dat.bShowTypingWin) + if (g_plugin.bShowTypingWin) FixTabIcons(); m_bShowTyping = false; } @@ -451,7 +449,7 @@ void CMsgDialog::OnType(CTimer*) SendMessage(m_pOwner->m_hwndStatus, SB_SETTEXT, 0, (LPARAM)szBuf); SendMessage(m_pOwner->m_hwndStatus, SB_SETICON, 0, (LPARAM)hTyping); - if (g_dat.bShowTypingWin && GetForegroundWindow() != m_pOwner->GetHwnd()) { + if (g_plugin.bShowTypingWin && GetForegroundWindow() != m_pOwner->GetHwnd()) { HICON hIcon = (HICON)SendMessage(m_hwnd, WM_GETICON, ICON_SMALL, 0); SendMessage(m_hwnd, WM_SETICON, ICON_SMALL, (LPARAM)hTyping); IcoLib_ReleaseIcon(hIcon); @@ -466,8 +464,8 @@ void CMsgDialog::OnType(CTimer*) int CMsgDialog::Resizer(UTILRESIZECONTROL *urc) { if (isChat()) { - bool bToolbar = g_dat.bShowButtons; - bool bSend = g_dat.bSendButton; + bool bToolbar = g_plugin.bShowButtons; + bool bSend = g_plugin.bSendButton; bool bNick = m_si->iType != GCW_SERVER && m_bNicklistEnabled; switch (urc->wId) { @@ -520,7 +518,7 @@ LBL_CalcBottom: else { switch (urc->wId) { case IDC_SRMM_LOG: - if (!g_dat.bShowButtons) + if (!g_plugin.bShowButtons) urc->rcItem.top = 2; urc->rcItem.bottom = urc->dlgNewSize.cy - m_iSplitterY; m_rcLog = urc->rcItem; @@ -532,8 +530,8 @@ LBL_CalcBottom: return RD_ANCHORX_WIDTH | RD_ANCHORY_CUSTOM; case IDC_SRMM_MESSAGE: - urc->rcItem.right = (g_dat.bSendButton) ? urc->dlgNewSize.cx - 64 : urc->dlgNewSize.cx; - if (g_dat.bShowAvatar && m_avatarPic) + urc->rcItem.right = (g_plugin.bSendButton) ? urc->dlgNewSize.cx - 64 : urc->dlgNewSize.cx; + if (g_plugin.bShowAvatar && m_avatarPic) urc->rcItem.left = m_avatarWidth + 4; urc->rcItem.top = urc->dlgNewSize.cy - m_iSplitterY + 3; @@ -614,7 +612,7 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) if (!IsIconic(m_hwnd)) { if (isChat()) { - bool bSend = g_dat.bSendButton; + bool bSend = g_plugin.bSendButton; bool bNick = m_si->iType != GCW_SERVER && m_bNicklistEnabled; m_btnOk.Show(bSend); @@ -647,7 +645,7 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) InvalidateRect(m_pOwner->m_hwndStatus, nullptr, true); RedrawWindow(m_message.GetHwnd(), nullptr, nullptr, RDW_INVALIDATE); RedrawWindow(m_btnOk.GetHwnd(), nullptr, nullptr, RDW_INVALIDATE); - if (g_dat.bShowAvatar && m_avatarPic) + if (g_plugin.bShowAvatar && m_avatarPic) RedrawWindow(m_avatar.GetHwnd(), nullptr, nullptr, RDW_INVALIDATE); } return TRUE; @@ -722,7 +720,7 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) if (dis->CtlType == ODT_MENU) return Menu_DrawItem(lParam); - if (dis->CtlID == IDC_AVATAR && m_avatarPic && g_dat.bShowAvatar) { + if (dis->CtlID == IDC_AVATAR && m_avatarPic && g_plugin.bShowAvatar) { HPEN hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); HPEN hOldPen = (HPEN)SelectObject(dis->hDC, hPen); Rectangle(dis->hDC, 0, 0, m_avatarWidth, m_avatarHeight); @@ -949,16 +947,7 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) ProcessFileDrop((HDROP)wParam, m_hContact); return FALSE; - case WM_MOUSEWHEEL: - case WM_LBUTTONDOWN: - case WM_RBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_KILLFOCUS: - m_iLastEnterTime = 0; - break; - case WM_SYSCHAR: - m_iLastEnterTime = 0; if ((wParam == 's' || wParam == 'S') && GetKeyState(VK_MENU) & 0x8000) { m_btnOk.Click(); return 0; @@ -1080,28 +1069,6 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) bool isCtrl = (GetKeyState(VK_CONTROL) & 0x8000) != 0; bool isAlt = (GetKeyState(VK_MENU) & 0x8000) != 0; - if (wParam == VK_RETURN) { - if (!isShift && !isCtrl && g_dat.bSendOnEnter) { - m_btnOk.Click(); - return 0; - } - if (!isShift && isCtrl && g_dat.bSendOnCtrlEnter) { - m_btnOk.Click(); - return 0; - } - if (g_dat.bSendOnDblEnter) { - if (m_iLastEnterTime + ENTERCLICKTIME < GetTickCount()) - m_iLastEnterTime = GetTickCount(); - else { - m_message.SendMsg(WM_KEYDOWN, VK_BACK, 0); - m_message.SendMsg(WM_KEYUP, VK_BACK, 0); - m_btnOk.Click(); - return 0; - } - } - } - else m_iLastEnterTime = 0; - if (g_Settings.bTabsEnable) { if (wParam <= '9' && wParam >= '1' && isCtrl && !isAlt) { // CTRL + 1 -> 9 (switch tab) m_pOwner->SwitchTab(wParam - '1'); @@ -1164,12 +1131,11 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) if (wParam == VK_NEXT || wParam == VK_PRIOR) { ((CLogWindow *)m_pLog)->WndProc(msg, wParam, lParam); - m_iLastEnterTime = 0; return TRUE; } } - if (isCtrl && g_dat.bCtrlSupport && m_cmdList.getCount()) { + if (isCtrl && g_plugin.bCtrlSupport && m_cmdList.getCount()) { if (wParam == VK_UP && m_cmdListInd != 0) { if (m_cmdListInd < 0) m_cmdListInd = m_cmdList.getCount() - 1; @@ -1311,7 +1277,7 @@ void CMsgDialog::OnOptionsApplied(bool bUpdateAvatar) continue; bool bShow = false; - if (m_hContact && g_dat.bShowButtons) { + if (m_hContact && g_plugin.bShowButtons) { if (cbd->m_dwButtonCID == IDC_ADD) { bShow = !Contact_OnList(m_hContact); cbd->m_bHidden = !bShow; @@ -1324,10 +1290,10 @@ void CMsgDialog::OnOptionsApplied(bool bUpdateAvatar) ShowWindow(GetDlgItem(m_hwnd, IDCANCEL), SW_HIDE); m_splitterY.Show(); - m_btnOk.Show(g_dat.bSendButton); + m_btnOk.Show(g_plugin.bSendButton); m_btnOk.Enable(GetWindowTextLength(m_message.GetHwnd()) != 0); - if (m_avatarPic == nullptr || !g_dat.bShowAvatar) + if (m_avatarPic == nullptr || !g_plugin.bShowAvatar) m_avatar.Hide(); UpdateIcon(0); @@ -1341,7 +1307,7 @@ void CMsgDialog::OnOptionsApplied(bool bUpdateAvatar) m_avatarPic = nullptr; m_limitAvatarH = 0; if (CallProtoService(m_szProto, PS_GETCAPS, PFLAGNUM_4, 0) & PF4_AVATARS) - m_limitAvatarH = g_dat.bLimitAvatarHeight ? g_dat.iAvatarHeight : 0; + m_limitAvatarH = g_plugin.bLimitAvatarHeight ? g_plugin.iAvatarHeight : 0; if (bUpdateAvatar) UpdateAvatar(); @@ -1390,7 +1356,7 @@ void CMsgDialog::onSplitterY(CSplitter *pSplitter) m_iSplitterY = rc.bottom - pSplitter->GetPos() + 1; int toplimit = 63; - if (!g_dat.bShowButtons) + if (!g_plugin.bShowButtons) toplimit += 22; if (m_iSplitterY < m_minEditBoxSize.cy) @@ -1421,7 +1387,7 @@ void CMsgDialog::NotifyTyping(int mode) // Don't send to protocols that are offline // Don't send to users who are not visible and // Don't send to users who are not on the visible list when you are in invisible mode. - if (!g_plugin.getByte(m_hContact, SRMSGSET_TYPING, g_dat.bTypingNew)) + if (!g_plugin.getByte(m_hContact, SRMSGSET_TYPING, g_plugin.bTypingNew)) return; if (!m_szProto) @@ -1447,7 +1413,7 @@ void CMsgDialog::NotifyTyping(int mode) if (protoCaps & PF1_INVISLIST && protoStatus == ID_STATUS_INVISIBLE && db_get_w(m_hContact, m_szProto, "ApparentMode", 0) != ID_STATUS_ONLINE) return; - if (!g_dat.bTypingUnknown && !Contact_OnList(m_hContact)) + if (!g_plugin.bTypingUnknown && !Contact_OnList(m_hContact)) return; // End user check @@ -1463,7 +1429,7 @@ void CMsgDialog::RemakeLog() void CMsgDialog::ShowAvatar() { - if (g_dat.bShowAvatar) { + if (g_plugin.bShowAvatar) { AVATARCACHEENTRY *ace = (AVATARCACHEENTRY *)CallService(MS_AV_GETAVATARBITMAP, getActiveContact(), 0); if (ace && (INT_PTR)ace != CALLSERVICE_NOTFOUND && (ace->dwFlags & AVS_BITMAP_VALID) && !(ace->dwFlags & AVS_HIDEONCLIST)) m_avatarPic = ace->hbmPic; @@ -1486,7 +1452,7 @@ void CMsgDialog::ShowTime(bool bForce) if (m_wMinute != st.wMinute || bForce) { if (m_pOwner->m_tab.GetActivePage() == this) { wchar_t buf[32]; - unsigned i = g_dat.bShowReadChar ? 2 : 1; + unsigned i = g_plugin.bShowReadChar ? 2 : 1; TimeZone_PrintDateTime(m_hTimeZone, L"t", buf, _countof(buf), 0); SendMessage(m_pOwner->m_hwndStatus, SB_SETTEXT, i, (LPARAM)buf); @@ -1505,11 +1471,11 @@ void CMsgDialog::SetupStatusBar() int cx = rc.right - rc.left; if (m_hTimeZone) { - if (g_dat.bShowReadChar) + if (g_plugin.bShowReadChar) statwidths[i++] = cx - SB_TIME_WIDTH - SB_CHAR_WIDTH - icons_width; statwidths[i++] = cx - SB_TIME_WIDTH - icons_width; } - else if (g_dat.bShowReadChar) + else if (g_plugin.bShowReadChar) statwidths[i++] = cx - SB_CHAR_WIDTH - icons_width; statwidths[i++] = cx - icons_width; @@ -1550,7 +1516,7 @@ void CMsgDialog::UpdateIcon(WPARAM wParam) } if (!cws || bIsStatus) - if (g_dat.bUseStatusWinIcon) + if (g_plugin.bUseStatusWinIcon) FixTabIcons(); } @@ -1571,7 +1537,7 @@ void CMsgDialog::UpdateLastMessage() void CMsgDialog::UpdateReadChars() { - if (g_dat.bShowReadChar) { + if (g_plugin.bShowReadChar) { wchar_t buf[32]; int len = GetWindowTextLength(m_message.GetHwnd()); @@ -1584,8 +1550,8 @@ void CMsgDialog::UpdateSizeBar() { m_minEditBoxSize.cx = m_minEditInit.right - m_minEditInit.left; m_minEditBoxSize.cy = m_minEditInit.bottom - m_minEditInit.top; - if (g_dat.bShowAvatar) { - if (m_avatarPic == nullptr || !g_dat.bShowAvatar) { + if (g_plugin.bShowAvatar) { + if (m_avatarPic == nullptr || !g_plugin.bShowAvatar) { m_avatarWidth = 50; m_avatarHeight = 50; m_avatar.Hide(); @@ -1640,7 +1606,7 @@ void CMsgDialog::UpdateTitle() m_wStatus = db_get_w(m_hContact, m_szProto, "Status", ID_STATUS_OFFLINE); wchar_t *contactName = Clist_GetContactDisplayName(m_hContact); - if (g_dat.bUseStatusWinIcon) + if (g_plugin.bUseStatusWinIcon) mir_snwprintf(newtitle, L"%s - %s", contactName, TranslateT("Message session")); else { wchar_t *szStatus = Clist_GetStatusModeDescription(m_szProto == nullptr ? ID_STATUS_OFFLINE : db_get_w(m_hContact, m_szProto, "Status", ID_STATUS_OFFLINE), 0); diff --git a/src/core/stdmsg/src/msglog.cpp b/src/core/stdmsg/src/msglog.cpp index 0524859361..228ec4ea53 100644 --- a/src/core/stdmsg/src/msglog.cpp +++ b/src/core/stdmsg/src/msglog.cpp @@ -83,7 +83,7 @@ static void AppendToBufferWithRTF(CMStringA &buf, const wchar_t *line) buf.AppendChar('\\'); buf.AppendChar(*line); } - else if (*line == '[' && (g_dat.bShowFormat)) { + else if (*line == '[' && (g_plugin.bShowFormat)) { int i, found = 0; for (i = 0; i < _countof(bbcodes); ++i) { if (line[1] == bbcodes[i][1]) { @@ -237,7 +237,7 @@ static bool CreateRTFFromDbEvent(LogStreamData *dat) buf.Append("\\rtlch\\ltrch"); } - if (g_dat.bShowIcons) { + if (g_plugin.bShowIcons) { int i = ((dbei.eventType == EVENTTYPE_MESSAGE) ? ((dbei.flags & DBEF_SENT) ? LOGICON_MSG_OUT : LOGICON_MSG_IN): LOGICON_MSG_NOTICE); buf.Append("\\f0\\fs14"); @@ -245,14 +245,14 @@ static bool CreateRTFFromDbEvent(LogStreamData *dat) } int showColon = 0; - if (g_dat.bShowTime) { + if (g_plugin.bShowTime) { const wchar_t* szFormat; wchar_t str[64]; - if (g_dat.bShowSecs) - szFormat = g_dat.bShowDate ? L"d s" : L"s"; + if (g_plugin.bShowSecs) + szFormat = g_plugin.bShowDate ? L"d s" : L"s"; else - szFormat = g_dat.bShowDate ? L"d t" : L"t"; + szFormat = g_plugin.bShowDate ? L"d t" : L"t"; TimeZone_PrintTimeStamp(nullptr, dbei.timestamp, szFormat, str, _countof(str), 0); @@ -261,7 +261,7 @@ static bool CreateRTFFromDbEvent(LogStreamData *dat) showColon = 1; } - if (g_dat.bShowNames && dbei.eventType != EVENTTYPE_JABBER_CHATSTATES && dbei.eventType != EVENTTYPE_JABBER_PRESENCE) { + if (g_plugin.bShowNames && dbei.eventType != EVENTTYPE_JABBER_CHATSTATES && dbei.eventType != EVENTTYPE_JABBER_PRESENCE) { wchar_t *szName; if (dbei.flags & DBEF_SENT) { @@ -516,7 +516,7 @@ void CLogWindow::LogEvents(MEVENT hDbEventFirst, int count, bool bAppend) m_rtf.SendMsg(EM_SETSCROLLPOS, 0, (LPARAM)&scrollPos); } - if (g_dat.bSmileyInstalled) { + if (g_plugin.bSmileyInstalled) { SMADD_RICHEDIT3 smre; smre.cbSize = sizeof(SMADD_RICHEDIT3); smre.hwndRichEditControl = m_rtf.GetHwnd(); diff --git a/src/core/stdmsg/src/msgoptions.cpp b/src/core/stdmsg/src/msgoptions.cpp index 3f5759b434..60a798bd72 100644 --- a/src/core/stdmsg/src/msgoptions.cpp +++ b/src/core/stdmsg/src/msgoptions.cpp @@ -25,15 +25,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. int ChatOptionsInitialize(WPARAM); -struct FontOptionsList +struct { - const wchar_t* szDescr; - COLORREF defColour; - const wchar_t* szDefFace; - uint8_t defStyle; - char defSize; + wchar_t* szDescr; + COLORREF defColour; + wchar_t* szDefFace; + uint8_t defStyle; + char defSize; } -static const fontOptionsList[] = +static fontOptionsList[] = { { LPGENW("Outgoing messages"), RGB(106, 106, 106), L"Arial", 0, -12}, { LPGENW("Incoming messages"), RGB(0, 0, 0), L"Arial", 0, -12}, @@ -126,20 +126,20 @@ void RegisterSRMMFonts(void) ///////////////////////////////////////////////////////////////////////////////////////// -struct CheckBoxValues_t +struct { - uint32_t style; + uint32_t style; wchar_t* szDescr; } -statusValues[] = +static statusValues[] = { { MODEF_OFFLINE, LPGENW("Offline") }, - { PF2_ONLINE, LPGENW("Online") }, + { PF2_ONLINE, LPGENW("Online") }, { PF2_SHORTAWAY, LPGENW("Away") }, - { PF2_LONGAWAY, LPGENW("Not available") }, - { PF2_LIGHTDND, LPGENW("Occupied") }, - { PF2_HEAVYDND, LPGENW("Do not disturb") }, - { PF2_FREECHAT, LPGENW("Free for chat") }, + { PF2_LONGAWAY, LPGENW("Not available") }, + { PF2_LIGHTDND, LPGENW("Occupied") }, + { PF2_HEAVYDND, LPGENW("Do not disturb") }, + { PF2_FREECHAT, LPGENW("Free for chat") }, { PF2_INVISIBLE, LPGENW("Invisible") } }; @@ -149,7 +149,7 @@ class COptionMainDlg : public CDlgBase CCtrlCheck chkAutoMin, chkAutoClose, chkSavePerContact, chkDoNotStealFocus, chkStatusWin; CCtrlCheck chkDelTemp, chkCascade, chkCharCount, chkCtrlSupport; CCtrlCheck chkAvatar, chkLimitAvatar; - CCtrlCheck chkSendOnEnter, chkSendOnDblEnter, chkSendOnCtrlEnter, chkShowSend, chkShowButtons; + CCtrlCheck chkShowSend, chkShowButtons; CCtrlTreeView tree; @@ -202,9 +202,6 @@ public: chkLimitAvatar(this, IDC_LIMITAVATARH), chkShowButtons(this, IDC_SHOWBUTTONLINE), chkCtrlSupport(this, IDC_CTRLSUPPORT), - chkSendOnEnter(this, IDC_SENDONENTER), - chkSendOnDblEnter(this, IDC_SENDONDBLENTER), - chkSendOnCtrlEnter(this, IDC_SENDONCTRLENTER), chkSavePerContact(this, IDC_SAVEPERCONTACT), chkDoNotStealFocus(this, IDC_DONOTSTEALFOCUS) { @@ -216,48 +213,45 @@ public: chkLimitAvatar.OnChange = Callback(this, &COptionMainDlg::onChange_LimitAvatar); chkSavePerContact.OnChange = Callback(this, &COptionMainDlg::onChange_SavePerContact); - CreateLink(edtNFlash, g_dat.nFlashMax); - CreateLink(edtAvatarH, g_dat.iAvatarHeight); + CreateLink(edtNFlash, g_plugin.nFlashMax); + CreateLink(edtAvatarH, g_plugin.iAvatarHeight); - CreateLink(chkAvatar, g_dat.bShowAvatar); - CreateLink(chkLimitAvatar, g_dat.bLimitAvatarHeight); + CreateLink(chkAvatar, g_plugin.bShowAvatar); + CreateLink(chkLimitAvatar, g_plugin.bLimitAvatarHeight); - CreateLink(chkDelTemp, g_dat.bDeleteTempCont); - CreateLink(chkCascade, g_dat.bCascade); - CreateLink(chkAutoMin, g_dat.bAutoMin); - CreateLink(chkAutoClose, g_dat.bAutoClose); - CreateLink(chkShowSend, g_dat.bSendButton); - CreateLink(chkCharCount, g_dat.bShowReadChar); - CreateLink(chkStatusWin, g_dat.bUseStatusWinIcon); - CreateLink(chkShowButtons, g_dat.bShowButtons); - CreateLink(chkCtrlSupport, g_dat.bCtrlSupport); - CreateLink(chkSendOnEnter, g_dat.bSendOnEnter); - CreateLink(chkSendOnDblEnter, g_dat.bSendOnDblEnter); - CreateLink(chkSendOnCtrlEnter, g_dat.bSendOnCtrlEnter); - CreateLink(chkSavePerContact, g_dat.bSavePerContact); - CreateLink(chkDoNotStealFocus, g_dat.bDoNotStealFocus); + CreateLink(chkDelTemp, g_plugin.bDeleteTempCont); + CreateLink(chkCascade, g_plugin.bCascade); + CreateLink(chkAutoMin, g_plugin.bAutoMin); + CreateLink(chkAutoClose, g_plugin.bAutoClose); + CreateLink(chkShowSend, g_plugin.bSendButton); + CreateLink(chkCharCount, g_plugin.bShowReadChar); + CreateLink(chkStatusWin, g_plugin.bUseStatusWinIcon); + CreateLink(chkShowButtons, g_plugin.bShowButtons); + CreateLink(chkCtrlSupport, g_plugin.bCtrlSupport); + CreateLink(chkSavePerContact, g_plugin.bSavePerContact); + CreateLink(chkDoNotStealFocus, g_plugin.bDoNotStealFocus); } bool OnInitDialog() override { - FillCheckBoxTree(g_dat.popupFlags); + FillCheckBoxTree(g_plugin.popupFlags); - uint32_t msgTimeout = g_dat.msgTimeout; + uint32_t msgTimeout = g_plugin.msgTimeout; edtSecs.SetInt((msgTimeout >= 5000) ? msgTimeout / 1000 : 5); - chkCascade.Enable(!g_dat.bSavePerContact); - chkCtrlSupport.Enable(!g_dat.bAutoClose); + chkCascade.Enable(!g_plugin.bSavePerContact); + chkCtrlSupport.Enable(!g_plugin.bAutoClose); return true; } bool OnApply() override { - g_dat.popupFlags = MakeCheckBoxTreeFlags(); + g_plugin.popupFlags = MakeCheckBoxTreeFlags(); uint32_t msgTimeout = edtSecs.GetInt() * 1000; if (msgTimeout < 5000) msgTimeout = 5000; - g_dat.msgTimeout = msgTimeout; + g_plugin.msgTimeout = msgTimeout; Srmm_Broadcast(DM_OPTIONSAPPLIED, TRUE, 0); return true; @@ -327,17 +321,17 @@ public: chkTime.OnChange = Callback(this, &COptionLogDlg::onChange_Time); chkLoadUnread.OnChange = chkLoadCount.OnChange = chkLoadTime.OnChange = Callback(this, &COptionLogDlg::onChange_Load); - CreateLink(chkSecs, g_dat.bShowSecs); - CreateLink(chkDate, g_dat.bShowDate); - CreateLink(chkTime, g_dat.bShowTime); - CreateLink(chkIcons, g_dat.bShowIcons); - CreateLink(chkFormat, g_dat.bShowFormat); - CreateLink(chkShowNames, g_dat.bShowNames); + CreateLink(chkSecs, g_plugin.bShowSecs); + CreateLink(chkDate, g_plugin.bShowDate); + CreateLink(chkTime, g_plugin.bShowTime); + CreateLink(chkIcons, g_plugin.bShowIcons); + CreateLink(chkFormat, g_plugin.bShowFormat); + CreateLink(chkShowNames, g_plugin.bShowNames); } bool OnInitDialog() override { - switch (g_dat.iLoadHistory) { + switch (g_plugin.iLoadHistory) { case LOADHISTORY_UNREAD: chkLoadUnread.SetState(true); break; @@ -354,21 +348,21 @@ public: break; } - spinCount.SetPosition(g_dat.nLoadCount); - spinTime.SetPosition(g_dat.nLoadTime); + spinCount.SetPosition(g_plugin.nLoadCount); + spinTime.SetPosition(g_plugin.nLoadTime); return true; } bool OnApply() override { if (chkLoadCount.GetState()) - g_dat.iLoadHistory = LOADHISTORY_COUNT; + g_plugin.iLoadHistory = LOADHISTORY_COUNT; else if (chkLoadTime.GetState()) - g_dat.iLoadHistory = LOADHISTORY_TIME; + g_plugin.iLoadHistory = LOADHISTORY_TIME; else - g_dat.iLoadHistory = LOADHISTORY_UNREAD; - g_dat.nLoadCount = spinCount.GetPosition(); - g_dat.nLoadTime = spinTime.GetPosition(); + g_plugin.iLoadHistory = LOADHISTORY_UNREAD; + g_plugin.nLoadCount = spinCount.GetPosition(); + g_plugin.nLoadTime = spinTime.GetPosition(); FreeMsgLogIcons(); LoadMsgLogIcons(); @@ -423,10 +417,10 @@ public: chkType.OnChange = Callback(this, &COptionTypingDlg::onChange_ShowNotify); chkTypeTray.OnChange = Callback(this, &COptionTypingDlg::onChange_Tray); - CreateLink(chkType, g_dat.bShowTyping); - CreateLink(chkTypeWin, g_dat.bShowTypingWin); - CreateLink(chkTypeTray, g_dat.bShowTypingTray); - CreateLink(chkTypeClist, g_dat.bShowTypingClist); + CreateLink(chkType, g_plugin.bShowTyping); + CreateLink(chkTypeWin, g_plugin.bShowTypingWin); + CreateLink(chkTypeTray, g_plugin.bShowTypingTray); + CreateLink(chkTypeClist, g_plugin.bShowTypingClist); } void ResetCList(CCtrlClc::TEventInfo* = nullptr) @@ -437,11 +431,11 @@ public: void RebuildList(CCtrlClc::TEventInfo* = nullptr) { - uint8_t defType = g_dat.bTypingNew; + uint8_t defType = g_plugin.bTypingNew; if (hItemNew && defType) clist.SetCheck(hItemNew, 1); - if (hItemUnknown && g_dat.bTypingUnknown) + if (hItemUnknown && g_plugin.bTypingUnknown) clist.SetCheck(hItemUnknown, 1); for (auto &hContact : Contacts()) { @@ -454,10 +448,10 @@ public: void SaveList() { if (hItemNew) - g_dat.bTypingNew = clist.GetCheck(hItemNew); + g_plugin.bTypingNew = clist.GetCheck(hItemNew); if (hItemUnknown) - g_dat.bTypingUnknown = clist.GetCheck(hItemUnknown); + g_plugin.bTypingUnknown = clist.GetCheck(hItemUnknown); for (auto &hContact : Contacts()) { HANDLE hItem = clist.FindContact(hContact); diff --git a/src/core/stdmsg/src/msgs.cpp b/src/core/stdmsg/src/msgs.cpp index 23f9bf5702..a8bc6ca8db 100644 --- a/src/core/stdmsg/src/msgs.cpp +++ b/src/core/stdmsg/src/msgs.cpp @@ -77,7 +77,7 @@ static int MessageEventAdded(WPARAM hContact, LPARAM lParam) /* does a window for the contact exist? */ HWND hwnd = Srmm_FindWindow(hContact); if (hwnd) { - if (!g_dat.bDoNotStealFocus) { + if (!g_plugin.bDoNotStealFocus) { ShowWindow(hwnd, SW_RESTORE); SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); SetForegroundWindow(hwnd); @@ -94,9 +94,9 @@ static int MessageEventAdded(WPARAM hContact, LPARAM lParam) /* new message */ Skin_PlaySound("AlertMsg"); - if (!g_dat.bDoNotStealFocus) { + if (!g_plugin.bDoNotStealFocus) { char *szProto = Proto_GetBaseAccountName(hContact); - if (szProto && (g_dat.popupFlags & SRMMStatusToPf2(Proto_GetStatus(szProto)))) { + if (szProto && (g_plugin.popupFlags & SRMMStatusToPf2(Proto_GetStatus(szProto)))) { GetContainer()->AddPage(hContact); return 0; } @@ -170,7 +170,7 @@ static INT_PTR ReadMessageCommand(WPARAM, LPARAM lParam) static int TypingMessage(WPARAM hContact, LPARAM lParam) { - if (!g_dat.bShowTyping) + if (!g_plugin.bShowTyping) return 0; hContact = db_mc_tryMeta(hContact); @@ -180,11 +180,11 @@ static int TypingMessage(WPARAM hContact, LPARAM lParam) auto *pDlg = Srmm_FindDialog(hContact); if (pDlg) pDlg->UserTyping(lParam); - else if (lParam && g_dat.bShowTypingTray) { + else if (lParam && g_plugin.bShowTypingTray) { wchar_t szTip[256]; mir_snwprintf(szTip, TranslateT("%s is typing a message"), Clist_GetContactDisplayName(hContact)); - if (g_dat.bShowTypingClist) { + if (g_plugin.bShowTypingClist) { g_clistApi.pfnRemoveEvent(hContact, 1); CLISTEVENT cle = {}; @@ -269,7 +269,7 @@ static void RestoreUnreadMessageAlerts(void) if (szProto == nullptr) continue; - if (g_dat.popupFlags & SRMMStatusToPf2(Proto_GetStatus(szProto))) + if (g_plugin.popupFlags & SRMMStatusToPf2(Proto_GetStatus(szProto))) autoPopup = true; if (autoPopup && !windowAlreadyExists) diff --git a/src/core/stdmsg/src/msgs.h b/src/core/stdmsg/src/msgs.h index 82558a86e2..8438f529c1 100644 --- a/src/core/stdmsg/src/msgs.h +++ b/src/core/stdmsg/src/msgs.h @@ -67,7 +67,6 @@ class CMsgDialog : public CSrmmBaseDialog static INT_PTR CALLBACK FilterWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); CCtrlBase m_avatar; - CCtrlButton m_btnOk; void OnFlash(CTimer *); void OnType(CTimer *); diff --git a/src/core/stdmsg/src/resource.h b/src/core/stdmsg/src/resource.h index d3e1b94b91..dd65d2d386 100644 --- a/src/core/stdmsg/src/resource.h +++ b/src/core/stdmsg/src/resource.h @@ -75,12 +75,9 @@ #define IDC_LOADCOUNTSPIN 1040 #define IDC_SHOWBUTTONLINE 1042 #define IDC_LOADUNREAD 1043 -#define IDC_SENDONENTER 1043 #define IDC_LOADCOUNT 1044 -#define IDC_SENDONDBLENTER 1044 #define IDC_LOADTIMEN 1045 #define IDC_LOADTIMESPIN 1046 -#define IDC_SENDONCTRLENTER 1046 #define IDC_LOADTIME 1047 #define IDC_STMINSOLD 1048 #define IDC_SPIN1 1049 diff --git a/src/core/stdmsg/src/srmm.cpp b/src/core/stdmsg/src/srmm.cpp index c1be7a2113..69c350aad7 100644 --- a/src/core/stdmsg/src/srmm.cpp +++ b/src/core/stdmsg/src/srmm.cpp @@ -41,7 +41,47 @@ PLUGININFOEX pluginInfoEx = { }; CMPlugin::CMPlugin() : - PLUGIN(SRMMMOD, pluginInfoEx) + PLUGIN(SRMMMOD, pluginInfoEx), + + bShowDate(SRMMMOD, "ShowDate", false), + bShowTime(SRMMMOD, "ShowTime", true), + bShowSecs(SRMMMOD, "ShowSeconds", true), + bShowIcons(SRMMMOD, "ShowLogIcon", true), + bShowAvatar(SRMMMOD, "AvatarEnable", true), + bShowButtons(SRMMMOD, "ShowButtonLine", true), + + bTypingNew(SRMMMOD, "DefaultTyping", true), + bTypingUnknown(SRMMMOD, "UnknownTyping", false), + + bShowTyping(SRMMMOD, "ShowTyping", true), + bShowTypingWin(SRMMMOD, "ShowTypingWin", true), + bShowTypingTray(SRMMMOD, "ShowTypingTray", false), + bShowTypingClist(SRMMMOD, "ShowTypingClist", true), + + bCascade(SRMMMOD, "Cascade", true), + bAutoMin(SRMMMOD, "AutoMin", false), + bAutoClose(SRMMMOD, "AutoClose", false), + bShowNames(SRMMMOD, "ShowNames", false), + bShowFormat(SRMMMOD, "ShowFormatting", true), + bSendButton(SRMMMOD, "UseSendButton", false), + bCtrlSupport(SRMMMOD, "SupportCtrlUpDn", true), + bShowReadChar(SRMMMOD, "ShowCharCount", false), + bDeleteTempCont(SRMMMOD, "DeleteTempCont", false), + bSavePerContact(SRMMMOD, "SavePerContact", false), + bDoNotStealFocus(SRMMMOD, "DoNotStealFocus", false), + bUseStatusWinIcon(SRMMMOD, "UseStatusWinIcon", true), + + bLimitAvatarHeight(SRMMMOD, "AvatarLimitHeight", true), + iAvatarHeight(SRMMMOD, "AvatarHeight", 60), + + popupFlags(SRMMMOD, "PopupFlags", 0), + nFlashMax(SRMMMOD, "FlashMax", 5), + + msgTimeout(SRMMMOD, "MessageTimeout", 65000), + + iLoadHistory(SRMMMOD, "LoadHistory", LOADHISTORY_UNREAD), + nLoadCount(SRMMMOD, "LoadCount", 10), + nLoadTime(SRMMMOD, "LoadTime", 10) {} ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/stdmsg/src/stdafx.h b/src/core/stdmsg/src/stdafx.h index ca5b8ebd96..ef484f4f68 100644 --- a/src/core/stdmsg/src/stdafx.h +++ b/src/core/stdmsg/src/stdafx.h @@ -56,6 +56,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include +#include #include #include #include @@ -131,7 +132,6 @@ struct LOGSTREAMDATA : public GCLogStreamDataBase {}; #include "cmdlist.h" #include "msgs.h" -#include "globals.h" #include "version.h" #define EM_ACTIVATE (WM_USER+0x102) @@ -156,6 +156,43 @@ struct CMPlugin : public PLUGIN HANDLE hLogger; + CMOption bShowButtons; + CMOption bSendButton; + CMOption bShowTyping; + CMOption bShowTypingWin; + CMOption bShowTypingTray; + CMOption bShowTypingClist; + CMOption bShowIcons; + CMOption bShowTime; + CMOption bShowDate; + CMOption bShowAvatar; + CMOption bShowNames; + CMOption bShowSecs; + CMOption bShowReadChar; + CMOption bAutoClose; + CMOption bAutoMin; + CMOption bTypingNew; + CMOption bTypingUnknown; + CMOption bCtrlSupport; + CMOption bShowFormat; + CMOption bSavePerContact; + CMOption bDoNotStealFocus; + CMOption bCascade; + CMOption bDeleteTempCont; + CMOption bUseStatusWinIcon; + + CMOption bLimitAvatarHeight; + CMOption iAvatarHeight; + + CMOption popupFlags; + CMOption msgTimeout; + CMOption nFlashMax; + + CMOption iLoadHistory; + CMOption nLoadCount, nLoadTime; + + bool bSmileyInstalled = false; + int Load() override; int Unload() override; }; @@ -170,6 +207,9 @@ void LoadIcons(void); void Unload_ChatModule(void); void Load_ChatModule(void); +// globals.cpp +void InitGlobals(void); + // log.cpp char* Log_CreateRtfHeader(void); CSrmmLogWindow *logBuilder(CMsgDialog &pDlg); diff --git a/src/core/stdmsg/src/tabs.cpp b/src/core/stdmsg/src/tabs.cpp index a1f2a40181..ad11e2afa9 100644 --- a/src/core/stdmsg/src/tabs.cpp +++ b/src/core/stdmsg/src/tabs.cpp @@ -182,7 +182,7 @@ void CTabbedWindow::OnDestroy() SaveWindowPosition(true); - Utils_SaveWindowPosition(m_hwnd, g_dat.bSavePerContact ? ((m_pEmbed == nullptr) ? 0 : m_pEmbed->m_hContact) : 0, CHAT_MODULE, "room"); + Utils_SaveWindowPosition(m_hwnd, g_plugin.bSavePerContact ? ((m_pEmbed == nullptr) ? 0 : m_pEmbed->m_hContact) : 0, CHAT_MODULE, "room"); if (m_pEmbed == nullptr) g_pTabDialog = nullptr; @@ -305,7 +305,7 @@ void CTabbedWindow::FixTabIcons(CMsgDialog *pDlg) // set the container's icon only if we're processing the current page if (pDlg == CurrPage()) { Window_FreeIcon_IcoLib(m_hwnd); - if (g_dat.bUseStatusWinIcon) + if (g_plugin.bUseStatusWinIcon) Window_SetProtoIcon_IcoLib(m_hwnd, pDlg->m_szProto, pDlg->m_wStatus); else if (pDlg->isChat()) Window_SetIcon_IcoLib(m_hwnd, g_plugin.getIconHandle(IDI_CHANMGR)); @@ -392,15 +392,15 @@ void CTabbedWindow::SetWindowPosition() } int flag = m_pEmbed->m_bNoActivate ? RWPF_HIDDEN : 0; - if (Utils_RestoreWindowPosition(m_hwnd, g_dat.bSavePerContact ? m_pEmbed->m_hContact : 0, CHAT_MODULE, "room", flag)) { - if (g_dat.bSavePerContact) { + if (Utils_RestoreWindowPosition(m_hwnd, g_plugin.bSavePerContact ? m_pEmbed->m_hContact : 0, CHAT_MODULE, "room", flag)) { + if (g_plugin.bSavePerContact) { if (Utils_RestoreWindowPosition(m_hwnd, 0, CHAT_MODULE, "room", flag | RWPF_NOMOVE)) SetWindowPos(m_hwnd, nullptr, 0, 0, 550, 400, SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW); } else SetWindowPos(m_hwnd, nullptr, 0, 0, 550, 400, SWP_NOZORDER | SWP_NOMOVE | SWP_SHOWWINDOW); } - if (!g_dat.bSavePerContact && g_dat.bCascade) { + if (!g_plugin.bSavePerContact && g_plugin.bCascade) { RECT rc, rcMax = {}; CTabbedWindow *pMaxTab = nullptr; diff --git a/src/core/stdmsg/stdmsg.vcxproj b/src/core/stdmsg/stdmsg.vcxproj index c3b3d3353c..c083c48a66 100644 --- a/src/core/stdmsg/stdmsg.vcxproj +++ b/src/core/stdmsg/stdmsg.vcxproj @@ -43,7 +43,6 @@ - diff --git a/src/core/stdmsg/stdmsg.vcxproj.filters b/src/core/stdmsg/stdmsg.vcxproj.filters index 99782c4c1f..1996b04a19 100644 --- a/src/core/stdmsg/stdmsg.vcxproj.filters +++ b/src/core/stdmsg/stdmsg.vcxproj.filters @@ -49,9 +49,6 @@ Header Files - - Header Files - Header Files diff --git a/src/mir_app/src/chat.h b/src/mir_app/src/chat.h index 5020adcb92..8be9224d3d 100644 --- a/src/mir_app/src/chat.h +++ b/src/mir_app/src/chat.h @@ -47,6 +47,8 @@ extern GlobalLogSettingsBase *g_Settings; extern CMOption g_bChatTrayInactive, g_bChatPopupInactive; +extern const char *g_pszHotkeySection; + // log.c void LoadMsgLogBitmaps(void); void FreeMsgLogBitmaps(void); diff --git a/src/mir_app/src/hotkeys.cpp b/src/mir_app/src/hotkeys.cpp index 8400697910..da631b75ae 100644 --- a/src/mir_app/src/hotkeys.cpp +++ b/src/mir_app/src/hotkeys.cpp @@ -154,7 +154,7 @@ MIR_APP_DLL(int) Hotkey_Register(const HOTKEYDESC *desc, HPLUGIN pPlugin) p->Enabled = !db_get_b(0, DBMODULENAME "Off", p->pszName, 0); } - p->pszService = desc->pszService ? mir_strdup(desc->pszService) : nullptr; + p->pszService = mir_strdup(desc->pszService); p->DefHotkey = desc->DefHotKey & ~HKF_MIRANDA_LOCAL; p->Hotkey = db_get_w(0, DBMODULENAME, p->pszName, p->DefHotkey); p->type = p->pszService ? diff --git a/src/mir_app/src/miranda.h b/src/mir_app/src/miranda.h index e9ae1c1d2c..aadf1a35b6 100644 --- a/src/mir_app/src/miranda.h +++ b/src/mir_app/src/miranda.h @@ -65,6 +65,8 @@ void KillModulePopups(HPLUGIN); /**** srmm.cpp *************************************************************************/ +#define SRMM_MODULE "SRMsg" + void KillModuleSrmmIcons(HPLUGIN); void KillModuleToolbarIcons(HPLUGIN); diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp index f93d075edc..b470676d1a 100644 --- a/src/mir_app/src/srmm_base.cpp +++ b/src/mir_app/src/srmm_base.cpp @@ -36,6 +36,7 @@ CSrmmBaseDialog::CSrmmBaseDialog(CMPluginBase &pPlugin, int idDialog, SESSION_IN m_message(this, IDC_SRMM_MESSAGE), m_nickList(this, IDC_SRMM_NICKLIST), + m_btnOk(this, IDOK), m_btnFilter(this, IDC_SRMM_FILTER), m_btnHistory(this, IDC_SRMM_HISTORY), m_btnNickList(this, IDC_SRMM_SHOWNICKLIST), @@ -202,6 +203,17 @@ LRESULT CSrmmBaseDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) return 0; } } + + { + MSG tmp = { m_hwnd, msg, wParam, lParam }; + if (Hotkey_Check(&tmp, g_pszHotkeySection) == 100) { + if (!(GetWindowLongPtr(m_message.GetHwnd(), GWL_STYLE) & ES_READONLY)) { + m_btnOk.Click(); + return true; + } + } + } + __fallthrough; case WM_SYSKEYDOWN: diff --git a/src/mir_app/src/srmm_log.cpp b/src/mir_app/src/srmm_log.cpp index fe2770cd4e..bc97e37023 100644 --- a/src/mir_app/src/srmm_log.cpp +++ b/src/mir_app/src/srmm_log.cpp @@ -82,7 +82,7 @@ static bool sttEnableCustomLogs(CMsgDialog *pDlg) CSrmmLogWindow* Srmm_GetLogWindow(CMsgDialog *pDlg) { if (sttEnableCustomLogs(pDlg)) { - CMStringA szViewerName(db_get_sm(pDlg->m_hContact, "SRMsg", "Logger")); + CMStringA szViewerName(db_get_sm(pDlg->m_hContact, SRMM_MODULE, "Logger")); if (szViewerName.IsEmpty()) szViewerName = db_get_sm(0, "SRMM", "Logger", "built-in"); diff --git a/src/mir_app/src/srmm_util.cpp b/src/mir_app/src/srmm_util.cpp index 6281d0c024..7ca37c9eb9 100644 --- a/src/mir_app/src/srmm_util.cpp +++ b/src/mir_app/src/srmm_util.cpp @@ -24,6 +24,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include "chat.h" +const char *g_pszHotkeySection; + ///////////////////////////////////////////////////////////////////////////////////////// MIR_APP_DLL(DWORD) CALLBACK Srmm_LogStreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb) @@ -84,6 +86,28 @@ MIR_APP_DLL(void) Srmm_Broadcast(UINT msg, WPARAM wParam, LPARAM lParam) ///////////////////////////////////////////////////////////////////////////////////////// +MIR_APP_DLL(void) Srmm_CreateHotkey(const char *pszSection, const char *pszDescription) +{ + g_pszHotkeySection = pszSection; + + uint16_t wHotKey = HOTKEYCODE(0, VK_RETURN); + if (db_get_b(0, SRMM_MODULE, "SendOnCtrlEnter")) { + db_unset(0, SRMM_MODULE, "SendOnCtrlEnter"); + wHotKey = HOTKEYCODE(HOTKEYF_CONTROL, VK_RETURN); + } + + if (db_get_b(0, SRMM_MODULE, "SendOnEnter")) + db_unset(0, SRMM_MODULE, "SendOnEnter"); + + if (db_get_b(0, SRMM_MODULE, "SendOnDblEnter")) + db_unset(0, SRMM_MODULE, "SendOnDblEnter"); + + HOTKEYDESC hd = { "tabsrmm_send", pszDescription, pszSection, 0, wHotKey, 0, 100 }; + Hotkey_Register(&hd, g_pChatPlugin); +} + +///////////////////////////////////////////////////////////////////////////////////////// + MIR_APP_DLL(HWND) Srmm_FindWindow(MCONTACT hContact) { return WindowList_Find(g_hWindowList, hContact); -- cgit v1.2.3