/////////////////////////////////////////////////////////////////////////////
+#ifdef USE_XIM
static void
im_destroy_cb (XIM unused1, XPointer client_data, XPointer unused3)
{
if (xim)
XCloseIM (xim);
}
+#endif
/////////////////////////////////////////////////////////////////////////////
fcntl (fd, F_SETFD, FD_CLOEXEC);
XSelectInput (display, root, PropertyChangeMask);
+#ifdef USE_XIM
xa_xim_servers = XInternAtom (display, "XIM_SERVERS", 0);
+#endif
flush ();
XCloseDisplay (display);
}
+#ifdef USE_XIM
void rxvt_display::im_change_cb ()
{
for (im_watcher **i = imw.begin (); i != imw.end (); ++i)
(*i)->call ();
}
+#endif
void rxvt_display::x_cb (io_watcher &w, short revents)
{
//printf ("T %d w %lx\n", xev.type, xev.xany.window);//D
+#ifdef USE_XIM
if (xev.type == PropertyNotify
&& xev.xany.window == root
&& xev.xproperty.atom == xa_xim_servers)
im_change_cb ();
+#endif
for (int i = xw.size (); i--; )
{
xw[w->active - 1] = 0;
}
+void rxvt_display::set_selection_owner (rxvt_term *owner)
+{
+ if (selection_owner && selection_owner != owner)
+ selection_owner->selection_clear ();
+
+ selection_owner = owner;
+}
+
+#ifdef USE_XIM
void rxvt_display::reg (im_watcher *w)
{
imw.push_back (w);
imw.erase (find (imw.begin (), imw.end (), w));
}
-void rxvt_display::set_selection_owner (rxvt_term *owner)
-{
- if (selection_owner && selection_owner != owner)
- selection_owner->selection_clear ();
-
- selection_owner = owner;
-}
-
rxvt_xim *rxvt_display::get_xim (const char *locale, const char *modifiers)
{
char *id;
{
xims.put (xim);
}
+#endif
Atom rxvt_display::atom (const char *name)
{
/////////////////////////////////////////////////////////////////////////////
+#ifdef USE_XIM
struct rxvt_xim : refcounted {
void destroy ();
rxvt_display *display;
bool init ();
~rxvt_xim ();
};
+#endif
struct rxvt_display : refcounted {
Atom xa_xim_servers;
io_watcher x_ev; void x_cb (io_watcher &w, short revents);
+#ifdef USE_XIM
refcache<rxvt_xim> xims;
vector<im_watcher *> imw;
void im_change_cb ();
+#endif
//public
Display *display;
void flush ();
+ void set_selection_owner (rxvt_term *owner);
+
void reg (xevent_watcher *w);
void unreg (xevent_watcher *w);
+
+#ifdef USE_XIM
void reg (im_watcher *w);
void unreg (im_watcher *w);
- void set_selection_owner (rxvt_term *owner);
-
rxvt_xim *get_xim (const char *locale, const char *modifiers);
void put_xim (rxvt_xim *xim);
+#endif
Atom atom (const char *name);
};
+#ifdef USE_XIM
struct im_watcher : watcher, callback0<void> {
template<class O1, class O2>
im_watcher (O1 *object, void (O2::*method) ())
display->unreg (this);
}
};
+#endif
struct xevent_watcher : watcher, callback1<void, XEvent &> {
Window window;