ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtcolor.C
(Generate patch)

Comparing rxvt-unicode/src/rxvtcolor.C (file contents):
Revision 1.14 by pcg, Thu Apr 8 20:31:45 2004 UTC vs.
Revision 1.17 by root, Thu Jul 29 22:34:12 2004 UTC

55} 55}
56 56
57template<class T> 57template<class T>
58T *refcache<T>::get (const char *id) 58T *refcache<T>::get (const char *id)
59{ 59{
60 for (T **i = begin (); i < end (); ++i) 60 for (T **i = this->begin (); i < this->end (); ++i)
61 { 61 {
62 if (!strcmp (id, (*i)->id)) 62 if (!strcmp (id, (*i)->id))
63 { 63 {
64 (*i)->referenced++; 64 (*i)->referenced++;
65 return *i; 65 return *i;
70 70
71 obj->referenced = 1; 71 obj->referenced = 1;
72 72
73 if (obj && obj->init ()) 73 if (obj && obj->init ())
74 { 74 {
75 push_back (obj); 75 this->push_back (obj);
76 return obj; 76 return obj;
77 } 77 }
78 else 78 else
79 { 79 {
80 delete obj; 80 delete obj;
88 if (!obj) 88 if (!obj)
89 return; 89 return;
90 90
91 if (!--obj->referenced) 91 if (!--obj->referenced)
92 { 92 {
93 erase (find (begin (), end (), obj)); 93 this->erase (find (this->begin (), this->end (), obj));
94 delete obj; 94 delete obj;
95 } 95 }
96} 96}
97 97
98template<class T> 98template<class T>
99refcache<T>::~refcache () 99refcache<T>::~refcache ()
100{ 100{
101 while (size ()) 101 while (this->size ())
102 put (*begin ()); 102 put (*this->begin ());
103} 103}
104 104
105///////////////////////////////////////////////////////////////////////////// 105/////////////////////////////////////////////////////////////////////////////
106 106
107#ifdef USE_XIM
107static void 108static void
108im_destroy_cb (XIM unused1, XPointer client_data, XPointer unused3) 109im_destroy_cb (XIM unused1, XPointer client_data, XPointer unused3)
109{ 110{
110 rxvt_xim *xim = (rxvt_xim *)client_data; 111 rxvt_xim *xim = (rxvt_xim *)client_data;
111 rxvt_display *display = xim->display; 112 rxvt_display *display = xim->display;
126 127
127 XIMCallback ximcallback; 128 XIMCallback ximcallback;
128 ximcallback.client_data = (XPointer)this; 129 ximcallback.client_data = (XPointer)this;
129 ximcallback.callback = im_destroy_cb; 130 ximcallback.callback = im_destroy_cb;
130 131
132 ((void (*)(XIM, ...)) XSetIMValues)
131 XSetIMValues (xim, XNDestroyCallback, &ximcallback, NULL); 133 (xim, XNDestroyCallback, &ximcallback, NULL);
132 134
133 return true; 135 return true;
134} 136}
135 137
136rxvt_xim::~rxvt_xim () 138rxvt_xim::~rxvt_xim ()
137{ 139{
138 if (xim) 140 if (xim)
139 XCloseIM (xim); 141 XCloseIM (xim);
140} 142}
143#endif
141 144
142///////////////////////////////////////////////////////////////////////////// 145/////////////////////////////////////////////////////////////////////////////
143 146
144rxvt_display::rxvt_display (const char *id) 147rxvt_display::rxvt_display (const char *id)
145: refcounted (id) 148: refcounted (id)
183 int fd = XConnectionNumber (display); 186 int fd = XConnectionNumber (display);
184 x_ev.start (fd, EVENT_READ); 187 x_ev.start (fd, EVENT_READ);
185 fcntl (fd, F_SETFD, FD_CLOEXEC); 188 fcntl (fd, F_SETFD, FD_CLOEXEC);
186 189
187 XSelectInput (display, root, PropertyChangeMask); 190 XSelectInput (display, root, PropertyChangeMask);
191#ifdef USE_XIM
188 xa_xim_servers = XInternAtom (display, "XIM_SERVERS", 0); 192 xa_xim_servers = XInternAtom (display, "XIM_SERVERS", 0);
193#endif
189 194
190 flush (); 195 flush ();
191 196
192 return true; 197 return true;
193} 198}
198 203
199 if (display) 204 if (display)
200 XCloseDisplay (display); 205 XCloseDisplay (display);
201} 206}
202 207
208#ifdef USE_XIM
203void rxvt_display::im_change_cb () 209void rxvt_display::im_change_cb ()
204{ 210{
205 for (im_watcher **i = imw.begin (); i != imw.end (); ++i) 211 for (im_watcher **i = imw.begin (); i != imw.end (); ++i)
206 (*i)->call (); 212 (*i)->call ();
207} 213}
214#endif
208 215
209void rxvt_display::x_cb (io_watcher &w, short revents) 216void rxvt_display::x_cb (io_watcher &w, short revents)
210{ 217{
211 do 218 do
212 { 219 {
213 XEvent xev; 220 XEvent xev;
214 XNextEvent (display, &xev); 221 XNextEvent (display, &xev);
215 222
216 //printf ("T %d w %lx\n", xev.type, xev.xany.window);//D 223 //printf ("T %d w %lx\n", xev.type, xev.xany.window);//D
217 224
225#ifdef USE_XIM
218 if (xev.type == PropertyNotify 226 if (xev.type == PropertyNotify
219 && xev.xany.window == root 227 && xev.xany.window == root
220 && xev.xproperty.atom == xa_xim_servers) 228 && xev.xproperty.atom == xa_xim_servers)
221 im_change_cb (); 229 im_change_cb ();
230#endif
222 231
223 for (int i = xw.size (); i--; ) 232 for (int i = xw.size (); i--; )
224 { 233 {
225 if (!xw[i]) 234 if (!xw[i])
226 xw.erase_unordered (i); 235 xw.erase_unordered (i);
256{ 265{
257 if (w->active) 266 if (w->active)
258 xw[w->active - 1] = 0; 267 xw[w->active - 1] = 0;
259} 268}
260 269
261void rxvt_display::reg (im_watcher *w)
262{
263 imw.push_back (w);
264}
265
266void rxvt_display::unreg (im_watcher *w)
267{
268 imw.erase (find (imw.begin (), imw.end (), w));
269}
270
271void rxvt_display::set_selection_owner (rxvt_term *owner) 270void rxvt_display::set_selection_owner (rxvt_term *owner)
272{ 271{
273 if (selection_owner && selection_owner != owner) 272 if (selection_owner && selection_owner != owner)
274 selection_owner->selection_clear (); 273 selection_owner->selection_clear ();
275 274
276 selection_owner = owner; 275 selection_owner = owner;
277} 276}
278 277
278#ifdef USE_XIM
279void rxvt_display::reg (im_watcher *w)
280{
281 imw.push_back (w);
282}
283
284void rxvt_display::unreg (im_watcher *w)
285{
286 imw.erase (find (imw.begin (), imw.end (), w));
287}
288
279rxvt_xim *rxvt_display::get_xim (const char *locale, const char *modifiers) 289rxvt_xim *rxvt_display::get_xim (const char *locale, const char *modifiers)
280{ 290{
281 char *id; 291 char *id;
282 int l, m; 292 int l, m;
283 293
299 309
300void rxvt_display::put_xim (rxvt_xim *xim) 310void rxvt_display::put_xim (rxvt_xim *xim)
301{ 311{
302 xims.put (xim); 312 xims.put (xim);
303} 313}
314#endif
304 315
305Atom rxvt_display::atom (const char *name) 316Atom rxvt_display::atom (const char *name)
306{ 317{
307 return XInternAtom (display, name, False); 318 return XInternAtom (display, name, False);
308} 319}
309 320
310///////////////////////////////////////////////////////////////////////////// 321/////////////////////////////////////////////////////////////////////////////
311 322
312template refcache<rxvt_display>; 323template class refcache<rxvt_display>;
313refcache<rxvt_display> displays; 324refcache<rxvt_display> displays;
314 325
315///////////////////////////////////////////////////////////////////////////// 326/////////////////////////////////////////////////////////////////////////////
316 327
317bool 328bool

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines