У меня есть следующий код:
#include <X11/Xlib.h>
#define FALSE (0)
#define TRUE !FALSE
int main(int argc, char **argv)
{
Display *d;
Window root;
int error;
d = XOpenDisplay(NULL);
root = DefaultRootWindow(d);
XEvent ce;
ce.xclient.type = KeyPress;
ce.xclient.message_type = XInternAtom(d, "_OB_CONTROL", FALSE);
ce.xclient.display = d;
ce.xclient.window = root;
ce.xclient.format = 32;
ce.xclient.data.l[0] = 4;
ce.xclient.data.l[1] = 0;
ce.xclient.data.l[2] = 0;
ce.xclient.data.l[3] = 0;
ce.xclient.data.l[4] = 0;
error = XSendEvent(d, root, FALSE, (SubstructureNotifyMask | SubstructureRedirectMask), &ce);
return error;
}
предполагается отправить ClientMessageEvent в окно root. Он моделируется после кода из openbox . (OBT_PROP_MSG
определено здесь , и функция из этого здесь .)
Когда я запускаю программу на $ DISPLAY при запущенном xev --root
, никакое событие не получает получил. Но когда я запускаю openbox --reconfigure
(который запускает код, связанный с remote_control = 1
), xev получает событие ClientMessage.
Что я делаю не так?