… | |
… | |
2 | #include <rxvt.h> |
2 | #include <rxvt.h> |
3 | #include <rxvtcolor.h> |
3 | #include <rxvtcolor.h> |
4 | |
4 | |
5 | #include <unistd.h> |
5 | #include <unistd.h> |
6 | #include <fcntl.h> |
6 | #include <fcntl.h> |
|
|
7 | |
|
|
8 | class byteorder byteorder; |
|
|
9 | |
|
|
10 | byteorder::byteorder () |
|
|
11 | { |
|
|
12 | union { |
|
|
13 | uint32_t u; |
|
|
14 | uint8_t b[4]; |
|
|
15 | } w; |
|
|
16 | |
|
|
17 | w.b[0] = 0x11; |
|
|
18 | w.b[1] = 0x22; |
|
|
19 | w.b[2] = 0x33; |
|
|
20 | w.b[3] = 0x44; |
|
|
21 | |
|
|
22 | e = w.u; |
|
|
23 | } |
7 | |
24 | |
8 | refcounted::refcounted (const char *id) |
25 | refcounted::refcounted (const char *id) |
9 | { |
26 | { |
10 | this->id = STRDUP (id); |
27 | this->id = STRDUP (id); |
11 | } |
28 | } |
… | |
… | |
110 | } |
127 | } |
111 | |
128 | |
112 | bool rxvt_display::init () |
129 | bool rxvt_display::init () |
113 | { |
130 | { |
114 | display = XOpenDisplay (id); |
131 | display = XOpenDisplay (id); |
|
|
132 | |
|
|
133 | if (!display) |
|
|
134 | return false; |
115 | |
135 | |
116 | screen = DefaultScreen (display); |
136 | screen = DefaultScreen (display); |
117 | root = DefaultRootWindow (display); |
137 | root = DefaultRootWindow (display); |
118 | visual = DefaultVisual (display, screen); |
138 | visual = DefaultVisual (display, screen); |
119 | cmap = DefaultColormap (display, screen); |
139 | cmap = DefaultColormap (display, screen); |
… | |
… | |
152 | |
172 | |
153 | rxvt_display::~rxvt_display () |
173 | rxvt_display::~rxvt_display () |
154 | { |
174 | { |
155 | x_ev.stop (); |
175 | x_ev.stop (); |
156 | |
176 | |
|
|
177 | if (display) |
157 | XCloseDisplay (display); |
178 | XCloseDisplay (display); |
158 | } |
179 | } |
159 | |
180 | |
160 | void rxvt_display::im_change_cb () |
181 | void rxvt_display::im_change_cb () |
161 | { |
182 | { |
162 | for (im_watcher **i = imw.begin (); i != imw.end (); ++i) |
183 | for (im_watcher **i = imw.begin (); i != imw.end (); ++i) |
… | |
… | |
233 | selection_owner = owner; |
254 | selection_owner = owner; |
234 | } |
255 | } |
235 | |
256 | |
236 | rxvt_xim *rxvt_display::get_xim (const char *locale, const char *modifiers) |
257 | rxvt_xim *rxvt_display::get_xim (const char *locale, const char *modifiers) |
237 | { |
258 | { |
238 | // asprintf is a GNU and *BSD extension.. sorry... |
|
|
239 | char *id; |
259 | char *id; |
|
|
260 | int l, m; |
240 | |
261 | |
241 | if (asprintf (&id, "%s\n%s", locale, modifiers) < 0) |
262 | l = strlen (locale); |
|
|
263 | m = strlen (modifiers); |
|
|
264 | |
|
|
265 | if (!(id = (char *)malloc (l + m + 2))) |
242 | return 0; |
266 | return 0; |
243 | |
267 | |
|
|
268 | memcpy (id, locale, l); id[l] = '\n'; |
|
|
269 | memcpy (id + l + 1, modifiers, m); id[l + m + 1] = 0; |
|
|
270 | |
244 | rxvt_xim *xim = xims.get (id); |
271 | rxvt_xim *xim = xims.get (id); |
245 | |
272 | |
246 | free (id); |
273 | free (id); |
247 | |
274 | |
248 | return xim; |
275 | return xim; |
249 | } |
276 | } |
250 | |
277 | |
251 | void rxvt_display::put_xim (rxvt_xim *xim) |
278 | void rxvt_display::put_xim (rxvt_xim *xim) |
252 | { |
279 | { |
253 | xims.put (xim); |
280 | xims.put (xim); |
|
|
281 | } |
|
|
282 | |
|
|
283 | Atom rxvt_display::atom (const char *name) |
|
|
284 | { |
|
|
285 | return XInternAtom (display, name, False); |
254 | } |
286 | } |
255 | |
287 | |
256 | ///////////////////////////////////////////////////////////////////////////// |
288 | ///////////////////////////////////////////////////////////////////////////// |
257 | |
289 | |
258 | template refcache<rxvt_display>; |
290 | template refcache<rxvt_display>; |