Commit af8cb7dc authored by Geoffroy Couprie's avatar Geoffroy Couprie

Win32: Add support for Vista file associations

parent 6ceccc7d
......@@ -4966,7 +4966,7 @@ AS_IF([test "${enable_qt4}" != "no"], [
AS_IF([test "${SYS}" != "mingw32" -a "${SYS}" != "mingwce" -a "${SYS}" != "cygwin" -a "${SYS}" != "darwin"], [
VLC_ADD_LIBS([qt4],[$QT4_LIBS -lX11])
], [
VLC_ADD_LIBS([qt4],[$QT4_LIBS])
VLC_ADD_LIBS([qt4],[$QT4_LIBS -lole32])
])
QT4LOCALEDIR="$($PKG_CONFIG --variable=prefix QtCore)/share/qt4/translations/"
AC_SUBST(QT4LOCALEDIR)
......
......@@ -280,6 +280,7 @@ noinst_HEADERS = \
components/sout/profile_selector.hpp \
components/sout/sout_widgets.hpp \
components/sout/profiles.hpp \
components/vistaassoc.h \
util/input_slider.hpp \
util/customwidgets.hpp \
util/qvlcframe.hpp \
......
......@@ -46,6 +46,10 @@
#define ICON_HEIGHT 64
#ifdef WIN32
#include "vistaassoc.h"
#endif
/*********************************************************************
* The List of categories
*********************************************************************/
......@@ -810,6 +814,28 @@ bool SPrefsPanel::addType( const char * psz_ext, QTreeWidgetItem* current,
void SPrefsPanel::assoDialog()
{
OSVERSIONINFO winVer;
winVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
//Vista specific file associations
if( GetVersionEx(&winVer) && winVer.dwMajorVersion > 5 )
{
LPAPPASSOCREGUI p_appassoc;
CoInitialize( 0 );
if( S_OK == CoCreateInstance( &clsid_IApplication2,
NULL, CLSCTX_INPROC_SERVER,
&IID_IApplicationAssociationRegistrationUI,
(void **)&p_appassoc) )
{
if(S_OK == p_appassoc->vt->LaunchAdvancedAssociationUI(p_appassoc, L"VLC" ) )
{
CoUninitialize();
return;
}
}
CoUninitialize();
}
QDialog *d = new QDialog( this );
QGridLayout *assoLayout = new QGridLayout( d );
......
/*****************************************************************************
* vistaext.h : "Vista file associations support"
****************************************************************************
* Copyright (C) 2006-2008 the VideoLAN team
* $Id$
*
* Authors: Geoffroy Couprie <geal@videolan.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef VISTAASSOC_H
#define VISTAASSOC_H
const GUID clsid_IApplication2 = { 0x1968106d,0xf3b5,0x44cf,{0x89,0x0e,0x11,0x6f,0xcb,0x9e,0xce,0xf1}};
const GUID IID_IApplicationAssociationRegistrationUI = {0x1f76a169,0xf994,0x40ac, {0x8f,0xc8,0x09,0x59,0xe8,0x87,0x47,0x10}};
#undef IUnknown
typedef struct _IUnknown IUnknown;
typedef struct _IApplicationAssociationRegistrationUI IApplicationAssociationRegistrationUI;
typedef struct IUnknown_vt
{
long (STDCALL *QueryInterface)(IUnknown *This, const GUID *riid,
void **ppvObject);
long (STDCALL *AddRef)(IUnknown *This);
long (STDCALL *Release)(IUnknown *This);
} IUnknown_vt;
struct _IUnknown { IUnknown_vt* vt; };
typedef IUnknown *LPUNKNOWN;
typedef struct IApplicationAssociationRegistrationUI_vt
{
/* IUnknown methods */
long (STDCALL *QueryInterface)(IUnknown *This, const GUID *riid,
void **ppvObject);
long (STDCALL *AddRef)(IUnknown *This);
long (STDCALL *Release)(IUnknown *This);
long (STDCALL *LaunchAdvancedAssociationUI)(IApplicationAssociationRegistrationUI *This, LPCWSTR app);
} IApplicationAssociationRegistrationUI_vt;
struct _IApplicationAssociationRegistrationUI { IApplicationAssociationRegistrationUI_vt* vt; };
typedef IApplicationAssociationRegistrationUI *LPAPPASSOCREGUI, *PAPPASSOCREGUI;
#define CLSCTX_INPROC_SERVER 1
typedef GUID IID;
#define REFIID const IID* const
extern "C" {
HRESULT WINAPI CoCreateInstance(const GUID *,LPUNKNOWN,DWORD,REFIID,PVOID*);
HRESULT WINAPI CoInitialize(PVOID);
void WINAPI CoUninitialize(void);
};
#endif //VISTAASSOC_H
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment