Как получить события в дочернем окне X11? - PullRequest
2 голосов
/ 22 марта 2012

Мне нужно обрабатывать события (MouseDown, MouseUp, MouseMove, KeyDown, KeyUp) в дочернем окне X11.Родитель этого дочернего окна X11 - GtkWidget, поэтому я не могу создать основной цикл ...

Как я могу это сделать?

Спасибо!

Ответы [ 3 ]

1 голос
/ 23 марта 2012

XGrabPointer , XGrabKeyboard

Если вы хотите получать события из виджета gtk, вы можете использовать g_signal_connect ().

    g_signal_connect(G_OBJECT(mChild), "button_press_event",
                     G_CALLBACK(BPHandler), NULL);
    g_signal_connect(G_OBJECT(mChild), "key_press_event",
                     G_CALLBACK(KPHandler), NULL);
1 голос
/ 28 марта 2012

Ну, вам нужен какой-то насос событий, и, будучи дочерним окном в соединении с общим дисплеем X, это означает, что оно привязано к главному циклу событий.Технически вы можете запустить второй поток с собственным подключением дисплея и циклом обработки событий.К сожалению, Xlib не очень безопасен для потоков, особенно в этом отношении.Вы можете сделать это с помощью Xcb.

Другой подход - это поместить ребенка под опеку отдельного процесса и использовать XEmbed.

0 голосов
/ 23 марта 2012
...