Blame include/freerdp/window.h

Packit 1fb8d4
/**
Packit 1fb8d4
 * FreeRDP: A Remote Desktop Protocol Implementation
Packit 1fb8d4
 * Window Alternate Secondary Drawing Orders Interface API
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef FREERDP_UPDATE_WINDOW_H
Packit 1fb8d4
#define FREERDP_UPDATE_WINDOW_H
Packit 1fb8d4
Packit 1fb8d4
#include <freerdp/types.h>
Packit 1fb8d4
Packit 1fb8d4
/* Window Order Header Flags */
Packit 1fb8d4
#define WINDOW_ORDER_TYPE_WINDOW			0x01000000
Packit 1fb8d4
#define WINDOW_ORDER_TYPE_NOTIFY			0x02000000
Packit 1fb8d4
#define WINDOW_ORDER_TYPE_DESKTOP			0x04000000
Packit 1fb8d4
#define WINDOW_ORDER_STATE_NEW				0x10000000
Packit 1fb8d4
#define WINDOW_ORDER_STATE_DELETED			0x20000000
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_OWNER			0x00000002
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_STYLE			0x00000008
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_SHOW				0x00000010
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_TITLE			0x00000004
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_CLIENT_AREA_OFFSET		0x00004000
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_CLIENT_AREA_SIZE		0x00010000
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_RP_CONTENT			0x00020000
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_ROOT_PARENT			0x00040000
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_WND_OFFSET			0x00000800
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_WND_CLIENT_DELTA		0x00008000
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_WND_SIZE			0x00000400
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_WND_RECTS			0x00000100
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_VIS_OFFSET			0x00001000
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_VISIBILITY			0x00000200
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_ICON_BIG			0x00002000
Packit 1fb8d4
#define WINDOW_ORDER_ICON				0x40000000
Packit 1fb8d4
#define WINDOW_ORDER_CACHED_ICON			0x80000000
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_NOTIFY_VERSION		0x00000008
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_NOTIFY_TIP			0x00000001
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_NOTIFY_INFO_TIP		0x00000002
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_NOTIFY_STATE			0x00000004
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_DESKTOP_NONE			0x00000001
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_DESKTOP_HOOKED		0x00000002
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_DESKTOP_ARC_COMPLETED	0x00000004
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_DESKTOP_ARC_BEGAN		0x00000008
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_DESKTOP_ZORDER		0x00000010
Packit 1fb8d4
#define WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND		0x00000020
Packit 1fb8d4
Packit 1fb8d4
/* Window Show States */
Packit 1fb8d4
#define WINDOW_HIDE					0x00
Packit 1fb8d4
#define WINDOW_SHOW_MINIMIZED				0x02
Packit 1fb8d4
#define WINDOW_SHOW_MAXIMIZED				0x03
Packit 1fb8d4
#define WINDOW_SHOW					0x05
Packit 1fb8d4
Packit 1fb8d4
/* Window Styles */
Packit 1fb8d4
#ifndef _WIN32
Packit 1fb8d4
#define WS_BORDER			0x00800000
Packit 1fb8d4
#define WS_CAPTION			0x00C00000
Packit 1fb8d4
#define WS_CHILD			0x40000000
Packit 1fb8d4
#define WS_CLIPCHILDREN			0x02000000
Packit 1fb8d4
#define WS_CLIPSIBLINGS			0x04000000
Packit 1fb8d4
#define WS_DISABLED			0x08000000
Packit 1fb8d4
#define WS_DLGFRAME			0x00400000
Packit 1fb8d4
#define WS_GROUP			0x00020000
Packit 1fb8d4
#define WS_HSCROLL			0x00100000
Packit 1fb8d4
#define WS_ICONIC			0x20000000
Packit 1fb8d4
#define WS_MAXIMIZE			0x01000000
Packit 1fb8d4
#define WS_MAXIMIZEBOX			0x00010000
Packit 1fb8d4
#define WS_MINIMIZE			0x20000000
Packit 1fb8d4
#define WS_MINIMIZEBOX			0x00020000
Packit 1fb8d4
#define WS_OVERLAPPED			0x00000000
Packit 1fb8d4
#define WS_OVERLAPPEDWINDOW		(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)
Packit 1fb8d4
#define WS_POPUP			0x80000000
Packit 1fb8d4
#define WS_POPUPWINDOW			(WS_POPUP | WS_BORDER | WS_SYSMENU)
Packit 1fb8d4
#define WS_SIZEBOX			0x00040000
Packit 1fb8d4
#define WS_SYSMENU			0x00080000
Packit 1fb8d4
#define WS_TABSTOP			0x00010000
Packit 1fb8d4
#define WS_THICKFRAME			0x00040000
Packit 1fb8d4
#define WS_VISIBLE			0x10000000
Packit 1fb8d4
#define WS_VSCROLL			0x00200000
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
/* Extended Window Styles */
Packit 1fb8d4
#ifndef _WIN32
Packit 1fb8d4
#define WS_EX_ACCEPTFILES		0x00000010
Packit 1fb8d4
#define WS_EX_APPWINDOW			0x00040000
Packit 1fb8d4
#define WS_EX_CLIENTEDGE		0x00000200
Packit 1fb8d4
#define WS_EX_COMPOSITED		0x02000000
Packit 1fb8d4
#define WS_EX_CONTEXTHELP		0x00000400
Packit 1fb8d4
#define WS_EX_CONTROLPARENT		0x00010000
Packit 1fb8d4
#define WS_EX_DLGMODALFRAME		0x00000001
Packit 1fb8d4
#define WS_EX_LAYERED			0x00080000
Packit 1fb8d4
#define WS_EX_LAYOUTRTL			0x00400000
Packit 1fb8d4
#define WS_EX_LEFT			0x00000000
Packit 1fb8d4
#define WS_EX_LEFTSCROLLBAR		0x00004000
Packit 1fb8d4
#define WS_EX_LTRREADING		0x00000000
Packit 1fb8d4
#define WS_EX_MDICHILD			0x00000040
Packit 1fb8d4
#define WS_EX_NOACTIVATE		0x08000000
Packit 1fb8d4
#define WS_EX_NOINHERITLAYOUT		0x00100000
Packit 1fb8d4
#define WS_EX_NOPARENTNOTIFY		0x00000004
Packit 1fb8d4
#define WS_EX_OVERLAPPEDWINDOW		(WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
Packit 1fb8d4
#define WS_EX_PALETTEWINDOW		(WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
Packit 1fb8d4
#define WS_EX_RIGHT			0x00001000
Packit 1fb8d4
#define WS_EX_RIGHTSCROLLBAR		0x00000000
Packit 1fb8d4
#define WS_EX_RTLREADING		0x00002000
Packit 1fb8d4
#define WS_EX_STATICEDGE		0x00020000
Packit 1fb8d4
#define WS_EX_TOOLWINDOW		0x00000080
Packit 1fb8d4
#define WS_EX_TOPMOST			0x00000008
Packit 1fb8d4
#define WS_EX_TRANSPARENT		0x00000020
Packit 1fb8d4
#define WS_EX_WINDOWEDGE		0x00000100
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
/**
Packit 1fb8d4
 * This is a custom extended window style used by XRDP
Packit 1fb8d4
 * instructing the client to use local window decorations
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#define WS_EX_DECORATIONS		0x40000000
Packit 1fb8d4
Packit 1fb8d4
struct _WINDOW_ORDER_INFO
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 windowId;
Packit 1fb8d4
	UINT32 fieldFlags;
Packit 1fb8d4
	UINT32 notifyIconId;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _WINDOW_ORDER_INFO WINDOW_ORDER_INFO;
Packit 1fb8d4
Packit 1fb8d4
struct _ICON_INFO
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 cacheEntry;
Packit 1fb8d4
	UINT32 cacheId;
Packit 1fb8d4
	UINT32 bpp;
Packit 1fb8d4
	UINT32 width;
Packit 1fb8d4
	UINT32 height;
Packit 1fb8d4
	UINT32 cbColorTable;
Packit 1fb8d4
	UINT32 cbBitsMask;
Packit 1fb8d4
	UINT32 cbBitsColor;
Packit 1fb8d4
	BYTE* bitsMask;
Packit 1fb8d4
	BYTE* colorTable;
Packit 1fb8d4
	BYTE* bitsColor;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _ICON_INFO ICON_INFO;
Packit 1fb8d4
Packit 1fb8d4
struct _CACHED_ICON_INFO
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 cacheEntry;
Packit 1fb8d4
	UINT32 cacheId;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _CACHED_ICON_INFO CACHED_ICON_INFO;
Packit 1fb8d4
Packit 1fb8d4
struct _NOTIFY_ICON_INFOTIP
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 timeout;
Packit 1fb8d4
	UINT32 flags;
Packit 1fb8d4
	RAIL_UNICODE_STRING text;
Packit 1fb8d4
	RAIL_UNICODE_STRING title;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _NOTIFY_ICON_INFOTIP NOTIFY_ICON_INFOTIP;
Packit 1fb8d4
Packit 1fb8d4
struct _WINDOW_STATE_ORDER
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 ownerWindowId;
Packit 1fb8d4
	UINT32 style;
Packit 1fb8d4
	UINT32 extendedStyle;
Packit 1fb8d4
	UINT32 showState;
Packit 1fb8d4
	RAIL_UNICODE_STRING titleInfo;
Packit 1fb8d4
	INT32 clientOffsetX;
Packit 1fb8d4
	INT32 clientOffsetY;
Packit 1fb8d4
	UINT32 clientAreaWidth;
Packit 1fb8d4
	UINT32 clientAreaHeight;
Packit 1fb8d4
	UINT32 RPContent;
Packit 1fb8d4
	UINT32 rootParentHandle;
Packit 1fb8d4
	INT32 windowOffsetX;
Packit 1fb8d4
	INT32 windowOffsetY;
Packit 1fb8d4
	INT32 windowClientDeltaX;
Packit 1fb8d4
	INT32 windowClientDeltaY;
Packit 1fb8d4
	UINT32 windowWidth;
Packit 1fb8d4
	UINT32 windowHeight;
Packit 1fb8d4
	UINT32 numWindowRects;
Packit 1fb8d4
	RECTANGLE_16* windowRects;
Packit 1fb8d4
	INT32 visibleOffsetX;
Packit 1fb8d4
	INT32 visibleOffsetY;
Packit 1fb8d4
	UINT32 numVisibilityRects;
Packit 1fb8d4
	RECTANGLE_16* visibilityRects;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _WINDOW_STATE_ORDER WINDOW_STATE_ORDER;
Packit 1fb8d4
Packit 1fb8d4
struct _WINDOW_ICON_ORDER
Packit 1fb8d4
{
Packit 1fb8d4
	ICON_INFO* iconInfo;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _WINDOW_ICON_ORDER WINDOW_ICON_ORDER;
Packit 1fb8d4
Packit 1fb8d4
struct _WINDOW_CACHED_ICON_ORDER
Packit 1fb8d4
{
Packit 1fb8d4
	CACHED_ICON_INFO cachedIcon;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _WINDOW_CACHED_ICON_ORDER WINDOW_CACHED_ICON_ORDER;
Packit 1fb8d4
Packit 1fb8d4
struct _NOTIFY_ICON_STATE_ORDER
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 version;
Packit 1fb8d4
	RAIL_UNICODE_STRING toolTip;
Packit 1fb8d4
	NOTIFY_ICON_INFOTIP infoTip;
Packit 1fb8d4
	UINT32 state;
Packit 1fb8d4
	ICON_INFO icon;
Packit 1fb8d4
	CACHED_ICON_INFO cachedIcon;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _NOTIFY_ICON_STATE_ORDER NOTIFY_ICON_STATE_ORDER;
Packit 1fb8d4
Packit 1fb8d4
struct _MONITORED_DESKTOP_ORDER
Packit 1fb8d4
{
Packit 1fb8d4
	UINT32 activeWindowId;
Packit 1fb8d4
	UINT32 numWindowIds;
Packit 1fb8d4
	UINT32* windowIds;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _MONITORED_DESKTOP_ORDER MONITORED_DESKTOP_ORDER;
Packit 1fb8d4
Packit 1fb8d4
typedef BOOL (*pWindowCreate)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, WINDOW_STATE_ORDER* window_state);
Packit 1fb8d4
typedef BOOL (*pWindowUpdate)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, WINDOW_STATE_ORDER* window_state);
Packit 1fb8d4
typedef BOOL (*pWindowIcon)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, WINDOW_ICON_ORDER* window_icon);
Packit 1fb8d4
typedef BOOL (*pWindowCachedIcon)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, WINDOW_CACHED_ICON_ORDER* window_cached_icon);
Packit 1fb8d4
typedef BOOL (*pWindowDelete)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo);
Packit 1fb8d4
typedef BOOL (*pNotifyIconCreate)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state);
Packit 1fb8d4
typedef BOOL (*pNotifyIconUpdate)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state);
Packit 1fb8d4
typedef BOOL (*pNotifyIconDelete)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo);
Packit 1fb8d4
typedef BOOL (*pMonitoredDesktop)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, MONITORED_DESKTOP_ORDER* monitored_desktop);
Packit 1fb8d4
typedef BOOL (*pNonMonitoredDesktop)(rdpContext* context, WINDOW_ORDER_INFO* orderInfo);
Packit 1fb8d4
Packit 1fb8d4
struct rdp_window_update
Packit 1fb8d4
{
Packit 1fb8d4
	rdpContext* context; /* 0 */
Packit 1fb8d4
	UINT32 paddingA[16 - 1]; /* 1 */
Packit 1fb8d4
Packit 1fb8d4
	pWindowCreate WindowCreate; /* 16 */
Packit 1fb8d4
	pWindowUpdate WindowUpdate; /* 17 */
Packit 1fb8d4
	pWindowIcon WindowIcon; /* 18 */
Packit 1fb8d4
	pWindowCachedIcon WindowCachedIcon; /* 19 */
Packit 1fb8d4
	pWindowDelete WindowDelete; /* 20 */
Packit 1fb8d4
	pNotifyIconCreate NotifyIconCreate; /* 21 */
Packit 1fb8d4
	pNotifyIconUpdate NotifyIconUpdate; /* 22 */
Packit 1fb8d4
	pNotifyIconDelete NotifyIconDelete; /* 23 */
Packit 1fb8d4
	pMonitoredDesktop MonitoredDesktop; /* 24 */
Packit 1fb8d4
	pNonMonitoredDesktop NonMonitoredDesktop; /* 25 */
Packit 1fb8d4
	UINT32 paddingB[32 - 26]; /* 26 */
Packit 1fb8d4
Packit 1fb8d4
	/* internal */
Packit 1fb8d4
Packit 1fb8d4
	WINDOW_ORDER_INFO orderInfo;
Packit 1fb8d4
	WINDOW_STATE_ORDER window_state;
Packit 1fb8d4
	WINDOW_ICON_ORDER window_icon;
Packit 1fb8d4
	WINDOW_CACHED_ICON_ORDER window_cached_icon;
Packit 1fb8d4
	NOTIFY_ICON_STATE_ORDER notify_icon_state;
Packit 1fb8d4
	MONITORED_DESKTOP_ORDER monitored_desktop;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct rdp_window_update rdpWindowUpdate;
Packit 1fb8d4
Packit 1fb8d4
#endif /* FREERDP_UPDATE_WINDOW_H */