Enable WinVNC build with MinGW and MinGW64


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4723 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/os/w32tiger.h b/common/os/w32tiger.h
new file mode 100644
index 0000000..5e0c5de
--- /dev/null
+++ b/common/os/w32tiger.h
@@ -0,0 +1,182 @@
+/* Copyright (C) 2011 TigerVNC Team.  All Rights Reserved.
+ *
+ * This 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 software 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 software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ */
+
+#ifndef OS_W32TIGER_H
+#define OS_W32TIGER_H
+
+#ifdef WIN32 
+
+#include <windows.h>
+#include <wininet.h>
+#include <shlobj.h>
+#include <shlguid.h>
+#include <wininet.h>
+
+
+/* MSLLHOOKSTRUCT structure*/
+#ifndef LLMHF_INJECTED
+#define LLMHF_INJECTED          0x00000001
+#endif
+
+
+/* IActiveDesktop. As of 2011-10-12, MinGW does not define
+   IActiveDesktop in any way (see tracker 2877129), while MinGW64 is
+   broken: has the headers but not the lib symbols. */
+#ifndef HAVE_ACTIVE_DESKTOP_H
+extern const GUID CLSID_ActiveDesktop;
+extern const GUID IID_IActiveDesktop;
+
+/* IActiveDesktop::AddUrl */
+#define ADDURL_SILENT		0x0001
+
+/* IActiveDesktop::AddDesktopItemWithUI */
+#define DTI_ADDUI_DEFAULT	0x00000000
+#define DTI_ADDUI_DISPSUBWIZARD	0x00000001
+#define DTI_ADDUI_POSITIONITEM	0x00000002
+
+/* IActiveDesktop::ModifyDesktopItem */
+#define COMP_ELEM_TYPE		0x00000001
+#define COMP_ELEM_CHECKED	0x00000002
+#define COMP_ELEM_DIRTY		0x00000004
+#define COMP_ELEM_NOSCROLL	0x00000008
+#define COMP_ELEM_POS_LEFT	0x00000010
+#define COMP_ELEM_POS_TOP	0x00000020
+#define COMP_ELEM_SIZE_WIDTH	0x00000040
+#define COMP_ELEM_SIZE_HEIGHT	0x00000080
+#define COMP_ELEM_POS_ZINDEX	0x00000100
+#define COMP_ELEM_SOURCE	0x00000200
+#define COMP_ELEM_FRIENDLYNAME	0x00000400
+#define COMP_ELEM_SUBSCRIBEDURL	0x00000800
+#define COMP_ELEM_ORIGINAL_CSI	0x00001000
+#define COMP_ELEM_RESTORED_CSI	0x00002000
+#define COMP_ELEM_CURITEMSTATE	0x00004000
+#define COMP_ELEM_ALL		0x00007FFF /* OR-ed all COMP_ELEM_ */
+
+/* IActiveDesktop::GetWallpaper */
+#define AD_GETWP_BMP		0x00000000
+#define AD_GETWP_IMAGE		0x00000001
+#define AD_GETWP_LAST_APPLIED	0x00000002
+
+/* IActiveDesktop::ApplyChanges */
+#define AD_APPLY_SAVE		0x00000001
+#define AD_APPLY_HTMLGEN	0x00000002
+#define AD_APPLY_REFRESH	0x00000004
+#define AD_APPLY_ALL		0x00000007 /* OR-ed three AD_APPLY_ above */
+#define AD_APPLY_FORCE		0x00000008
+#define AD_APPLY_BUFFERED_REFRESH 0x00000010
+#define AD_APPLY_DYNAMICREFRESH	0x00000020
+
+/* Structures for IActiveDesktop */
+typedef struct {
+	DWORD dwSize;
+	int iLeft;
+	int iTop;
+	DWORD dwWidth;
+	DWORD dwHeight;
+	DWORD dwItemState;
+} COMPSTATEINFO, *LPCOMPSTATEINFO;
+typedef const COMPSTATEINFO *LPCCOMPSTATEINFO;
+
+typedef struct {
+	DWORD dwSize;
+	int iLeft;
+	int iTop;
+	DWORD dwWidth;
+	DWORD dwHeight;
+	int izIndex;
+	BOOL fCanResize;
+	BOOL fCanResizeX;
+	BOOL fCanResizeY;
+	int iPreferredLeftPercent;
+	int iPreferredTopPercent;
+} COMPPOS, *LPCOMPPOS;
+typedef const COMPPOS *LPCCOMPPOS;
+
+typedef struct {
+	DWORD dwSize;
+	DWORD dwID;
+	int iComponentType;
+	BOOL fChecked;
+	BOOL fDirty;
+	BOOL fNoScroll;
+	COMPPOS cpPos;
+	WCHAR wszFriendlyName[MAX_PATH];
+	WCHAR wszSource[INTERNET_MAX_URL_LENGTH];
+	WCHAR wszSubscribedURL[INTERNET_MAX_URL_LENGTH];
+	DWORD dwCurItemState;
+	COMPSTATEINFO csiOriginal;
+	COMPSTATEINFO csiRestored;
+} COMPONENT, *LPCOMPONENT;
+typedef const COMPONENT *LPCCOMPONENT;
+
+typedef struct {
+	DWORD dwSize;
+	BOOL fEnableComponents;
+	BOOL fActiveDesktop;
+} COMPONENTSOPT, *LPCOMPONENTSOPT;
+typedef const COMPONENTSOPT *LPCCOMPONENTSOPT;
+
+typedef struct {
+    DWORD dwSize;
+    DWORD dwStyle;
+} WALLPAPEROPT, *LPWALLPAPEROPT;
+typedef const WALLPAPEROPT *LPCWALLPAPEROPT;
+
+/* WALLPAPEROPT styles */
+#define WPSTYLE_CENTER		0x0
+#define WPSTYLE_TILE		0x1
+#define WPSTYLE_STRETCH		0x2
+#define WPSTYLE_MAX		0x3
+
+/* Those two are defined in Windows 7 and newer, we don't need them now */
+#if 0
+#define WPSTYLE_KEEPASPECT	0x3
+#define WPSTYLE_CROPTOFIT	0x4
+#endif
+
+#define INTERFACE IActiveDesktop
+DECLARE_INTERFACE_(IActiveDesktop, IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(AddDesktopItem)(THIS_ LPCOMPONENT,DWORD) PURE;
+	STDMETHOD(AddDesktopItemWithUI)(THIS_ HWND,LPCOMPONENT,DWORD) PURE;
+	STDMETHOD(AddUrl)(THIS_ HWND,LPCWSTR,LPCOMPONENT,DWORD) PURE;
+	STDMETHOD(ApplyChanges)(THIS_ DWORD) PURE;
+	STDMETHOD(GenerateDesktopItemHtml)(THIS_ LPCWSTR,LPCOMPONENT,DWORD) PURE;
+	STDMETHOD(GetDesktopItem)(THIS_ int,LPCOMPONENT,DWORD) PURE;
+	STDMETHOD(GetDesktopItemByID)(THIS_ DWORD,LPCOMPONENT,DWORD) PURE;
+	STDMETHOD(GetDesktopItemBySource)(THIS_ LPCWSTR,LPCOMPONENT,DWORD) PURE;
+	STDMETHOD(GetDesktopItemCount)(THIS_ LPINT,DWORD) PURE;
+	STDMETHOD(GetDesktopItemOptions)(THIS_ LPCOMPONENTSOPT,DWORD) PURE;
+	STDMETHOD(GetPattern)(THIS_ LPWSTR,UINT,DWORD) PURE;
+	STDMETHOD(GetWallpaper)(THIS_ LPWSTR,UINT,DWORD) PURE;
+	STDMETHOD(GetWallpaperOptions)(THIS_ LPWALLPAPEROPT,DWORD) PURE;
+	STDMETHOD(ModifyDesktopItem)(THIS_ LPCCOMPONENT,DWORD) PURE;
+	STDMETHOD(RemoveDesktopItem)(THIS_ LPCCOMPONENT,DWORD) PURE;
+	STDMETHOD(SetDesktopItemOptions)(THIS_ LPCCOMPONENTSOPT,DWORD) PURE;
+	STDMETHOD(SetPattern)(THIS_ LPCWSTR,DWORD) PURE;
+	STDMETHOD(SetWallpaper)(THIS_ LPCWSTR,DWORD) PURE;
+	STDMETHOD(SetWallpaperOptions)(THIS_ LPCWALLPAPEROPT,DWORD) PURE;
+};
+#undef INTERFACE
+#endif /* HAVE_ACTIVE_DESKTOP_H */
+
+#endif /* WIN32 */
+#endif /* OS_W32TIGER_H */