Release 961013
Sun Oct 13 15:32:32 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [Make.rules.in] [*/Makefile.in]
Made it possible to compile from a directory other than the source
directory.
* [graphics/metafiledrv/init.c] [include/metafiledrv.h]
[objects/metafile.c] [objects/dc.c]
New graphics driver for metafiles.
* [if1632/thunk.c]
Added thunks for SetWindowsHook and SetDCHook.
* [windows/dialog.c]
Fixed GetNextDlgGroupItem and GetNextDlgTabItem to skip disabled
items.
* [*/*]
Removed non Win32-clean types HANDLE, HBITMAP, HBRUSH, HFONT,
HINSTANCE, HMENU, HRGN and HTASK.
Wed Oct 9 14:59:45 1996 Frans van Dorsselaer <dorssel@rulhm1.LeidenUniv.nl>
* [controls/edit.c]
Fixed EditWndProc() to fall back to DefWndProc() when the
edit state structure is not available.
Wed Oct 2 14:00:34 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [windows/nonclient.c] [windows/mdi.c]
AdjustWindowRectEx16() should only take notice of the styles
WS_DLGFRAME, WS_BORDER, WS_THICKFRAME and
WS_EX_DLGMODALFRAME. Thanks to Alex Korobka.
* [controls/scroll.c]
Fixed typo in ShowScrollBar32().
Sun Aug 25 20:18:56 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [if1632/user32.spec] [if1632/winmm.spec]
Added SetParent and sndPlaySoundA.
diff --git a/windows/hook.c b/windows/hook.c
index ce58107..4deddf7 100644
--- a/windows/hook.c
+++ b/windows/hook.c
@@ -15,12 +15,28 @@
#define NO_TRANSITION_TYPES /* This file is Win32-clean */
#include "hook.h"
-#include "callback.h"
#include "queue.h"
#include "user.h"
#include "stddebug.h"
#include "debug.h"
+#pragma pack(1)
+
+ /* Hook data (pointed to by a HHOOK) */
+typedef struct
+{
+ HANDLE16 next; /* 00 Next hook in chain */
+ HOOKPROC16 proc WINE_PACKED; /* 02 Hook procedure */
+ INT16 id; /* 06 Hook id (WH_xxx) */
+ HQUEUE16 ownerQueue; /* 08 Owner queue (0 for system hook) */
+ HMODULE16 ownerModule; /* 0a Owner module */
+ WORD inHookProc; /* 0c TRUE if in this->proc */
+} HOOKDATA;
+
+#pragma pack(4)
+
+#define HOOK_MAGIC ((int)'H' | (int)'K' << 8) /* 'HK' */
+
/* This should probably reside in USER heap */
static HANDLE16 HOOK_systemHooks[WH_NB_HOOKS] = { 0, };
@@ -59,6 +75,16 @@
/***********************************************************************
+ * HOOK_GetProc16
+ */
+HOOKPROC16 HOOK_GetProc16( HHOOK hhook )
+{
+ HOOKDATA *data = (HOOKDATA *)USER_HEAP_LIN_ADDR( hhook );
+ return data ? data->proc : NULL;
+}
+
+
+/***********************************************************************
* HOOK_SetHook
*
* Install a given hook.
@@ -197,9 +223,9 @@
queue->hCurHook = hook;
data->inHookProc = 1;
- dprintf_hook( stddeb, "Calling hook %04x: %d %04lx %08lx\n",
- hook, code, (DWORD)wParam, lParam );
- ret = CallHookProc( data->proc, code, wParam, lParam );
+ dprintf_hook( stddeb, "Calling hook %04x: proc=%p %d %04lx %08lx\n",
+ hook, data->proc, code, (DWORD)wParam, lParam );
+ ret = data->proc( code, wParam, lParam );
dprintf_hook( stddeb, "Ret hook %04x = %08lx\n", hook, ret );
data->inHookProc = 0;
@@ -280,23 +306,23 @@
}
}
+
/***********************************************************************
- * SetWindowsHook (USER.121)
+ * SetWindowsHook16 (USER.121)
*/
-FARPROC16 SetWindowsHook( INT16 id, HOOKPROC16 proc )
+FARPROC16 SetWindowsHook16( INT16 id, HOOKPROC16 proc )
{
- HINSTANCE16 hInst = __winelib ? 0 : FarGetOwner( HIWORD(proc) );
HTASK16 hTask = (id == WH_MSGFILTER) ? GetCurrentTask() : 0;
- HANDLE16 handle = HOOK_SetHook( id, proc, hInst, hTask );
+ HANDLE16 handle = HOOK_SetHook( id, proc, 0, hTask );
return (handle) ? (FARPROC16)MAKELONG( handle, HOOK_MAGIC ) : NULL;
}
/***********************************************************************
- * UnhookWindowsHook (USER.234)
+ * UnhookWindowsHook16 (USER.234)
*/
-BOOL16 UnhookWindowsHook( INT16 id, HOOKPROC16 proc )
+BOOL16 UnhookWindowsHook16( INT16 id, HOOKPROC16 proc )
{
HANDLE16 hook = HOOK_GetHook( id , 0 );
@@ -341,10 +367,10 @@
/***********************************************************************
- * SetWindowsHookEx (USER.291)
+ * SetWindowsHookEx16 (USER.291)
*/
-HHOOK SetWindowsHookEx( INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst,
- HTASK16 hTask )
+HHOOK SetWindowsHookEx16( INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst,
+ HTASK16 hTask )
{
HANDLE16 handle = HOOK_SetHook( id, proc, hInst, hTask );
return (handle) ? MAKELONG( handle, HOOK_MAGIC ) : NULL;
@@ -352,9 +378,9 @@
/***********************************************************************
- * UnhookWindowHookEx (USER.292)
+ * UnhookWindowHookEx16 (USER.292)
*/
-BOOL16 UnhookWindowsHookEx( HHOOK hhook )
+BOOL16 UnhookWindowsHookEx16( HHOOK hhook )
{
if (HIWORD(hhook) != HOOK_MAGIC) return FALSE; /* Not a new format hook */
return HOOK_RemoveHook( LOWORD(hhook) );