LINUX.ORG.RU
ФорумTalks

Мыши плакали, кололись...

 ,


0

1

Ударные дозы упорина в действии: 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? Ну может в каком-нибудь проекте кто-то делал такой виджет чисто для себя...

Ответ на: комментарий от netcat

Тем более, что в переводе lxpanelx на cmake, на первый взгляд, нет ничего сверхъестественного.

netcat ★★
()

Перепиши lxpanelx на кутье.. )

yeans
()
Ответ на: комментарий от onetwothreezeronine

Да я просто не буду это реализовывать до перехода на 3-ю версию.

Я попытался запилить аналог GtkOverlay на gtk2, но с такими чудесами, забил.

geekless ★★
() автор топика
Ответ на: комментарий от geekless

Ну так все-таки переходим на гит или нет? Я ради проверки сконвертировал, все прошло нормально. Работа по написанию CMake-скриптов, вроде бы, идет успешно.

netcat ★★
()
Последнее исправление: netcat (всего исправлений: 1)
Ответ на: комментарий от netcat

Я щас сижу выписываю очередные костыли-костылики для configure.ac и заголовочных файлов. Потому что разработчики libmenu-cache меняют API в новых версиях, а никакого способа макросом проверить текущую версию не дают. Так что оно нам точно надо - cmake? Все костыли заново подставлять и проверять успешность сборки в куче окружений разных версий...

На git перенесу позже, не охота сегодня возиться.

geekless ★★
() автор топика
Ответ на: комментарий от geekless

Я думаю, попробовать стоит. Скрипты я пишу с оглядкой на то, что уже есть, вполне вероятно, что костыли напишу сам.

netcat ★★
()
Ответ на: комментарий от geekless

Так, а в src/paths.c есть PACKAGE_LIBEXEC_DIR, PACKAGE_LIB_DIR, PACKAGE_DATA_DIR. Что под ними подразумевается?

netcat ★★
()
Ответ на: комментарий от netcat

Что под ними подразумевается?

Понятия не имею. :) Ответ на этот вопрос ищется так:

vadim@aquila:~/src/work/lxpanelx.1/trunk$ sgrep PACKAGE_DATA_DIR
src/plugins/menu.c:53://#define DEFAULT_MENU_ICON PACKAGE_DATA_DIR "/lxpanelx/images/my-computer.png"
src/plugins/launchbutton.c:771:        //DEFAULT_STRING(icon_path, PACKAGE_DATA_DIR "/lxpanelx/images/my-computer.png");
src/paths.c:44:        case RESOURCE_DATA    : prefix = PACKAGE_DATA_DIR;    break;
src/Makefile.am:13:	-DPACKAGE_DATA_DIR=\""$(datadir)"\" \
src/Makefile.in:434:	-DPACKAGE_DATA_DIR=\""$(datadir)"\" \
build/src/Makefile:434:	-DPACKAGE_DATA_DIR=\""$(datadir)"\" \
vadim@aquila:~/src/work/lxpanelx.1/trunk$ ./configure --help | grep datadir
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]

geekless ★★
() автор топика
Ответ на: комментарий от geekless

Осталось дописать скрипты для установки локалей, данных и манов и все будет готово.

netcat ★★
()
Ответ на: комментарий от geekless

Так, чтобы правильно установить локализации нужно:

1. Выполнить intltool-update
2. С помощью msgfmt скомпилировать .po файлы в .mo файлы
3. Установить скомпилированные .mo файлы
Все правильно?

netcat ★★
()
Ответ на: комментарий от geekless

И с этой херней я справился. Завтра отправлю патч, если ничего не произойдет.

netcat ★★
()
7 декабря 2013 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.