Check for NULL before doing IsEqualGUID().
[wine] / dlls / ttydrv / wnd.c
1 /*
2  * TTY window driver
3  *
4  * Copyright 1998,1999 Patrik Stridvall
5  */
6
7 #include "config.h"
8
9 #include "gdi.h"
10 #include "heap.h"
11 #include "ttydrv.h"
12 #include "win.h"
13 #include "debugtools.h"
14
15 DEFAULT_DEBUG_CHANNEL(ttydrv);
16
17 WND_DRIVER TTYDRV_WND_Driver =
18 {
19   TTYDRV_WND_Initialize,
20   TTYDRV_WND_Finalize,
21   TTYDRV_WND_CreateDesktopWindow,
22   TTYDRV_WND_CreateWindow,
23   TTYDRV_WND_DestroyWindow,
24   TTYDRV_WND_SetParent,
25   TTYDRV_WND_ForceWindowRaise,
26   TTYDRV_WND_SetWindowPos,
27   TTYDRV_WND_SetText,
28   TTYDRV_WND_SetFocus,
29   TTYDRV_WND_PreSizeMove,
30   TTYDRV_WND_PostSizeMove,
31   TTYDRV_WND_ScrollWindow,
32   TTYDRV_WND_SetDrawable,
33   TTYDRV_WND_SetHostAttr,
34   TTYDRV_WND_IsSelfClipping,
35   TTYDRV_WND_SetWindowRgn
36 };
37
38
39 /***********************************************************************
40  *              TTYDRV_WND_GetCursesWindow
41  *
42  * Return the Curses window associated to a window.
43  */
44 WINDOW *TTYDRV_WND_GetCursesWindow(WND *wndPtr)
45 {
46     return wndPtr && wndPtr->pDriverData ? 
47       ((TTYDRV_WND_DATA *) wndPtr->pDriverData)->window : 0;
48 }
49
50 /**********************************************************************
51  *              TTYDRV_WND_Initialize
52  */
53 void TTYDRV_WND_Initialize(WND *wndPtr)
54 {
55   TTYDRV_WND_DATA *pWndDriverData = 
56     (TTYDRV_WND_DATA *) HeapAlloc(SystemHeap, 0, sizeof(TTYDRV_WND_DATA));
57
58   TRACE("(%p)\n", wndPtr);
59
60   wndPtr->pDriverData = (void *) pWndDriverData;
61
62   pWndDriverData->window = NULL;
63 }
64
65 /**********************************************************************
66  *              TTYDRV_WND_Finalize
67  */
68 void TTYDRV_WND_Finalize(WND *wndPtr)
69 {
70   TTYDRV_WND_DATA *pWndDriverData =
71     (TTYDRV_WND_DATA *) wndPtr->pDriverData;
72
73   TRACE("(%p)\n", wndPtr);
74
75   if(!pWndDriverData) {
76     ERR("WND already destroyed\n");
77     return;
78   }
79
80   if(pWndDriverData->window) {
81     ERR("WND destroyed without destroying the associated Curses Windows");
82   }
83
84   HeapFree(SystemHeap, 0, pWndDriverData);
85   wndPtr->pDriverData = NULL;
86 }
87
88 /**********************************************************************
89  *              TTYDRV_WND_CreateDesktopWindow
90  */
91 BOOL TTYDRV_WND_CreateDesktopWindow(WND *wndPtr)
92 {
93   TTYDRV_WND_DATA *pWndDriverData =
94     (TTYDRV_WND_DATA *) wndPtr->pDriverData;
95
96   TRACE("(%p)\n", wndPtr);
97
98   if(!pWndDriverData) { ERR("WND never initialized\n"); return FALSE; }
99
100   pWndDriverData->window = TTYDRV_GetRootWindow();
101   return TRUE;
102 }
103
104 /**********************************************************************
105  *              TTYDRV_WND_CreateWindow
106  */
107 BOOL TTYDRV_WND_CreateWindow(WND *wndPtr, CREATESTRUCTA *cs, BOOL bUnicode)
108 {
109 #ifdef WINE_CURSES
110   WINDOW *window;
111   INT cellWidth=8, cellHeight=8; /* FIXME: Hardcoded */
112
113   TRACE("(%p, %p, %d)\n", wndPtr, cs, bUnicode);
114
115   /* Only create top-level windows */
116   if(cs->style & WS_CHILD)
117     return TRUE;
118
119   window = subwin(TTYDRV_GetRootWindow(), cs->cy/cellHeight, cs->cx/cellWidth,
120                   cs->y/cellHeight, cs->x/cellWidth);
121   werase(window);
122   wrefresh(window);
123                   
124   return TRUE;
125 #else /* defined(WINE_CURSES) */
126   FIXME("(%p, %p, %p, %d): stub\n", wndPtr, cs, bUnicode);
127
128   return TRUE;
129 #endif /* defined(WINE_CURSES) */
130 }
131
132 /***********************************************************************
133  *              TTYDRV_WND_DestroyWindow
134  */
135 BOOL TTYDRV_WND_DestroyWindow(WND *wndPtr)
136 {
137 #ifdef WINE_CURSES
138   WINDOW *window;
139
140   TRACE("(%p)\n", wndPtr);
141
142   window = TTYDRV_WND_GetCursesWindow(wndPtr);
143   if(window && window != TTYDRV_GetRootWindow()) {
144     delwin(window);
145   }
146
147   return TRUE;
148 #else /* defined(WINE_CURSES) */
149   FIXME("(%p): stub\n", wndPtr);
150
151   return TRUE;
152 #endif /* defined(WINE_CURSES) */
153 }
154
155 /*****************************************************************
156  *              TTYDRV_WND_SetParent
157  */
158 WND *TTYDRV_WND_SetParent(WND *wndPtr, WND *pWndParent)
159 {
160   FIXME("(%p, %p): stub\n", wndPtr, pWndParent);
161
162   return NULL;
163 }
164
165 /***********************************************************************
166  *              TTYDRV_WND_ForceWindowRaise
167  */
168 void TTYDRV_WND_ForceWindowRaise(WND *wndPtr)
169 {
170   FIXME("(%p): stub\n", wndPtr);
171 }
172
173 /***********************************************************************
174  *           TTYDRV_WINPOS_SetWindowPos
175  */
176 void TTYDRV_WND_SetWindowPos(WND *wndPtr, const WINDOWPOS *winpos, BOOL bSMC_SETXPOS)
177 {
178   FIXME("(%p, %p, %d): stub\n", wndPtr, winpos, bSMC_SETXPOS);
179 }
180
181 /*****************************************************************
182  *              TTYDRV_WND_SetText
183  */
184 void TTYDRV_WND_SetText(WND *wndPtr, LPCWSTR text)
185 {
186   FIXME("(%p, %s): stub\n", wndPtr, debugstr_w(text));
187 }
188
189 /*****************************************************************
190  *              TTYDRV_WND_SetFocus
191  */
192 void TTYDRV_WND_SetFocus(WND *wndPtr)
193 {
194   FIXME("(%p): stub\n", wndPtr);
195 }
196
197 /*****************************************************************
198  *              TTYDRV_WND_PreSizeMove
199  */
200 void TTYDRV_WND_PreSizeMove(WND *wndPtr)
201 {
202   FIXME("(%p): stub\n", wndPtr);
203 }
204
205 /*****************************************************************
206  *               TTYDRV_WND_PostSizeMove
207  */
208 void TTYDRV_WND_PostSizeMove(WND *wndPtr)
209 {
210   FIXME("(%p): stub\n", wndPtr);
211 }
212
213 /*****************************************************************
214  *               TTYDRV_WND_ScrollWindow
215  */
216 void TTYDRV_WND_ScrollWindow( WND *wndPtr, HDC hdc, INT dx, INT dy, 
217                               const RECT *clipRect, BOOL bUpdate)
218 {
219   FIXME("(%p, %x, %d, %d, %p, %d): stub\n", 
220         wndPtr, hdc, dx, dy, clipRect, bUpdate);
221 }
222
223 /***********************************************************************
224  *              TTYDRV_WND_SetDrawable
225  */
226 void TTYDRV_WND_SetDrawable(WND *wndPtr, HDC hdc, WORD flags, BOOL bSetClipOrigin)
227 {
228     DC *dc = DC_GetDCPtr( hdc );
229     if (!dc) return;
230     TRACE("(%p, %p, %d, %d)\n", wndPtr, dc, flags, bSetClipOrigin);
231
232     /* FIXME: Should be done in the common code instead */
233     if(!wndPtr)  {
234         dc->DCOrgX = 0;
235         dc->DCOrgY = 0;
236     } else {
237         if(flags & DCX_WINDOW) {
238             dc->DCOrgX = wndPtr->rectWindow.left;
239             dc->DCOrgY = wndPtr->rectWindow.top;
240         } else {
241             dc->DCOrgX = wndPtr->rectClient.left;
242             dc->DCOrgY = wndPtr->rectClient.top;
243         }
244     }
245     GDI_ReleaseObj( hdc );
246 }
247
248 /***********************************************************************
249  *              TTYDRV_WND_SetHostAttr
250  */
251 BOOL TTYDRV_WND_SetHostAttr(WND *wndPtr, INT attr, INT value)
252 {
253   FIXME("(%p): stub\n", wndPtr);
254
255   return TRUE;
256 }
257
258 /***********************************************************************
259  *              TTYDRV_WND_IsSelfClipping
260  */
261 BOOL TTYDRV_WND_IsSelfClipping(WND *wndPtr)
262 {
263   FIXME("(%p): semistub\n", wndPtr);
264
265   return FALSE;
266 }
267
268 /***********************************************************************
269  *              TTYDRV_WND_SetWindowRgn
270  */
271 void TTYDRV_WND_SetWindowRgn(struct tagWND *wndPtr, HRGN hrgnWnd)
272 {
273 }
274