summaryrefslogtreecommitdiff
path: root/src/mir_app
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2023-11-21 19:01:35 +0300
committerGeorge Hazan <george.hazan@gmail.com>2023-11-21 19:01:35 +0300
commitee23690fa6c847a5284f8145e73328cdaab2b617 (patch)
treefc9fa53601eb0babccec11021dc9638c07522f9c /src/mir_app
parenta455124c53674338f581a1970768182223c3a49a (diff)
SRMM toolbar buttons that require input window to be visible are marked as BBBF_NOREADONLY
Diffstat (limited to 'src/mir_app')
-rw-r--r--src/mir_app/src/CMPluginBase.cpp7
-rw-r--r--src/mir_app/src/chat.h4
-rw-r--r--src/mir_app/src/file.cpp2
-rw-r--r--src/mir_app/src/mir_app.def1
-rw-r--r--src/mir_app/src/mir_app64.def1
-rw-r--r--src/mir_app/src/srmm_base.cpp4
-rw-r--r--src/mir_app/src/srmm_toolbar.cpp13
7 files changed, 22 insertions, 10 deletions
diff --git a/src/mir_app/src/CMPluginBase.cpp b/src/mir_app/src/CMPluginBase.cpp
index 8c50bfdd2e..fcf162b4d4 100644
--- a/src/mir_app/src/CMPluginBase.cpp
+++ b/src/mir_app/src/CMPluginBase.cpp
@@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "stdafx.h"
+#include "chat.h"
#include "plugins.h"
#include "IcoLib.h"
@@ -288,6 +289,12 @@ HGENMENU CMPluginBase::addRootMenu(int hMenuObject, LPCWSTR ptszName, int positi
return Menu_CreateRoot(hMenuObject, ptszName, position, hIcoLib, this);
}
+HANDLE CMPluginBase::addButton(const struct BBButton *pButton)
+{
+ return Srmm_AddButton(pButton, this);
+}
+
+
HANDLE CMPluginBase::addTTB(const struct TTBButton *pButton)
{
return (HANDLE)CallService(MS_TTB_ADDBUTTON, (WPARAM)pButton, (LPARAM)this);
diff --git a/src/mir_app/src/chat.h b/src/mir_app/src/chat.h
index 3f4fcc8dda..1766669bc5 100644
--- a/src/mir_app/src/chat.h
+++ b/src/mir_app/src/chat.h
@@ -32,7 +32,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define DM_OPTIONSAPPLIED (WM_USER+14)
-void Srmm_CreateToolbarIcons(HWND hwndDlg, int flags);
+void Srmm_CreateToolbarIcons(CSrmmBaseDialog *pDlg, int flags);
void Srmm_ProcessToolbarHotkey(MCONTACT hContact, INT_PTR iButtonFrom, HWND hwndDlg);
void CheckChatCompatibility();
@@ -136,4 +136,6 @@ CMStringW Chat_GetFolderName(SESSION_INFO *si = nullptr);
void Chat_Serialize(SESSION_INFO *si);
bool Chat_Unserialize(SESSION_INFO *si);
+EXTERN_C MIR_APP_DLL(HANDLE) Srmm_AddButton(const BBButton *bbdi, HPLUGIN _hLang);
+
#pragma comment(lib,"comctl32.lib")
diff --git a/src/mir_app/src/file.cpp b/src/mir_app/src/file.cpp
index 7cde57d9f4..491a130183 100644
--- a/src/mir_app/src/file.cpp
+++ b/src/mir_app/src/file.cpp
@@ -173,7 +173,7 @@ static int SRFileModulesLoaded(WPARAM, LPARAM)
bbd.hIcon = g_plugin.getIconHandle(IDI_ATTACH);
bbd.pszModuleName = SRFILEMODULE;
bbd.pwszTooltip = LPGENW("Send file");
- Srmm_AddButton(&bbd, &g_plugin);
+ g_plugin.addButton(&bbd);
HookEvent(ME_MSG_BUTTONPRESSED, OnToolbarButtonPressed);
HookEvent(ME_CLIST_PREBUILDCONTACTMENU, SRFilePreBuildMenu);
diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def
index bd9234ca7e..33ebc19958 100644
--- a/src/mir_app/src/mir_app.def
+++ b/src/mir_app/src/mir_app.def
@@ -911,3 +911,4 @@ Clist_GroupSaveExpanded @1003 NONAME
?addFont@CMPluginBase@@QAEHPBD0PB_W111HHPAUtagLOGFONTW@@K@Z @1029 NONAME
?IsReadonly@Contact@@YG_NI@Z @1030 NONAME
?Readonly@Contact@@YGXI_N@Z @1031 NONAME
+?addButton@CMPluginBase@@QAEPAXPBUBBButton@@@Z @1032 NONAME
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def
index 478cde2493..fc9a419bce 100644
--- a/src/mir_app/src/mir_app64.def
+++ b/src/mir_app/src/mir_app64.def
@@ -911,3 +911,4 @@ Clist_GroupSaveExpanded @1003 NONAME
?addFont@CMPluginBase@@QEAAHPEBD0PEB_W111HHPEAUtagLOGFONTW@@K@Z @1029 NONAME
?IsReadonly@Contact@@YA_NI@Z @1030 NONAME
?Readonly@Contact@@YAXI_N@Z @1031 NONAME
+?addButton@CMPluginBase@@QEAAPEAXPEBUBBButton@@@Z @1032 NONAME
diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp
index 9851972d7f..5e152d3870 100644
--- a/src/mir_app/src/srmm_base.cpp
+++ b/src/mir_app/src/srmm_base.cpp
@@ -550,7 +550,7 @@ bool CSrmmBaseDialog::OnInitDialog()
}
// three buttons below are initiated inside this call, so button creation must precede subclassing
- Srmm_CreateToolbarIcons(m_hwnd, isChat() ? BBBF_ISCHATBUTTON : BBBF_ISIMBUTTON);
+ Srmm_CreateToolbarIcons(this, isChat() ? BBBF_ISCHATBUTTON : BBBF_ISIMBUTTON);
mir_subclassWindow(m_btnFilter.GetHwnd(), stubButtonSubclassProc);
mir_subclassWindow(m_btnColor.GetHwnd(), stubButtonSubclassProc);
@@ -613,7 +613,7 @@ INT_PTR CSrmmBaseDialog::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
break;
case WM_CBD_RECREATE:
- Srmm_CreateToolbarIcons(m_hwnd, isChat() ? BBBF_ISCHATBUTTON : BBBF_ISIMBUTTON);
+ Srmm_CreateToolbarIcons(this, isChat() ? BBBF_ISCHATBUTTON : BBBF_ISIMBUTTON);
break;
case WM_NOTIFY:
diff --git a/src/mir_app/src/srmm_toolbar.cpp b/src/mir_app/src/srmm_toolbar.cpp
index 29fa5bdffb..ac428385c0 100644
--- a/src/mir_app/src/srmm_toolbar.cpp
+++ b/src/mir_app/src/srmm_toolbar.cpp
@@ -68,7 +68,7 @@ static void CB_RegisterSeparators()
bbd.bbbFlags = BBBF_ISSEPARATOR | BBBF_ISIMBUTTON;
bbd.dwButtonID = i + 1;
bbd.dwDefPos = 410 + i;
- Srmm_AddButton(&bbd, &g_plugin);
+ g_plugin.addButton(&bbd);
}
}
@@ -172,6 +172,7 @@ MIR_APP_DLL(int) Srmm_ModifyButton(BBButton *bbdi)
cbd->m_bChatButton = (bbdi->bbbFlags & BBBF_ISCHATBUTTON) != 0;
cbd->m_bIMButton = (bbdi->bbbFlags & BBBF_ISIMBUTTON) != 0;
cbd->m_bDisabled = (bbdi->bbbFlags & BBBF_DISABLED) != 0;
+ cbd->m_bNoReadonly = (bbdi->bbbFlags & BBBF_NOREADONLY) != 0;
}
}
}
@@ -261,12 +262,11 @@ MIR_APP_DLL(void) Srmm_ResetToolbar()
}
}
-void Srmm_CreateToolbarIcons(HWND hwndDlg, int flags)
+void Srmm_CreateToolbarIcons(CSrmmBaseDialog *pDlg, int flags)
{
+ MWindow hwndDlg = pDlg->GetHwnd();
HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hwndDlg, GWLP_HINSTANCE);
- CDlgBase *pDlg = CDlgBase::Find(hwndDlg);
-
for (auto &cbd : arButtonsList) {
if (cbd->m_bSeparator)
continue;
@@ -300,7 +300,7 @@ void Srmm_CreateToolbarIcons(HWND hwndDlg, int flags)
if (cbd->m_bDisabled)
EnableWindow(hwndButton, FALSE);
- if (cbd->m_bHidden)
+ if (cbd->m_bHidden || (pDlg->m_bReadOnly && cbd->m_bNoReadonly))
ShowWindow(hwndButton, SW_HIDE);
}
else if (hwndButton)
@@ -603,7 +603,7 @@ public:
bbd.bbbFlags = BBBF_ISSEPARATOR | BBBF_ISIMBUTTON;
bbd.dwButtonID = ++dwSepCount;
- CustomButtonData *cbd = (CustomButtonData*)Srmm_AddButton(&bbd, &g_plugin);
+ CustomButtonData *cbd = (CustomButtonData*)g_plugin.addButton(&bbd);
TVINSERTSTRUCT tvis;
tvis.hParent = nullptr;
@@ -741,6 +741,7 @@ MIR_APP_DLL(HANDLE) Srmm_AddButton(const BBButton *bbdi, HPLUGIN _hLang)
cbd->m_dwArrowCID = (bbdi->bbbFlags & BBBF_ISARROWBUTTON) ? cbd->m_dwButtonCID + 1 : 0;
cbd->m_bHidden = (bbdi->bbbFlags & BBBF_HIDDEN) != 0;
cbd->m_bSeparator = (bbdi->bbbFlags & BBBF_ISSEPARATOR) != 0;
+ cbd->m_bNoReadonly = (bbdi->bbbFlags & BBBF_NOREADONLY) != 0;
cbd->m_bDisabled = (bbdi->bbbFlags & BBBF_DISABLED) != 0;
cbd->m_bPushButton = (bbdi->bbbFlags & BBBF_ISPUSHBUTTON) != 0;