cscg24-guacamole

CSCG 2024 Challenge 'Guacamole Mashup'
git clone https://git.sinitax.com/sinitax/cscg24-guacamole
Log | Files | Refs | sfeed.txt

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