window.h (9724B)
1/** 2 * FreeRDP: A Remote Desktop Protocol Implementation 3 * Window Alternate Secondary Drawing Orders Interface API 4 * 5 * Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com> 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 20#ifndef FREERDP_UPDATE_WINDOW_H 21#define FREERDP_UPDATE_WINDOW_H 22 23#include <freerdp/types.h> 24 25/* Window Order Header Flags */ 26#define WINDOW_ORDER_TYPE_WINDOW 0x01000000 27#define WINDOW_ORDER_TYPE_NOTIFY 0x02000000 28#define WINDOW_ORDER_TYPE_DESKTOP 0x04000000 29 30#define WINDOW_ORDER_STATE_NEW 0x10000000 31#define WINDOW_ORDER_STATE_DELETED 0x20000000 32 33/* Window Order Update */ 34#define WINDOW_ORDER_FIELD_OWNER 0x00000002 35#define WINDOW_ORDER_FIELD_STYLE 0x00000008 36#define WINDOW_ORDER_FIELD_SHOW 0x00000010 37#define WINDOW_ORDER_FIELD_TITLE 0x00000004 38#define WINDOW_ORDER_FIELD_CLIENT_AREA_OFFSET 0x00004000 39#define WINDOW_ORDER_FIELD_CLIENT_AREA_SIZE 0x00010000 40#define WINDOW_ORDER_FIELD_RESIZE_MARGIN_X 0x00000080 41#define WINDOW_ORDER_FIELD_RESIZE_MARGIN_Y 0x08000000 42#define WINDOW_ORDER_FIELD_RP_CONTENT 0x00020000 43#define WINDOW_ORDER_FIELD_ROOT_PARENT 0x00040000 44#define WINDOW_ORDER_FIELD_WND_OFFSET 0x00000800 45#define WINDOW_ORDER_FIELD_WND_CLIENT_DELTA 0x00008000 46#define WINDOW_ORDER_FIELD_WND_SIZE 0x00000400 47#define WINDOW_ORDER_FIELD_WND_RECTS 0x00000100 48#define WINDOW_ORDER_FIELD_VIS_OFFSET 0x00001000 49#define WINDOW_ORDER_FIELD_VISIBILITY 0x00000200 50#define WINDOW_ORDER_FIELD_OVERLAY_DESCRIPTION 0x00400000 51#define WINDOW_ORDER_FIELD_ICON_OVERLAY_NULL 0x00200000 52#define WINDOW_ORDER_FIELD_TASKBAR_BUTTON 0x00800000 53#define WINDOW_ORDER_FIELD_ENFORCE_SERVER_ZORDER 0x00080000 54#define WINDOW_ORDER_FIELD_APPBAR_STATE 0x00000040 55#define WINDOW_ORDER_FIELD_APPBAR_EDGE 0x00000001 56 57/* Window (chached) Icon */ 58#define WINDOW_ORDER_ICON 0x40000000 59#define WINDOW_ORDER_CACHED_ICON 0x80000000 60#define WINDOW_ORDER_FIELD_ICON_BIG 0x00002000 61#define WINDOW_ORDER_FIELD_ICON_OVERLAY 0x00100000 62 63#define WINDOW_ORDER_FIELD_NOTIFY_VERSION 0x00000008 64#define WINDOW_ORDER_FIELD_NOTIFY_TIP 0x00000001 65#define WINDOW_ORDER_FIELD_NOTIFY_INFO_TIP 0x00000002 66#define WINDOW_ORDER_FIELD_NOTIFY_STATE 0x00000004 67#define WINDOW_ORDER_FIELD_DESKTOP_NONE 0x00000001 68#define WINDOW_ORDER_FIELD_DESKTOP_HOOKED 0x00000002 69#define WINDOW_ORDER_FIELD_DESKTOP_ARC_COMPLETED 0x00000004 70#define WINDOW_ORDER_FIELD_DESKTOP_ARC_BEGAN 0x00000008 71#define WINDOW_ORDER_FIELD_DESKTOP_ZORDER 0x00000010 72#define WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND 0x00000020 73 74/* Window Show States */ 75#define WINDOW_HIDE 0x00 76#define WINDOW_SHOW_MINIMIZED 0x02 77#define WINDOW_SHOW_MAXIMIZED 0x03 78#define WINDOW_SHOW 0x05 79 80/* Window Styles */ 81#ifndef _WIN32 82#define WS_BORDER 0x00800000 83#define WS_CAPTION 0x00C00000 84#define WS_CHILD 0x40000000 85#define WS_CLIPCHILDREN 0x02000000 86#define WS_CLIPSIBLINGS 0x04000000 87#define WS_DISABLED 0x08000000 88#define WS_DLGFRAME 0x00400000 89#define WS_GROUP 0x00020000 90#define WS_HSCROLL 0x00100000 91#define WS_ICONIC 0x20000000 92#define WS_MAXIMIZE 0x01000000 93#define WS_MAXIMIZEBOX 0x00010000 94#define WS_MINIMIZE 0x20000000 95#define WS_MINIMIZEBOX 0x00020000 96#define WS_OVERLAPPED 0x00000000 97#define WS_OVERLAPPEDWINDOW \ 98 (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX) 99#define WS_POPUP 0x80000000 100#define WS_POPUPWINDOW (WS_POPUP | WS_BORDER | WS_SYSMENU) 101#define WS_SIZEBOX 0x00040000 102#define WS_SYSMENU 0x00080000 103#define WS_TABSTOP 0x00010000 104#define WS_THICKFRAME 0x00040000 105#define WS_VISIBLE 0x10000000 106#define WS_VSCROLL 0x00200000 107#endif 108 109/* Extended Window Styles */ 110#ifndef _WIN32 111#define WS_EX_ACCEPTFILES 0x00000010 112#define WS_EX_APPWINDOW 0x00040000 113#define WS_EX_CLIENTEDGE 0x00000200 114#define WS_EX_COMPOSITED 0x02000000 115#define WS_EX_CONTEXTHELP 0x00000400 116#define WS_EX_CONTROLPARENT 0x00010000 117#define WS_EX_DLGMODALFRAME 0x00000001 118#define WS_EX_LAYERED 0x00080000 119#define WS_EX_LAYOUTRTL 0x00400000 120#define WS_EX_LEFT 0x00000000 121#define WS_EX_LEFTSCROLLBAR 0x00004000 122#define WS_EX_LTRREADING 0x00000000 123#define WS_EX_MDICHILD 0x00000040 124#define WS_EX_NOACTIVATE 0x08000000 125#define WS_EX_NOINHERITLAYOUT 0x00100000 126#define WS_EX_NOPARENTNOTIFY 0x00000004 127#define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE) 128#define WS_EX_PALETTEWINDOW (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST) 129#define WS_EX_RIGHT 0x00001000 130#define WS_EX_RIGHTSCROLLBAR 0x00000000 131#define WS_EX_RTLREADING 0x00002000 132#define WS_EX_STATICEDGE 0x00020000 133#define WS_EX_TOOLWINDOW 0x00000080 134#define WS_EX_TOPMOST 0x00000008 135#define WS_EX_TRANSPARENT 0x00000020 136#define WS_EX_WINDOWEDGE 0x00000100 137#endif 138 139/** 140 * This is a custom extended window style used by XRDP 141 * instructing the client to use local window decorations 142 */ 143 144#define WS_EX_DECORATIONS 0x40000000 145 146struct _WINDOW_ORDER_INFO 147{ 148 UINT32 windowId; 149 UINT32 fieldFlags; 150 UINT32 notifyIconId; 151}; 152typedef struct _WINDOW_ORDER_INFO WINDOW_ORDER_INFO; 153 154struct _ICON_INFO 155{ 156 UINT32 cacheEntry; 157 UINT32 cacheId; 158 UINT32 bpp; 159 UINT32 width; 160 UINT32 height; 161 UINT32 cbColorTable; 162 UINT32 cbBitsMask; 163 UINT32 cbBitsColor; 164 BYTE* bitsMask; 165 BYTE* colorTable; 166 BYTE* bitsColor; 167}; 168typedef struct _ICON_INFO ICON_INFO; 169 170struct _CACHED_ICON_INFO 171{ 172 UINT32 cacheEntry; 173 UINT32 cacheId; 174}; 175typedef struct _CACHED_ICON_INFO CACHED_ICON_INFO; 176 177struct _NOTIFY_ICON_INFOTIP 178{ 179 UINT32 timeout; 180 UINT32 flags; 181 RAIL_UNICODE_STRING text; 182 RAIL_UNICODE_STRING title; 183}; 184typedef struct _NOTIFY_ICON_INFOTIP NOTIFY_ICON_INFOTIP; 185 186struct _WINDOW_STATE_ORDER 187{ 188 UINT32 ownerWindowId; 189 UINT32 style; 190 UINT32 extendedStyle; 191 UINT32 showState; 192 RAIL_UNICODE_STRING titleInfo; 193 INT32 clientOffsetX; 194 INT32 clientOffsetY; 195 UINT32 clientAreaWidth; 196 UINT32 clientAreaHeight; 197 UINT32 RPContent; 198 UINT32 rootParentHandle; 199 INT32 windowOffsetX; 200 INT32 windowOffsetY; 201 INT32 windowClientDeltaX; 202 INT32 windowClientDeltaY; 203 UINT32 windowWidth; 204 UINT32 windowHeight; 205 UINT32 numWindowRects; 206 RECTANGLE_16* windowRects; 207 INT32 visibleOffsetX; 208 INT32 visibleOffsetY; 209 UINT32 resizeMarginLeft; 210 UINT32 resizeMarginTop; 211 UINT32 resizeMarginRight; 212 UINT32 resizeMarginBottom; 213 UINT32 numVisibilityRects; 214 RECTANGLE_16* visibilityRects; 215 RAIL_UNICODE_STRING OverlayDescription; 216 BYTE TaskbarButton; 217 UINT8 EnforceServerZOrder; 218 UINT8 AppBarState; 219 UINT8 AppBarEdge; 220}; 221typedef struct _WINDOW_STATE_ORDER WINDOW_STATE_ORDER; 222 223struct _WINDOW_ICON_ORDER 224{ 225 ICON_INFO* iconInfo; 226}; 227typedef struct _WINDOW_ICON_ORDER WINDOW_ICON_ORDER; 228 229struct _WINDOW_CACHED_ICON_ORDER 230{ 231 CACHED_ICON_INFO cachedIcon; 232}; 233typedef struct _WINDOW_CACHED_ICON_ORDER WINDOW_CACHED_ICON_ORDER; 234 235struct _NOTIFY_ICON_STATE_ORDER 236{ 237 UINT32 version; 238 RAIL_UNICODE_STRING toolTip; 239 NOTIFY_ICON_INFOTIP infoTip; 240 UINT32 state; 241 ICON_INFO icon; 242 CACHED_ICON_INFO cachedIcon; 243}; 244typedef struct _NOTIFY_ICON_STATE_ORDER NOTIFY_ICON_STATE_ORDER; 245 246struct _MONITORED_DESKTOP_ORDER 247{ 248 UINT32 activeWindowId; 249 UINT32 numWindowIds; 250 UINT32* windowIds; 251}; 252typedef struct _MONITORED_DESKTOP_ORDER MONITORED_DESKTOP_ORDER; 253 254typedef BOOL (*pWindowCreate)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo, 255 const WINDOW_STATE_ORDER* window_state); 256typedef BOOL (*pWindowUpdate)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo, 257 const WINDOW_STATE_ORDER* window_state); 258typedef BOOL (*pWindowIcon)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo, 259 const WINDOW_ICON_ORDER* window_icon); 260typedef BOOL (*pWindowCachedIcon)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo, 261 const WINDOW_CACHED_ICON_ORDER* window_cached_icon); 262typedef BOOL (*pWindowDelete)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo); 263typedef BOOL (*pNotifyIconCreate)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo, 264 const NOTIFY_ICON_STATE_ORDER* notify_icon_state); 265typedef BOOL (*pNotifyIconUpdate)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo, 266 const NOTIFY_ICON_STATE_ORDER* notify_icon_state); 267typedef BOOL (*pNotifyIconDelete)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo); 268typedef BOOL (*pMonitoredDesktop)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo, 269 const MONITORED_DESKTOP_ORDER* monitored_desktop); 270typedef BOOL (*pNonMonitoredDesktop)(rdpContext* context, const WINDOW_ORDER_INFO* orderInfo); 271 272struct rdp_window_update 273{ 274 rdpContext* context; /* 0 */ 275 UINT32 paddingA[16 - 1]; /* 1 */ 276 277 pWindowCreate WindowCreate; /* 16 */ 278 pWindowUpdate WindowUpdate; /* 17 */ 279 pWindowIcon WindowIcon; /* 18 */ 280 pWindowCachedIcon WindowCachedIcon; /* 19 */ 281 pWindowDelete WindowDelete; /* 20 */ 282 pNotifyIconCreate NotifyIconCreate; /* 21 */ 283 pNotifyIconUpdate NotifyIconUpdate; /* 22 */ 284 pNotifyIconDelete NotifyIconDelete; /* 23 */ 285 pMonitoredDesktop MonitoredDesktop; /* 24 */ 286 pNonMonitoredDesktop NonMonitoredDesktop; /* 25 */ 287 UINT32 paddingB[32 - 26]; /* 26 */ 288 289 /* internal */ 290}; 291typedef struct rdp_window_update rdpWindowUpdate; 292 293#endif /* FREERDP_UPDATE_WINDOW_H */