summaryrefslogtreecommitdiffstats
path: root/common/os/w32tiger.h
blob: d09994f21773a1c34671742b2a6afe19fb656b78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/* 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>


/* Windows has different names for these */
#define strcasecmp _stricmp
#define strncasecmp _strnicmp


/* 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 */