Ударные дозы упорина в действии: http://s42.radikal.ru/i095/1302/38/39400e0d8d6f.png
Задача: сделать так, чтобы при наведении мыши на миниатюру окна, в углу миниатюры появлялась кнопка «Закрыть». На скриншоте для наглядности кнопки «Закрыть» показаны все сразу.
Поясняю, что тут у нас происходит: label собственного окна не имеет, т.е. рисуется в родительском окне (в окне всплывающей панели). Крестик «Закрыть» лежит на отдельном event box-е, т.е. в дочернем окне. Здравый смысл нам подсказывает, что содержимое дочернего окна должно выводиться строго поверх родительского. А вот нихрена.
Что мы видим? Мы видим очевидное-невероятное: сначала рисуется фон родительского окна, затем рисуется содержимое дочернего even box-а, а затем, внезапно, тулкит вспоминает, что надо нарисовать label и фигачит его поверх event box-а. Текст поверх крестика.
А всё почему? Потому что гордое Gtk с некоторых пор не пользуется иксовыми вложенными окнами, а реализует собственный механизм окон. Который косой и кривой как траектория моего соседа, когда он бегает за водкой до ларька. Ну расскажите мне про ненужность иерархических окон в иксах, ага. Gtk вон не осилил тупо производить отрисовку обходом дерева, дерево - это же слишком сложно для современных программистов.
До кучи, там еще и обработка событий работает как бог на душу положит. Например, всплывающая подсказка на крестик может всплыть, а может и не всплыть. 50% на 50%.
Что я делаю не так? — Да пользуюсь этим недоразумением вместо нормального тулкита, ССЗБ. Тут даже нормального контейнера-оверлея нет. Теперь мне понятно, почему GtkOverlay появился только в gtk3 — с такими-то багами.
Кстати, waker, ты не знаешь, для gtk2 есть какой-нибудь готовый аналог GtkOverlay? Ну может в каком-нибудь проекте кто-то делал такой виджет чисто для себя...