Прозрачное окно в родительском Xwindow

Я пытаюсь создать оверлейное окно над другим запущенным приложением. Скажем, фаерфокс. Я реализовал с помощью Xcreatewindow

win = XCreateWindow( display, *firefoxwindow,
                   50, 300, 400, 400,
                   0,
                   visualinfo.depth,
                   InputOutput,
                   visualinfo.visual,
                   CWColormap|CWEventMask|CWBackPixmap|CWBorderPixel,
                   &attr
                   ) ;

Я искал *firefoxwindow с помощью XQueryTree()

а затем последовал этот код https://gist.github.com/903479

Результатом является прозрачное окно, когда я использую XRoot в качестве родителя. Но когда я пытаюсь использовать firefoxwindow или другое окно приложения в качестве родителя, оно становится оптическим.


person user753758    schedule 21.05.2012    source источник


Ответы (1)


В вашем случае вам нужно вручную составить растровое изображение окна с фоновым окном. Когда вы создаете окно с корнем в качестве родительского, прозрачность обрабатывается оконным менеджером компоновки.

person Andrey Sidorov    schedule 22.05.2012
comment
Не могли бы вы помочь мне немного больше, я совершенно новичок в этих вещах. - person user753758; 23.05.2012
comment
с расширением Composite ( freedesktop.org/wiki/Software/CompositeExt) вы можете делегировать совместное размещение к внешней программе, которая может, например, трактовать альфа-канал как прозрачность. Исходный код очень простого менеджера компоновки: cgit.freedesktop.org/xorg/app/xcompmgr - person Andrey Sidorov; 24.05.2012
comment
Спасибо Андрей, еще один вопрос, как вы думаете, можно ли запустить другое приложение поверх другого полноэкранного приложения? - person user753758; 29.05.2012
comment
обычно полноэкранное приложение использует только окно без рамки (0,0, ширина экрана, высота экрана) - здесь нет волшебства. Вы должны иметь возможность переустановить окно поверх него. - person Andrey Sidorov; 30.05.2012