[vlc-devel] commit: Win32: add support for Win 7 taskbar thumbnails (Geoffroy Couprie )
git version control
git at videolan.org
Mon Sep 7 16:46:29 CEST 2009
vlc | branch: master | Geoffroy Couprie <geal at videolan.org> | Mon Sep 7 16:39:41 2009 +0200| [9604904129876dde2dfbb8a1fac864d28a2f7235] | committer: Geoffroy Couprie
Win32: add support for Win 7 taskbar thumbnails
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9604904129876dde2dfbb8a1fac864d28a2f7235
---
modules/gui/qt4/components/interface_widgets.cpp | 28 ++++++++++++++++
modules/video_output/msw/events.c | 37 ++++++++++++++++++++++
2 files changed, 65 insertions(+), 0 deletions(-)
diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp
index 18a3701..d134256 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 7e263c7..365ee1a 100644
--- a/modules/video_output/msw/events.c
+++ b/modules/video_output/msw/events.c
@@ -61,6 +61,10 @@
#include <vlc_keys.h>
#include "vout.h"
+#ifndef UNDER_CE
+#include <vlc_windows_interfaces.h>
+#endif
+
#ifdef UNDER_CE
#include <aygshell.h>
//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;
More information about the vlc-devel
mailing list