Щелкните прозрачные окна xlib - программирование

Щелкните прозрачные окна xlib

У меня есть прозрачное приложение с водяным знаком, которое написано с помощью XLib в C. В настоящее время, если вы нажимаете в любом месте приложения, ничего не происходит, но я бы хотел, чтобы он передавал ввод мыши во все, что ниже него. например Если вы нажмете X, чтобы закрыть окно, находящееся под приложением, оно должно закрыть приложение, а не делать ничего.

4b9b3361

Ответ 1

Если вы не хотите, чтобы ваше окно "водяного знака" получало какие-либо данные, а вместо этого вводите вход в окно под ним, я бы посмотрел на за gtk_widget_input_shape_combine_region. Я ранее использовал своего предшественника gtk_widget_input_shape_combine_mask, чтобы заставить все части всплывающего окна не получать никаких событий.

Я вышел из своей зоны комфорта, но выглядит как XShapeCombineRectangles является соответствующим вызовом (связанный do_shape_combine_region вызывается с shape = ShapeInput для этого случая).

Ответ 2

Думаю, XQueryTree может помочь. Выполните его в корневом окне и получите список дочерних окон, найдите их местоположение и передайте мышь/клавиатуру XEvent в соответствующее окно.

Примечание. Вы должны заботиться о активных/неактивных окнах, активной/неактивной области окна, дочерний элемент другого окна, размер и местоположение x/y другого окна. Код будет грязным для этого.

Ответ 3

  • Вам нужно реализовать небольшой оконный менеджер, который будет прослушивать все события по умолчанию root indow с использованием XSelectInput.

  • Затем выполните опрос на fd = connectionNember (показ).

  • Всякий раз, когда вы получаете событие. Проверьте, является ли это событием мыши, это будет дайте x, y. Вы можете найти правильное окно, пройдя стек стека.

  • Затем используйте XGrabPinter для отправки отчета в основное окно.