summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorTobias Weimer <wishmaster51@googlemail.com>2013-11-09 20:47:28 +0000
committerTobias Weimer <wishmaster51@googlemail.com>2013-11-09 20:47:28 +0000
commit52160d1560cf32217dc0d916c78a68ba8f113fa2 (patch)
tree20825dee4e62736618a227522a19a640f4cf2f97 /plugins
parentdc15843b8237831a121d493fa5a1f3b679013d48 (diff)
* Fixed crashes when MS_BB_* services are called with NULL arguments.
All MS_BB_* services will now return 1 on failure. *Try to use pszModuleName as WindowText (maybe not the best chioce...) git-svn-id: http://svn.miranda-ng.org/main/trunk@6847 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins')
-rw-r--r--plugins/ExternalAPI/m_msg_buttonsbar.h5
-rw-r--r--plugins/TabSRMM/src/buttonsbar.cpp160
2 files changed, 92 insertions, 73 deletions
diff --git a/plugins/ExternalAPI/m_msg_buttonsbar.h b/plugins/ExternalAPI/m_msg_buttonsbar.h
index f5bb94d173..31d75e84e9 100644
--- a/plugins/ExternalAPI/m_msg_buttonsbar.h
+++ b/plugins/ExternalAPI/m_msg_buttonsbar.h
@@ -9,6 +9,7 @@
//
// wParam = 0
// lParam = (BBButton *) &description
+// Returns 0 on success, 1 otherwise
#define MS_BB_ADDBUTTON "TabSRMM/ButtonsBar/AddButton"
//////////////////////////////////////////////////////////////////////////
@@ -16,6 +17,7 @@
//
// wParam = 0
// lParam = (BBButton *) &description, only button ID and ModuleName used
+// Returns 0 on success, 1 otherwise
#define MS_BB_REMOVEBUTTON "TabSRMM/ButtonsBar/RemoveButton"
//////////////////////////////////////////////////////////////////////////
@@ -23,6 +25,7 @@
//
// wParam = 0
// lParam = (BBButton *) &description
+// Returns 0 on success, 1 otherwise
#define MS_BB_MODIFYBUTTON "TabSRMM/ButtonsBar/ModifyButton"
@@ -37,6 +40,7 @@
// wParam = hContact
// lParam = (BBButton *) &description , only ModuleName and ID used
// Returns BBButton struct with BBSF_ bbbFlags:
+// Returns 0 on success, 1 otherwise
#define MS_BB_GETBUTTONSTATE "TabSRMM/ButtonsBar/GetButtonState"
//////////////////////////////////////////////////////////////////////////
@@ -44,6 +48,7 @@
//
// wParam = hContact
// lParam = (BBButton *) &description , ModuleName, ID,hIcon,Tooltip, and BBSF_ bbbFlags are used
+// Returns 0 on success, 1 otherwise
#define MS_BB_SETBUTTONSTATE "TabSRMM/ButtonsBar/SetButtonState"
diff --git a/plugins/TabSRMM/src/buttonsbar.cpp b/plugins/TabSRMM/src/buttonsbar.cpp
index 270bba765b..833b9e6a3b 100644
--- a/plugins/TabSRMM/src/buttonsbar.cpp
+++ b/plugins/TabSRMM/src/buttonsbar.cpp
@@ -26,10 +26,10 @@ typedef void (*ItemDestuctor)(void*);
//some code parts from ClistModern toolbar by FYR
//
/////////////////////////////////////////////////////////////////////////////////
-static int sstSortButtons(const void * vmtbi1, const void * vmtbi2)
+static int sstSortButtons(const void *vmtbi1, const void *vmtbi2)
{
- CustomButtonData * mtbi1 = (CustomButtonData *) * ((CustomButtonData **)vmtbi1);
- CustomButtonData * mtbi2 = (CustomButtonData *) * ((CustomButtonData **)vmtbi2);
+ CustomButtonData *mtbi1 = (CustomButtonData *) * ((CustomButtonData **)vmtbi1);
+ CustomButtonData *mtbi2 = (CustomButtonData *) * ((CustomButtonData **)vmtbi2);
if (mtbi1 == NULL || mtbi2 == NULL) return (mtbi1 - mtbi2);
return mtbi1->dwPosition - mtbi2->dwPosition;
}
@@ -37,9 +37,9 @@ static int sstSortButtons(const void * vmtbi1, const void * vmtbi2)
static void li_ListDestruct(SortedList *pList, ItemDestuctor pItemDestructor)
{
- int i=0;
if (!pList) return;
- for (i=0; i < pList->realCount; i++) pItemDestructor(pList->items[i]);
+ for (int i=0; i < pList->realCount; i++)
+ pItemDestructor(pList->items[i]);
List_Destroy(pList);
mir_free(pList);
}
@@ -52,7 +52,7 @@ static void li_RemoveDestruct(SortedList *pList, int index, ItemDestuctor pItemD
}
}
-static void li_RemovePtrDestruct(SortedList *pList, void * ptr, ItemDestuctor pItemDestructor)
+static void li_RemovePtrDestruct(SortedList *pList, void *ptr, ItemDestuctor pItemDestructor)
{
if (List_RemovePtr(pList, ptr))
pItemDestructor(ptr);
@@ -74,9 +74,9 @@ static void li_SortList(SortedList *pList, FSortFunc pSortFunct)
pList->sortFunc = pOldSort;
}
-static void listdestructor(void * input)
+static void listdestructor(void *input)
{
- CustomButtonData * cbdi = (CustomButtonData *)input;
+ CustomButtonData *cbdi = (CustomButtonData *)input;
if (cbdi->pszModuleName) mir_free(cbdi->pszModuleName);
if (cbdi->ptszTooltip) mir_free(cbdi->ptszTooltip);
mir_free(cbdi);
@@ -113,7 +113,7 @@ static int Hlp_RemoveDatabaseSettings(HANDLE hContact, char *szModule, char *szP
dbces.pfnEnumProc = DBRemoveEnumProc;
dbces.lParam = (LPARAM)&rs;
dbces.szModule = szModule;
- if (CallService(MS_DB_CONTACT_ENUMSETTINGS, (WPARAM)(HANDLE)hContact, (LPARAM)&dbces) == -1)
+ if (CallService(MS_DB_CONTACT_ENUMSETTINGS, (WPARAM)hContact, (LPARAM)&dbces) == -1)
return -1;
count = 0;
@@ -167,9 +167,8 @@ void CB_DeInitCustomButtons()
void CB_DestroyAllButtons(HWND hwndDlg, TWindowData *dat)
{
- int i;
HWND hwndBtn = NULL;
- for (i=0; i < LButtonsList->realCount; i++) {
+ for (int i=0; i < LButtonsList->realCount; i++) {
CustomButtonData* cbd = (CustomButtonData *)LButtonsList->items[i];
{
hwndBtn = GetDlgItem(hwndDlg, cbd->dwButtonCID);
@@ -177,7 +176,7 @@ void CB_DestroyAllButtons(HWND hwndDlg, TWindowData *dat)
}
}
- for (i=0; i < RButtonsList->realCount; i++) {
+ for (int i=0; i < RButtonsList->realCount; i++) {
CustomButtonData* cbd = (CustomButtonData *)RButtonsList->items[i];
{
hwndBtn = GetDlgItem(hwndDlg, cbd->dwButtonCID);
@@ -202,7 +201,7 @@ void CB_DestroyButton(HWND hwndDlg, TWindowData *dat, DWORD dwButtonCID, DWORD d
}
}
-void CB_ChangeButton(HWND hwndDlg, TWindowData *dat, CustomButtonData* cbd)
+void CB_ChangeButton(HWND hwndDlg, TWindowData *dat, CustomButtonData *cbd)
{
HWND hwndBtn = GetDlgItem(hwndDlg, cbd->dwButtonCID);
if (hwndBtn) {
@@ -211,15 +210,14 @@ void CB_ChangeButton(HWND hwndDlg, TWindowData *dat, CustomButtonData* cbd)
if (cbd->ptszTooltip)
SendMessage(hwndBtn, BUTTONADDTOOLTIP, (WPARAM)cbd->ptszTooltip, BATF_TCHAR);
SendMessage(hwndBtn, BUTTONSETCONTAINER, (LPARAM)dat->pContainer, 0);
+ SetWindowTextA(hwndBtn,cbd->pszModuleName);
}
}
void CB_ReInitCustomButtons()
{
- int i;
-
- for (i=0; i < LButtonsList->realCount; i++) {
- CustomButtonData* cbd = (CustomButtonData *)LButtonsList->items[i];
+ for (int i=0; i < LButtonsList->realCount; i++) {
+ CustomButtonData *cbd = (CustomButtonData *)LButtonsList->items[i];
//GetButtonSettings(NULL,cbd);
if (cbd->opFlags&BBSF_NTBSWAPED || cbd->opFlags&BBSF_NTBDESTRUCT) {
cbd->opFlags ^= BBSF_NTBSWAPED;
@@ -232,7 +230,7 @@ void CB_ReInitCustomButtons()
}
}
- for (i=0; i < RButtonsList->realCount; i++) {
+ for (int i=0; i < RButtonsList->realCount; i++) {
CustomButtonData* cbd = (CustomButtonData *)RButtonsList->items[i];
if (cbd->opFlags&BBSF_NTBSWAPED || cbd->opFlags&BBSF_NTBDESTRUCT) {
cbd->opFlags ^= BBSF_NTBSWAPED;
@@ -264,13 +262,14 @@ void CB_HardReInit()
NotifyEventHooks(hHookToolBarLoadedEvt, 0, 0);
}
-static INT_PTR CB_AddButton(WPARAM wParam, LPARAM lParam)
+static INT_PTR CB_AddButton(WPARAM, LPARAM lParam)
{
BBButton *bbdi = (BBButton *)lParam;
- bNeedResort = TRUE;
- if (bbdi->cbSize != sizeof(BBButton))
+ if (!bbdi || bbdi->cbSize != sizeof(BBButton))
return 1;
+ bNeedResort = TRUE;
+
CustomButtonData *cbd = (CustomButtonData *)mir_alloc(sizeof(CustomButtonData));
memset(cbd, 0, sizeof(CustomButtonData));
@@ -326,66 +325,76 @@ static INT_PTR CB_AddButton(WPARAM wParam, LPARAM lParam)
static INT_PTR CB_GetButtonState(WPARAM wParam, LPARAM lParam)
{
- HWND hwndDlg = NULL;
- int i;
+ if(wParam == 0 || lParam == 0)
+ return 1;
+
DWORD tempCID = 0;
- BOOL realbutton = 0;
- BBButton * bbdi = (BBButton *)lParam;
+ bool realbutton = false;
+ BBButton *bbdi = (BBButton *)lParam;
bbdi->bbbFlags = 0;
- for (i=0; i < LButtonsList->realCount; i++) {
- CustomButtonData* cbd = (CustomButtonData *)LButtonsList->items[i];
+ for (int i=0; i < LButtonsList->realCount; i++) {
+ CustomButtonData *cbd = (CustomButtonData *)LButtonsList->items[i];
if (!strcmp(cbd->pszModuleName, bbdi->pszModuleName) && (cbd->dwButtonOrigID == bbdi->dwButtonID)) {
- realbutton = 1;
+ realbutton = true;
tempCID = cbd->dwButtonCID;
}
}
if (!realbutton)
- for (i=0; i < RButtonsList->realCount; i++) {
+ for (int i=0; i < RButtonsList->realCount; i++) {
CustomButtonData* cbd = (CustomButtonData *)RButtonsList->items[i];
if (!strcmp(cbd->pszModuleName, bbdi->pszModuleName) && (cbd->dwButtonOrigID == bbdi->dwButtonID)) {
- realbutton = 1;
+ realbutton = true;
tempCID = cbd->dwButtonCID;
}
}
- if (!realbutton) return 1;
- hwndDlg = M.FindWindow((HANDLE)wParam);
- bbdi->bbbFlags = (IsDlgButtonChecked(hwndDlg, tempCID) ? BBSF_PUSHED : BBSF_RELEASED) | (IsWindowVisible(GetDlgItem(hwndDlg, tempCID)) ? 0 : BBSF_HIDDEN) | (IsWindowEnabled(GetDlgItem(hwndDlg, tempCID)) ? 0 : BBSF_DISABLED);
+ if (!realbutton)
+ return 1;
+ HWND hwndDlg = M.FindWindow((HANDLE)wParam);
+ if(!hwndDlg)
+ return 1;
+ HWND hwndBtn = GetDlgItem(hwndDlg, tempCID);
+ bbdi->bbbFlags = (IsDlgButtonChecked(hwndDlg, tempCID) ? BBSF_PUSHED : BBSF_RELEASED) | (IsWindowVisible(hwndBtn) ? 0 : BBSF_HIDDEN) | (IsWindowEnabled(hwndBtn) ? 0 : BBSF_DISABLED);
return 0;
}
static INT_PTR CB_SetButtonState(WPARAM wParam, LPARAM lParam)
{
- HWND hwndDlg;
- int i;
- BOOL realbutton = 0;
+ if(wParam == 0 || lParam == 0)
+ return 1;
+
+ bool realbutton = false;
DWORD tempCID = 0;
- BBButton * bbdi = (BBButton *)lParam;
- for (i=0; i < LButtonsList->realCount; i++) {
- CustomButtonData* cbd = (CustomButtonData *)LButtonsList->items[i];
+ BBButton *bbdi = (BBButton *)lParam;
+ for (int i=0; i < LButtonsList->realCount; i++) {
+ CustomButtonData *cbd = (CustomButtonData *)LButtonsList->items[i];
if (!strcmp(cbd->pszModuleName, bbdi->pszModuleName) && (cbd->dwButtonOrigID == bbdi->dwButtonID)) {
- realbutton = 1;
+ realbutton = true;
tempCID = cbd->dwButtonCID;
}
}
if (!realbutton)
- for (i=0; i < RButtonsList->realCount; i++) {
+ for (int i=0; i < RButtonsList->realCount; i++) {
CustomButtonData* cbd = (CustomButtonData *)RButtonsList->items[i];
if (!strcmp(cbd->pszModuleName, bbdi->pszModuleName) && (cbd->dwButtonOrigID == bbdi->dwButtonID)) {
- realbutton = 1;
+ realbutton = true;
tempCID = cbd->dwButtonCID;
}
}
- if (!realbutton || !wParam) return 1;
+ if (!realbutton)
+ return 1;
+ HWND hwndDlg = M.FindWindow((HANDLE)wParam);
+ if(!hwndDlg)
+ return 1;
- hwndDlg = M.FindWindow((HANDLE)wParam);
- if (hwndDlg && realbutton && bbdi->hIcon)
- SendMessage(GetDlgItem(hwndDlg, tempCID), BM_SETIMAGE, IMAGE_ICON, (LPARAM)Skin_GetIconByHandle(bbdi->hIcon));
- if (hwndDlg && realbutton && bbdi->pszTooltip)
- SendMessage(GetDlgItem(hwndDlg, tempCID), BUTTONADDTOOLTIP, (WPARAM)bbdi->ptszTooltip, (bbdi->bbbFlags & BBBF_ANSITOOLTIP) ? 0 : BATF_TCHAR);
- if (hwndDlg && realbutton && bbdi->bbbFlags) {
+ SetDlgItemTextA(hwndDlg, tempCID, bbdi->pszModuleName);
+ if (bbdi->hIcon)
+ SendDlgItemMessage(hwndDlg, tempCID, BM_SETIMAGE, IMAGE_ICON, (LPARAM)Skin_GetIconByHandle(bbdi->hIcon));
+ if (bbdi->pszTooltip)
+ SendDlgItemMessage(hwndDlg, tempCID, BUTTONADDTOOLTIP, (WPARAM)bbdi->ptszTooltip, (bbdi->bbbFlags & BBBF_ANSITOOLTIP) ? 0 : BATF_TCHAR);
+ if (bbdi->bbbFlags) {
Utils::showDlgControl(hwndDlg, tempCID, (bbdi->bbbFlags&BBSF_HIDDEN) ? SW_HIDE : SW_SHOW);
Utils::enableDlgControl(hwndDlg, tempCID, (bbdi->bbbFlags&BBSF_DISABLED) ? 0 : 1);
CheckDlgButton(hwndDlg, tempCID, (bbdi->bbbFlags&BBSF_PUSHED) ? 1 : 0);
@@ -394,16 +403,18 @@ static INT_PTR CB_SetButtonState(WPARAM wParam, LPARAM lParam)
return 0;
}
-static INT_PTR CB_RemoveButton(WPARAM wParam, LPARAM lParam)
+static INT_PTR CB_RemoveButton(WPARAM, LPARAM lParam)
{
- int i;
+ BBButton *bbdi = (BBButton *)lParam;
+ if (!bbdi)
+ return 1;
+
DWORD tempCID = 0;
DWORD dwFlags = 0;
- BBButton * bbdi = (BBButton *)lParam;
EnterCriticalSection(&ToolBarCS);
- for (i=0; i < LButtonsList->realCount; i++) {
- CustomButtonData* cbd = (CustomButtonData *)LButtonsList->items[i];
+ for (int i=0; i < LButtonsList->realCount; i++) {
+ CustomButtonData *cbd = (CustomButtonData *)LButtonsList->items[i];
if (!strcmp(cbd->pszModuleName, bbdi->pszModuleName) && (cbd->dwButtonOrigID == bbdi->dwButtonID)) {
tempCID = cbd->dwButtonCID;
dwFlags = cbd->bLSided ? BBBF_ISLSIDEBUTTON : BBBF_ISRSIDEBUTTON;
@@ -411,11 +422,12 @@ static INT_PTR CB_RemoveButton(WPARAM wParam, LPARAM lParam)
i--;
}
}
- if (tempCID) qsort(LButtonsList->items, LButtonsList->realCount, sizeof(CustomButtonData *), sstSortButtons);
+ if (tempCID)
+ qsort(LButtonsList->items, LButtonsList->realCount, sizeof(CustomButtonData *), sstSortButtons);
if (!tempCID) {
- for (i=0; i < RButtonsList->realCount; i++) {
- CustomButtonData* cbd = (CustomButtonData *)RButtonsList->items[i];
+ for (int i=0; i < RButtonsList->realCount; i++) {
+ CustomButtonData *cbd = (CustomButtonData *)RButtonsList->items[i];
if (!strcmp(cbd->pszModuleName, bbdi->pszModuleName) && (cbd->dwButtonOrigID == bbdi->dwButtonID)) {
tempCID = cbd->dwButtonCID;
dwFlags = cbd->bLSided ? BBBF_ISLSIDEBUTTON : BBBF_ISRSIDEBUTTON;
@@ -423,7 +435,8 @@ static INT_PTR CB_RemoveButton(WPARAM wParam, LPARAM lParam)
i--;
}
}
- if (tempCID) qsort(RButtonsList->items, RButtonsList->realCount, sizeof(CustomButtonData *), sstSortButtons);
+ if (tempCID)
+ qsort(RButtonsList->items, RButtonsList->realCount, sizeof(CustomButtonData *), sstSortButtons);
}
LeaveCriticalSection(&ToolBarCS);
@@ -432,28 +445,29 @@ static INT_PTR CB_RemoveButton(WPARAM wParam, LPARAM lParam)
return 0;
}
-static INT_PTR CB_ModifyButton(WPARAM wParam, LPARAM lParam)
+static INT_PTR CB_ModifyButton(WPARAM, LPARAM lParam)
{
- int i;
- BOOL bFound = 0;
- CustomButtonData* cbd = NULL;
- BBButton * bbdi = (BBButton *)lParam;
+ BBButton *bbdi = (BBButton *)lParam;
+ if(!bbdi)
+ return 1;
+ bool bFound = 1;
+ CustomButtonData *cbd = NULL;
EnterCriticalSection(&ToolBarCS);
- for (i=0; i < LButtonsList->realCount; i++) {
+ for (int i=0; i < LButtonsList->realCount; i++) {
cbd = (CustomButtonData *)LButtonsList->items[i];
if (!strcmp(cbd->pszModuleName, bbdi->pszModuleName) && (cbd->dwButtonOrigID == bbdi->dwButtonID)) {
- bFound = 1;
+ bFound = true;
break;
}
}
if (!bFound) {
cbd = NULL;
- for (i=0; i < RButtonsList->realCount; i++) {
+ for (int i=0; i < RButtonsList->realCount; i++) {
cbd = (CustomButtonData *)RButtonsList->items[i];
if (!strcmp(cbd->pszModuleName, bbdi->pszModuleName) && (cbd->dwButtonOrigID == bbdi->dwButtonID)) {
- bFound = 1;
+ bFound = true;
break;
}
}
@@ -467,7 +481,8 @@ static INT_PTR CB_ModifyButton(WPARAM wParam, LPARAM lParam)
else
cbd->ptszTooltip = mir_tstrdup(bbdi->ptszTooltip);
}
- if (bbdi->hIcon) cbd->hIcon = bbdi->hIcon;
+ if (bbdi->hIcon)
+ cbd->hIcon = bbdi->hIcon;
if (bbdi->bbbFlags) {
cbd->bHidden = (bbdi->bbbFlags & BBBF_HIDDEN) ? 1 : 0;
cbd->bLSided = (bbdi->bbbFlags & BBBF_ISLSIDEBUTTON) ? 1 : 0;
@@ -486,12 +501,11 @@ static INT_PTR CB_ModifyButton(WPARAM wParam, LPARAM lParam)
void BB_UpdateIcons(HWND hdlg, TWindowData *dat)
{
- int i;
HWND hwndBtn = NULL;
qsort(LButtonsList->items, LButtonsList->realCount, sizeof(CustomButtonData *), sstSortButtons);
- for (i=0; i < LButtonsList->realCount; i++) {
- CustomButtonData* cbd = (CustomButtonData *)LButtonsList->items[i];
+ for (int i=0; i < LButtonsList->realCount; i++) {
+ CustomButtonData *cbd = (CustomButtonData *)LButtonsList->items[i];
if (cbd) {
if (!cbd->bDummy)
hwndBtn = GetDlgItem(hdlg, cbd->dwButtonCID);
@@ -503,8 +517,8 @@ void BB_UpdateIcons(HWND hdlg, TWindowData *dat)
hwndBtn = NULL;
qsort(RButtonsList->items, RButtonsList->realCount, sizeof(CustomButtonData *), sstSortButtons);
- for (i=0; i < RButtonsList->realCount; i++) {
- CustomButtonData* cbd = (CustomButtonData *)RButtonsList->items[i];
+ for (int i=0; i < RButtonsList->realCount; i++) {
+ CustomButtonData *cbd = (CustomButtonData *)RButtonsList->items[i];
if (cbd) {
if (!cbd->bDummy)
hwndBtn = GetDlgItem(hdlg, cbd->dwButtonCID);