libfreerdp-core: update core <-> client interface for window alternate secondary...
authorMarc-André Moreau <marcandre.moreau@gmail.com>
Tue, 9 Aug 2011 07:01:40 +0000 (03:01 -0400)
committerMarc-André Moreau <marcandre.moreau@gmail.com>
Tue, 9 Aug 2011 07:01:40 +0000 (03:01 -0400)
include/freerdp/update.h
libfreerdp-core/window.c
libfreerdp-core/window.h

index e3888cd..c3cefc0 100644 (file)
@@ -675,6 +675,123 @@ struct _DRAW_GDIPLUS_CACHE_END_ORDER
 };
 typedef struct _DRAW_GDIPLUS_CACHE_END_ORDER DRAW_GDIPLUS_CACHE_END_ORDER;
 
+/* Window Alternate Secondary Drawing Orders */
+
+struct _WINDOW_ORDER_INFO
+{
+       uint32 windowId;
+       uint32 fieldFlags;
+       uint32 notifyIconId;
+};
+typedef struct _WINDOW_ORDER_INFO WINDOW_ORDER_INFO;
+
+struct _UNICODE_STRING
+{
+       uint16 cbString;
+       uint8* string;
+};
+typedef struct _UNICODE_STRING UNICODE_STRING;
+
+struct _RECTANGLE_16
+{
+       uint16 left;
+       uint16 top;
+       uint16 right;
+       uint16 bottom;
+};
+typedef struct _RECTANGLE_16 RECTANGLE_16;
+
+struct _ICON_INFO
+{
+       uint16 cacheEntry;
+       uint8 cacheId;
+       uint8 bpp;
+       uint16 width;
+       uint16 height;
+       uint16 cbColorTable;
+       uint16 cbBitsMask;
+       uint16 cbBitsColor;
+       uint8* bitsMask;
+       uint8* colorTable;
+       uint8* bitsColor;
+};
+typedef struct _ICON_INFO ICON_INFO;
+
+struct _CACHED_ICON_INFO
+{
+       uint16 cacheEntry;
+       uint8 cacheId;
+};
+typedef struct _CACHED_ICON_INFO CACHED_ICON_INFO;
+
+struct _NOTIFY_ICON_INFOTIP
+{
+       uint32 timeout;
+       uint32 flags;
+       UNICODE_STRING text;
+       UNICODE_STRING title;
+};
+typedef struct _NOTIFY_ICON_INFOTIP NOTIFY_ICON_INFOTIP;
+
+struct _WINDOW_STATE_ORDER
+{
+       uint32 ownerWindowId;
+       uint32 style;
+       uint32 extendedStyle;
+       uint8 showState;
+       UNICODE_STRING titleInfo;
+       uint32 clientOffsetX;
+       uint32 clientOffsetY;
+       uint32 clientAreaWidth;
+       uint32 clientAreaHeight;
+       uint8 RPContent;
+       uint32 rootParentHandle;
+       uint32 windowOffsetX;
+       uint32 windowOffsetY;
+       uint32 windowClientDeltaX;
+       uint32 windowClientDeltaY;
+       uint32 windowWidth;
+       uint32 windowHeight;
+       uint16 numWindowRects;
+       RECTANGLE_16* windowRects;
+       uint32 visibleOffsetX;
+       uint32 visibleOffsetY;
+       uint16 numVisibilityRects;
+       RECTANGLE_16* visibilityRects;
+};
+typedef struct _WINDOW_STATE_ORDER WINDOW_STATE_ORDER;
+
+struct _WINDOW_ICON_ORDER
+{
+       ICON_INFO iconInfo;
+};
+typedef struct _WINDOW_ICON_ORDER WINDOW_ICON_ORDER;
+
+struct _WINDOW_CACHED_ICON_ORDER
+{
+       CACHED_ICON_INFO cachedIcon;
+};
+typedef struct _WINDOW_CACHED_ICON_ORDER WINDOW_CACHED_ICON_ORDER;
+
+struct _NOTIFY_ICON_STATE_ORDER
+{
+       uint32 version;
+       UNICODE_STRING toolTip;
+       NOTIFY_ICON_INFOTIP infoTip;
+       uint32 state;
+       ICON_INFO icon;
+       CACHED_ICON_INFO cachedIcon;
+};
+typedef struct _NOTIFY_ICON_STATE_ORDER NOTIFY_ICON_STATE_ORDER;
+
+struct _MONITORED_DESKTOP_ORDER
+{
+       uint32 activeWindowId;
+       uint8 numWindowIds;
+       uint32* windowIds;
+};
+typedef struct _MONITORED_DESKTOP_ORDER MONITORED_DESKTOP_ORDER;
+
 /* Constants */
 
 #define CACHED_BRUSH   0x80
@@ -768,6 +885,15 @@ typedef void (*pcDrawGdiPlusCacheFirst)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_FI
 typedef void (*pcDrawGdiPlusCacheNext)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_NEXT_ORDER* draw_gdiplus_cache_next);
 typedef void (*pcDrawGdiPlusCacheEnd)(rdpUpdate* update, DRAW_GDIPLUS_CACHE_END_ORDER* draw_gdiplus_cache_end);
 
+typedef void (*pcWindowState)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_STATE_ORDER* window_state);
+typedef void (*pcWindowIcon)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_ICON_ORDER* window_icon);
+typedef void (*pcWindowCachedIcon)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, WINDOW_CACHED_ICON_ORDER* window_cached_icon);
+typedef void (*pcWindowDeleted)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo);
+typedef void (*pcNotifyIconState)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state);
+typedef void (*pcNotifyIconDeleted)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo);
+typedef void (*pcMonitoredDesktop)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo, MONITORED_DESKTOP_ORDER* monitored_desktop);
+typedef void (*pcNonMonitoredDesktop)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo);
+
 struct rdp_update
 {
        void* rdp;
@@ -827,6 +953,15 @@ struct rdp_update
        pcDrawGdiPlusCacheNext DrawGdiPlusCacheNext;
        pcDrawGdiPlusCacheEnd DrawGdiPlusCacheEnd;
 
+       pcWindowState WindowState;
+       pcWindowIcon WindowIcon;
+       pcWindowCachedIcon WindowCachedIcon;
+       pcWindowDeleted WindowDeleted;
+       pcNotifyIconState NotifyIconState;
+       pcNotifyIconDeleted NotifyIconDeleted;
+       pcMonitoredDesktop MonitoredDesktop;
+       pcNonMonitoredDesktop NonMonitoredDesktop;
+
        BITMAP_UPDATE bitmap_update;
        PALETTE_UPDATE palette_update;
        ORDER_INFO order_info;
@@ -874,6 +1009,13 @@ struct rdp_update
        DRAW_GDIPLUS_FIRST_ORDER draw_gdiplus_first;
        DRAW_GDIPLUS_NEXT_ORDER draw_gdiplus_next;
        DRAW_GDIPLUS_END_ORDER draw_gdiplus_end;
+
+       WINDOW_ORDER_INFO orderInfo;
+       WINDOW_STATE_ORDER window_state;
+       WINDOW_ICON_ORDER window_icon;
+       WINDOW_CACHED_ICON_ORDER window_cached_icon;
+       NOTIFY_ICON_STATE_ORDER notify_icon_state;
+       MONITORED_DESKTOP_ORDER monitored_desktop;
 };
 
 #endif /* __UPDATE_API_H */
index 9ab1554..3888592 100644 (file)
@@ -203,20 +203,30 @@ void update_read_window_deleted_order(STREAM* s, WINDOW_ORDER_INFO* orderInfo)
        /* window deletion event */
 }
 
-void update_read_window_info_order(STREAM* s, WINDOW_ORDER_INFO* orderInfo)
+void update_recv_window_info_order(rdpUpdate* update, STREAM* s, WINDOW_ORDER_INFO* orderInfo)
 {
-       WINDOW_STATE_ORDER window_state;
-       WINDOW_ICON_ORDER window_icon;
-       WINDOW_CACHED_ICON_ORDER window_cached_icon;
+       stream_read_uint32(s, orderInfo->windowId); /* windowId (4 bytes) */
 
        if (orderInfo->fieldFlags & WINDOW_ORDER_ICON)
-               update_read_window_icon_order(s, orderInfo, &window_icon);
+       {
+               update_read_window_icon_order(s, orderInfo, &update->window_icon);
+               IFCALL(update->WindowIcon, update, orderInfo, &update->window_icon);
+       }
        else if (orderInfo->fieldFlags & WINDOW_ORDER_CACHED_ICON)
-               update_read_window_cached_icon_order(s, orderInfo, &window_cached_icon);
+       {
+               update_read_window_cached_icon_order(s, orderInfo, &update->window_cached_icon);
+               IFCALL(update->WindowCachedIcon, update, orderInfo, &update->window_cached_icon);
+       }
        else if (orderInfo->fieldFlags & WINDOW_ORDER_STATE_DELETED)
+       {
                update_read_window_deleted_order(s, orderInfo);
+               IFCALL(update->WindowDeleted, update, orderInfo);
+       }
        else
-               update_read_window_state_order(s, orderInfo, &window_state);
+       {
+               update_read_window_state_order(s, orderInfo, &update->window_state);
+               IFCALL(update->WindowState, update, orderInfo, &update->window_state);
+       }
 }
 
 void update_read_notification_icon_state_order(STREAM* s, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state)
@@ -245,14 +255,21 @@ void update_read_notification_icon_deleted_order(STREAM* s, WINDOW_ORDER_INFO* o
        /* notification icon deletion event */
 }
 
-void update_read_notification_icon_info_order(STREAM* s, WINDOW_ORDER_INFO* orderInfo)
+void update_recv_notification_icon_info_order(rdpUpdate* update, STREAM* s, WINDOW_ORDER_INFO* orderInfo)
 {
-       NOTIFY_ICON_STATE_ORDER notify_icon_state_order;
+       stream_read_uint32(s, orderInfo->windowId); /* windowId (4 bytes) */
+       stream_read_uint32(s, orderInfo->notifyIconId); /* notifyIconId (4 bytes) */
 
        if (orderInfo->fieldFlags & WINDOW_ORDER_STATE_DELETED)
+       {
                update_read_notification_icon_deleted_order(s, orderInfo);
+               IFCALL(update->NotifyIconDeleted, update, orderInfo);
+       }
        else
-               update_read_notification_icon_state_order(s, orderInfo, &notify_icon_state_order);
+       {
+               update_read_notification_icon_state_order(s, orderInfo, &update->notify_icon_state);
+               IFCALL(update->NotifyIconState, update, orderInfo, &update->notify_icon_state);
+       }
 }
 
 void update_read_desktop_actively_monitored_order(STREAM* s, WINDOW_ORDER_INFO* orderInfo, MONITORED_DESKTOP_ORDER* monitored_desktop)
@@ -287,30 +304,32 @@ void update_read_desktop_non_monitored_order(STREAM* s, WINDOW_ORDER_INFO* order
        /* non-monitored desktop notification event */
 }
 
-void update_read_desktop_info_order(STREAM* s, WINDOW_ORDER_INFO* orderInfo)
+void update_recv_desktop_info_order(rdpUpdate* update, STREAM* s, WINDOW_ORDER_INFO* orderInfo)
 {
-       MONITORED_DESKTOP_ORDER monitored_desktop_order;
-
        if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_DESKTOP_NONE)
+       {
                update_read_desktop_non_monitored_order(s, orderInfo);
+               IFCALL(update->NonMonitoredDesktop, update, orderInfo);
+       }
        else
-               update_read_desktop_actively_monitored_order(s, orderInfo, &monitored_desktop_order);
+       {
+               update_read_desktop_actively_monitored_order(s, orderInfo, &update->monitored_desktop);
+               IFCALL(update->MonitoredDesktop, update, orderInfo, &update->monitored_desktop);
+       }
 }
 
 void update_recv_altsec_window_order(rdpUpdate* update, STREAM* s)
 {
        uint16 orderSize;
-       WINDOW_ORDER_INFO windowOrderInfo;
 
        stream_read_uint16(s, orderSize); /* orderSize (2 bytes) */
-       stream_read_uint32(s, windowOrderInfo.fieldFlags); /* FieldsPresentFlags (4 bytes) */
-       stream_read_uint32(s, windowOrderInfo.windowId); /* windowId (4 bytes) */
-
-       if (windowOrderInfo.fieldFlags & WINDOW_ORDER_TYPE_WINDOW)
-               update_read_window_info_order(s, &windowOrderInfo);
-       else if (windowOrderInfo.fieldFlags & WINDOW_ORDER_TYPE_NOTIFY)
-               update_read_notification_icon_info_order(s, &windowOrderInfo);
-       else if (windowOrderInfo.fieldFlags & WINDOW_ORDER_TYPE_DESKTOP)
-               update_read_desktop_info_order(s, &windowOrderInfo);
+       stream_read_uint32(s, update->orderInfo.fieldFlags); /* FieldsPresentFlags (4 bytes) */
+
+       if (update->orderInfo.fieldFlags & WINDOW_ORDER_TYPE_WINDOW)
+               update_recv_window_info_order(update, s, &update->orderInfo);
+       else if (update->orderInfo.fieldFlags & WINDOW_ORDER_TYPE_NOTIFY)
+               update_recv_notification_icon_info_order(update, s, &update->orderInfo);
+       else if (update->orderInfo.fieldFlags & WINDOW_ORDER_TYPE_DESKTOP)
+               update_recv_desktop_info_order(update, s, &update->orderInfo);
 }
 
index a6479e8..36f09ca 100644 (file)
 #define WINDOW_ORDER_FIELD_DESKTOP_ZORDER              0x00000010
 #define WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND          0x00000020
 
-struct _UNICODE_STRING
-{
-       uint16 cbString;
-       uint8* string;
-};
-typedef struct _UNICODE_STRING UNICODE_STRING;
-
-struct _RECTANGLE_16
-{
-       uint16 left;
-       uint16 top;
-       uint16 right;
-       uint16 bottom;
-};
-typedef struct _RECTANGLE_16 RECTANGLE_16;
-
-struct _ICON_INFO
-{
-       uint16 cacheEntry;
-       uint8 cacheId;
-       uint8 bpp;
-       uint16 width;
-       uint16 height;
-       uint16 cbColorTable;
-       uint16 cbBitsMask;
-       uint16 cbBitsColor;
-       uint8* bitsMask;
-       uint8* colorTable;
-       uint8* bitsColor;
-};
-typedef struct _ICON_INFO ICON_INFO;
-
-struct _CACHED_ICON_INFO
-{
-       uint16 cacheEntry;
-       uint8 cacheId;
-};
-typedef struct _CACHED_ICON_INFO CACHED_ICON_INFO;
-
-struct _NOTIFY_ICON_INFOTIP
-{
-       uint32 timeout;
-       uint32 flags;
-       UNICODE_STRING text;
-       UNICODE_STRING title;
-};
-typedef struct _NOTIFY_ICON_INFOTIP NOTIFY_ICON_INFOTIP;
-
-struct _WINDOW_ORDER_INFO
-{
-       uint32 windowId;
-       uint32 fieldFlags;
-       uint32 notifyIconId;
-};
-typedef struct _WINDOW_ORDER_INFO WINDOW_ORDER_INFO;
-
-struct _WINDOW_STATE_ORDER
-{
-       uint32 ownerWindowId;
-       uint32 style;
-       uint32 extendedStyle;
-       uint8 showState;
-       UNICODE_STRING titleInfo;
-       uint32 clientOffsetX;
-       uint32 clientOffsetY;
-       uint32 clientAreaWidth;
-       uint32 clientAreaHeight;
-       uint8 RPContent;
-       uint32 rootParentHandle;
-       uint32 windowOffsetX;
-       uint32 windowOffsetY;
-       uint32 windowClientDeltaX;
-       uint32 windowClientDeltaY;
-       uint32 windowWidth;
-       uint32 windowHeight;
-       uint16 numWindowRects;
-       RECTANGLE_16* windowRects;
-       uint32 visibleOffsetX;
-       uint32 visibleOffsetY;
-       uint16 numVisibilityRects;
-       RECTANGLE_16* visibilityRects;
-};
-typedef struct _WINDOW_STATE_ORDER WINDOW_STATE_ORDER;
-
-struct _WINDOW_ICON_ORDER
-{
-       ICON_INFO iconInfo;
-};
-typedef struct _WINDOW_ICON_ORDER WINDOW_ICON_ORDER;
-
-struct _WINDOW_CACHED_ICON_ORDER
-{
-       CACHED_ICON_INFO cachedIcon;
-};
-typedef struct _WINDOW_CACHED_ICON_ORDER WINDOW_CACHED_ICON_ORDER;
-
-struct _NOTIFY_ICON_STATE_ORDER
-{
-       uint32 version;
-       UNICODE_STRING toolTip;
-       NOTIFY_ICON_INFOTIP infoTip;
-       uint32 state;
-       ICON_INFO icon;
-       CACHED_ICON_INFO cachedIcon;
-};
-typedef struct _NOTIFY_ICON_STATE_ORDER NOTIFY_ICON_STATE_ORDER;
-
-struct _MONITORED_DESKTOP_ORDER
-{
-       uint32 activeWindowId;
-       uint8 numWindowIds;
-       uint32* windowIds;
-};
-typedef struct _MONITORED_DESKTOP_ORDER MONITORED_DESKTOP_ORDER;
-
 void update_recv_altsec_window_order(rdpUpdate* update, STREAM* s);
 
 #endif /* __WINDOW_H */