aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c')
-rw-r--r--libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c111
1 files changed, 111 insertions, 0 deletions
diff --git a/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c
new file mode 100644
index 0000000..837ff53
--- /dev/null
+++ b/libraries/ecore/src/lib/ecore_x/xlib/ecore_x_error.c
@@ -0,0 +1,111 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif /* ifdef HAVE_CONFIG_H */
4
5#include <stdlib.h>
6
7#include "Ecore.h"
8#include "ecore_private.h"
9#include "ecore_x_private.h"
10#include "Ecore_X.h"
11
12static int _ecore_x_error_handle(Display *d,
13 XErrorEvent *ev);
14static int _ecore_x_io_error_handle(Display *d);
15
16static void (*_error_func)(void *data) = NULL;
17static void *_error_data = NULL;
18static void (*_io_error_func)(void *data) = NULL;
19static void *_io_error_data = NULL;
20static int _error_request_code = 0;
21static int _error_code = 0;
22
23/**
24 * Set the error handler.
25 * @param func The error handler function
26 * @param data The data to be passed to the handler function
27 *
28 * Set the X error handler function
29 */
30EAPI void
31ecore_x_error_handler_set(void (*func)(void *data),
32 const void *data)
33{
34 _error_func = func;
35 _error_data = (void *)data;
36} /* ecore_x_error_handler_set */
37
38/**
39 * Set the I/O error handler.
40 * @param func The I/O error handler function
41 * @param data The data to be passed to the handler function
42 *
43 * Set the X I/O error handler function
44 */
45EAPI void
46ecore_x_io_error_handler_set(void (*func)(void *data),
47 const void *data)
48{
49 _io_error_func = func;
50 _io_error_data = (void *)data;
51} /* ecore_x_io_error_handler_set */
52
53/**
54 * Get the request code that caused the error.
55 * @return The request code causing the X error
56 *
57 * Return the X request code that caused the last X error
58 */
59EAPI int
60ecore_x_error_request_get(void)
61{
62 return _error_request_code;
63} /* ecore_x_error_request_get */
64
65/**
66 * Get the error code from the error.
67 * @return The error code from the X error
68 *
69 * Return the error code from the last X error
70 */
71EAPI int
72ecore_x_error_code_get(void)
73{
74 return _error_code;
75} /* ecore_x_error_code_get */
76
77void
78_ecore_x_error_handler_init(void)
79{
80 XSetErrorHandler((XErrorHandler)_ecore_x_error_handle);
81 XSetIOErrorHandler((XIOErrorHandler)_ecore_x_io_error_handle);
82} /* _ecore_x_error_handler_init */
83
84static int
85_ecore_x_error_handle(Display *d,
86 XErrorEvent *ev)
87{
88 if (d == _ecore_x_disp)
89 {
90 _error_request_code = ev->request_code;
91 _error_code = ev->error_code;
92 if (_error_func)
93 _error_func(_error_data);
94 }
95 return 0;
96} /* _ecore_x_error_handle */
97
98static int
99_ecore_x_io_error_handle(Display *d)
100{
101 if (d == _ecore_x_disp)
102 {
103 if (_io_error_func)
104 _io_error_func(_io_error_data);
105 else
106 exit(-1);
107 }
108
109 return 0;
110} /* _ecore_x_io_error_handle */
111