summaryrefslogtreecommitdiff
path: root/alf/alfnotebook.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'alf/alfnotebook.cpp')
-rw-r--r--alf/alfnotebook.cpp35
1 files changed, 19 insertions, 16 deletions
diff --git a/alf/alfnotebook.cpp b/alf/alfnotebook.cpp
index ea4517c..b54829a 100644
--- a/alf/alfnotebook.cpp
+++ b/alf/alfnotebook.cpp
@@ -266,10 +266,9 @@ ALF_Notebook_InternalAddTab(HWND notebook, ALFNotebookPriv *priv, const TCHAR *t
static LRESULT CALLBACK
-ALF_Notebook_TabCtrlSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
+ALF_Notebook_TabCtrlWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
- (void)uIdSubclass;
- (void)dwRefData;
+ WNDPROC oldWndProc = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (uMsg == WM_ERASEBKGND) {
// see: http://www.virtualdub.org/blog/pivot/entry.php?id=291
@@ -281,19 +280,12 @@ ALF_Notebook_TabCtrlSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa
ExcludeClipRect(hdc, r.left, r.top, r.right, r.bottom);
}
- if (uMsg == 0x2000 + WM_NOTIFY) {
- NMHDR *pnmh = (NMHDR*)lParam;
- if (pnmh->code == TCN_SELCHANGE) {
- ALF_Notebook_InternalHandleTabChange(GetParent(hwnd), hwnd);
-
- return TRUE;
- }
- }
if (uMsg == WM_DESTROY) {
- ALF_Compat_RemoveWindowSubclass(hwnd, ALF_Notebook_TabCtrlSubclassProc, 0);
+ SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)oldWndProc);
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, 0);
}
- return ALF_Compat_DefSubclassProc(hwnd, uMsg, wParam, lParam);
+ return CallWindowProc(oldWndProc, hwnd, uMsg, wParam, lParam);
}
static void
@@ -383,11 +375,20 @@ ALF_Notebook_SetWidgetFlags(HWND hwndNotebook, ALFNotebookPriv *priv, HWND widge
static LRESULT CALLBACK
ALF__NotebookWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
+ ALFNotebookPriv *priv = (ALFNotebookPriv *)GetWindowLongPtr(hwnd, 0);
+
+ if (uMsg == WM_NOTIFY) {
+ NMHDR *pnmh = (NMHDR*)lParam;
+ if (pnmh->hwndFrom == priv->hwndTabCtrl && pnmh->code == TCN_SELCHANGE) {
+ ALF_Notebook_InternalHandleTabChange(hwnd, priv->hwndTabCtrl);
+
+ return TRUE;
+ }
+ }
+
if (ALF_ShouldMessageBubble(hwnd, uMsg, wParam, lParam))
return SendMessage(GetParent(hwnd), uMsg, wParam, lParam);
- ALFNotebookPriv *priv = (ALFNotebookPriv *)GetWindowLongPtr(hwnd, 0);
-
if (uMsg == WM_CREATE && priv == NULL) {
priv = ALF_Notebook_CreatePriv();
priv->hwndTabCtrl = CreateWindowEx(0,
@@ -402,7 +403,9 @@ ALF__NotebookWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
TabCtrl_SetItemExtra(priv->hwndTabCtrl, sizeof(ALFNotebookPage) - sizeof(TCITEMHEADER));
- ALF_Compat_SetWindowSubclass(priv->hwndTabCtrl, ALF_Notebook_TabCtrlSubclassProc, 0, 0);
+ LONG_PTR wndProc = GetWindowLongPtr(priv->hwndTabCtrl, GWLP_WNDPROC);
+ SetWindowLongPtr(priv->hwndTabCtrl, GWLP_USERDATA, wndProc);
+ SetWindowLongPtr(priv->hwndTabCtrl, GWLP_WNDPROC, (LONG_PTR)ALF_Notebook_TabCtrlWndProc);
SetWindowLongPtr(hwnd, 0, (LONG_PTR)priv);
ALF_Notebook_InternalHandleThemeChange(hwnd, priv);