diff options
author | George Hazan <george.hazan@gmail.com> | 2012-07-11 21:12:00 +0000 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2012-07-11 21:12:00 +0000 |
commit | 2bbcdb330bbf4d3bbd636f7014ee447c9be95495 (patch) | |
tree | 7b1deacf6b281d03bcfdfdf671fe4b9d0498a0d2 | |
parent | c67de31a8ce0b1a43b11662674ac0b64d14812d4 (diff) |
fix for a TTB to remove buttons of the dynamically unloaded plugins
git-svn-id: http://svn.miranda-ng.org/main/trunk@911 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r-- | plugins/TopToolBar/main.rc | 2 | ||||
-rw-r--r-- | plugins/TopToolBar/toolbar.cpp | 31 | ||||
-rw-r--r-- | plugins/TopToolBar/topbutton.cpp | 3 | ||||
-rw-r--r-- | src/modules/plugins/newplugins.cpp | 13 |
4 files changed, 46 insertions, 3 deletions
diff --git a/plugins/TopToolBar/main.rc b/plugins/TopToolBar/main.rc index 3f795295fa..f6efd9369b 100644 --- a/plugins/TopToolBar/main.rc +++ b/plugins/TopToolBar/main.rc @@ -36,7 +36,7 @@ BEGIN LTEXT "Button width",IDC_STATIC,169,150,100,8
EDITTEXT IDC_BUTTWIDTH,272,148,27,12,ES_NUMBER
CONTROL "",IDC_SPIN_WIDTH,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,289,148,8,12
- LTEXT "Inteval between buttons",IDC_STATIC,169,166,100,8
+ LTEXT "Interval between buttons",IDC_STATIC,169,166,100,8
EDITTEXT IDC_BUTTGAP,272,164,27,12,ES_NUMBER
CONTROL "",IDC_SPIN_GAP,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,289,164,8,12
CONTROL "Use flat mode",IDC_USEFLAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,185,130,10
diff --git a/plugins/TopToolBar/toolbar.cpp b/plugins/TopToolBar/toolbar.cpp index a41c43607f..ac81128d50 100644 --- a/plugins/TopToolBar/toolbar.cpp +++ b/plugins/TopToolBar/toolbar.cpp @@ -267,6 +267,7 @@ INT_PTR TTBAddButton(WPARAM wParam, LPARAM lParam) return -1;
b = CreateButton(but);
+ b->hLangpack = (int)lParam;
b->LoadSettings();
Buttons.insert(b);
b->CreateWnd();
@@ -550,6 +551,31 @@ static INT_PTR TTBSetCustomProc(WPARAM wParam, LPARAM lParam) }
/////////////////////////////////////////////////////////////////////////////////////////
+// Removes buttons of plugins being unloads. lParam = HINSTANCE
+
+int OnPluginUnload(WPARAM wParam, LPARAM lParam)
+{
+ int hLangpack = CallService(MS_LANGPACK_LOOKUPHANDLE, 0, lParam);
+ if (hLangpack) {
+ bool bNeedUpdate = false;
+ mir_cslock lck(csButtonsHook);
+
+ for (int i=Buttons.getCount()-1; i >= 0; i--)
+ if (Buttons[i]->hLangpack == hLangpack) {
+ TTBRemoveButton(Buttons[i]->id, 0);
+ bNeedUpdate = true;
+ }
+
+ if (bNeedUpdate) {
+ ArrangeButtons();
+ if (g_ctrl->hWnd)
+ PostMessage(g_ctrl->hWnd, TTB_UPDATEFRAMEVISIBILITY, TRUE, 0);
+ }
+ }
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
int OnModulesLoad(WPARAM wParam, LPARAM lParam)
{
@@ -605,6 +631,7 @@ int LoadToolbarModule() InitializeCriticalSection(&csButtonsHook);
hBmpSeparator = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_SEP));
+ HookEvent(ME_SYSTEM_MODULEUNLOAD, OnPluginUnload);
HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoad);
HookEvent(ME_SKIN2_ICONSCHANGED, OnIconChange);
HookEvent(ME_OPT_INITIALISE, TTBOptInit);
@@ -618,12 +645,12 @@ int LoadToolbarModule() CreateServiceFunction(MS_TTB_SETBUTTONSTATE, TTBSetState);
CreateServiceFunction(MS_TTB_GETBUTTONSTATE, TTBGetState);
-
+
CreateServiceFunction(MS_TTB_GETBUTTONOPTIONS, TTBGetOptions);
CreateServiceFunction(MS_TTB_SETBUTTONOPTIONS, TTBSetOptions);
CreateServiceFunction(TTB_LAUNCHSERVICE, LaunchService);
-
+
CreateServiceFunction("TopToolBar/SetCustomProc", TTBSetCustomProc);
CreateServiceFunction("TTB_ONSTARTUPFIRE", OnEventFire);
diff --git a/plugins/TopToolBar/topbutton.cpp b/plugins/TopToolBar/topbutton.cpp index 762b784934..34a6c4d5df 100644 --- a/plugins/TopToolBar/topbutton.cpp +++ b/plugins/TopToolBar/topbutton.cpp @@ -7,6 +7,9 @@ static int maxid = 10000; TopButtonInt::~TopButtonInt()
{
+ if (hwnd)
+ DestroyWindow(hwnd);
+
if (dwFlags & TTBBF_ISLBUTTON) {
mir_free(ptszProgram);
}
diff --git a/src/modules/plugins/newplugins.cpp b/src/modules/plugins/newplugins.cpp index cfccdfaf62..6b2eb6d63a 100644 --- a/src/modules/plugins/newplugins.cpp +++ b/src/modules/plugins/newplugins.cpp @@ -127,6 +127,19 @@ char* GetPluginNameByInstance(HINSTANCE hInstance) return NULL;
}
+int GetPluginLangByInstance(HINSTANCE hInstance)
+{
+ if (pluginList.getCount() == 0)
+ return NULL;
+
+ for (int i=0; i < pluginList.getCount(); i++) {
+ pluginEntry* p = pluginList[i];
+ if (p->bpi.pluginInfo && p->bpi.hInst == hInstance)
+ return p->hLangpack;
+ }
+ return NULL;
+}
+
int GetPluginFakeId(const MUUID &uuid, int hLangpack)
{
for (int i=0; i < pluginList.getCount(); i++) {
|