Release gdi lock before calling DeleteDC.
[wine] / include / queue.h
1 /*
2  * Message queues definitions
3  *
4  * Copyright 1993 Alexandre Julliard
5  */
6
7 #ifndef __WINE_QUEUE_H
8 #define __WINE_QUEUE_H
9
10 #include "windef.h"
11 #include "winbase.h"
12 #include "wingdi.h"
13 #include "winuser.h"
14 #include "thread.h"
15
16
17 /* Per-queue data for the message queue
18  * Note that we currently only store the current values for
19  * Active, Capture and Focus windows currently.
20  * It might be necessary to store a pointer to the system message queue
21  * as well since windows 9x maintains per thread system message queues
22  */
23 typedef struct tagPERQUEUEDATA      
24 {
25   HWND    hWndFocus;              /* Focus window */
26   HWND    hWndActive;             /* Active window */
27   HWND    hWndCapture;            /* Capture window */
28   INT16     nCaptureHT;             /* Capture info (hit-test) */
29   ULONG     ulRefCount;             /* Reference count */
30   CRITICAL_SECTION cSection;        /* Critical section for thread safe access */
31 } PERQUEUEDATA;
32
33 struct received_message_info;
34
35 /* Message queue */
36 typedef struct tagMESSAGEQUEUE
37 {
38   HQUEUE16  self;                   /* Handle to self (was: reserved) */
39   TEB*      teb;                    /* Thread owning queue */
40   HANDLE    server_queue;           /* Handle to server-side queue */
41   struct received_message_info *receive_info; /* Info about message being currently received */
42
43   DWORD     magic;                  /* magic number should be QUEUE_MAGIC */
44   DWORD     lockCount;              /* reference counter */
45
46   DWORD     GetMessageTimeVal;      /* Value for GetMessageTime */
47   DWORD     GetMessagePosVal;       /* Value for GetMessagePos */
48   DWORD     GetMessageExtraInfoVal; /* Value for GetMessageExtraInfo */
49
50   HANDLE16  hCurHook;               /* Current hook */
51   HANDLE16  hooks[WH_NB_HOOKS];     /* Task hooks list */
52
53   PERQUEUEDATA *pQData;             /* pointer to (shared) PERQUEUEDATA structure */
54   
55 } MESSAGEQUEUE;
56
57
58 #define QUEUE_MAGIC        0xD46E80AF
59
60 /* Per queue data management methods */
61 HWND PERQDATA_GetFocusWnd( PERQUEUEDATA *pQData );
62 HWND PERQDATA_SetFocusWnd( PERQUEUEDATA *pQData, HWND hWndFocus );
63 HWND PERQDATA_GetActiveWnd( PERQUEUEDATA *pQData );
64 HWND PERQDATA_SetActiveWnd( PERQUEUEDATA *pQData, HWND hWndActive );
65 HWND PERQDATA_GetCaptureWnd( INT *hittest );
66 HWND PERQDATA_SetCaptureWnd( HWND hWndCapture, INT hittest );
67
68 /* Message queue management methods */
69 extern MESSAGEQUEUE *QUEUE_Current(void);
70 extern MESSAGEQUEUE *QUEUE_Lock( HQUEUE16 hQueue );
71 extern void QUEUE_Unlock( MESSAGEQUEUE *queue );
72 extern BOOL QUEUE_IsExitingQueue( HQUEUE16 hQueue );
73 extern void QUEUE_SetExitingQueue( HQUEUE16 hQueue );
74 extern void QUEUE_DeleteMsgQueue(void);
75 extern void QUEUE_CleanupWindow( HWND hwnd );
76
77 #endif  /* __WINE_QUEUE_H */