summaryrefslogtreecommitdiff
path: root/plugins/TopToolBar/toolbar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/TopToolBar/toolbar.cpp')
-rw-r--r--plugins/TopToolBar/toolbar.cpp30
1 files changed, 26 insertions, 4 deletions
diff --git a/plugins/TopToolBar/toolbar.cpp b/plugins/TopToolBar/toolbar.cpp
index 44d2e537b5..6d41d19aff 100644
--- a/plugins/TopToolBar/toolbar.cpp
+++ b/plugins/TopToolBar/toolbar.cpp
@@ -1,6 +1,8 @@
#include "common.h"
+#define OLD_TBBUTTON_SIZE (offsetof(TTBButton, pszTooltipUp))
+
pfnCustomProc g_CustomProc = NULL;
LPARAM g_CustomProcParam = 0;
@@ -14,6 +16,8 @@ int BUTTGAP;
int nextButtonId = 200;
+static HANDLE hTTBModuleLoaded, hTTBInitButtons;
+
//------------ options -------------
COLORREF bkColour;
HBITMAP hBmpBackground, hBmpSeparator;
@@ -281,6 +285,11 @@ TopButtonInt* CreateButton(TTBButton* but)
sprintf(buf, "%s_dn", b->name);
b->hIconDn = LoadIconFromLibrary(buf, b->hIconDn, b->hIconHandleDn);
}
+
+ if (but->cbSize > OLD_TBBUTTON_SIZE) {
+ b->szTooltipUp = but->pszTooltipUp;
+ b->szTooltipDn = but->pszTooltipDn;
+ }
}
return b;
}
@@ -301,7 +310,10 @@ INT_PTR TTBAddButton(WPARAM wParam, LPARAM lParam)
mir_cslock lck(csButtonsHook);
TTBButton *but = (TTBButton*)wParam;
- if (but->cbSize != sizeof(TTBButton) || (!(but->dwFlags && TTBBF_ISLBUTTON) && nameexists(but->name)))
+ if (but->cbSize != sizeof(TTBButton) && but->cbSize != OLD_TBBUTTON_SIZE)
+ return -1;
+
+ if ( !(but->dwFlags && TTBBF_ISLBUTTON) && nameexists(but->name))
return -1;
b = CreateButton(but);
@@ -754,11 +766,15 @@ static INT_PTR OnEventFire(WPARAM wParam, LPARAM lParam)
{
CallService(MS_SYSTEM_REMOVEWAIT, wParam, 0);
StopArrange = FALSE;
- NotifyEventHooks(hHookTTBModuleLoaded, 0, 0);
+ NotifyEventHooks(hTTBInitButtons, 0, 0);
+ NotifyEventHooks(hTTBModuleLoaded, 0, 0);
if (g_CustomProc) {
mir_cslock lck(csButtonsHook);
+ if (hwndTopToolBar)
+ g_CustomProc(TTB_WINDOW_HANDLE, hwndTopToolBar, g_CustomProcParam);
+
for (int i=0; i < Buttons.getCount(); i++) {
TopButtonInt* p = Buttons[i];
g_CustomProc((HANDLE)p->id, p->hwnd, g_CustomProcParam);
@@ -800,7 +816,6 @@ int OnModulesLoad(WPARAM wParam, LPARAM lParam)
hwndContactList = (HWND)CallService(MS_CLUI_GETHWND, 0, 0);
hFrameTopWindow = addTopToolBarWindow(hwndContactList);
- LoadInternalButtons(( HWND )CallService(MS_CLUI_GETHWNDTREE, 0, 0));
LoadAllSeparators();
LoadAllLButs();
@@ -834,7 +849,11 @@ int LoadToolbarModule()
HookEvent(ME_SKIN2_ICONSCHANGED, OnIconChange);
HookEvent(ME_OPT_INITIALISE, TTBOptInit);
- CreateServiceFunction(MS_TTB_ADDBUTTON, TTBAddButton);
+ hTTBModuleLoaded = CreateHookableEvent(ME_TTB_MODULELOADED);
+ hTTBInitButtons = CreateHookableEvent(ME_TTB_INITBUTTONS);
+ SetHookDefaultForHookableEvent(hTTBInitButtons, InitInternalButtons);
+
+ CreateServiceFunction("TopToolBar/AddButton", TTBAddButton);
CreateServiceFunction(MS_TTB_REMOVEBUTTON, TTBRemoveButton);
CreateServiceFunction(MS_TTB_SETBUTTONSTATE, TTBSetState);
@@ -858,6 +877,9 @@ int LoadToolbarModule()
int UnloadToolbarModule()
{
+ DestroyHookableEvent(hTTBModuleLoaded);
+ DestroyHookableEvent(hTTBInitButtons);
+
DeleteObject(hBmpSeparator);
DeleteCriticalSection(&csButtonsHook);