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 Service 5a9772
#define WINDOW_ORDER_TYPE_WINDOW 0x01000000
Packit Service 5a9772
#define WINDOW_ORDER_TYPE_NOTIFY 0x02000000
Packit Service 5a9772
#define WINDOW_ORDER_TYPE_DESKTOP 0x04000000
Packit Service 5a9772
Packit Service 5a9772
#define WINDOW_ORDER_STATE_NEW 0x10000000
Packit Service 5a9772
#define WINDOW_ORDER_STATE_DELETED 0x20000000
Packit Service 5a9772
Packit Service 5a9772
/* Window Order Update */
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_OWNER 0x00000002
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_STYLE 0x00000008
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_SHOW 0x00000010
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_TITLE 0x00000004
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_CLIENT_AREA_OFFSET 0x00004000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_CLIENT_AREA_SIZE 0x00010000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_RESIZE_MARGIN_X 0x00000080
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_RESIZE_MARGIN_Y 0x08000000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_RP_CONTENT 0x00020000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_ROOT_PARENT 0x00040000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_WND_OFFSET 0x00000800
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_WND_CLIENT_DELTA 0x00008000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_WND_SIZE 0x00000400
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_WND_RECTS 0x00000100
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_VIS_OFFSET 0x00001000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_VISIBILITY 0x00000200
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_OVERLAY_DESCRIPTION 0x00400000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_ICON_OVERLAY_NULL 0x00200000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_TASKBAR_BUTTON 0x00800000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_ENFORCE_SERVER_ZORDER 0x00080000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_APPBAR_STATE 0x00000040
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_APPBAR_EDGE 0x00000001
Packit Service 5a9772
Packit Service 5a9772
/* Window (chached) Icon */
Packit Service 5a9772
#define WINDOW_ORDER_ICON 0x40000000
Packit Service 5a9772
#define WINDOW_ORDER_CACHED_ICON 0x80000000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_ICON_BIG 0x00002000
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_ICON_OVERLAY 0x00100000
Packit Service 5a9772
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_NOTIFY_VERSION 0x00000008
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_NOTIFY_TIP 0x00000001
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_NOTIFY_INFO_TIP 0x00000002
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_NOTIFY_STATE 0x00000004
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_DESKTOP_NONE 0x00000001
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_DESKTOP_HOOKED 0x00000002
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_DESKTOP_ARC_COMPLETED 0x00000004
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_DESKTOP_ARC_BEGAN 0x00000008
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_DESKTOP_ZORDER 0x00000010
Packit Service 5a9772
#define WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND 0x00000020
Packit 1fb8d4
Packit 1fb8d4
/* Window Show States */
Packit Service 5a9772
#define WINDOW_HIDE 0x00
Packit Service 5a9772
#define WINDOW_SHOW_MINIMIZED 0x02
Packit Service 5a9772
#define WINDOW_SHOW_MAXIMIZED 0x03
Packit Service 5a9772
#define WINDOW_SHOW 0x05
Packit 1fb8d4
Packit 1fb8d4
/* Window Styles */
Packit 1fb8d4
#ifndef _WIN32
Packit Service 5a9772
#define WS_BORDER 0x00800000
Packit Service 5a9772
#define WS_CAPTION 0x00C00000
Packit Service 5a9772
#define WS_CHILD 0x40000000
Packit Service 5a9772
#define WS_CLIPCHILDREN 0x02000000
Packit Service 5a9772
#define WS_CLIPSIBLINGS 0x04000000
Packit Service 5a9772
#define WS_DISABLED 0x08000000
Packit Service 5a9772
#define WS_DLGFRAME 0x00400000
Packit Service 5a9772
#define WS_GROUP 0x00020000
Packit Service 5a9772
#define WS_HSCROLL 0x00100000
Packit Service 5a9772
#define WS_ICONIC 0x20000000
Packit Service 5a9772
#define WS_MAXIMIZE 0x01000000
Packit Service 5a9772
#define WS_MAXIMIZEBOX 0x00010000
Packit Service 5a9772
#define WS_MINIMIZE 0x20000000
Packit Service 5a9772
#define WS_MINIMIZEBOX 0x00020000
Packit Service 5a9772
#define WS_OVERLAPPED 0x00000000
Packit Service 5a9772
#define WS_OVERLAPPEDWINDOW \
Packit Service 5a9772
	(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)
Packit Service 5a9772
#define WS_POPUP 0x80000000
Packit Service 5a9772
#define WS_POPUPWINDOW (WS_POPUP | WS_BORDER | WS_SYSMENU)
Packit Service 5a9772
#define WS_SIZEBOX 0x00040000
Packit Service 5a9772
#define WS_SYSMENU 0x00080000
Packit Service 5a9772
#define WS_TABSTOP 0x00010000
Packit Service 5a9772
#define WS_THICKFRAME 0x00040000
Packit Service 5a9772
#define WS_VISIBLE 0x10000000
Packit Service 5a9772
#define WS_VSCROLL 0x00200000
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
/* Extended Window Styles */
Packit 1fb8d4
#ifndef _WIN32
Packit Service 5a9772
#define WS_EX_ACCEPTFILES 0x00000010
Packit Service 5a9772
#define WS_EX_APPWINDOW 0x00040000
Packit Service 5a9772
#define WS_EX_CLIENTEDGE 0x00000200
Packit Service 5a9772
#define WS_EX_COMPOSITED 0x02000000
Packit Service 5a9772
#define WS_EX_CONTEXTHELP 0x00000400
Packit Service 5a9772
#define WS_EX_CONTROLPARENT 0x00010000
Packit Service 5a9772
#define WS_EX_DLGMODALFRAME 0x00000001
Packit Service 5a9772
#define WS_EX_LAYERED 0x00080000
Packit Service 5a9772
#define WS_EX_LAYOUTRTL 0x00400000
Packit Service 5a9772
#define WS_EX_LEFT 0x00000000
Packit Service 5a9772
#define WS_EX_LEFTSCROLLBAR 0x00004000
Packit Service 5a9772
#define WS_EX_LTRREADING 0x00000000
Packit Service 5a9772
#define WS_EX_MDICHILD 0x00000040
Packit Service 5a9772
#define WS_EX_NOACTIVATE 0x08000000
Packit Service 5a9772
#define WS_EX_NOINHERITLAYOUT 0x00100000
Packit Service 5a9772
#define WS_EX_NOPARENTNOTIFY 0x00000004
Packit Service 5a9772
#define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
Packit Service 5a9772
#define WS_EX_PALETTEWINDOW (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
Packit Service 5a9772
#define WS_EX_RIGHT 0x00001000
Packit Service 5a9772
#define WS_EX_RIGHTSCROLLBAR 0x00000000
Packit Service 5a9772
#define WS_EX_RTLREADING 0x00002000
Packit Service 5a9772
#define WS_EX_STATICEDGE 0x00020000
Packit Service 5a9772
#define WS_EX_TOOLWINDOW 0x00000080
Packit Service 5a9772
#define WS_EX_TOPMOST 0x00000008
Packit Service 5a9772
#define WS_EX_TRANSPARENT 0x00000020
Packit Service 5a9772
#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 Service 5a9772
#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 Service 5a9772
	UINT32 resizeMarginLeft;
Packit Service 5a9772
	UINT32 resizeMarginTop;
Packit Service 5a9772
	UINT32 resizeMarginRight;
Packit Service 5a9772
	UINT32 resizeMarginBottom;
Packit 1fb8d4
	UINT32 numVisibilityRects;
Packit 1fb8d4
	RECTANGLE_16* visibilityRects;
Packit Service 5a9772
	RAIL_UNICODE_STRING OverlayDescription;
Packit Service 5a9772
	BYTE TaskbarButton;
Packit Service 5a9772
	UINT8 EnforceServerZOrder;
Packit Service 5a9772
	UINT8 AppBarState;
Packit Service 5a9772
	UINT8 AppBarEdge;
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 Service 5a9772
typedef BOOL (*pWindowCreate)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo,
Packit Service 5a9772
                              const WINDOW_STATE_ORDER* window_state);
Packit Service 5a9772
typedef BOOL (*pWindowUpdate)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo,
Packit Service 5a9772
                              const WINDOW_STATE_ORDER* window_state);
Packit Service 5a9772
typedef BOOL (*pWindowIcon)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo,
Packit Service 5a9772
                            const WINDOW_ICON_ORDER* window_icon);
Packit Service 5a9772
typedef BOOL (*pWindowCachedIcon)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo,
Packit Service 5a9772
                                  const WINDOW_CACHED_ICON_ORDER* window_cached_icon);
Packit Service 5a9772
typedef BOOL (*pWindowDelete)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo);
Packit Service 5a9772
typedef BOOL (*pNotifyIconCreate)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo,
Packit Service 5a9772
                                  const NOTIFY_ICON_STATE_ORDER* notify_icon_state);
Packit Service 5a9772
typedef BOOL (*pNotifyIconUpdate)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo,
Packit Service 5a9772
                                  const NOTIFY_ICON_STATE_ORDER* notify_icon_state);
Packit Service 5a9772
typedef BOOL (*pNotifyIconDelete)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo);
Packit Service 5a9772
typedef BOOL (*pMonitoredDesktop)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo,
Packit Service 5a9772
                                  const MONITORED_DESKTOP_ORDER* monitored_desktop);
Packit Service 5a9772
typedef BOOL (*pNonMonitoredDesktop)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo);
Packit 1fb8d4
Packit 1fb8d4
struct rdp_window_update
Packit 1fb8d4
{
Packit Service 5a9772
	rdpContext* context;     /* 0 */
Packit 1fb8d4
	UINT32 paddingA[16 - 1]; /* 1 */
Packit 1fb8d4
Packit Service 5a9772
	pWindowCreate WindowCreate;               /* 16 */
Packit Service 5a9772
	pWindowUpdate WindowUpdate;               /* 17 */
Packit Service 5a9772
	pWindowIcon WindowIcon;                   /* 18 */
Packit Service 5a9772
	pWindowCachedIcon WindowCachedIcon;       /* 19 */
Packit Service 5a9772
	pWindowDelete WindowDelete;               /* 20 */
Packit Service 5a9772
	pNotifyIconCreate NotifyIconCreate;       /* 21 */
Packit Service 5a9772
	pNotifyIconUpdate NotifyIconUpdate;       /* 22 */
Packit Service 5a9772
	pNotifyIconDelete NotifyIconDelete;       /* 23 */
Packit Service 5a9772
	pMonitoredDesktop MonitoredDesktop;       /* 24 */
Packit 1fb8d4
	pNonMonitoredDesktop NonMonitoredDesktop; /* 25 */
Packit Service 5a9772
	UINT32 paddingB[32 - 26];                 /* 26 */
Packit 1fb8d4
Packit 1fb8d4
	/* internal */
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct rdp_window_update rdpWindowUpdate;
Packit 1fb8d4
Packit 1fb8d4
#endif /* FREERDP_UPDATE_WINDOW_H */