From edc889e1188d25838da939e0ec49f057ec7ee99e Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 24 Sep 2013 20:30:01 +0000 Subject: ME_POPUP_FILTER - popup filtering event git-svn-id: http://svn.miranda-ng.org/main/trunk@6218 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Popup/src/config.h | 1 + plugins/Popup/src/main.cpp | 7 +- plugins/Popup/src/services.cpp | 148 +++++++++++++++++++++-------------------- 3 files changed, 83 insertions(+), 73 deletions(-) (limited to 'plugins/Popup/src') diff --git a/plugins/Popup/src/config.h b/plugins/Popup/src/config.h index f6a0635b18..dcfcf7b0dd 100644 --- a/plugins/Popup/src/config.h +++ b/plugins/Popup/src/config.h @@ -127,6 +127,7 @@ void LoadOptions(); //===== General Plugin ===== extern HINSTANCE hInst; extern HANDLE hMainThread; +extern HANDLE hEventNotify; extern HANDLE hSemaphore; extern BOOL closing; extern HANDLE folderId; diff --git a/plugins/Popup/src/main.cpp b/plugins/Popup/src/main.cpp index 58d9c1ba94..6761a28fae 100644 --- a/plugins/Popup/src/main.cpp +++ b/plugins/Popup/src/main.cpp @@ -27,6 +27,7 @@ WORD SETTING_MAXIMUMWIDTH_MAX = GetSystemMetrics(SM_CXSCREEN); #define MENUCOMMAND_HISTORY "Popup/ShowHistory" #define MENUCOMMAND_SVC "Popup/EnableDisableMenuCommand" +HANDLE hEventNotify; //===== MessageBoxes ===== //void MB(char*); //This one is for Debug purposes @@ -379,6 +380,8 @@ MIRAPI int Load(void) LoadOptions(); //Service Functions + hEventNotify = CreateHookableEvent(ME_POPUP_FILTER); + CreateServiceFunction(MS_POPUP_ADDPOPUP, Popup_AddPopup); CreateServiceFunction(MS_POPUP_ADDPOPUPW, Popup_AddPopupW); CreateServiceFunction(MS_POPUP_ADDPOPUP2, Popup_AddPopup2); @@ -435,7 +438,9 @@ MIRAPI int Unload(void) FreeLibrary(hMsimgDll); FreeLibrary(hGdiDll); - if (PopupOptions.SkinPack) mir_free(PopupOptions.SkinPack); + DestroyHookableEvent(hEventNotify); + + mir_free(PopupOptions.SkinPack); mir_free(PopupOptions.Effect); OptAdv_UnregisterVfx(); diff --git a/plugins/Popup/src/services.cpp b/plugins/Popup/src/services.cpp index 932943f698..0e7895b09c 100644 --- a/plugins/Popup/src/services.cpp +++ b/plugins/Popup/src/services.cpp @@ -58,12 +58,10 @@ static bool isFullScreen() // check foregroundwindow HWND hWnd = GetForegroundWindow(); - if (hWnd && hWnd != hWndDesktop && hWnd != hWndShell) - { + if (hWnd && hWnd != hWndDesktop && hWnd != hWndShell) { TCHAR tszClassName[128] = _T(""); GetClassName(hWnd, tszClassName, SIZEOF(tszClassName)); - if (_tcscmp(tszClassName, _T("WorkerW"))) - { + if (_tcscmp(tszClassName, _T("WorkerW"))) { RECT rect, rectw, recti; GetWindowRect(hWnd, &rectw); @@ -83,10 +81,12 @@ static bool isFullScreen() //===== Popup/AddPopup INT_PTR Popup_AddPopup(WPARAM wParam, LPARAM lParam) { - if (!gbPopupLoaded) return -1; + if (!gbPopupLoaded) + return -1; POPUPDATA *ppd = (POPUPDATA*)wParam; - if (!ppd) return -1; + if (!ppd) + return -1; POPUPDATA2 ppd2 = { sizeof(ppd2) }; ppd2.flags = PU2_ANSI; @@ -105,10 +105,12 @@ INT_PTR Popup_AddPopup(WPARAM wParam, LPARAM lParam) //===== Popup/AddPopupW INT_PTR Popup_AddPopupW(WPARAM wParam, LPARAM lParam) { - if (!gbPopupLoaded) return -1; + if (!gbPopupLoaded) + return -1; POPUPDATAW_V2 *ppd = (POPUPDATAW_V2*)wParam; - if (!ppd) return -1; + if (!ppd) + return -1; POPUPDATA2 ppd2 = {0}; ppd2.cbSize = sizeof(ppd2); @@ -144,10 +146,15 @@ INT_PTR Popup_AddPopup2(WPARAM wParam, LPARAM lParam) { /* NOTE: we will return 0 instead of -1 since tabSRMM stops using popup after first failure :/ */ - if (!gbPopupLoaded) return -1; + if (!gbPopupLoaded) + return -1; + + POPUPDATA2 *ppdIn = (POPUPDATA2*)wParam; + if (!ppdIn) + return -1; - POPUPDATA2 *ppdIn = (POPUPDATA2 *)wParam; - if (!ppdIn) return -1; + if ( NotifyEventHooks(hEventNotify, (WPARAM)ppdIn->lchContact, (LPARAM)ppdIn->PluginWindowProc)) + return 0; POPUPDATA2 ppdFixed = {0}; POPUPDATA2 *ppd = &ppdFixed; @@ -156,7 +163,7 @@ INT_PTR Popup_AddPopup2(WPARAM wParam, LPARAM lParam) DWORD disableWhen; FillNotificationData(ppd, &disableWhen); - if (!(lParam&APF_NO_HISTORY)) + if ( !(lParam & APF_NO_HISTORY)) PopupHistoryAdd(ppd); if (PopupThreadIsFull()) @@ -164,9 +171,9 @@ INT_PTR Popup_AddPopup2(WPARAM wParam, LPARAM lParam) #ifdef _DEBUG char temp[128]; - OutputDebugStringA("isWorkstationLocked: \t"); - OutputDebugStringA(isWorkstationLocked() ? "true":"false"); - OutputDebugStringA("\n"); + OutputDebugStringA("isWorkstationLocked: \t"); + OutputDebugStringA(isWorkstationLocked() ? "true":"false"); + OutputDebugStringA("\n"); #endif if (isWorkstationLocked()) @@ -182,8 +189,7 @@ INT_PTR Popup_AddPopup2(WPARAM wParam, LPARAM lParam) if (bShowMode == PU_SHOWMODE_BLOCK) return -1; - if (bShowMode != PU_SHOWMODE_FAVORITE) - { + if (bShowMode != PU_SHOWMODE_FAVORITE) { if (!PopupOptions.ModuleIsEnabled) return -1; #ifdef _DEBUG @@ -210,8 +216,7 @@ INT_PTR Popup_AddPopup2(WPARAM wParam, LPARAM lParam) if ((disableWhen & 0x0000FFFF) & Proto_Status2Flag_My(CallService(MS_CLIST_GETSTATUSMODE, 0, 0))) return -1; - if (proto) - { + if (proto) { char prefix[128]; mir_snprintf(prefix, sizeof(prefix), LPGEN("Protocol Status") "/%s", GetContactProto(ppd->lchContact)); if (db_get_dw(NULL, MODULNAME, prefix, 0) & @@ -222,12 +227,11 @@ INT_PTR Popup_AddPopup2(WPARAM wParam, LPARAM lParam) } } - if (lParam&APF_CUSTOM_POPUP) + if (lParam & APF_CUSTOM_POPUP) ppd->flags |= PU2_CUSTOM_POPUP; + PopupWnd2 *wnd = new PopupWnd2(ppd, NULL, false); - - if (lParam & APF_RETURN_HWND) - { + if (lParam & APF_RETURN_HWND) { while (!wnd->m_bWindowCreated) Sleep(1); return (INT_PTR)wnd->getHwnd(); } @@ -313,32 +317,32 @@ INT_PTR Popup_ShowMessage(WPARAM wParam, LPARAM lParam) { ppd2.cbSize = sizeof(ppd2); ppd2.flags = PU2_ANSI; ppd2.lpzText = (char*)wParam; - switch (lParam&0x7fffffff) { - case SM_ERROR: - ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_ERROR,0); - ppd2.colorBack = RGB(191,0,0); - ppd2.colorText = RGB(255,245,225); - ppd2.lchNotification = g_hntfError; - ppd2.lpzTitle = Translate("Error"); - break; - case SM_WARNING: - ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_WARNING,0); - ppd2.colorBack = RGB(210,210,150); - ppd2.colorText = RGB(0,0,0); - ppd2.lchNotification = g_hntfWarning; - ppd2.lpzTitle = Translate("Warning"); - break; - case SM_NOTIFY: - ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_NOTIFY,0); - ppd2.colorBack = RGB(230,230,230); - ppd2.colorText = RGB(0,0,0); - ppd2.lchNotification = g_hntfNotification; - ppd2.lpzTitle = Translate("Notify"); - break; - default: //No no no... you must give me a good value. - return -1; + switch (lParam & 0x7fffffff) { + case SM_ERROR: + ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_ERROR,0); + ppd2.colorBack = RGB(191,0,0); + ppd2.colorText = RGB(255,245,225); + ppd2.lchNotification = g_hntfError; + ppd2.lpzTitle = Translate("Error"); + break; + case SM_WARNING: + ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_WARNING,0); + ppd2.colorBack = RGB(210,210,150); + ppd2.colorText = RGB(0,0,0); + ppd2.lchNotification = g_hntfWarning; + ppd2.lpzTitle = Translate("Warning"); + break; + case SM_NOTIFY: + ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_NOTIFY,0); + ppd2.colorBack = RGB(230,230,230); + ppd2.colorText = RGB(0,0,0); + ppd2.lchNotification = g_hntfNotification; + ppd2.lpzTitle = Translate("Notify"); + break; + default: //No no no... you must give me a good value. + return -1; } - return Popup_AddPopup2((WPARAM)&ppd2, (LPARAM)((lParam&0x80000000)?APF_NO_HISTORY:0)); + return Popup_AddPopup2((WPARAM)&ppd2, (LPARAM)((lParam & 0x80000000)?APF_NO_HISTORY:0)); } INT_PTR Popup_ShowMessageW(WPARAM wParam, LPARAM lParam) { @@ -350,31 +354,31 @@ INT_PTR Popup_ShowMessageW(WPARAM wParam, LPARAM lParam) { ppd2.flags = PU2_UNICODE; ppd2.lpwzText = (WCHAR*)wParam; switch (lParam&0x7fffffff) { - case SM_ERROR: - ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_ERROR,0); - ppd2.colorBack = RGB(191,0,0); - ppd2.colorText = RGB(255,245,225); - ppd2.lchNotification = g_hntfError; - ppd2.lpwzTitle = TranslateW(L"Error"); - break; - case SM_WARNING: - ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_WARNING,0); - ppd2.colorBack = RGB(210,210,150); - ppd2.colorText = RGB(0,0,0); - ppd2.lchNotification = g_hntfWarning; - ppd2.lpwzTitle = TranslateW(L"Warning"); - break; - case SM_NOTIFY: - ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_NOTIFY,0); - ppd2.colorBack = RGB(230,230,230); - ppd2.colorText = RGB(0,0,0); - ppd2.lchNotification = g_hntfNotification; - ppd2.lpwzTitle = TranslateW(L"Notify"); - break; - default: //No no no... you must give me a good value. - return -1; + case SM_ERROR: + ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_ERROR,0); + ppd2.colorBack = RGB(191,0,0); + ppd2.colorText = RGB(255,245,225); + ppd2.lchNotification = g_hntfError; + ppd2.lpwzTitle = TranslateW(L"Error"); + break; + case SM_WARNING: + ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_WARNING,0); + ppd2.colorBack = RGB(210,210,150); + ppd2.colorText = RGB(0,0,0); + ppd2.lchNotification = g_hntfWarning; + ppd2.lpwzTitle = TranslateW(L"Warning"); + break; + case SM_NOTIFY: + ppd2.lchIcon = IcoLib_GetIcon(ICO_MISC_NOTIFY,0); + ppd2.colorBack = RGB(230,230,230); + ppd2.colorText = RGB(0,0,0); + ppd2.lchNotification = g_hntfNotification; + ppd2.lpwzTitle = TranslateW(L"Notify"); + break; + default: //No no no... you must give me a good value. + return -1; } - return Popup_AddPopup2((WPARAM)&ppd2, (LPARAM)((lParam&0x80000000)?APF_NO_HISTORY:0)); + return Popup_AddPopup2((WPARAM)&ppd2, (LPARAM)((lParam & 0x80000000)?APF_NO_HISTORY:0)); } //===== Popup/Query -- cgit v1.2.3