Си, X event, прошу помочь

Подскажите, как отловит евенты для всех окон. Допустим изменение фокуса. Если повесить отлов на root окно, то отлавливает конечно его само ( в случае с openbox рабочий стол), а вот окна приложений нет. Видимо надо в цикле вешать эвенты на все дочерние окна? И на все вновь открытые?
Вот примерный код событий на root окно.
int
init()
{
    Display *dpy;
   dpy = GDK_DISPLAY();
   Window winRoot = GDK_ROOT_WINDOW();
  XSetWindowAttributes a;
  a.event_mask =   FocusChangeMask | EnterWindowMask|LeaveWindowMask; 
  XSelectInput(dpy, winRoot, a.event_mask);
   gdk_window_add_filter (NULL, (GdkFilterFunc) handle_xevent, NULL);
   return 0;
}
Можно, конечно, получить все дочерние окна, навесить на них a.event_mask , и навешивать его на все вновь открываемые, но как-то как-то это неконгруэнтно… Может есть способ проще?
Если-б исходники простого примера найти, а то что-то нагуглилась каша какая-то.
что бы обработать эвенты для всех окон, достаточно ловить их для рутового окна, согласно документации. У нас так и работало, но есть нюанс: когда появляется какой нить DE/WM там root-окно не есть то что запускает wm. Попробуй посмотреть xbindkeys как они там ловят клавиатурные эвенты.
systemd должен умереть.
 
Зарегистрироваться или войдите чтобы оставить сообщение.