Index: w32fns.c =================================================================== RCS file: /sources/emacs/emacs/src/w32fns.c,v retrieving revision 1.270 diff -u -r1.270 w32fns.c --- w32fns.c 2 Jun 2006 21:20:44 -0000 1.270 +++ w32fns.c 25 Jun 2006 13:04:05 -0000 @@ -2085,8 +2085,8 @@ = CreateWindow (EMACS_CLASS, f->namebuf, f->output_data.w32->dwStyle | WS_CLIPCHILDREN, - f->left_pos, - f->top_pos, + CW_USEDEFAULT, + SW_SHOW, rect.right - rect.left, rect.bottom - rect.top, NULL, @@ -2107,6 +2107,11 @@ /* Do this to discard the default setting specified by our parent. */ ShowWindow (hwnd, SW_HIDE); + + /* Update frame positions. */ + GetWindowRect (hwnd, &rect); + f->left_pos = rect.left; + f->top_pos = rect.top; } } Index: w32term.c =================================================================== RCS file: /sources/emacs/emacs/src/w32term.c,v retrieving revision 1.246 diff -u -r1.246 w32term.c --- w32term.c 5 Jun 2006 21:20:59 -0000 1.246 +++ w32term.c 25 Jun 2006 13:04:13 -0000 @@ -5665,7 +5665,22 @@ before the window gets really visible. */ if (! FRAME_ICONIFIED_P (f) && ! f->output_data.w32->asked_for_visible) - x_set_offset (f, f->left_pos, f->top_pos, 0); + { + RECT workarea_rect; + RECT window_rect; + + /* Adjust vertical window position in order to avoid being + covered by a task bar placed at the bottom of the desktop. */ + SystemParametersInfo(SPI_GETWORKAREA, 0, &workarea_rect, 0); + GetWindowRect(FRAME_W32_WINDOW(f), &window_rect); + if (window_rect.bottom > workarea_rect.bottom + && window_rect.top > workarea_rect.top) + f->top_pos = max (window_rect.top + - window_rect.bottom + workarea_rect.bottom, + workarea_rect.top); + + x_set_offset (f, f->left_pos, f->top_pos, 0); + } f->output_data.w32->asked_for_visible = 1;