Mercurial > MadButterfly
annotate src/X_supp.c @ 1002:aa0583e0a96b refine_backend_if
Fix typo for the naem of struct _X_supp_IO_man
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Mon, 22 Nov 2010 00:42:30 +0800 |
parents | b462b9e213e8 |
children | 4b1bef7e5516 |
rev | line source |
---|---|
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
1 // -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 4; -*- |
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
2 // vim: sw=4:ts=8:sts=4 |
77 | 3 #include <stdio.h> |
78 | 4 #include <stdlib.h> |
5 #include <string.h> | |
77 | 6 #include <X11/Xlib.h> |
7 #include <X11/Xutil.h> | |
692
201cc86720a3
Fix compiling time warning about cairo xlib
Thinker K.F. Li <thinker@branda.to>
parents:
691
diff
changeset
|
8 #include <cairo-xlib.h> |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
9 #include "mb_graph_engine.h" |
186
530bb7728546
Move header files to $(top_srcdir)/include/ and prefixed with 'mb_'.
Thinker K.F. Li <thinker@branda.to>
parents:
185
diff
changeset
|
10 #include "mb_redraw_man.h" |
530bb7728546
Move header files to $(top_srcdir)/include/ and prefixed with 'mb_'.
Thinker K.F. Li <thinker@branda.to>
parents:
185
diff
changeset
|
11 #include "mb_timer.h" |
530bb7728546
Move header files to $(top_srcdir)/include/ and prefixed with 'mb_'.
Thinker K.F. Li <thinker@branda.to>
parents:
185
diff
changeset
|
12 #include "mb_X_supp.h" |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
13 #include "mb_backend.h" |
694
7e64e0f70cb6
Switch XSHM with autoconf
Thinker K.F. Li <thinker@branda.to>
parents:
693
diff
changeset
|
14 #include "config.h" |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
15 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
16 #ifdef XSHM |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
17 /* \sa http://www.xfree86.org/current/mit-shm.html */ |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
18 #include <sys/ipc.h> |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
19 #include <sys/shm.h> |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
20 #include <X11/extensions/XShm.h> |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
21 #endif |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
22 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
23 #define ERR -1 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
24 #define OK 0 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
25 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
26 #define ONLY_MOUSE_MOVE_RAW 1 |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
27 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
28 /*! \ingroup xkb |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
29 * @{ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
30 */ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
31 struct _X_kb_info { |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
32 int keycode_min, keycode_max; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
33 int ksym_per_code; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
34 KeySym *syms; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
35 subject_t *kbevents; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
36 ob_factory_t *ob_factory; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
37 }; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
38 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
39 /* @} */ |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
40 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
41 struct _X_MB_runtime { |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
42 Display *display; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
43 Window win; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
44 Visual *visual; |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
45 mbe_surface_t *surface, *backend_surface; |
471
e98ae1407ca2
Remove mbe_set_source_surface() from graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
462
diff
changeset
|
46 mbe_pattern_t *surface_ptn; |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
47 mbe_t *cr, *backend_cr; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
48 redraw_man_t *rdman; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
49 mb_tman_t *tman; |
259
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
50 mb_img_ldr_t *img_ldr; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
51 int w, h; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
52 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
53 X_kb_info_t kbinfo; |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
54 mb_IO_man_t *io_man; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
55 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
56 #ifndef ONLY_MOUSE_MOVE_RAW |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
57 /* States */ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
58 shape_t *last; |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
59 #endif |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
60 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
61 #ifdef XSHM |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
62 XImage *ximage; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
63 XShmSegmentInfo shminfo; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
64 #endif |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
65 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
66 /* |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
67 * Following variables are used by handle_single_x_event() |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
68 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
69 int last_evt_type; /* Type of last event */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
70 int eflag; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
71 int ex1, ey1, ex2, ey2; /* Aggregate expose events */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
72 int mflag; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
73 int mx, my; /* Position of last motion event */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
74 int mbut_state; /* Button state of last motion event */ |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
75 }; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
76 |
987
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
77 /*! \defgroup x_mb_timer Timer manager for X. |
991
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
78 * |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
79 * This implmentation of timer manager is based on mb_tman_t. |
987
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
80 * @{ |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
81 */ |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
82 struct _X_supp_timer_man { |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
83 mb_timer_man_t timer_man; |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
84 mb_tman_t *tman; |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
85 }; |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
86 |
997
cfed7fb28d24
Declare function as static functions
Thinker K.F. Li <thinker@codemud.net>
parents:
991
diff
changeset
|
87 static int _x_supp_timer_man_timeout(struct _mb_timer_man *tm_man, |
cfed7fb28d24
Declare function as static functions
Thinker K.F. Li <thinker@codemud.net>
parents:
991
diff
changeset
|
88 mb_timeval_t *tmout, |
cfed7fb28d24
Declare function as static functions
Thinker K.F. Li <thinker@codemud.net>
parents:
991
diff
changeset
|
89 mb_timer_cb_t cb, void *data); |
cfed7fb28d24
Declare function as static functions
Thinker K.F. Li <thinker@codemud.net>
parents:
991
diff
changeset
|
90 static void _x_supp_timer_man_remove(struct _mb_timer_man *tm_man, int tm_hdl); |
cfed7fb28d24
Declare function as static functions
Thinker K.F. Li <thinker@codemud.net>
parents:
991
diff
changeset
|
91 static mb_timer_man_t *_x_supp_timer_fact_new(void); |
cfed7fb28d24
Declare function as static functions
Thinker K.F. Li <thinker@codemud.net>
parents:
991
diff
changeset
|
92 static void _x_supp_timer_fact_free(mb_timer_man_t *timer_man); |
989
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
93 |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
94 static struct _X_supp_timer_man _x_supp_default_timer_man = { |
987
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
95 {_x_supp_timer_man_timeout, _x_supp_timer_man_remove}, |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
96 NULL |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
97 }; |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
98 |
989
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
99 static mb_timer_factory_t _x_supp_default_timer_factory = { |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
100 _x_supp_timer_fact_new, |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
101 _x_supp_timer_fact_free |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
102 }; |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
103 |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
104 static mb_timer_factory_t *_timer_factory = &_x_supp_default_timer_factory; |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
105 |
991
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
106 /*! \brief Content of a timeout request. |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
107 * |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
108 * This is only used by internal of X support. This data structure |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
109 * carry information to adopt mb_tman_t to mb_timer_man_t. |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
110 */ |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
111 struct _X_supp_timeout_data { |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
112 mb_timer_t *timer; /*!< Handle returned by mb_tman_timeout() */ |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
113 mb_timer_cb_t cb; /*!< Real callback function */ |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
114 void *data; /*!< data for real callback */ |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
115 }; |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
116 |
998
dfba5688e19a
Fix typo on return type of _x_supp_tmo_hdlr()
Thinker K.F. Li <thinker@codemud.net>
parents:
997
diff
changeset
|
117 static void |
991
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
118 _x_supp_tmo_hdlr(const mb_timeval_t *tmo, |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
119 const mb_timeval_t *now, |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
120 void *arg) { |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
121 struct _X_supp_timeout_data *data = (struct _X_supp_timeout_data *)arg; |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
122 |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
123 data->cb((int)data, tmo, now, data->data); |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
124 } |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
125 |
989
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
126 static int |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
127 _x_supp_timer_man_timeout(struct _mb_timer_man *tm_man, |
991
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
128 mb_timeval_t *tmout, /* timeout (wall time) */ |
989
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
129 mb_timer_cb_t cb, void *data) { |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
130 struct _X_supp_timer_man *timer_man = (struct _X_supp_timer_man *)tm_man; |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
131 mb_timer_t *timer; |
991
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
132 struct _X_supp_timeout_data *tmout_data; |
989
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
133 |
991
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
134 tmout_data = O_ALLOC(struct _X_supp_timeout_data); |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
135 tmout_data->cb = cb; |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
136 tmout_data->data = data; |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
137 timer = mb_tman_timeout(timer_man->tman, tmout, |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
138 _x_supp_tmo_hdlr, tmout_data); |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
139 if(timer == NULL) |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
140 return ERR; |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
141 tmout_data->timer = timer; |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
142 |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
143 return (int)tmout_data; |
987
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
144 } |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
145 |
989
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
146 static void |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
147 _x_supp_timer_man_remove(struct _mb_timer_man *tm_man, int tm_hdl) { |
991
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
148 struct _X_supp_timer_man *timer_man = (struct _X_supp_timer_man *)tm_man; |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
149 struct _X_supp_timeout_data *tmout_data = |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
150 (struct _X_supp_timeout_data *)tm_hdl; |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
151 |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
152 mb_tman_remove(timer_man->tman, tmout_data->timer); |
1882700bb4b9
Adapt mb_tman_t to mb_timer_man_t
Thinker K.F. Li <thinker@codemud.net>
parents:
990
diff
changeset
|
153 free(tmout_data); |
989
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
154 } |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
155 |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
156 static mb_timer_man_t * |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
157 _x_supp_timer_fact_new(void) { |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
158 if(_x_supp_default_timer_man.tman == NULL) |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
159 _x_supp_default_timer_man.tman = mb_tman_new(); |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
160 return (mb_timer_man_t *)&_x_supp_default_timer_man; |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
161 } |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
162 |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
163 static void |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
164 _x_supp_timer_fact_free(mb_timer_man_t *timer_man) { |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
165 } |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
166 |
7a727ba3f441
Implement functions of timer manager for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
988
diff
changeset
|
167 |
987
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
168 /* @} */ |
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
169 |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
170 /*! \defgroup x_mb_io IO manager for X. |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
171 * @{ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
172 */ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
173 #define MAX_MONITORS 200 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
174 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
175 typedef struct { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
176 int type; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
177 int fd; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
178 mb_IO_cb_t cb; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
179 void *data; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
180 } monitor_t; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
181 |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
182 struct _X_supp_IO_man { |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
183 mb_IO_man_t io_man; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
184 monitor_t monitors[MAX_MONITORS]; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
185 int n_monitor; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
186 }; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
187 |
1000
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
188 static int _x_supp_io_man_reg(struct _mb_IO_man *io_man, |
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
189 int fd, MB_IO_TYPE type, |
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
190 mb_IO_cb_t cb, void *data); |
1001
b462b9e213e8
Fix typo for the name of _mb_IO_man
Thinker K.F. Li <thinker@codemud.net>
parents:
1000
diff
changeset
|
191 static void _x_supp_io_man_unreg(struct _mb_IO_man *io_man, int io_hdl); |
1000
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
192 static mb_IO_man_t *_x_supp_io_man_new(void); |
c92aabb054e2
Declare functions correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
999
diff
changeset
|
193 static void _x_supp_io_man_free(mb_IO_man_t *io_man); |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
194 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
195 static mb_IO_factory_t _X_supp_default_io_factory = { |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
196 _x_supp_io_man_new, |
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
197 _x_supp_io_man_free |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
198 }; |
999
d975a59d4504
Fix typo on variable reference
Thinker K.F. Li <thinker@codemud.net>
parents:
998
diff
changeset
|
199 static mb_IO_factory_t *_io_factory = &_X_supp_default_io_factory; |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
200 |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
201 static struct _X_supp_IO_man _default_io_man = { |
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
202 {_x_supp_io_man_reg, _x_supp_io_man_unreg}, |
987
bf0da8c7d03f
Add default timer factory for X support
Thinker K.F. Li <thinker@codemud.net>
parents:
986
diff
changeset
|
203 {}, /* monitors */ |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
204 0 /* n_monitor */ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
205 }; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
206 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
207 static mb_IO_man_t * |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
208 _x_supp_io_man_new(void) { |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
209 return (mb_IO_man_t *)&_default_io_man; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
210 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
211 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
212 static void |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
213 _x_supp_io_man_free(mb_IO_man_t *io_man) { |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
214 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
215 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
216 static int |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
217 _x_supp_io_man_reg(struct _mb_IO_man *io_man, |
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
218 int fd, MB_IO_TYPE type, mb_IO_cb_t cb, void *data) { |
1002
aa0583e0a96b
Fix typo for the naem of struct _X_supp_IO_man
Thinker K.F. Li <thinker@codemud.net>
parents:
1001
diff
changeset
|
219 struct _X_supp_IO_man *xmb_io_man = (struct _X_supp_IO_man *)io_man; |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
220 int i; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
221 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
222 for(i = 0; i < xmb_io_man->n_monitor; i++) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
223 if (xmb_io_man->monitors[i].type == MB_IO_DUMMY) |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
224 break; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
225 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
226 if (i == MAX_MONITORS) |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
227 return ERR; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
228 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
229 xmb_io_man->monitors[i].type = type; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
230 xmb_io_man->monitors[i].fd = fd; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
231 xmb_io_man->monitors[i].cb = cb; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
232 xmb_io_man->monitors[i].data = data; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
233 i++; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
234 if(i > xmb_io_man->n_monitor) |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
235 xmb_io_man->n_monitor = i; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
236 return i - 1; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
237 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
238 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
239 static void |
988
bc8cfcd40d0e
Rename _x_mb_io_man* to _x_supp_io_man*
Thinker K.F. Li <thinker@codemud.net>
parents:
987
diff
changeset
|
240 _x_supp_io_man_unreg(struct _mb_IO_man *io_man, int io_hdl) { |
1002
aa0583e0a96b
Fix typo for the naem of struct _X_supp_IO_man
Thinker K.F. Li <thinker@codemud.net>
parents:
1001
diff
changeset
|
241 struct _X_supp_IO_man *xmb_io_man = (struct _X_supp_IO_man *)io_man; |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
242 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
243 ASSERT(io_hdl < xmb_io_man->n_monitor); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
244 xmb_io_man->monitors[io_hdl].type = MB_IO_DUMMY; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
245 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
246 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
247 /*! \brief Handle connection coming data and timeout of timers. |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
248 * |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
249 * \param display is a Display returned by XOpenDisplay(). |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
250 * \param rdman is a redraw manager. |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
251 * \param tman is a timer manager. |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
252 * |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
253 * The display is managed by specified rdman and tman. rdman draws |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
254 * on the display, and tman trigger actions according timers. |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
255 */ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
256 static void |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
257 _x_mb_handle_connection(struct _mb_IO_man *io_man) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
258 X_MB_runtime_t *rt = (X_MB_runtime_t *) be; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
259 mb_tman_t *tman = rt->tman; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
260 int fd; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
261 mb_timeval_t now, tmo; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
262 struct timeval tv; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
263 fd_set rfds, wfds; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
264 int nfds = 0; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
265 int r, r1,i; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
266 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
267 handle_x_event(rt); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
268 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
269 while(1) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
270 FD_ZERO(&rfds); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
271 FD_ZERO(&wfds); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
272 for(i = 0; i < io_man->n_monitor; i++) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
273 if(io_man->monitors[i].type == MB_IO_R || |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
274 io_man->monitors[i].type == MB_IO_RW) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
275 FD_SET(io_man->monitors[i].fd, &rfds); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
276 if(nfds <= io_man->monitors[i].fd) |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
277 nfds = io_man->monitors[i].fd + 1; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
278 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
279 if(io_man->monitors[i].type == MB_IO_W || |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
280 io_man->monitors[i].type == MB_IO_RW) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
281 FD_SET(io_man->monitors[i].fd, &wfds); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
282 if(nfds <= io_man->monitors[i].fd) |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
283 nfds = io_man->monitors[i].fd + 1; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
284 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
285 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
286 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
287 get_now(&now); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
288 r = mb_tman_next_timeout(tman, &now, &tmo); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
289 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
290 if(r == 0) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
291 tv.tv_sec = MB_TIMEVAL_SEC(&tmo); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
292 tv.tv_usec = MB_TIMEVAL_USEC(&tmo); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
293 r1 = select(nfds, &rfds, NULL, NULL, &tv); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
294 } else |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
295 r1 = select(nfds, &rfds, NULL, NULL, NULL); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
296 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
297 if(r1 == -1) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
298 perror("select"); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
299 break; |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
300 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
301 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
302 if(r1 == 0) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
303 get_now(&now); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
304 mb_tman_handle_timeout(tman, &now); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
305 } else { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
306 for(i = 0; i < io_man->n_monitor; i++) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
307 if(io_man->monitors[i].type == MB_IO_R || |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
308 io_man->monitors[i].type == MB_IO_RW) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
309 if(FD_ISSET(io_man->monitors[i].fd, &rfds)) |
990
8dd42310dd79
Change signature of callback for IO and timer manager
Thinker K.F. Li <thinker@codemud.net>
parents:
989
diff
changeset
|
310 ioman->monitors[i].cb(i, io_man->monitors[i].fd, |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
311 MB_IO_R, |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
312 rt->monitors[i].data); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
313 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
314 if(io_man->monitors[i].type == MB_IO_W || |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
315 io_man->monitors[i].type == MB_IO_RW) { |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
316 if(FD_ISSET(io_man->monitors[i].fd, &wfds)) |
990
8dd42310dd79
Change signature of callback for IO and timer manager
Thinker K.F. Li <thinker@codemud.net>
parents:
989
diff
changeset
|
317 io_man->monitors[i].cb(i, io_man->monitors[i].fd, |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
318 MB_IO_W, |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
319 io_man->monitors[i].data); |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
320 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
321 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
322 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
323 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
324 } |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
325 |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
326 /* @} */ |
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
327 |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
328 #ifdef XSHM |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
329 static void |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
330 XSHM_update(X_MB_runtime_t *xmb_rt) { |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
331 GC gc; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
332 |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
333 gc = DefaultGC(xmb_rt->display, DefaultScreen(xmb_rt->display)); |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
334 if(xmb_rt->ximage) { /* support XSHM */ |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
335 XShmPutImage(xmb_rt->display, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
336 xmb_rt->win, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
337 gc, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
338 xmb_rt->ximage, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
339 0, 0, 0, 0, |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
340 xmb_rt->w, xmb_rt->h, 0); |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
341 } |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
342 } |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
343 #endif |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
344 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
345 /*! \defgroup xkb X Keyboard Handling |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
346 * |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
347 * Accept keyboard events from X server and delivery it to |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
348 * application through observer pattern. There is a subject, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
349 * per X-connection, for that. |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
350 * @{ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
351 */ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
352 static int keycode2sym(X_kb_info_t *kbinfo, unsigned int keycode) { |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
353 int sym_idx; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
354 int sym; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
355 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
356 sym_idx = kbinfo->ksym_per_code * (keycode - kbinfo->keycode_min); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
357 sym = kbinfo->syms[sym_idx]; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
358 return sym; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
359 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
360 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
361 static int X_kb_init(X_kb_info_t *kbinfo, Display *display, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
362 redraw_man_t *rdman) { |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
363 int n_syms; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
364 ob_factory_t *factory; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
365 int r; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
366 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
367 r = XDisplayKeycodes(display, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
368 &kbinfo->keycode_min, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
369 &kbinfo->keycode_max); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
370 if(r == 0) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
371 return ERR; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
372 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
373 n_syms = kbinfo->keycode_max - kbinfo->keycode_min + 1; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
374 kbinfo->syms = XGetKeyboardMapping(display, kbinfo->keycode_min, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
375 n_syms, |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
376 &kbinfo->ksym_per_code); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
377 if(kbinfo->syms == NULL) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
378 return ERR; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
379 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
380 factory = rdman_get_ob_factory(rdman); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
381 kbinfo->kbevents = subject_new(factory, kbinfo, OBJT_KB); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
382 if(kbinfo->kbevents == NULL) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
383 return ERR; |
192
54fdc2a65242
Remove factory from observer APIs.
Thinker K.F. Li <thinker@branda.to>
parents:
186
diff
changeset
|
384 /*! \todo Make sure ob_factory is still need. */ |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
385 kbinfo->ob_factory = factory; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
386 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
387 return OK; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
388 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
389 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
390 static void X_kb_destroy(X_kb_info_t *kbinfo) { |
192
54fdc2a65242
Remove factory from observer APIs.
Thinker K.F. Li <thinker@branda.to>
parents:
186
diff
changeset
|
391 subject_free(kbinfo->kbevents); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
392 XFree(kbinfo->syms); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
393 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
394 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
395 /*! \brief Accept X keyboard events from handle_x_event() and dispatch it. |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
396 */ |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
397 static void X_kb_handle_event(X_kb_info_t *kbinfo, XKeyEvent *xkey) { |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
398 unsigned int code; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
399 int sym; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
400 X_kb_event_t event; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
401 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
402 code = xkey->keycode; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
403 sym = keycode2sym(kbinfo, code); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
404 if(xkey->type == KeyPress) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
405 event.event.type = EVT_KB_PRESS; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
406 else if(xkey->type == KeyRelease) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
407 event.event.type = EVT_KB_RELEASE; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
408 event.event.tgt = event.event.cur_tgt = kbinfo->kbevents; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
409 event.keycode = code; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
410 event.sym = sym; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
411 |
192
54fdc2a65242
Remove factory from observer APIs.
Thinker K.F. Li <thinker@branda.to>
parents:
186
diff
changeset
|
412 subject_notify(kbinfo->kbevents, &event.event); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
413 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
414 /* @} */ |
77 | 415 |
78 | 416 static unsigned int get_button_state(unsigned int state) { |
417 unsigned int but = 0; | |
418 | |
419 if(state & Button1Mask) | |
420 but |= MOUSE_BUT1; | |
421 if(state & Button2Mask) | |
422 but |= MOUSE_BUT2; | |
423 if(state & Button3Mask) | |
424 but |= MOUSE_BUT3; | |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
425 |
78 | 426 return but; |
427 } | |
428 | |
429 static unsigned int get_button(unsigned int button) { | |
430 switch(button) { | |
431 case Button1: | |
432 return MOUSE_BUT1; | |
433 case Button2: | |
434 return MOUSE_BUT2; | |
435 case Button3: | |
436 return MOUSE_BUT3; | |
437 } | |
438 return 0; | |
439 } | |
440 | |
441 /*! \brief Notify observers of the shape at specified | |
442 * position for mouse event. | |
443 * | |
444 * Observers of parent shapes may be called if the subject is not | |
445 * with SUBF_STOP_PROPAGATE flag. The subject of mouse event | |
446 * for a shape is returned by sh_get_mouse_event_subject(). | |
447 */ | |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
448 static void notify_coord_or_shape(redraw_man_t *rdman, |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
449 mb_obj_t *obj, |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
450 co_aix x, co_aix y, int etype, |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
451 unsigned int state, |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
452 unsigned int button) { |
78 | 453 mouse_event_t mouse_event; |
454 subject_t *subject; | |
455 | |
456 mouse_event.event.type = etype; | |
457 mouse_event.x = x; | |
458 mouse_event.y = y; | |
459 mouse_event.but_state = state; | |
460 mouse_event.button = button; | |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
461 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
462 if(IS_MBO_SHAPES(obj)) |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
463 subject = sh_get_mouse_event_subject((shape_t *)obj); |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
464 else |
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
465 subject = coord_get_mouse_event((coord_t *)obj); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
466 |
192
54fdc2a65242
Remove factory from observer APIs.
Thinker K.F. Li <thinker@branda.to>
parents:
186
diff
changeset
|
467 subject_notify(subject, (event_t *)&mouse_event); |
78 | 468 } |
469 | |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
470 /*! \brief Handle motion event. |
77 | 471 */ |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
472 static void |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
473 handle_motion_event(X_MB_runtime_t *rt) { |
83 | 474 redraw_man_t *rdman = rt->rdman; |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
475 int x, y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
476 int state; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
477 shape_t *shape; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
478 coord_t *root; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
479 int in_stroke; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
480 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
481 x = rt->mx; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
482 y = rt->my; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
483 state = rt->mbut_state; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
484 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
485 shape = find_shape_at_pos(rdman, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
486 &in_stroke); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
487 #ifdef ONLY_MOUSE_MOVE_RAW |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
488 if(shape != NULL) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
489 notify_coord_or_shape(rdman, (mb_obj_t *)shape, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
490 x, y, EVT_MOUSE_MOVE_RAW, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
491 } else { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
492 root = rdman_get_root(rdman); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
493 notify_coord_or_shape(rdman, (mb_obj_t *)root, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
494 x, y, EVT_MOUSE_MOVE_RAW, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
495 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
496 #else |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
497 if(shape != NULL) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
498 if(rt->last != shape) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
499 if(rt->last) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
500 notify_coord_or_shape(rdman, rt->last, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
501 EVT_MOUSE_OUT, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
502 notify_coord_or_shape(rdman, shape, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
503 EVT_MOUSE_OVER, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
504 rt->last = shape; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
505 } else |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
506 notify_coord_or_shape(rdman, shape, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
507 EVT_MOUSE_MOVE, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
508 } else { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
509 if(rt->last) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
510 notify_coord_or_shape(rdman, rt->last, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
511 EVT_MOUSE_OUT, state, 0); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
512 rt->last = NULL; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
513 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
514 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
515 #endif |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
516 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
517 rt->mflag = 0; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
518 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
519 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
520 /*! \brief Redraw exposed area. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
521 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
522 static void |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
523 handle_expose_event(X_MB_runtime_t *rt) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
524 redraw_man_t *rdman = rt->rdman; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
525 int ex1, ey1, ex2, ey2; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
526 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
527 ex1 = rt->ex1; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
528 ey1 = rt->ey1; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
529 ex2 = rt->ex2; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
530 ey2 = rt->ey2; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
531 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
532 rdman_redraw_area(rdman, ex1, ey1, (ex2 - ex1), (ey2 - ey1)); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
533 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
534 rt->eflag = 0; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
535 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
536 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
537 /*! \brief Handle single X event and maintain internal states. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
538 * |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
539 * It keeps internal state in rt to improve performance. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
540 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
541 static void |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
542 handle_single_x_event(X_MB_runtime_t *rt, XEvent *evt) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
543 redraw_man_t *rdman = rt->rdman; |
77 | 544 XMotionEvent *mevt; |
78 | 545 XButtonEvent *bevt; |
81 | 546 XExposeEvent *eevt; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
547 XKeyEvent *xkey; |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
548 int x, y, w, h; |
81 | 549 |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
550 shape_t *shape; |
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
551 |
78 | 552 unsigned int state, button; |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
553 int in_stroke; |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
554 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
555 if(evt->type != MotionNotify && rt->mflag) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
556 handle_motion_event(rt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
557 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
558 switch(evt->type) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
559 case ButtonPress: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
560 bevt = (XButtonEvent *)evt; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
561 x = bevt->x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
562 y = bevt->y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
563 state = get_button_state(bevt->state); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
564 button = get_button(bevt->button); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
565 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
566 shape = find_shape_at_pos(rdman, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
567 &in_stroke); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
568 if(shape) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
569 notify_coord_or_shape(rdman, (mb_obj_t *)shape, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
570 x, y, EVT_MOUSE_BUT_PRESS, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
571 state, button); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
572 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
573 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
574 case ButtonRelease: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
575 bevt = (XButtonEvent *)evt; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
576 x = bevt->x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
577 y = bevt->y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
578 state = get_button_state(bevt->state); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
579 button = get_button(bevt->button); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
580 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
581 shape = find_shape_at_pos(rdman, x, y, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
582 &in_stroke); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
583 if(shape) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
584 notify_coord_or_shape(rdman, (mb_obj_t *)shape, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
585 x, y, EVT_MOUSE_BUT_RELEASE, |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
586 state, button); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
587 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
588 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
589 case MotionNotify: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
590 mevt = (XMotionEvent *)evt; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
591 rt->mx = mevt->x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
592 rt->my = mevt->y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
593 rt->mbut_state = get_button_state(mevt->state); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
594 rt->mflag = 1; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
595 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
596 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
597 case KeyPress: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
598 case KeyRelease: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
599 xkey = &evt->xkey; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
600 X_kb_handle_event(&rt->kbinfo, xkey); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
601 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
602 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
603 case Expose: |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
604 eevt = &evt->xexpose; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
605 x = eevt->x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
606 y = eevt->y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
607 w = eevt->width; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
608 h = eevt->height; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
609 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
610 if(rt->eflag) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
611 if(x < rt->ex1) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
612 rt->ex1 = x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
613 if(y < rt->ey1) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
614 rt->ey1 = y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
615 if((x + w) > rt->ex2) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
616 rt->ex2 = x + w; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
617 if((y + h) > rt->ey2) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
618 rt->ey2 = y + h; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
619 } else { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
620 rt->ex1 = x; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
621 rt->ey1 = y; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
622 rt->ex2 = x + w; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
623 rt->ey2 = y + h; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
624 rt->eflag = 1; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
625 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
626 break; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
627 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
628 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
629 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
630 /*! \brief Call when no more event in an event iteration. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
631 * |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
632 * No more event means event queue is emplty. This function will |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
633 * perform some actions according current internal state. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
634 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
635 static void |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
636 no_more_event(X_MB_runtime_t *rt) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
637 if(rt->mflag) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
638 handle_motion_event(rt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
639 if(rt->eflag) |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
640 handle_expose_event(rt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
641 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
642 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
643 /*! \brief Dispatch all X events in the queue. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
644 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
645 static void handle_x_event(X_MB_runtime_t *rt) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
646 Display *display = rt->display; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
647 XEvent evt; |
77 | 648 int r; |
649 | |
529 | 650 /* XXX: For some unknown reason, it causes a segmentation fault to |
651 * called XEventsQueued() after receiving first Expose event | |
652 * and before redraw for the event. | |
653 */ | |
77 | 654 while(XEventsQueued(display, QueuedAfterReading) > 0) { |
655 r = XNextEvent(display, &evt); | |
656 if(r == -1) | |
657 break; | |
658 | |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
659 handle_single_x_event(rt, &evt); |
77 | 660 } |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
661 no_more_event(rt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
662 |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
663 #ifdef XSHM |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
664 XSHM_update(rt); |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
665 #endif |
77 | 666 XFlush(display); |
667 } | |
668 | |
669 /*! \brief Handle connection coming data and timeout of timers. | |
78 | 670 * |
671 * \param display is a Display returned by XOpenDisplay(). | |
672 * \param rdman is a redraw manager. | |
673 * \param tman is a timer manager. | |
674 * | |
675 * The display is managed by specified rdman and tman. rdman draws | |
676 * on the display, and tman trigger actions according timers. | |
77 | 677 */ |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
678 void X_MB_handle_connection(void *be) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
679 X_MB_runtime_t *rt = (X_MB_runtime_t *) be; |
83 | 680 Display *display = rt->display; |
681 redraw_man_t *rdman = rt->rdman; | |
682 mb_tman_t *tman = rt->tman; | |
77 | 683 int fd; |
684 mb_timeval_t now, tmo; | |
685 struct timeval tv; | |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
686 fd_set rfds,wfds; |
77 | 687 int nfds; |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
688 int r, r1,i; |
77 | 689 |
142
3efe77007127
Do not redraw all at begining, waiting for explosure.
Thinker K.F. Li <thinker@branda.to>
parents:
131
diff
changeset
|
690 handle_x_event(rt); |
78 | 691 |
77 | 692 fd = XConnectionNumber(display); |
693 nfds = fd + 1; | |
694 while(1) { | |
695 FD_ZERO(&rfds); | |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
696 FD_ZERO(&wfds); |
77 | 697 FD_SET(fd, &rfds); |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
698 for(i=0;i<rt->n_monitor;i++) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
699 if (rt->monitors[i].type == MONITOR_READ) |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
700 FD_SET(rt->monitors[i].fd, &rfds); |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
701 else if (rt->monitors[i].type == MONITOR_WRITE) |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
702 FD_SET(rt->monitors[i].fd, &wfds); |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
703 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
704 |
77 | 705 get_now(&now); |
706 r = mb_tman_next_timeout(tman, &now, &tmo); | |
707 | |
708 if(r == 0) { | |
709 tv.tv_sec = MB_TIMEVAL_SEC(&tmo); | |
710 tv.tv_usec = MB_TIMEVAL_USEC(&tmo); | |
120 | 711 r1 = select(nfds, &rfds, NULL, NULL, &tv); |
77 | 712 } else |
120 | 713 r1 = select(nfds, &rfds, NULL, NULL, NULL); |
77 | 714 |
120 | 715 if(r1 == -1) { |
77 | 716 perror("select"); |
717 break; | |
718 } | |
719 | |
120 | 720 if(r1 == 0) { |
77 | 721 get_now(&now); |
722 mb_tman_handle_timeout(tman, &now); | |
723 rdman_redraw_changed(rdman); | |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
724 #ifdef XSHM |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
725 XSHM_update(rt); |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
726 #endif |
77 | 727 XFlush(display); |
728 } else if(FD_ISSET(fd, &rfds)){ | |
83 | 729 handle_x_event(rt); |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
730 } else { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
731 for(i=0;i<rt->n_monitor;i++) { |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
732 if (rt->monitors[i].type == MONITOR_READ) { |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
733 if (FD_ISSET(rt->monitors[i].fd, &rfds)) |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
734 rt->monitors[i].f(rt->monitors[i].fd,rt->monitors[i].arg); |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
735 } else if (rt->monitors[i].type == MONITOR_WRITE) { |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
736 if (FD_ISSET(rt->monitors[i].fd, &wfds)) |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
737 rt->monitors[i].f(rt->monitors[i].fd,rt->monitors[i].arg); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
738 } |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
739 } |
77 | 740 } |
741 } | |
742 } | |
78 | 743 |
744 static int X_init_connection(const char *display_name, | |
745 int w, int h, | |
746 Display **displayp, | |
747 Visual **visualp, | |
748 Window *winp) { | |
749 Display *display; | |
750 Window root, win; | |
751 Visual *visual; | |
752 int screen; | |
753 XSetWindowAttributes wattr; | |
754 int depth; | |
755 int x, y; | |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
756 int draw_root = 0; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
757 const char *disp_name; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
758 char disp_buf[32]; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
759 int cp; |
78 | 760 int r; |
761 | |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
762 /* |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
763 * Support drawing on the root window. |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
764 */ |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
765 disp_name = display_name; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
766 if(strstr(display_name, ":root") != NULL) { |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
767 draw_root = 1; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
768 cp = strlen(display_name) - 5; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
769 if(cp >= 32) |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
770 cp = 31; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
771 memcpy(disp_buf, display_name, cp); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
772 disp_buf[cp] = 0; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
773 disp_name = disp_buf; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
774 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
775 |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
776 display = XOpenDisplay(disp_name); |
78 | 777 if(display == NULL) |
778 return ERR; | |
779 | |
780 screen = DefaultScreen(display); | |
781 root = DefaultRootWindow(display); | |
782 visual = DefaultVisual(display, screen); | |
783 depth = DefaultDepth(display, screen); | |
784 wattr.override_redirect = False; | |
785 x = 10; | |
786 y = 10; | |
756
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
787 if(draw_root) |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
788 win = RootWindowOfScreen(ScreenOfDisplay(display, screen)); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
789 else { |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
790 win = XCreateWindow(display, root, |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
791 x, y, |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
792 w, h, |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
793 1, depth, InputOutput, visual, |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
794 CWOverrideRedirect, &wattr); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
795 r = XMapWindow(display, win); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
796 if(r == -1) { |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
797 XCloseDisplay(display); |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
798 return ERR; |
cceac4ba259e
Support drawing at root window for X Window
Thinker K.F. Li <thinker@codemud.net>
parents:
755
diff
changeset
|
799 } |
78 | 800 } |
801 | |
84
42698de1f653
Support translate() function for transform attribute of 'g' tag.
Thinker K.F. Li <thinker@branda.to>
parents:
83
diff
changeset
|
802 XSelectInput(display, win, PointerMotionMask | ExposureMask | |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
803 ButtonPressMask | ButtonReleaseMask | |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
804 KeyPressMask | KeyReleaseMask); |
78 | 805 XFlush(display); |
806 | |
807 *displayp = display; | |
808 *visualp = visual; | |
809 *winp = win; | |
810 | |
811 return OK; | |
812 } | |
813 | |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
814 #ifdef XSHM |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
815 static void |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
816 xshm_destroy(X_MB_runtime_t *xmb_rt) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
817 XShmSegmentInfo *shminfo; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
818 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
819 shminfo = &xmb_rt->shminfo; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
820 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
821 if(xmb_rt->shminfo.shmaddr) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
822 XShmDetach(xmb_rt->display, shminfo); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
823 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
824 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
825 if(xmb_rt->ximage) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
826 XDestroyImage(xmb_rt->ximage); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
827 xmb_rt->ximage = NULL; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
828 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
829 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
830 if(shminfo->shmaddr) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
831 shmdt(shminfo->shmaddr); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
832 shminfo->shmaddr = NULL; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
833 } |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
834 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
835 if(shminfo->shmid) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
836 shmctl(shminfo->shmid, IPC_RMID, 0); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
837 shminfo->shmid = 0; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
838 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
839 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
840 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
841 static void |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
842 xshm_init(X_MB_runtime_t *xmb_rt) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
843 Display *display; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
844 Visual *visual; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
845 XImage *ximage; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
846 int screen; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
847 int depth; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
848 int support_shm; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
849 int mem_sz; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
850 XShmSegmentInfo *shminfo; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
851 int surf_fmt; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
852 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
853 display = xmb_rt->display; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
854 visual = xmb_rt->visual; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
855 shminfo = &xmb_rt->shminfo; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
856 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
857 support_shm = XShmQueryExtension(display); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
858 if(!support_shm) |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
859 return; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
860 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
861 screen = DefaultScreen(display); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
862 depth = DefaultDepth(display, screen); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
863 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
864 if(depth != 24 && depth != 32) |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
865 return; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
866 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
867 xmb_rt->ximage = XShmCreateImage(display, visual, depth, |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
868 ZPixmap, NULL, shminfo, |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
869 xmb_rt->w, xmb_rt->h); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
870 ximage = xmb_rt->ximage; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
871 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
872 mem_sz = ximage->bytes_per_line * ximage->height; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
873 shminfo->shmid = shmget(IPC_PRIVATE, mem_sz, IPC_CREAT | 0777); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
874 if(shminfo->shmid == -1) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
875 xshm_destroy(xmb_rt); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
876 return; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
877 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
878 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
879 shminfo->shmaddr = shmat(shminfo->shmid, 0, 0); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
880 ximage->data = shminfo->shmaddr; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
881 |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
882 shminfo->readOnly = 0; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
883 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
884 XShmAttach(display, shminfo); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
885 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
886 switch(depth) { |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
887 case 24: surf_fmt = CAIRO_FORMAT_RGB24; break; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
888 case 32: surf_fmt = CAIRO_FORMAT_ARGB32; break; |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
889 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
890 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
891 xmb_rt->backend_surface = |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
892 mbe_image_surface_create_for_data((unsigned char *)ximage->data, |
755
82836f1290b6
Remove cairo_* and use mbe_*
Thinker K.F. Li <thinker@codemud.net>
parents:
694
diff
changeset
|
893 surf_fmt, |
82836f1290b6
Remove cairo_* and use mbe_*
Thinker K.F. Li <thinker@codemud.net>
parents:
694
diff
changeset
|
894 xmb_rt->w, |
82836f1290b6
Remove cairo_* and use mbe_*
Thinker K.F. Li <thinker@codemud.net>
parents:
694
diff
changeset
|
895 xmb_rt->h, |
82836f1290b6
Remove cairo_* and use mbe_*
Thinker K.F. Li <thinker@codemud.net>
parents:
694
diff
changeset
|
896 ximage->bytes_per_line); |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
897 if(xmb_rt->backend_surface == NULL) |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
898 xshm_destroy(xmb_rt); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
899 } |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
900 #endif /* XSHM */ |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
901 |
78 | 902 /*! \brief Initialize a MadButterfy runtime for Xlib. |
903 * | |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
904 * This one is very like X_MB_init(), except it accepts a |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
905 * X_MB_runtime_t object initialized with a display connected to a X |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
906 * server and an opened window. |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
907 * |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
908 * Following field of the X_MB_runtime_t object should be initialized. |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
909 * - w, h |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
910 * - win |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
911 * - display |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
912 * - visual |
78 | 913 */ |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
914 static int |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
915 X_MB_init_with_win_internal(X_MB_runtime_t *xmb_rt) { |
265
b42ee279669e
Change function name and add comments.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
916 mb_img_ldr_t *img_ldr; |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
917 int w, h; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
918 |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
919 w = xmb_rt->w; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
920 h = xmb_rt->h; |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
921 |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
922 #ifdef XSHM |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
923 xshm_init(xmb_rt); |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
924 #endif |
78 | 925 |
926 xmb_rt->surface = | |
450
a417fd980228
Replace cairo_format_t with mb_img_fmt_t.
Thinker K.F. Li <thinker@branda.to>
parents:
448
diff
changeset
|
927 mbe_image_surface_create(MB_IFMT_ARGB32, w, h); |
471
e98ae1407ca2
Remove mbe_set_source_surface() from graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
462
diff
changeset
|
928 |
e98ae1407ca2
Remove mbe_set_source_surface() from graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
462
diff
changeset
|
929 xmb_rt->surface_ptn = |
e98ae1407ca2
Remove mbe_set_source_surface() from graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
462
diff
changeset
|
930 mbe_pattern_create_for_surface(xmb_rt->surface); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
931 |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
932 if(xmb_rt->backend_surface == NULL) /* xshm_init() may create one */ |
691
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
933 xmb_rt->backend_surface = |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
934 mbe_xlib_surface_create(xmb_rt->display, |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
935 xmb_rt->win, |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
936 xmb_rt->visual, |
05a453e07d01
X_supp.c uses XSHM to avoid overhead of transmission
Thinker K.F. Li <thinker@branda.to>
parents:
556
diff
changeset
|
937 w, h); |
78 | 938 |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
939 xmb_rt->cr = mbe_create(xmb_rt->surface); |
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
940 xmb_rt->backend_cr = mbe_create(xmb_rt->backend_surface); |
78 | 941 |
471
e98ae1407ca2
Remove mbe_set_source_surface() from graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
462
diff
changeset
|
942 mbe_set_source(xmb_rt->backend_cr, xmb_rt->surface_ptn); |
78 | 943 |
944 xmb_rt->rdman = (redraw_man_t *)malloc(sizeof(redraw_man_t)); | |
945 redraw_man_init(xmb_rt->rdman, xmb_rt->cr, xmb_rt->backend_cr); | |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
946 // FIXME: This is a wired loopback reference. This is inly required when we need |
249
ab8284c8dcee
* Add loopback reference from rdman to the backend. This is only required when we need to acquire the tman for the animation. This is not a reasonable arrangement since the animation should be backend transparent. We should not touch the backend directly from the animation. We should relocate the tman to the rdman.
wycc
parents:
224
diff
changeset
|
947 // to get the xmb_rt->tman for the animation. We should relocate the tman |
ab8284c8dcee
* Add loopback reference from rdman to the backend. This is only required when we need to acquire the tman for the animation. This is not a reasonable arrangement since the animation should be backend transparent. We should not touch the backend directly from the animation. We should relocate the tman to the rdman.
wycc
parents:
224
diff
changeset
|
948 // to the redraw_man_t instead. |
ab8284c8dcee
* Add loopback reference from rdman to the backend. This is only required when we need to acquire the tman for the animation. This is not a reasonable arrangement since the animation should be backend transparent. We should not touch the backend directly from the animation. We should relocate the tman to the rdman.
wycc
parents:
224
diff
changeset
|
949 xmb_rt->rdman->rt = xmb_rt; |
78 | 950 |
951 xmb_rt->tman = mb_tman_new(); | |
952 | |
346
b391722bf20e
sh_image_t::img_data is managed by paint_image_t.
Thinker K.F. Li <thinker@branda.to>
parents:
270
diff
changeset
|
953 img_ldr = simple_mb_img_ldr_new(""); |
265
b42ee279669e
Change function name and add comments.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
954 xmb_rt->img_ldr = img_ldr; |
b42ee279669e
Change function name and add comments.
Thinker K.F. Li <thinker@branda.to>
parents:
260
diff
changeset
|
955 rdman_set_img_ldr(xmb_rt->rdman, img_ldr); |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
956 memset(xmb_rt->monitors,0,sizeof(xmb_rt->monitors)); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
957 |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
958 #ifndef ONLY_MOUSE_MOVE_RAW |
83 | 959 xmb_rt->last = NULL; |
224
29e1b2bffe4c
X backend only sent EVT_MOUSE_MOVE_RAW to MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
192
diff
changeset
|
960 #endif |
83 | 961 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
962 X_kb_init(&xmb_rt->kbinfo, xmb_rt->display, xmb_rt->rdman); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
963 |
78 | 964 return OK; |
965 } | |
966 | |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
967 /*! \brief Initialize a MadButterfy runtime for Xlib. |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
968 * |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
969 * It setups a runtime environment to run MadButterfly with Xlib. |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
970 * Users should specify width and height of the opening window. |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
971 */ |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
972 static int X_MB_init(X_MB_runtime_t *xmb_rt, const char *display_name, |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
973 int w, int h) { |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
974 int r; |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
975 |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
976 memset(xmb_rt, 0, sizeof(X_MB_runtime_t)); |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
977 |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
978 xmb_rt->w = w; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
979 xmb_rt->h = h; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
980 r = X_init_connection(display_name, w, h, &xmb_rt->display, |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
981 &xmb_rt->visual, &xmb_rt->win); |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
982 if(r != OK) |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
983 return ERR; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
984 |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
985 r = X_MB_init_with_win_internal(xmb_rt); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
986 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
987 return r; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
988 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
989 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
990 /*! \brief Initialize a MadButterfly runtime for a window of X. |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
991 * |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
992 * Runtimes initialized with this function should be destroyed with |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
993 * X_MB_destroy_keep_win(). |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
994 */ |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
995 static int |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
996 X_MB_init_with_win(X_MB_runtime_t *xmb_rt, |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
997 Display *display, Window win) { |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
998 XWindowAttributes attrs; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
999 int r; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1000 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1001 r = XGetWindowAttributes(display, win, &attrs); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1002 if(r == 0) |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1003 return ERR; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1004 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1005 memset(xmb_rt, 0, sizeof(X_MB_runtime_t)); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1006 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1007 xmb_rt->display = display; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1008 xmb_rt->win = win; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1009 xmb_rt->visual = attrs.visual; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1010 xmb_rt->w = attrs.width; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1011 xmb_rt->h = attrs.height; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1012 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1013 r = X_MB_init_with_win_internal(xmb_rt); |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
1014 |
757
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
1015 return r; |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
1016 } |
f43224bf3524
Remove unused variables and refactor to X_MB_init_with_win
Thinker K.F. Li <thinker@codemud.net>
parents:
756
diff
changeset
|
1017 |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1018 static void X_MB_destroy(X_MB_runtime_t *xmb_rt) { |
78 | 1019 if(xmb_rt->rdman) { |
1020 redraw_man_destroy(xmb_rt->rdman); | |
1021 free(xmb_rt->rdman); | |
1022 } | |
1023 | |
1024 if(xmb_rt->tman) | |
1025 mb_tman_free(xmb_rt->tman); | |
1026 | |
259
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1027 if(xmb_rt->img_ldr) |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1028 MB_IMG_LDR_FREE(xmb_rt->img_ldr); |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1029 |
78 | 1030 if(xmb_rt->cr) |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
1031 mbe_destroy(xmb_rt->cr); |
78 | 1032 if(xmb_rt->backend_cr) |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
1033 mbe_destroy(xmb_rt->backend_cr); |
78 | 1034 |
1035 if(xmb_rt->surface) | |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
1036 mbe_surface_destroy(xmb_rt->surface); |
471
e98ae1407ca2
Remove mbe_set_source_surface() from graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
462
diff
changeset
|
1037 if(xmb_rt->surface_ptn) |
e98ae1407ca2
Remove mbe_set_source_surface() from graphic engine.
Thinker K.F. Li <thinker@branda.to>
parents:
462
diff
changeset
|
1038 mbe_pattern_destroy(xmb_rt->surface_ptn); |
78 | 1039 if(xmb_rt->backend_surface) |
448
16116d84bc5e
Replace Cairo with a abstract layer mb_graph_engine.
Thinker K.F. Li <thinker@branda.to>
parents:
350
diff
changeset
|
1040 mbe_surface_destroy(xmb_rt->backend_surface); |
78 | 1041 |
1042 if(xmb_rt->display) | |
1043 XCloseDisplay(xmb_rt->display); | |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1044 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1045 X_kb_destroy(&xmb_rt->kbinfo); |
78 | 1046 } |
1047 | |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1048 /*! \brief Destroy a MadButterfly runtime initialized with |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1049 * X_MB_init_with_win(). |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1050 * |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1051 * Destroying a runtime with this function prevent the window and |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1052 * display associated with the runtime being closed. |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1053 */ |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1054 static void |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1055 X_MB_destroy_keep_win(X_MB_runtime_t *xmb_rt) { |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1056 Display *display; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1057 Window win; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1058 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1059 display = xmb_rt->display; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1060 xmb_rt->display = NULL; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1061 win = xmb_rt->win; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1062 xmb_rt->win = 0; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1063 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1064 X_MB_destroy(xmb_rt); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1065 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1066 xmb_rt->display = display; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1067 xmb_rt->win = win; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1068 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1069 |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1070 void *X_MB_new(const char *display_name, int w, int h) { |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1071 X_MB_runtime_t *rt; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1072 int r; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1073 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1074 rt = O_ALLOC(X_MB_runtime_t); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1075 if(rt == NULL) |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1076 return NULL; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1077 |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1078 r = X_MB_init(rt, display_name, w, h); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1079 if(r != OK) { |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1080 free(rt); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1081 return NULL; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1082 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1083 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1084 return rt; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1085 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1086 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1087 /*! \brief Create a new runtime for existed window for X. |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1088 * |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1089 * The object returned by this function must be free with |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1090 * X_MB_free_keep_win() to prevent the window from closed. |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1091 */ |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1092 void *X_MB_new_with_win(Display *display, Window win) { |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1093 X_MB_runtime_t *rt; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1094 int r; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1095 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1096 rt = O_ALLOC(X_MB_runtime_t); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1097 if(rt == NULL) |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1098 return NULL; |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1099 |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1100 r = X_MB_init_with_win(rt, display, win); |
528
d687d3395264
Clear variables and draw root coord.
Thinker K.F. Li <thinker@branda.to>
parents:
471
diff
changeset
|
1101 if(r != OK) { |
d687d3395264
Clear variables and draw root coord.
Thinker K.F. Li <thinker@branda.to>
parents:
471
diff
changeset
|
1102 free(rt); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1103 return NULL; |
528
d687d3395264
Clear variables and draw root coord.
Thinker K.F. Li <thinker@branda.to>
parents:
471
diff
changeset
|
1104 } |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1105 |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1106 return rt; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1107 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1108 |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1109 void X_MB_free(void *rt) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1110 X_MB_destroy((X_MB_runtime_t *) rt); |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1111 free(rt); |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1112 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1113 |
870
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1114 /*! \brief Free runtime created with X_MB_new_with_win(). |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1115 */ |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1116 void |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1117 X_MB_free_keep_win(void *rt) { |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1118 X_MB_destroy_keep_win((X_MB_runtime_t *) rt); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1119 free(rt); |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1120 } |
512204bcafba
Export the function to create a runtime for an existed window for X.
Thinker K.F. Li <thinker@codemud.net>
parents:
869
diff
changeset
|
1121 |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1122 subject_t *X_MB_kbevents(void *rt) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1123 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *) rt; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1124 return xmb_rt->kbinfo.kbevents; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1125 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1126 |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1127 redraw_man_t *X_MB_rdman(void *rt) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1128 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *) rt; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1129 return xmb_rt->rdman; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1130 } |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1131 |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1132 mb_tman_t *X_MB_tman(void *rt) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1133 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *) rt; |
122
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1134 return xmb_rt->tman; |
17e97e92b76e
Encapsulate X_MB_runtime_t and support X keyboard events.
Thinker K.F. Li <thinker@branda.to>
parents:
120
diff
changeset
|
1135 } |
131
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1136 |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1137 ob_factory_t *X_MB_ob_factory(void *rt) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1138 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *) rt; |
131
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1139 ob_factory_t *factory; |
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1140 |
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1141 factory = rdman_get_ob_factory(xmb_rt->rdman); |
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1142 return factory; |
6a8588df68af
Tank can change direction and navigate on the mud area
Thinker K.F. Li <thinker@branda.to>
parents:
122
diff
changeset
|
1143 } |
259
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1144 |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1145 mb_img_ldr_t *X_MB_img_ldr(void *rt) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1146 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *) rt; |
692
201cc86720a3
Fix compiling time warning about cairo xlib
Thinker K.F. Li <thinker@branda.to>
parents:
691
diff
changeset
|
1147 mb_img_ldr_t *img_ldr; |
259
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1148 |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1149 img_ldr = xmb_rt->img_ldr; |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1150 |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1151 return img_ldr; |
e8a784a306d0
Initialize an image loader for X runtime
Thinker K.F. Li <thinker@branda.to>
parents:
249
diff
changeset
|
1152 } |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1153 |
545
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1154 void X_MB_add_event(void *rt, int type, int fd, mb_eventcb_t f,void *arg) |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1155 { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1156 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *) rt; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1157 int i; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1158 |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1159 for(i=0;i<xmb_rt->n_monitor;i++) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1160 if (xmb_rt->monitors[i].type == type && xmb_rt->monitors[i].fd == fd) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1161 xmb_rt->monitors[i].f = f; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1162 xmb_rt->monitors[i].arg = arg; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1163 return; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1164 } |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1165 } |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1166 for(i=0;i<xmb_rt->n_monitor;i++) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1167 if (xmb_rt->monitors[i].type == 0) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1168 xmb_rt->monitors[i].type = type; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1169 xmb_rt->monitors[i].fd = fd; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1170 xmb_rt->monitors[i].f = f; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1171 xmb_rt->monitors[i].arg = arg; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1172 return; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1173 } |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1174 } |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1175 if (i == MAX_MONITORS) return; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1176 xmb_rt->monitors[i].type = type; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1177 xmb_rt->monitors[i].fd = fd; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1178 xmb_rt->monitors[i].f = f; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1179 xmb_rt->monitors[i].arg = arg; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1180 i++; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1181 xmb_rt->n_monitor=i; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1182 } |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1183 |
545
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1184 void X_MB_remove_event(void *rt, int type, int fd) |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1185 { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1186 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *) rt; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1187 int i; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1188 for(i=0;i<xmb_rt->n_monitor;i++) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1189 if (xmb_rt->monitors[i].type == type && xmb_rt->monitors[i].fd == fd) { |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1190 xmb_rt->monitors[i].type = 0; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1191 return; |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1192 } |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1193 } |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1194 } |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1195 mb_backend_t backend = { X_MB_new, |
984
3fe8054457a8
Change interface of mb_backend_t for more concise
Thinker K.F. Li <thinker@codemud.net>
parents:
870
diff
changeset
|
1196 X_MB_new_with_window, |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
1197 |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1198 X_MB_free, |
545
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1199 X_MB_add_event, |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1200 X_MB_remove_event, |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1201 X_MB_handle_connection, |
986
c39d14139ca5
Implement IO manager interface for X
Thinker K.F. Li <thinker@codemud.net>
parents:
984
diff
changeset
|
1202 |
462
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1203 X_MB_kbevents, |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1204 X_MB_rdman, |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1205 X_MB_tman, |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1206 X_MB_ob_factory, |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1207 X_MB_img_ldr |
af4b506ad56f
Add backend layer to seperate the backend with the MBAF. Currently, X is the only backend. If we have more than one backend, we need to modify the Makefile to sleect the backend or implement a backend selection mechanism in the runtime.
wycc@122-116-38-188.HINET-IP.hinet.net
parents:
451
diff
changeset
|
1208 }; |
545
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1209 /*! \defgroup x_supp_nodejs_sup Export functions for supporting nodejs plugin. |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1210 * |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1211 * These functions are for internal using. |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1212 * @{ |
822
586e50f82c1f
Unify coding style tag for emacs and vim.
Shih-Yuan Lee (FourDollars) <fourdollars@gmail.com>
parents:
757
diff
changeset
|
1213 */ |
545
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1214 /*! \brief Exported for nodejs plugin to call handle_x_event. |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1215 */ |
550
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
545
diff
changeset
|
1216 void _X_MB_handle_x_event_for_nodejs(void *rt) { |
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
545
diff
changeset
|
1217 handle_x_event((X_MB_runtime_t *)rt); |
545
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1218 } |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1219 |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1220 /*! \brief Get X connect for nodejs plugin. |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1221 */ |
550
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
545
diff
changeset
|
1222 int _X_MB_get_x_conn_for_nodejs(void *rt) { |
127499ab2412
Upgrade ndoejs plugin to level of a new runtime.
Thinker K.F. Li <thinker@branda.to>
parents:
545
diff
changeset
|
1223 return XConnectionNumber(((X_MB_runtime_t *)rt)->display); |
545
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1224 } |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1225 |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1226 /*! \brief Flush buffer for the X connection of a runtime object. |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1227 */ |
556
c9d23f7279a4
The first testcase that nodejs code can show a MadButterfly window.
Thinker K.F. Li <thinker@branda.to>
parents:
550
diff
changeset
|
1228 int _X_MB_flush_x_conn_for_nodejs(void *rt) { |
693
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
1229 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *)rt; |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
1230 #ifdef XSHM |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
1231 XSHM_update(xmb_rt); |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
1232 #endif |
8b7964869f7a
Update window with XImage through XSHM
Thinker K.F. Li <thinker@branda.to>
parents:
692
diff
changeset
|
1233 return XFlush(xmb_rt->display); |
545
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1234 } |
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1235 |
869
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1236 /*! \brief Handle single X event. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1237 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1238 void |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1239 _X_MB_handle_single_event(void *rt, void *evt) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1240 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *)rt; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1241 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1242 handle_single_x_event(xmb_rt, (XEvent *)evt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1243 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1244 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1245 /*! \brief Called at end of an iteration of X event loop. |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1246 */ |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1247 void |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1248 _X_MB_no_more_event(void *rt) { |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1249 X_MB_runtime_t *xmb_rt = (X_MB_runtime_t *)rt; |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1250 |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1251 no_more_event(xmb_rt); |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1252 } |
c18058fb48ee
Export API for JS to feed X events.
Thinker K.F. Li <thinker@codemud.net>
parents:
822
diff
changeset
|
1253 |
545
49f8f57f184a
Preparing for nodejs plugin
Thinker K.F. Li <thinker@branda.to>
parents:
529
diff
changeset
|
1254 /* @} */ |