From 66cb770a982a2502456d10d73838df2b7239fd89 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 4 Mar 2013 07:23:42 +0000 Subject: new subclassing functions applied to all plugins git-svn-id: http://svn.miranda-ng.org/main/trunk@3880 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/core/stdchat/src/richutil.cpp | 49 +++++++++++++++++++------------------- src/core/stdchat/src/richutil.h | 1 - src/core/stdchat/src/window.cpp | 50 +++++++++++++-------------------------- 3 files changed, 40 insertions(+), 60 deletions(-) (limited to 'src/core/stdchat') diff --git a/src/core/stdchat/src/richutil.cpp b/src/core/stdchat/src/richutil.cpp index a6b3d5971a..46c9e5c28e 100644 --- a/src/core/stdchat/src/richutil.cpp +++ b/src/core/stdchat/src/richutil.cpp @@ -22,6 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include + +#include #include "richutil.h" /* @@ -176,29 +178,29 @@ int RichUtil_SubClass(HWND hwndEdit) { slist = rlist_append(slist, ru); LeaveCriticalSection(&csRich); SetWindowLongPtr(ru->hwnd, GWLP_USERDATA, (LONG_PTR)ru); // Ugly hack - ru->origProc = (WNDPROC)SetWindowLongPtr(ru->hwnd, GWLP_WNDPROC, (LONG_PTR)&RichUtil_Proc); + mir_subclassWindow(ru->hwnd, RichUtil_Proc); RichUtil_ClearUglyBorder(ru); return 1; } return 0; } -static LRESULT CALLBACK RichUtil_Proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { +static LRESULT CALLBACK RichUtil_Proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ TRichUtil *ru; - + EnterCriticalSection(&csRich); ru = rlist_find(slist, hwnd); LeaveCriticalSection(&csRich); switch(msg) { - case WM_THEMECHANGED: - case WM_STYLECHANGED: - { - RichUtil_ClearUglyBorder(ru); - break; - } - case WM_NCPAINT: + case WM_THEMECHANGED: + case WM_STYLECHANGED: + RichUtil_ClearUglyBorder(ru); + break; + + case WM_NCPAINT: { - LRESULT ret = CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam); + LRESULT ret = mir_callNextSubclass(hwnd, RichUtil_Proc, msg, wParam, lParam); if (ru->hasUglyBorder&&MyIsThemeActive()) { HANDLE hTheme = MyOpenThemeData(ru->hwnd, L"EDIT"); @@ -232,11 +234,11 @@ static LRESULT CALLBACK RichUtil_Proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM } return ret; } - case WM_NCCALCSIZE: + case WM_NCCALCSIZE: { - LRESULT ret = CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam); + LRESULT ret = mir_callNextSubclass(hwnd, RichUtil_Proc, msg, wParam, lParam); NCCALCSIZE_PARAMS *ncsParam = (NCCALCSIZE_PARAMS*)lParam; - + if (ru->hasUglyBorder&&MyIsThemeActive()) { HANDLE hTheme = MyOpenThemeData(hwnd, L"EDIT"); @@ -261,17 +263,14 @@ static LRESULT CALLBACK RichUtil_Proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM } return ret; } - case WM_ENABLE: - RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE|RDW_NOCHILDREN|RDW_UPDATENOW|RDW_FRAME); - break; - case WM_DESTROY: - { - LRESULT ret = CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam); - if(IsWindow(hwnd)) { - if ((WNDPROC)GetWindowLongPtr(hwnd, GWLP_WNDPROC) == &RichUtil_Proc) - SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)ru->origProc); - } + case WM_ENABLE: + RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE|RDW_NOCHILDREN|RDW_UPDATENOW|RDW_FRAME); + break; + + case WM_DESTROY: + { + LRESULT ret = mir_callNextSubclass(hwnd, RichUtil_Proc, msg, wParam, lParam); EnterCriticalSection(&csRich); slist = rlist_remove(slist, ru); LeaveCriticalSection(&csRich); @@ -279,7 +278,7 @@ static LRESULT CALLBACK RichUtil_Proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM return ret; } } - return CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam); + return mir_callNextSubclass(hwnd, RichUtil_Proc, msg, wParam, lParam); } static VOID RichUtil_ClearUglyBorder(TRichUtil *ru) { diff --git a/src/core/stdchat/src/richutil.h b/src/core/stdchat/src/richutil.h index 9a69f8f809..97d85aeddf 100644 --- a/src/core/stdchat/src/richutil.h +++ b/src/core/stdchat/src/richutil.h @@ -45,7 +45,6 @@ typedef struct { HWND hwnd; RECT rect; int hasUglyBorder; - WNDPROC origProc; } TRichUtil; void RichUtil_Load(); diff --git a/src/core/stdchat/src/window.cpp b/src/core/stdchat/src/window.cpp index 59fc8e830d..0627dfbea1 100644 --- a/src/core/stdchat/src/window.cpp +++ b/src/core/stdchat/src/window.cpp @@ -34,12 +34,6 @@ extern BOOL SmileyAddInstalled; extern TABLIST * g_TabList; extern HIMAGELIST hIconsList; -static WNDPROC OldSplitterProc; -static WNDPROC OldMessageProc; -static WNDPROC OldNicklistProc; -static WNDPROC OldTabProc; -static WNDPROC OldFilterButtonProc; -static WNDPROC OldLogProc; static HKL hkl = NULL; typedef struct @@ -48,7 +42,6 @@ typedef struct TCHAR szTabSave[20]; } MESSAGESUBDATA; - static LRESULT CALLBACK SplitterSubclassProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { @@ -78,7 +71,7 @@ static LRESULT CALLBACK SplitterSubclassProc(HWND hwnd,UINT msg,WPARAM wParam,LP PostMessage(GetParent(hwnd),WM_SIZE, 0, 0); return 0; } - return CallWindowProc(OldSplitterProc,hwnd,msg,wParam,lParam); + return mir_callNextSubclass(hwnd, SplitterSubclassProc, msg, wParam, lParam); } static void InitButtons(HWND hwndDlg, SESSION_INFO* si) @@ -737,7 +730,7 @@ static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, return 0; } - return CallWindowProc(OldMessageProc, hwnd, msg, wParam, lParam); + return mir_callNextSubclass(hwnd, MessageSubclassProc, msg, wParam, lParam); } static INT_PTR CALLBACK FilterWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) @@ -830,7 +823,7 @@ static LRESULT CALLBACK ButtonSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, L break; } - return CallWindowProc(OldFilterButtonProc, hwnd, msg, wParam, lParam); + return mir_callNextSubclass(hwnd, ButtonSubclassProc, msg, wParam, lParam); } static LRESULT CALLBACK LogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) @@ -873,7 +866,7 @@ static LRESULT CALLBACK LogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPAR break; } - return CallWindowProc(OldLogProc, hwnd, msg, wParam, lParam); + return mir_callNextSubclass(hwnd, LogSubclassProc, msg, wParam, lParam); } static LRESULT CALLBACK TabSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) @@ -987,7 +980,7 @@ static LRESULT CALLBACK TabSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPAR break; } - return CallWindowProc(OldTabProc, hwnd, msg, wParam, lParam); + return mir_callNextSubclass(hwnd, TabSubclassProc, msg, wParam, lParam); } static LRESULT CALLBACK NicklistSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) @@ -1103,13 +1096,11 @@ static LRESULT CALLBACK NicklistSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, POINT p; GetCursorPos(&p); SendMessage( parentdat->hwndTooltip,TTM_TRACKPOSITION,0,(LPARAM)MAKELPARAM(p.x + 15,p.y + 15)); -// SendMessage( parentdat->hwndTooltip, TTM_ACTIVATE, TRUE, 0 ); } } break; - } - return CallWindowProc(OldNicklistProc, hwnd, msg, wParam, lParam); + return mir_callNextSubclass(hwnd, NicklistSubclassProc, msg, wParam, lParam); } static int RestoreWindowPosition(HWND hwnd, HANDLE hContact, char * szModule, char * szNamePrefix, UINT showCmd) @@ -1182,15 +1173,15 @@ INT_PTR CALLBACK RoomWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) CoCreateInstance(CLSID_AccPropServices, NULL, CLSCTX_SERVER, IID_IAccPropServices, (LPVOID *)si->pAccPropServicesForNickList); TranslateDialogDefault(hwndDlg); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)si); - OldSplitterProc=(WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_SPLITTERX),GWLP_WNDPROC,(LONG_PTR)SplitterSubclassProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_SPLITTERY),GWLP_WNDPROC,(LONG_PTR)SplitterSubclassProc); - OldNicklistProc=(WNDPROC)SetWindowLongPtr(hNickList,GWLP_WNDPROC,(LONG_PTR)NicklistSubclassProc); - OldTabProc=(WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_TAB),GWLP_WNDPROC,(LONG_PTR)TabSubclassProc); - OldLogProc=(WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_LOG),GWLP_WNDPROC,(LONG_PTR)LogSubclassProc); - OldFilterButtonProc=(WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_FILTER),GWLP_WNDPROC,(LONG_PTR)ButtonSubclassProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_COLOR),GWLP_WNDPROC,(LONG_PTR)ButtonSubclassProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_BKGCOLOR),GWLP_WNDPROC,(LONG_PTR)ButtonSubclassProc); - OldMessageProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_MESSAGE), GWLP_WNDPROC,(LONG_PTR)MessageSubclassProc); + mir_subclassWindow( GetDlgItem(hwndDlg,IDC_SPLITTERX), SplitterSubclassProc); + mir_subclassWindow( GetDlgItem(hwndDlg,IDC_SPLITTERY), SplitterSubclassProc); + mir_subclassWindow( hNickList, NicklistSubclassProc); + mir_subclassWindow( GetDlgItem(hwndDlg,IDC_TAB), TabSubclassProc); + mir_subclassWindow( GetDlgItem(hwndDlg,IDC_LOG), LogSubclassProc); + mir_subclassWindow( GetDlgItem(hwndDlg,IDC_FILTER), ButtonSubclassProc); + mir_subclassWindow( GetDlgItem(hwndDlg,IDC_COLOR), ButtonSubclassProc); + mir_subclassWindow( GetDlgItem(hwndDlg,IDC_BKGCOLOR), ButtonSubclassProc); + mir_subclassWindow( GetDlgItem(hwndDlg, IDC_MESSAGE), MessageSubclassProc); SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SUBCLASSED, 0, 0); SendDlgItemMessage(hwndDlg, IDC_LOG, EM_AUTOURLDETECT, 1, 0); mask = (int)SendDlgItemMessage(hwndDlg, IDC_LOG, EM_GETEVENTMASK, 0, 0); @@ -2709,17 +2700,8 @@ LABEL_SHOWWINDOW: si->hwndTooltip = NULL; if (si->pAccPropServicesForNickList) si->pAccPropServicesForNickList->Release(); SetWindowLongPtr(hwndDlg,GWLP_USERDATA,0); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_SPLITTERX),GWLP_WNDPROC,(LONG_PTR)OldSplitterProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_SPLITTERY),GWLP_WNDPROC,(LONG_PTR)OldSplitterProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_LIST),GWLP_WNDPROC,(LONG_PTR)OldNicklistProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_TAB),GWLP_WNDPROC,(LONG_PTR)OldTabProc); SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_UNSUBCLASSED, 0, 0); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_MESSAGE),GWLP_WNDPROC,(LONG_PTR)OldMessageProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_LOG),GWLP_WNDPROC,(LONG_PTR)OldLogProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_FILTER),GWLP_WNDPROC,(LONG_PTR)OldFilterButtonProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_COLOR),GWLP_WNDPROC,(LONG_PTR)OldFilterButtonProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_BKGCOLOR),GWLP_WNDPROC,(LONG_PTR)OldFilterButtonProc); break; } - return(FALSE); + return FALSE; } -- cgit v1.2.3