2009-10-02 3 views
0

Возможно ли создать окно, которое действует как наложение поверх другого окна, скажем, значок, который можно отобразить в строке заголовка окна или в строке состояния?Создание «наложения» на окно

Предположим для целей этого вопроса, что:

  • Окно является иностранным окно (не принадлежит моей заявке)
  • накладываемого 16x16 пикселей и имеет прозрачный фон
  • НАКЛАДКИ отображается очень близко к верхнему правому краю окна и должен располагаться относительно верхней правой границы окна.
  • Оверлей заинтересован в обработке щелчка левой кнопкой мыши и отсутствии другого ввода.
  • Наложение не должно иметь фокуса ввода, оно должно только знать, когда оно было нажато.

Если возможно, как это можно сделать? Я попытался создать окно и отобразить его в нужном месте, но я его никогда не видел; это как будто этого не существует. Я делаю , получая дескриптор окна и даже могу преобразовать его в объект GdkWindow, но я не могу дойти до него.

ETA: пример того, что я хочу сделать, можно найти в Интернете, first without what I'm trying to do и again with it. В этом случае посмотрите на строку меню справа. Я хотел бы сделать это для любого произвольного приложения и пользователь сможет щелкнуть по этой маленькой иконке, чтобы «прикрепить» к окну.

ответ

1

Способ, которым работает оконный менеджер, - это сделать новое окно и добавить в новое окно окно «родительский» окно .

Возможно, вы можете вставить свое окно между окном оформления оконного менеджера и существующим окном с помощью окна XReparent() api.

+0

Я стараюсь избегать репарации и обертывания. AIUI, этот подход означает, что я должен действовать как прокси-сервер сообщений, и это хрупко. Если бы я мог это понять, я бы просто перехватил WM_DELETE ClientMessage. Я начинаю думать, что я просто не вырезал для программирования уровня X11 на низком уровне. :) –

0

Это должно быть возможно с использованием только команд GDK, поскольку они более или менее сопоставляются с теми же вызовами Xlib. Может быть, вы не принимаете во внимание, что вам следует каким-то образом обрабатывать события, связанные с событиями (те, которые отправляются не в ваше приложение, а на иностранное)? Кстати, как именно вы конвертируете дескриптор XWindow в GtkWindow?

+0

Я сейчас не нахожусь. Я использую libwnck, чтобы получить от него дескрипторы окон, которые могут работать за кулисами для меня, но когда мне приходится работать с окнами, я получаю от них X-окно. –

Смежные вопросы