Initial commit - from Precise source
[freerdp-ubuntu-pcb-backport.git] / server / X11 / xf_event.h
1 /**
2  * FreeRDP: A Remote Desktop Protocol Client
3  * X11 Server Event Handling
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 __XF_EVENT_H
21 #define __XF_EVENT_H
22
23 typedef struct xf_event xfEvent;
24 typedef struct xf_event_queue xfEventQueue;
25 typedef struct xf_event_region xfEventRegion;
26
27 #include <pthread.h>
28 #include "xfreerdp.h"
29
30 #include "xf_peer.h"
31
32 enum xf_event_type
33 {
34         XF_EVENT_TYPE_REGION,
35         XF_EVENT_TYPE_FRAME_TICK
36 };
37
38 struct xf_event
39 {
40         int type;
41 };
42
43 struct xf_event_queue
44 {
45         int size;
46         int count;
47         int pipe_fd[2];
48         xfEvent** events;
49         pthread_mutex_t mutex;
50 };
51
52 struct xf_event_region
53 {
54         int type;
55
56         int x;
57         int y;
58         int width;
59         int height;
60 };
61
62 void xf_event_push(xfEventQueue* event_queue, xfEvent* event);
63 xfEvent* xf_event_peek(xfEventQueue* event_queue);
64 xfEvent* xf_event_pop(xfEventQueue* event_queue);
65
66 xfEventRegion* xf_event_region_new(int x, int y, int width, int height);
67 void xf_event_region_free(xfEventRegion* event_region);
68
69 xfEvent* xf_event_new(int type);
70 void xf_event_free(xfEvent* event);
71
72 xfEventQueue* xf_event_queue_new();
73 void xf_event_queue_free(xfEventQueue* event_queue);
74
75 #endif /* __XF_EVENT_H */