# HG changeset patch # User vayne # Date 1155745277 0 # Node ID df307a0503592a1adeec47ba1e48eb0f5b6723fc # Parent c3dc9a93f56e353c215e764767258e1c04c0eed4 further improvements to fullscreen switching. diff -r c3dc9a93f56e -r df307a050359 Gui/win32/gui.c --- a/Gui/win32/gui.c Wed Aug 16 11:06:40 2006 +0000 +++ b/Gui/win32/gui.c Wed Aug 16 16:21:17 2006 +0000 @@ -556,7 +556,6 @@ int tmpheight=0; static uint32_t rect_width; static uint32_t rect_height; - DWORD style, flags; RECT rd; POINT pt; while(ShowCursor(TRUE) <= 0){} @@ -581,18 +580,10 @@ rd.right = rd.left + rect_width; rd.bottom = rd.top + rect_height; - if(fullscreen) - { - style = WS_VISIBLE | WS_POPUP; - flags = SWP_NOZORDER | SWP_FRAMECHANGED; - } else { - style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX; - flags = SWP_NOOWNERZORDER; - } - - AdjustWindowRect(&rd, style, 0); + AdjustWindowRect(&rd, WS_OVERLAPPEDWINDOW | WS_SIZEBOX, 0); SetWindowPos(hWnd, 0, fullscreen?0:pt.x+rd.left, fullscreen?0:pt.y+rd.top, - fullscreen?vo_screenwidth:rd.right-rd.left, fullscreen?vo_screenheight:rd.bottom-rd.top, flags); + fullscreen?vo_screenwidth:rd.right-rd.left, fullscreen?vo_screenheight:rd.bottom-rd.top, SWP_NOOWNERZORDER); + SetForegroundWindow(hWnd); return 0; } case WM_PAINT: diff -r c3dc9a93f56e -r df307a050359 Gui/win32/interface.c --- a/Gui/win32/interface.c Wed Aug 16 11:06:40 2006 +0000 +++ b/Gui/win32/interface.c Wed Aug 16 16:21:17 2006 +0000 @@ -403,7 +403,7 @@ if (mygui->playlist->current == (mygui->playlist->trackcount - 1)) mygui->playlist->current = 0; - fullscreen = vo_fs = 0; + fullscreen = 0; guiGetEvent(guiCEvent, (void *) guiSetStop); } @@ -697,32 +697,31 @@ { case MP_CMD_GUI_FULLSCREEN: { + DWORD style; + /* vo_directx's fullscreen window */ + HWND hWndFS = FindWindow(NULL, "MPlayer Fullscreen"); + if(!guiIntfStruct.sh_video) break; - /* FIXME: vo_directx is behaving unexpectedly, this maintains current functionality */ - if(!sub_window || (&video_driver_list && strstr(video_driver_list[0], "directx"))) + if(!sub_window) { video_out->control(VOCTRL_FULLSCREEN, 0); break; } - if(!fullscreen) + if(!fullscreen && IsWindowVisible(mygui->subwindow) && !IsIconic(mygui->subwindow)) GetWindowRect(mygui->subwindow, &old_rect); if(fullscreen) { - fullscreen = vo_fs = 0; - vo_dwidth = guiIntfStruct.MovieWidth = old_rect.right-old_rect.left; - vo_dheight = guiIntfStruct.MovieHeight = old_rect.bottom-old_rect.top; - vo_dx = old_rect.left; - vo_dy = old_rect.top; + fullscreen = 0; + style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX; } else { - fullscreen = vo_fs = 1; - vo_dwidth = guiIntfStruct.MovieWidth = vo_screenwidth; - vo_dheight = guiIntfStruct.MovieHeight = vo_screenheight; - vo_dx = 0; - vo_dy = 0; + fullscreen = 1; + style = WS_VISIBLE | WS_POPUP; + if(hWndFS) DestroyWindow(hWndFS); } + SetWindowLong(mygui->subwindow, GWL_STYLE, style); mpcodecs_config_vo(guiIntfStruct.sh_video, guiIntfStruct.MovieWidth, guiIntfStruct.MovieHeight, 0); break;