Change the message trace indentation to be consistent by thread.
diff --git a/windows/spy.c b/windows/spy.c index b3058fa..21a6f74 100644 --- a/windows/spy.c +++ b/windows/spy.c
@@ -1573,7 +1573,6 @@ static BOOL16 SPY_Exclude[SPY_MAX_MSGNUM+1]; static BOOL16 SPY_ExcludeDWP = 0; -static int SPY_IndentLevel = 0; #define SPY_EXCLUDE(msg) \ (SPY_Exclude[(msg) > SPY_MAX_MSGNUM ? SPY_MAX_MSGNUM : (msg)]) @@ -1594,6 +1593,25 @@ /* This is defined so that the external entry point can return the addr */ static SPY_INSTANCE ext_sp_e; +static int indent_tls_index; + +/*********************************************************************** + * get_indent_level + */ +inline static int get_indent_level(void) +{ + return (int)TlsGetValue( indent_tls_index ); +} + + +/*********************************************************************** + * set_indent_level + */ +inline static void set_indent_level( int level ) +{ + TlsSetValue( indent_tls_index, (void *)level ); +} + /*********************************************************************** * SPY_GetMsgInternal @@ -1934,6 +1952,7 @@ WPARAM wParam, LPARAM lParam ) { SPY_INSTANCE sp_e; + int indent; if (!TRACE_ON(message) || SPY_EXCLUDE(msg)) return; @@ -1943,19 +1962,20 @@ sp_e.wParam = wParam; SPY_GetWndName(&sp_e); SPY_GetMsgStuff(&sp_e); + indent = get_indent_level(); /* each SPY_SENDMESSAGE must be complemented by call to SPY_ExitMessage */ switch(iFlag) { case SPY_DISPATCHMESSAGE16: TRACE("%*s(%04x) %-16s message [%04x] %s dispatched wp=%04x lp=%08lx\n", - SPY_IndentLevel, "", WIN_Handle16(hWnd), + indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name, wParam, lParam); break; case SPY_DISPATCHMESSAGE: TRACE("%*s(%08x) %-16s message [%04x] %s dispatched wp=%08x lp=%08lx\n", - SPY_IndentLevel, "", hWnd, debugstr_w(sp_e.wnd_name), msg, + indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name, wParam, lParam); break; @@ -1975,11 +1995,11 @@ if (iFlag == SPY_SENDMESSAGE16) TRACE("%*s(%04x) %-16s message [%04x] %s sent from %s wp=%04x lp=%08lx\n", - SPY_IndentLevel, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg, + indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name, taskName, wParam, lParam ); else { TRACE("%*s(%08x) %-16s message [%04x] %s sent from %s wp=%08x lp=%08lx\n", - SPY_IndentLevel, "", hWnd, debugstr_w(sp_e.wnd_name), msg, + indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name, taskName, wParam, lParam ); SPY_DumpStructure(&sp_e, TRUE); } @@ -1989,17 +2009,17 @@ case SPY_DEFWNDPROC16: if( SPY_ExcludeDWP ) return; TRACE("%*s(%04x) DefWindowProc16: %s [%04x] wp=%04x lp=%08lx\n", - SPY_IndentLevel, "", WIN_Handle16(hWnd), sp_e.msg_name, msg, wParam, lParam ); + indent, "", WIN_Handle16(hWnd), sp_e.msg_name, msg, wParam, lParam ); break; case SPY_DEFWNDPROC: if( SPY_ExcludeDWP ) return; TRACE("%*s(%08x) DefWindowProc32: %s [%04x] wp=%08x lp=%08lx\n", - SPY_IndentLevel, "", hWnd, sp_e.msg_name, + indent, "", hWnd, sp_e.msg_name, msg, wParam, lParam ); break; - } - SPY_IndentLevel += SPY_INDENT_UNIT; + } + set_indent_level( indent + SPY_INDENT_UNIT ); } @@ -2010,6 +2030,7 @@ WPARAM wParam, LPARAM lParam ) { SPY_INSTANCE sp_e; + int indent; if (!TRACE_ON(message) || SPY_EXCLUDE(msg) || (SPY_ExcludeDWP && (iFlag == SPY_RESULT_DEFWND16 || iFlag == SPY_RESULT_DEFWND)) ) @@ -2022,41 +2043,45 @@ SPY_GetWndName(&sp_e); SPY_GetMsgStuff(&sp_e); - if (SPY_IndentLevel) SPY_IndentLevel -= SPY_INDENT_UNIT; + if ((indent = get_indent_level())) + { + indent -= SPY_INDENT_UNIT; + set_indent_level( indent ); + } switch(iFlag) { case SPY_RESULT_DEFWND16: TRACE(" %*s(%04x) DefWindowProc16: %s [%04x] returned %08lx\n", - SPY_IndentLevel, "", WIN_Handle16(hWnd), sp_e.msg_name, msg, lReturn ); + indent, "", WIN_Handle16(hWnd), sp_e.msg_name, msg, lReturn ); break; case SPY_RESULT_DEFWND: TRACE(" %*s(%08x) DefWindowProc32: %s [%04x] returned %08lx\n", - SPY_IndentLevel, "", hWnd, sp_e.msg_name, msg, lReturn ); + indent, "", hWnd, sp_e.msg_name, msg, lReturn ); break; case SPY_RESULT_OK16: TRACE(" %*s(%04x) %-16s message [%04x] %s returned %08lx\n", - SPY_IndentLevel, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg, + indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name, lReturn ); break; case SPY_RESULT_OK: TRACE(" %*s(%08x) %-16s message [%04x] %s returned %08lx\n", - SPY_IndentLevel, "", hWnd, debugstr_w(sp_e.wnd_name), msg, + indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name, lReturn ); SPY_DumpStructure(&sp_e, FALSE); break; case SPY_RESULT_INVALIDHWND16: WARN(" %*s(%04x) %-16s message [%04x] %s HAS INVALID HWND\n", - SPY_IndentLevel, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name ); + indent, "", WIN_Handle16(hWnd), debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name ); break; case SPY_RESULT_INVALIDHWND: WARN(" %*s(%08x) %-16s message [%04x] %s HAS INVALID HWND\n", - SPY_IndentLevel, "", hWnd, debugstr_w(sp_e.wnd_name), msg, + indent, "", hWnd, debugstr_w(sp_e.wnd_name), msg, sp_e.msg_name ); break; } @@ -2076,6 +2101,7 @@ if (!TRACE_ON(message)) return TRUE; + indent_tls_index = TlsAlloc(); buffer[0] = 0; if(!RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config\\Spy", &hkey)) {