Как мне использовать XSendEvent? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть следующий код:

#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.

Что я делаю не так?

...