Fix changelog email address
[freerdp-ubuntu-pcb-backport.git] / libfreerdp-rail / rail.c
1 /**
2  * FreeRDP: A Remote Desktop Protocol Client
3  * Remote Applications Integrated Locally (RAIL)
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 #include <freerdp/utils/stream.h>
21 #include <freerdp/utils/memory.h>
22
23 #include "librail.h"
24
25 #include <freerdp/rail/rail.h>
26 #include <freerdp/rail/window_list.h>
27
28 static void rail_WindowCreate(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, WINDOW_STATE_ORDER* window_state)
29 {
30         rdpRail* rail = context->rail;
31         window_list_create(rail->list, orderInfo, window_state);
32 }
33
34 static void rail_WindowUpdate(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, WINDOW_STATE_ORDER* window_state)
35 {
36         rdpRail* rail = context->rail;
37         window_list_update(rail->list, orderInfo, window_state);
38 }
39
40 static void rail_WindowDelete(rdpContext* context, WINDOW_ORDER_INFO* orderInfo)
41 {
42         rdpRail* rail = context->rail;
43         window_list_delete(rail->list, orderInfo);
44 }
45
46 static void rail_WindowIcon(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, WINDOW_ICON_ORDER* window_icon)
47 {
48         rdpIcon* icon;
49         rdpWindow* window;
50         rdpRail* rail = context->rail;
51
52         if (window_icon->iconInfo->cacheEntry != 0xFFFF)
53         {
54                 /* cache icon */
55         }
56
57         window = window_list_get_by_id(rail->list, orderInfo->windowId);
58
59         icon = (rdpIcon*) xzalloc(sizeof(rdpIcon));
60         icon->entry = window_icon->iconInfo;
61         icon->big = (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_ICON_BIG) ? true : false;
62
63         DEBUG_RAIL("Window Icon: %dx%d@%dbpp cbBitsColor:%d cbBitsMask:%d cbColorTable:%d",
64                         window_icon->iconInfo->width, window_icon->iconInfo->height, window_icon->iconInfo->bpp,
65                         window_icon->iconInfo->cbBitsColor, window_icon->iconInfo->cbBitsMask, window_icon->iconInfo->cbColorTable);
66
67         if (icon->big)
68                 window->bigIcon = icon;
69         else
70                 window->smallIcon = icon;
71
72         IFCALL(rail->rail_SetWindowIcon, rail, window, icon);
73 }
74
75 static void rail_WindowCachedIcon(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, WINDOW_CACHED_ICON_ORDER* window_cached_icon)
76 {
77
78 }
79
80 static void rail_NotifyIconCreate(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state)
81 {
82
83 }
84
85 static void rail_NotifyIconUpdate(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, NOTIFY_ICON_STATE_ORDER* notify_icon_state)
86 {
87
88 }
89
90 static void rail_NotifyIconDelete(rdpContext* context, WINDOW_ORDER_INFO* orderInfo)
91 {
92
93 }
94
95 static void rail_MonitoredDesktop(rdpContext* context, WINDOW_ORDER_INFO* orderInfo, MONITORED_DESKTOP_ORDER* monitored_desktop)
96 {
97
98 }
99
100 static void rail_NonMonitoredDesktop(rdpContext* context, WINDOW_ORDER_INFO* orderInfo)
101 {
102
103 }
104
105 void rail_register_update_callbacks(rdpRail* rail, rdpUpdate* update)
106 {
107         rdpWindowUpdate* window = update->window;
108
109         window->WindowCreate = rail_WindowCreate;
110         window->WindowUpdate = rail_WindowUpdate;
111         window->WindowDelete = rail_WindowDelete;
112         window->WindowIcon = rail_WindowIcon;
113         window->WindowCachedIcon = rail_WindowCachedIcon;
114         window->NotifyIconCreate = rail_NotifyIconCreate;
115         window->NotifyIconUpdate = rail_NotifyIconUpdate;
116         window->NotifyIconDelete = rail_NotifyIconDelete;
117         window->MonitoredDesktop = rail_MonitoredDesktop;
118         window->NonMonitoredDesktop = rail_NonMonitoredDesktop;
119 }
120
121 rdpRail* rail_new(rdpSettings* settings)
122 {
123         rdpRail* rail;
124
125         rail = (rdpRail*) xzalloc(sizeof(rdpRail));
126
127         if (rail != NULL)
128         {
129                 rail->settings = settings;
130                 rail->cache = icon_cache_new(rail);
131                 rail->list = window_list_new(rail);
132                 rail->uniconv = freerdp_uniconv_new();
133                 rail->clrconv = (CLRCONV*) xzalloc(sizeof(CLRCONV));
134         }
135
136         return rail;
137 }
138
139 void rail_free(rdpRail* rail)
140 {
141         if (rail != NULL)
142         {
143                 icon_cache_free(rail->cache);
144                 window_list_free(rail->list);
145                 freerdp_uniconv_free(rail->uniconv);
146                 xfree(rail->clrconv);
147                 xfree(rail);
148         }
149 }