ReactOS  0.4.13-dev-544-gede3fdd
appbar.c
Go to the documentation of this file.
1 /* Unit tests for appbars
2  *
3  * Copyright 2008 Vincent Povirk for CodeWeavers
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18  */
19 
20 #include <stdarg.h>
21 
22 #include <windows.h>
23 #include "shellapi.h"
24 
25 #include "wine/test.h"
26 
27 #define MSG_APPBAR WM_APP
28 
29 static const CHAR testwindow_class[] = "testwindow";
30 
31 static HMONITOR (WINAPI *pMonitorFromWindow)(HWND, DWORD);
32 static HRESULT (WINAPI *pGetCurrentProcessExplicitAppUserModelID)(PWSTR*);
33 
35 
37 {
44 };
45 
46 static struct testwindow_info windows[3];
47 
48 static int expected_bottom;
49 
51 {
53  APPBARDATA abd;
54  BOOL ret;
55 
56  ok(info != NULL, "got unexpected ABN_POSCHANGED notification\n");
57 
58  if (!info || !info->registered)
59  {
60  return;
61  }
62 
63  if (info->to_be_deleted)
64  {
65  win_skip("Some Win95 and NT4 systems send messages to removed taskbars\n");
66  return;
67  }
68 
69  abd.cbSize = sizeof(abd);
70  abd.hWnd = hwnd;
71  abd.uEdge = info->edge;
72  abd.rc = info->desired_rect;
74  ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
75  switch (info->edge)
76  {
77  case ABE_BOTTOM:
78  ok(info->desired_rect.top == abd.rc.top, "ABM_QUERYPOS changed top of rect from %i to %i\n", info->desired_rect.top, abd.rc.top);
79  abd.rc.top = abd.rc.bottom - (info->desired_rect.bottom - info->desired_rect.top);
80  break;
81  case ABE_LEFT:
82  ok(info->desired_rect.right == abd.rc.right, "ABM_QUERYPOS changed right of rect from %i to %i\n", info->desired_rect.right, abd.rc.right);
83  abd.rc.right = abd.rc.left + (info->desired_rect.right - info->desired_rect.left);
84  break;
85  case ABE_RIGHT:
86  ok(info->desired_rect.left == abd.rc.left, "ABM_QUERYPOS changed left of rect from %i to %i\n", info->desired_rect.left, abd.rc.left);
87  abd.rc.left = abd.rc.right - (info->desired_rect.right - info->desired_rect.left);
88  break;
89  case ABE_TOP:
90  ok(info->desired_rect.bottom == abd.rc.bottom, "ABM_QUERYPOS changed bottom of rect from %i to %i\n", info->desired_rect.bottom, abd.rc.bottom);
91  abd.rc.bottom = abd.rc.top + (info->desired_rect.bottom - info->desired_rect.top);
92  break;
93  }
94 
96  ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
97 
98  info->allocated_rect = abd.rc;
99  MoveWindow(hwnd, abd.rc.left, abd.rc.top, abd.rc.right-abd.rc.left, abd.rc.bottom-abd.rc.top, TRUE);
100 }
101 
103 {
104  switch(msg)
105  {
106  case MSG_APPBAR:
107  {
108  switch(wparam)
109  {
110  case ABN_POSCHANGED:
112  break;
113  }
114  return 0;
115  }
116  }
117 
118  return DefWindowProcA(hwnd, msg, wparam, lparam);
119 }
120 
121 /* process pending messages until a condition is true or 3 seconds pass */
123 {
124  MSG msg;
125  UINT_PTR timerid;
126  BOOL timedout=FALSE;
127 
128  timerid = SetTimer(0, 0, 3000, NULL);
129 
130  while (1)
131  {
132  while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE))
133  {
134  if (msg.hwnd == 0 && msg.message == WM_TIMER && msg.wParam == timerid)
135  timedout = TRUE;
138  }
139  if (timedout || test())
140  break;
141  WaitMessage();
142  }
143 
144  KillTimer(0, timerid);
145 }
146 
147 /* process any pending messages */
148 static void do_events(void)
149 {
150  MSG msg;
151 
152  while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE))
153  {
156  }
157 }
158 
160 {
161  int i, j;
162  RECT rc;
163 
164  for (i=0; i<2; i++)
165  {
166  for (j=i+1; j<3; j++)
167  {
168  if (windows[i].registered && windows[j].registered &&
170  return FALSE;
171  }
172  }
173  return TRUE;
174 }
175 
177 {
179 }
180 
181 static void register_testwindow_class(void)
182 {
183  WNDCLASSEXA cls;
184 
185  ZeroMemory(&cls, sizeof(cls));
186  cls.cbSize = sizeof(cls);
187  cls.style = 0;
189  cls.hInstance = NULL;
190  cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
191  cls.hbrBackground = (HBRUSH) COLOR_WINDOW;
193 
194  RegisterClassExA(&cls);
195 }
196 
197 #define test_window_rects(a, b) \
198  ok(!IntersectRect(&rc, &windows[a].allocated_rect, &windows[b].allocated_rect), \
199  "rectangles intersect %s / %s\n", wine_dbgstr_rect(&windows[a].allocated_rect), \
200  wine_dbgstr_rect(&windows[b].allocated_rect))
201 
202 static void test_setpos(void)
203 {
204  APPBARDATA abd;
205  RECT rc;
206  int screen_width, screen_height;
207  BOOL ret;
208  int org_bottom1;
209 
210  screen_width = GetSystemMetrics(SM_CXSCREEN);
211  screen_height = GetSystemMetrics(SM_CYSCREEN);
212 
213  /* create and register windows[0] */
216  NULL, NULL, NULL, NULL);
217  ok(windows[0].hwnd != NULL, "couldn't create window\n");
218  do_events();
219  abd.cbSize = sizeof(abd);
220  abd.hWnd = windows[0].hwnd;
222  ret = SHAppBarMessage(ABM_NEW, &abd);
223  ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
224 
225  /* ABM_NEW should return FALSE if the window is already registered */
226  ret = SHAppBarMessage(ABM_NEW, &abd);
227  ok(ret == FALSE, "SHAppBarMessage returned %i\n", ret);
228  do_events();
229 
230  /* dock windows[0] to the bottom of the screen */
231  windows[0].registered = TRUE;
232  windows[0].to_be_deleted = FALSE;
233  windows[0].edge = ABE_BOTTOM;
234  SetRect(&windows[0].desired_rect, 0, screen_height - 15, screen_width, screen_height);
237  do_events();
238 
239  /* create and register windows[1] */
242  NULL, NULL, NULL, NULL);
243  ok(windows[1].hwnd != NULL, "couldn't create window\n");
244  abd.hWnd = windows[1].hwnd;
245  ret = SHAppBarMessage(ABM_NEW, &abd);
246  ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
247 
248  /* dock windows[1] to the bottom of the screen */
249  windows[1].registered = TRUE;
250  windows[1].to_be_deleted = FALSE;
251  windows[1].edge = ABE_BOTTOM;
252  SetRect(&windows[1].desired_rect, 0, screen_height - 10, screen_width, screen_height);
255 
256  /* the windows are adjusted to they don't overlap */
258  test_window_rects(0, 1);
259 
260  /* make windows[0] larger, forcing windows[1] to move out of its way */
261  windows[0].desired_rect.top = screen_height - 20;
264  test_window_rects(0, 1);
265 
266  /* create and register windows[2] */
269  NULL, NULL, NULL, NULL);
270  ok(windows[2].hwnd != NULL, "couldn't create window\n");
271  do_events();
272 
273  abd.hWnd = windows[2].hwnd;
274  ret = SHAppBarMessage(ABM_NEW, &abd);
275  ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
276 
277  /* dock windows[2] to the bottom of the screen */
278  windows[2].registered = TRUE;
279  windows[2].to_be_deleted = FALSE;
280  windows[2].edge = ABE_BOTTOM;
281  SetRect(&windows[2].desired_rect, 0, screen_height - 10, screen_width, screen_height);
284 
286  test_window_rects(0, 1);
287  test_window_rects(0, 2);
288  test_window_rects(1, 2);
289 
290  /* move windows[2] to the right side of the screen */
291  windows[2].edge = ABE_RIGHT;
292  SetRect(&windows[2].desired_rect, screen_width - 15, 0, screen_width, screen_height);
294 
296  test_window_rects(0, 1);
297  test_window_rects(0, 2);
298  test_window_rects(1, 2);
299 
300  /* move windows[1] to the top of the screen */
301  windows[1].edge = ABE_TOP;
302  SetRect(&windows[1].desired_rect, 0, 0, screen_width, 15);
304 
306  test_window_rects(0, 1);
307  test_window_rects(0, 2);
308  test_window_rects(1, 2);
309 
310  /* move windows[1] back to the bottom of the screen */
311  windows[1].edge = ABE_BOTTOM;
312  SetRect(&windows[1].desired_rect, 0, screen_height - 10, screen_width, screen_height);
314 
316  test_window_rects(0, 1);
317  test_window_rects(0, 2);
318  test_window_rects(1, 2);
319 
320  /* removing windows[0] will cause windows[1] to move down into its space */
321  expected_bottom = max(windows[0].allocated_rect.bottom, windows[1].allocated_rect.bottom);
322  org_bottom1 = windows[1].allocated_rect.bottom;
323  ok(windows[0].allocated_rect.bottom > windows[1].allocated_rect.bottom,
324  "Expected windows[0] to be lower than windows[1]\n");
325 
326  abd.hWnd = windows[0].hwnd;
327  windows[0].to_be_deleted = TRUE;
328  ret = SHAppBarMessage(ABM_REMOVE, &abd);
329  ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
330  windows[0].registered = FALSE;
332 
334 
335  if (windows[1].allocated_rect.bottom == org_bottom1)
336  win_skip("Some broken Vista boxes don't move the higher appbar down\n");
337  else
339  "windows[1]'s bottom is %i, expected %i\n",
340  windows[1].allocated_rect.bottom, expected_bottom);
341 
342  test_window_rects(1, 2);
343 
344  /* remove the other windows */
345  abd.hWnd = windows[1].hwnd;
346  windows[1].to_be_deleted = TRUE;
347  ret = SHAppBarMessage(ABM_REMOVE, &abd);
348  ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
349  windows[1].registered = FALSE;
351 
352  abd.hWnd = windows[2].hwnd;
353  windows[2].to_be_deleted = TRUE;
354  ret = SHAppBarMessage(ABM_REMOVE, &abd);
355  ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
356  windows[2].registered = FALSE;
358 }
359 
360 static void test_appbarget(void)
361 {
362  APPBARDATA abd;
363  HWND hwnd, foregnd, unset_hwnd;
364  UINT_PTR ret;
365 
366  memset(&abd, 0xcc, sizeof(abd));
367  memset(&unset_hwnd, 0xcc, sizeof(unset_hwnd));
368  abd.cbSize = sizeof(abd);
369  abd.uEdge = ABE_BOTTOM;
370 
372  ok(hwnd == NULL || IsWindow(hwnd), "ret %p which is not a window\n", hwnd);
373  ok(abd.hWnd == unset_hwnd, "hWnd overwritten %p\n",abd.hWnd);
374 
375  if (!pMonitorFromWindow)
376  {
377  win_skip("MonitorFromWindow is not available\n");
378  }
379  else
380  {
381  /* Presumably one can pass a hwnd with ABM_GETAUTOHIDEBAR to specify a monitor.
382  Pass the foreground window and check */
383  foregnd = GetForegroundWindow();
384  if(foregnd)
385  {
386  abd.hWnd = foregnd;
388  ok(hwnd == NULL || IsWindow(hwnd), "ret %p which is not a window\n", hwnd);
389  ok(abd.hWnd == foregnd, "hWnd overwritten\n");
390  if(hwnd)
391  {
392  HMONITOR appbar_mon, foregnd_mon;
393  appbar_mon = pMonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
394  foregnd_mon = pMonitorFromWindow(foregnd, MONITOR_DEFAULTTONEAREST);
395  ok(appbar_mon == foregnd_mon, "Windows on different monitors\n");
396  }
397  }
398  }
399 
400  memset(&abd, 0xcc, sizeof(abd));
401  abd.cbSize = sizeof(abd);
403  if(ret)
404  {
405  ok(abd.hWnd == (HWND)0xcccccccc, "hWnd overwritten\n");
406  ok(abd.uEdge <= ABE_BOTTOM ||
407  broken(abd.uEdge == 0xcccccccc), /* Some Win95 and NT4 */
408  "uEdge not returned\n");
409  ok(abd.rc.left != 0xcccccccc, "rc not updated\n");
410  }
411 
412  return;
413 }
414 
416 {
417  WCHAR *appid;
418  HRESULT hr;
419 
420  if (!pGetCurrentProcessExplicitAppUserModelID)
421  {
422  win_skip("GetCurrentProcessExplicitAppUserModelID() is not supported.\n");
423  return;
424  }
425 
426  if (0) /* crashes on native */
427  hr = pGetCurrentProcessExplicitAppUserModelID(NULL);
428 
429  appid = (void*)0xdeadbeef;
430  hr = pGetCurrentProcessExplicitAppUserModelID(&appid);
431 todo_wine
432  ok(hr == E_FAIL, "got 0x%08x\n", hr);
433  ok(appid == NULL, "got %p\n", appid);
434 }
435 
436 START_TEST(appbar)
437 {
438  HMODULE huser32, hshell32;
439 
440  huser32 = GetModuleHandleA("user32.dll");
441  hshell32 = GetModuleHandleA("shell32.dll");
442  pMonitorFromWindow = (void*)GetProcAddress(huser32, "MonitorFromWindow");
443  pGetCurrentProcessExplicitAppUserModelID = (void*)GetProcAddress(hshell32, "GetCurrentProcessExplicitAppUserModelID");
444 
446 
447  test_setpos();
448  test_appbarget();
450 }
#define ABM_GETAUTOHIDEBAR
Definition: shellapi.h:66
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
UINT style
Definition: winuser.h:3155
#define ABE_TOP
Definition: shellapi.h:18
#define max(a, b)
Definition: svc.c:63
BOOL WINAPI TranslateMessage(_In_ const MSG *)
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
#define TRUE
Definition: types.h:120
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
static HRESULT(WINAPI *pGetCurrentProcessExplicitAppUserModelID)(PWSTR *)
HCURSOR hCursor
Definition: winuser.h:3161
WNDPROC lpfnWndProc
Definition: winuser.h:3156
HRESULT hr
Definition: shlfolder.c:183
BOOL WINAPI IsWindow(_In_opt_ HWND)
LPCSTR lpszClassName
Definition: winuser.h:3164
uint16_t * PWSTR
Definition: typedefs.h:54
BOOL WINAPI WaitMessage(void)
Definition: ntwrapper.h:350
char CHAR
Definition: xmlstorage.h:175
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
BOOL to_be_deleted
Definition: appbar.c:40
static HMONITOR(WINAPI *pMonitorFromWindow)(HWND
#define CALLBACK
Definition: compat.h:27
#define MSG_APPBAR
Definition: appbar.c:27
LONG top
Definition: windef.h:292
HANDLE HWND
Definition: compat.h:13
#define ZeroMemory
Definition: winbase.h:1635
static void test_setpos(void)
Definition: appbar.c:202
UINT uCallbackMessage
Definition: shellapi.h:217
#define ABM_GETTASKBARPOS
Definition: shellapi.h:64
HWND hWnd
Definition: shellapi.h:216
#define test
Definition: rosglue.h:37
BOOL(* boolean_function)(void)
Definition: appbar.c:34
UINT_PTR WPARAM
Definition: windef.h:207
LONG left
Definition: windef.h:291
BOOL WINAPI PeekMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
char * LPSTR
Definition: xmlstorage.h:182
LONG right
Definition: windef.h:293
#define ABE_LEFT
Definition: shellapi.h:17
#define E_FAIL
Definition: ddrawi.h:102
#define BOOL
Definition: nt_native.h:43
BOOL WINAPI DestroyWindow(_In_ HWND)
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define COLOR_WINDOW
Definition: winuser.h:908
#define SM_CXSCREEN
Definition: winuser.h:949
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static void test_GetCurrentProcessExplicitAppUserModelID(void)
Definition: appbar.c:415
static void register_testwindow_class(void)
Definition: appbar.c:181
HINSTANCE hInstance
Definition: winuser.h:3159
BOOL registered
Definition: appbar.c:39
unsigned int BOOL
Definition: ntddk_ex.h:94
UINT_PTR WINAPI SHAppBarMessage(DWORD msg, PAPPBARDATA data)
Definition: shell32_main.c:974
static UINT WPARAM LPARAM lparam
Definition: combo.c:716
#define ok(value,...)
#define GWLP_USERDATA
Definition: treelist.c:63
static LRESULT CALLBACK testwindow_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
Definition: appbar.c:102
char * appid
Definition: mkisofs.c:161
smooth NULL
Definition: ftsmooth.c:416
#define ABE_RIGHT
Definition: shellapi.h:19
LONG_PTR LPARAM
Definition: windef.h:208
UINT cbSize
Definition: winuser.h:3154
static HMODULE huser32
Definition: profile.c:34
DWORD cbSize
Definition: shellapi.h:215
HBRUSH hbrBackground
Definition: winuser.h:3162
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define GetWindowLongPtrA
Definition: winuser.h:4697
#define SM_CYSCREEN
Definition: winuser.h:950
START_TEST(appbar)
Definition: appbar.c:436
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
static int expected_bottom
Definition: appbar.c:48
static void do_events(void)
Definition: appbar.c:148
#define WM_TIMER
Definition: winuser.h:1718
#define WINAPI
Definition: msvc.h:8
#define ABM_NEW
Definition: shellapi.h:59
int WINAPI GetSystemMetrics(_In_ int)
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
static struct testwindow_info windows[3]
Definition: appbar.c:46
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
int ret
#define todo_wine
Definition: test.h:154
#define SetWindowLongPtrA
Definition: winuser.h:5214
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:819
#define WS_EX_TOPMOST
Definition: pedump.c:647
static void do_events_until(boolean_function test)
Definition: appbar.c:122
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
ATOM WINAPI RegisterClassExA(_In_ CONST WNDCLASSEXA *)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
BOOL WINAPI IntersectRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
static void test_appbarget(void)
Definition: appbar.c:360
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2059
#define broken(x)
Definition: _sntprintf.h:21
#define ABN_POSCHANGED
Definition: shellapi.h:70
#define ABE_BOTTOM
Definition: shellapi.h:20
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
static BOOL no_appbars_intersect(void)
Definition: appbar.c:159
RECT desired_rect
Definition: appbar.c:41
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
static DWORD
Definition: appbar.c:31
#define WS_POPUP
Definition: pedump.c:616
unsigned int UINT
Definition: ndis.h:50
HWND WINAPI GetForegroundWindow(void)
Definition: ntwrapper.h:392
RECT allocated_rect
Definition: appbar.c:43
#define msg(x)
Definition: auth_time.c:54
#define IDC_ARROW
Definition: winuser.h:682
static void testwindow_setpos(HWND hwnd)
Definition: appbar.c:50
#define test_window_rects(a, b)
Definition: appbar.c:197
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define ABM_QUERYPOS
Definition: shellapi.h:61
#define ABM_REMOVE
Definition: shellapi.h:60
LONG bottom
Definition: windef.h:294
#define GetProcAddress(x, y)
Definition: compat.h:410
static BOOL got_expected_bottom(void)
Definition: appbar.c:176
#define PM_REMOVE
Definition: winuser.h:1182
static const CHAR testwindow_class[]
Definition: appbar.c:29
#define ABM_SETPOS
Definition: shellapi.h:62
LONG_PTR LRESULT
Definition: windef.h:209
#define WS_VISIBLE
Definition: pedump.c:620
#define memset(x, y, z)
Definition: compat.h:39
#define win_skip
Definition: test.h:141
UINT uEdge
Definition: shellapi.h:218
static UINT WPARAM wparam
Definition: combo.c:716