Как написать панель задач в FLTK для использования в системах Linux

Мне нужно написать небольшое приложение на C/C++, чтобы реализовать панель задач наподобие панели для отображения информации в верхней части окна рабочего стола (в частности, рабочего стола xorg в системе Linux). Мне нужно избегать раздувания и крутых кривых обучения для программирования с графическим интерфейсом.

Мое исследование указывает мне на GTK+/GTKmm или FLTK. Похоже, что FLTK, вероятно, проще для понимания и, скорее всего, предоставит небольшой чистый пакет с минимальными зависимостями. Так что пока я основывал свое исследование на FLTK.

Я кое-что читал и изо всех сил пытаюсь понять, как написать базовую программу, которая будет создавать узкое неукрашенное окно, которое покрывает ширину монитора таким образом, чтобы максимизация других приложений не закрывала его. Учебники FLTK, которые я нашел до сих пор (включая документацию FLTK), реализуют только стандартные окна с границами, которые можно перемещать по экрану.

Я хотел бы начать с написания простой программы на FLTK (или GTK+/GTKmm), которая создает полосу глубиной 20 пикселей поперек экрана, содержащую сообщение «hello world». Область панели будет зарезервирована за пределами области, к которой могут получить доступ другие программы, чтобы максимизация другого приложения не скрывала сообщение «hello world». Я думаю, что это как-то связано со свойством WM_STRUT_PARTIAL, но я не могу найти информацию об этом в FLTK.

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

Я ищу любую помощь / руководство, чтобы поставить меня в правильном направлении, чтобы начать. Большое спасибо.


person starfry    schedule 27.05.2011    source источник


Ответы (1)


starfry, я считаю, что это нетривиальная задача. Проблема в том, что ваш рабочий стол (скажем, GNOME2/Metacity) зарезервировал это пространство и рисует свою панель в той области, где вы хотите разместить панель. -

Если вы действительно хотите, чтобы ваш апплет панели задач был основан на FLTK, вам придется "встроить" его в апплет (GNOME). Давным-давно я проделывал нечто подобное с SDL-приложением, но, боюсь, забыл, как это делать. Первое, что приходит мне в голову, это каким-то образом получить XID из апплета GNOME и каким-то образом передать его части FLTK, а затем позволить FLTK сделать все остальное...

Конечно, вы можете использовать другой рабочий стол, например KDE или i3 или IceWM, ВСЕ они имеют свои собственные способы борьбы с панель лотка (для него нет стандарта!), так что простите за мой "французский" - это будет PITA для поддержки всех сред...

Если бы я работал на GNOME, я бы написал апплет полностью с использованием GNOME/GTK. Забудьте о FLTK в этом случае. Это моя рекомендация. Если вы ориентируетесь на KDE, то делайте это с помощью библиотек KDE/QT (ищите виджет Plasma).

Однако, если вы все же хотите использовать FLTK, начните с fltk::draw_into. () (вероятно, она называется fl_draw_into() в FLTK 1.x), fltk::xid() и родственными функциями.

person DejanLekic    schedule 02.11.2011
comment
На самом деле я использую OpenBox, если это имеет значение. - person starfry; 02.11.2011
comment
В этом случае я предлагаю вам сначала изучить, как написать трей-бар (если это вообще возможно) для OpenBox. Я не могу помочь с этим, я боюсь. :( - person DejanLekic; 02.11.2011