Use the new Subclassing API.

This commit is contained in:
György 'Nog' Jeney 2002-10-02 23:46:20 +00:00 committed by Alexandre Julliard
parent 91d41c7fe3
commit 0d3b4906e4
1 changed files with 14 additions and 141 deletions

View File

@ -80,14 +80,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(tooltips);
typedef struct
{
WNDPROC wpOrigProc;
HWND hwndToolTip;
UINT uRefCount;
} TT_SUBCLASS_INFO, *LPTT_SUBCLASS_INFO;
typedef struct
{
UINT uFlags;
@ -129,16 +121,11 @@ typedef struct
#define ID_TIMERLEAVE 3 /* tool leave timer */
extern LPSTR COMCTL32_aSubclass; /* global subclassing atom */
/* property name of tooltip window handle */
/*#define TT_SUBCLASS_PROP "CC32SubclassInfo" */
#define TOOLTIPS_GetInfoPtr(hWindow) ((TOOLTIPS_INFO *)GetWindowLongA (hWindow, 0))
LRESULT CALLBACK
TOOLTIPS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
TOOLTIPS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uId, DWORD_PTR dwRef);
static VOID
@ -733,37 +720,10 @@ TOOLTIPS_AddToolA (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* install subclassing hook */
if (toolPtr->uFlags & TTF_SUBCLASS) {
if (toolPtr->uFlags & TTF_IDISHWND) {
LPTT_SUBCLASS_INFO lpttsi =
(LPTT_SUBCLASS_INFO)GetPropA ((HWND)toolPtr->uId, COMCTL32_aSubclass);
if (lpttsi == NULL) {
lpttsi =
(LPTT_SUBCLASS_INFO)COMCTL32_Alloc (sizeof(TT_SUBCLASS_INFO));
lpttsi->wpOrigProc =
(WNDPROC)SetWindowLongA ((HWND)toolPtr->uId,
GWL_WNDPROC,(LONG)TOOLTIPS_SubclassProc);
lpttsi->hwndToolTip = hwnd;
lpttsi->uRefCount++;
SetPropA ((HWND)toolPtr->uId, COMCTL32_aSubclass,
(HANDLE)lpttsi);
}
else
WARN("A window tool must only be listed once!\n");
SetWindowSubclass(toolPtr->uId, TOOLTIPS_SubclassProc, 1, hwnd);
}
else {
LPTT_SUBCLASS_INFO lpttsi =
(LPTT_SUBCLASS_INFO)GetPropA (toolPtr->hwnd, COMCTL32_aSubclass);
if (lpttsi == NULL) {
lpttsi =
(LPTT_SUBCLASS_INFO)COMCTL32_Alloc (sizeof(TT_SUBCLASS_INFO));
lpttsi->wpOrigProc =
(WNDPROC)SetWindowLongA (toolPtr->hwnd,
GWL_WNDPROC,(LONG)TOOLTIPS_SubclassProc);
lpttsi->hwndToolTip = hwnd;
lpttsi->uRefCount++;
SetPropA (toolPtr->hwnd, COMCTL32_aSubclass, (HANDLE)lpttsi);
}
else
lpttsi->uRefCount++;
SetWindowSubclass(toolPtr->hwnd, TOOLTIPS_SubclassProc, 1, hwnd);
}
TRACE("subclassing installed!\n");
}
@ -835,37 +795,10 @@ TOOLTIPS_AddToolW (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* install subclassing hook */
if (toolPtr->uFlags & TTF_SUBCLASS) {
if (toolPtr->uFlags & TTF_IDISHWND) {
LPTT_SUBCLASS_INFO lpttsi =
(LPTT_SUBCLASS_INFO)GetPropA ((HWND)toolPtr->uId, COMCTL32_aSubclass);
if (lpttsi == NULL) {
lpttsi =
(LPTT_SUBCLASS_INFO)COMCTL32_Alloc (sizeof(TT_SUBCLASS_INFO));
lpttsi->wpOrigProc =
(WNDPROC)SetWindowLongA ((HWND)toolPtr->uId,
GWL_WNDPROC,(LONG)TOOLTIPS_SubclassProc);
lpttsi->hwndToolTip = hwnd;
lpttsi->uRefCount++;
SetPropA ((HWND)toolPtr->uId, COMCTL32_aSubclass,
(HANDLE)lpttsi);
}
else
WARN("A window tool must only be listed once!\n");
SetWindowSubclass(toolPtr->uId, TOOLTIPS_SubclassProc, 1, hwnd);
}
else {
LPTT_SUBCLASS_INFO lpttsi =
(LPTT_SUBCLASS_INFO)GetPropA (toolPtr->hwnd, COMCTL32_aSubclass);
if (lpttsi == NULL) {
lpttsi =
(LPTT_SUBCLASS_INFO)COMCTL32_Alloc (sizeof(TT_SUBCLASS_INFO));
lpttsi->wpOrigProc =
(WNDPROC)SetWindowLongA (toolPtr->hwnd,
GWL_WNDPROC,(LONG)TOOLTIPS_SubclassProc);
lpttsi->hwndToolTip = hwnd;
lpttsi->uRefCount++;
SetPropA (toolPtr->hwnd, COMCTL32_aSubclass, (HANDLE)lpttsi);
}
else
lpttsi->uRefCount++;
SetWindowSubclass(toolPtr->hwnd, TOOLTIPS_SubclassProc, 1, hwnd);
}
TRACE("subclassing installed!\n");
}
@ -908,32 +841,10 @@ TOOLTIPS_DelToolA (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* remove subclassing */
if (toolPtr->uFlags & TTF_SUBCLASS) {
if (toolPtr->uFlags & TTF_IDISHWND) {
LPTT_SUBCLASS_INFO lpttsi =
(LPTT_SUBCLASS_INFO)GetPropA ((HWND)toolPtr->uId, COMCTL32_aSubclass);
if (lpttsi) {
SetWindowLongA ((HWND)toolPtr->uId, GWL_WNDPROC,
(LONG)lpttsi->wpOrigProc);
RemovePropA ((HWND)toolPtr->uId, COMCTL32_aSubclass);
COMCTL32_Free (lpttsi);
}
else
ERR("Invalid data handle!\n");
RemoveWindowSubclass(toolPtr->uId, TOOLTIPS_SubclassProc, 1);
}
else {
LPTT_SUBCLASS_INFO lpttsi =
(LPTT_SUBCLASS_INFO)GetPropA (toolPtr->hwnd, COMCTL32_aSubclass);
if (lpttsi) {
if (lpttsi->uRefCount == 1) {
SetWindowLongA ((HWND)toolPtr->hwnd, GWL_WNDPROC,
(LONG)lpttsi->wpOrigProc);
RemovePropA ((HWND)toolPtr->hwnd, COMCTL32_aSubclass);
COMCTL32_Free (lpttsi);
}
else
lpttsi->uRefCount--;
}
else
ERR("Invalid data handle!\n");
RemoveWindowSubclass(toolPtr->hwnd, TOOLTIPS_SubclassProc, 1);
}
}
@ -1005,32 +916,10 @@ TOOLTIPS_DelToolW (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* remove subclassing */
if (toolPtr->uFlags & TTF_SUBCLASS) {
if (toolPtr->uFlags & TTF_IDISHWND) {
LPTT_SUBCLASS_INFO lpttsi =
(LPTT_SUBCLASS_INFO)GetPropA ((HWND)toolPtr->uId, COMCTL32_aSubclass);
if (lpttsi) {
SetWindowLongA ((HWND)toolPtr->uId, GWL_WNDPROC,
(LONG)lpttsi->wpOrigProc);
RemovePropA ((HWND)toolPtr->uId, COMCTL32_aSubclass);
COMCTL32_Free (lpttsi);
}
else
ERR("Invalid data handle!\n");
RemoveWindowSubclass(toolPtr->uId, TOOLTIPS_SubclassProc, 1);
}
else {
LPTT_SUBCLASS_INFO lpttsi =
(LPTT_SUBCLASS_INFO)GetPropA (toolPtr->hwnd, COMCTL32_aSubclass);
if (lpttsi) {
if (lpttsi->uRefCount == 1) {
SetWindowLongA ((HWND)toolPtr->hwnd, GWL_WNDPROC,
(LONG)lpttsi->wpOrigProc);
RemovePropA ((HWND)toolPtr->hwnd, COMCTL32_aSubclass);
COMCTL32_Free (lpttsi);
}
else
lpttsi->uRefCount--;
}
else
ERR("Invalid data handle!\n");
RemoveWindowSubclass(toolPtr->hwnd, TOOLTIPS_SubclassProc, 1);
}
}
@ -2076,25 +1965,11 @@ TOOLTIPS_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* remove subclassing */
if (toolPtr->uFlags & TTF_SUBCLASS) {
LPTT_SUBCLASS_INFO lpttsi;
if (toolPtr->uFlags & TTF_IDISHWND) {
lpttsi = (LPTT_SUBCLASS_INFO)GetPropA ((HWND)toolPtr->uId, COMCTL32_aSubclass);
if (lpttsi) {
SetWindowLongA ((HWND)toolPtr->uId, GWL_WNDPROC,
(LONG)lpttsi->wpOrigProc);
RemovePropA ((HWND)toolPtr->uId, COMCTL32_aSubclass);
COMCTL32_Free (lpttsi);
}
RemoveWindowSubclass(toolPtr->uId, TOOLTIPS_SubclassProc, 1);
}
else {
lpttsi = (LPTT_SUBCLASS_INFO)GetPropA (toolPtr->hwnd, COMCTL32_aSubclass);
if (lpttsi) {
SetWindowLongA ((HWND)toolPtr->hwnd, GWL_WNDPROC,
(LONG)lpttsi->wpOrigProc);
RemovePropA ((HWND)toolPtr->hwnd, COMCTL32_aSubclass);
COMCTL32_Free (lpttsi);
}
RemoveWindowSubclass(toolPtr->hwnd, TOOLTIPS_SubclassProc, 1);
}
}
}
@ -2331,10 +2206,8 @@ TOOLTIPS_WinIniChange (HWND hwnd, WPARAM wParam, LPARAM lParam)
LRESULT CALLBACK
TOOLTIPS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
TOOLTIPS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uID, DWORD_PTR dwRef)
{
LPTT_SUBCLASS_INFO lpttsi =
(LPTT_SUBCLASS_INFO)GetPropA (hwnd, COMCTL32_aSubclass);
MSG msg;
switch(uMsg) {
@ -2349,13 +2222,13 @@ TOOLTIPS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
msg.message = uMsg;
msg.wParam = wParam;
msg.lParam = lParam;
TOOLTIPS_RelayEvent(lpttsi->hwndToolTip, 0, (LPARAM)&msg);
TOOLTIPS_RelayEvent(dwRef, 0, (LPARAM)&msg);
break;
default:
break;
}
return CallWindowProcA (lpttsi->wpOrigProc, hwnd, uMsg, wParam, lParam);
return DefSubclassProc(hwnd, uMsg, wParam, lParam);
}