From 9604904129876dde2dfbb8a1fac864d28a2f7235 Mon Sep 17 00:00:00 2001 From: Geoffroy Couprie Date: Mon, 7 Sep 2009 16:39:41 +0200 Subject: [PATCH] Win32: add support for Win 7 taskbar thumbnails --- .../gui/qt4/components/interface_widgets.cpp | 28 ++++++++++++++ modules/video_output/msw/events.c | 37 +++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp index 18a3701369..d134256af3 100644 --- a/modules/gui/qt4/components/interface_widgets.cpp +++ b/modules/gui/qt4/components/interface_widgets.cpp @@ -241,6 +241,34 @@ void VideoWidget::release( void ) { msg_Dbg( p_intf, "Video is not needed anymore" ); //layout->removeWidget( reparentable ); + +#ifdef WIN32 + /* Come back to default thumbnail for Windows 7 taskbar */ + LPTASKBARLIST3 p_taskbl; + OSVERSIONINFO winVer; + winVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + if( GetVersionEx(&winVer) && winVer.dwMajorVersion > 5 && winVer.dwMajorVersion > 0 ) + { + CoInitialize( 0 ); + + if( S_OK == CoCreateInstance( &clsid_ITaskbarList, + NULL, CLSCTX_INPROC_SERVER, + &IID_ITaskbarList3, + (void **)&p_taskbl) ) + { + p_taskbl->vt->HrInit(p_taskbl); + + HWND hroot = GetAncestor(reparentable->winId(),GA_ROOT); + + if (S_OK != p_taskbl->vt->SetThumbnailClip(p_taskbl, hroot, NULL)) + msg_Err(p_intf, "SetThumbNailClip failed"); + msg_Err(p_intf, "Releasing taskbar | root handle = %08x", hroot); + p_taskbl->vt->Release(p_taskbl); + } + CoUninitialize(); + } +#endif + delete reparentable; reparentable = NULL; videoSize.rwidth() = 0; diff --git a/modules/video_output/msw/events.c b/modules/video_output/msw/events.c index 7e263c797a..365ee1ac61 100644 --- a/modules/video_output/msw/events.c +++ b/modules/video_output/msw/events.c @@ -61,6 +61,10 @@ #include #include "vout.h" +#ifndef UNDER_CE +#include +#endif + #ifdef UNDER_CE #include //WINSHELLAPI BOOL WINAPI SHFullScreen(HWND hwndRequester, DWORD dwState); @@ -793,6 +797,39 @@ void UpdateRects( vout_thread_t *p_vout, bool b_force ) DirectDrawUpdateOverlay( p_vout ); #endif +#ifndef UNDER_CE + /* Windows 7 taskbar thumbnail code */ + LPTASKBARLIST3 p_taskbl; + OSVERSIONINFO winVer; + winVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + if( GetVersionEx(&winVer) && winVer.dwMajorVersion > 5 && winVer.dwMajorVersion > 0 ) + { + CoInitialize( 0 ); + + if( S_OK == CoCreateInstance( &clsid_ITaskbarList, + NULL, CLSCTX_INPROC_SERVER, + &IID_ITaskbarList3, + (void **)&p_taskbl) ) + { + RECT rect_video, rect_parent, rect_relative; + HWND hroot = GetAncestor(p_vout->p_sys->hwnd,GA_ROOT); + + p_taskbl->vt->HrInit(p_taskbl); + GetWindowRect(p_vout->p_sys->hvideownd, &rect_video); + GetWindowRect(hroot, &rect_parent); + rect_relative.left = rect_video.left - rect_parent.left - 8; + rect_relative.right = rect_video.right - rect_video.left + rect_relative.left; + rect_relative.top = rect_video.top - rect_parent.top - 10; + rect_relative.bottom = rect_video.bottom - rect_video.top + rect_relative.top - 25; + + if (S_OK != p_taskbl->vt->SetThumbnailClip(p_taskbl, hroot, &rect_relative)) + msg_Err( p_vout, "SetThumbNailClip failed"); + + p_taskbl->vt->Release(p_taskbl); + } + CoUninitialize(); + } +#endif /* Signal the change in size/position */ p_vout->p_sys->i_changes |= DX_POSITION_CHANGE; -- 2.39.2