У меня есть прозрачное приложение с водяным знаком, которое написано с помощью XLib в C. В настоящее время, если вы нажимаете в любом месте приложения, ничего не происходит, но я бы хотел, чтобы он передавал ввод мыши во все, что ниже него. например Если вы нажмете X, чтобы закрыть окно, находящееся под приложением, оно должно закрыть приложение, а не делать ничего.
Щелкните прозрачные окна xlib
Ответ 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 для отправки отчета в основное окно.