Задался я тут както целью усовершенствовать панель задач...
То, что сейчас называют "панель задач" по сути является списком окон.
(Вот в 7й винде это уже приближается к панели задач)
Вот тут есть небольшое бла-бла-бла по этому поводу http://www.linux.org.ru/view-message.jsp?m...d=1234746948940
А тут http://gnome-look.org/content/show.php?content=97822 - выложено само поделие.
В общем на данный момент это панель задач (хотя не далеко ушло от списка окон) с группировкой по WM_CLASS.
Хочется чтобы в результате эта штука стала именно панелью приложений.
На пути к этой целе есть несколько вопросов/проблем.
Чем не устраивает текущее положение дел:
- Невозможно работать с группой как с приложением (точнее немного возможно, но это будет костыльно). Например определить что приложение уже запущено. Открыть еще одно окно и т.д....
- Получить нормальную иконку. Сейчас механизм получения иконки такой: попытаться найти иконку в теме по имени группы, если это не получилось, то воспользоваться встроенной в libwnck ф-ей. Чаще всего 1й способ не прокатывает, поэтому иконка получается 32*32 и, иногда, не совсем та, что нужна.
Теперь о проблемах:
Во первых, как получить список приложений, зарегистрированных с системе? Есть способ через gio (http://library.gnome.org/devel/gio/stable/GAppInfo.html), но он не лишен недостатков.
Можно узнать имя исполняемого файла, но нельзя узнать параметры запуска. Это проблема, т.к. некоторые приложения (т.е. зарегистрированы они как разные приложения) используют один и тот же исполняемый файл, но с разными параметрами, например, OpenOffice Writer (ooffice -writer).
Возможность узнать всю строку запуска приложения должна появиться, во всяком случае о ней написано в unstable http://library.gnome.org/devel/gio/unstable/GAppInfo.html. Но я не знаком с порядком разработки гнома и не знаю стоит ли этого ждать.
Может быть есть другой способ?
Может быть возможно получить .desktop файл для зарегистрированного приложения чтобы его самому парсить?
Во вторых, как узнать, что окно относится именно к этому приложению. Libwnck позволяет получить pid процесса для окна. Погуглив, я не нашел функций для работы с процессами в питоне, по всем ссылкам отсылают к /proc.
Прочитать /proc/<pid>/cmdline можно только для своего пользователя. Т.е. параметры запуска можно узнать только для процессов запущенных от того же пользователя, что и панель задач, что не есть хорошо.
С тем, чтобы узнать просто имя процесса (исполняемого файла) тоже не все гладко. Можно попробовать узнать его из файла status но есть проблема, она заключается в том, что оно может не соответствовать имени с которым процесс был запущен.
Например, для программ, которые являются скриптами (текстовый файл, начинающийся с #!/usr/bin..... (например питоновые)), имя может быть именем интерпретатора (например, python) или именем самого скрипта (somescript.py), в разных случаях по разному (и от чего это зависит - не понятно).
Конкретный пример:
моя прога: файл скрипта - dockbar.py, в status написано Name: dockbar.py
ide spe (редактор в котором я пишу, сам на питоне): файл /usr/bin/spe, в status написано Name: python
Почему так?
Есть ли способ точно узнать то имя процесса, с которым он был запущен.
Некоторые приложения - bash обертки, например, тот же OOo (в меню приложений прописано запускать ooffice -writer , но ooffice запускает soffice.bin).
Какие костыли можно придумать?
В общем, у кого какие есть идеи по этому поводу. Конечно идеальная реализация вряд ли возможна, т.к. это должно быть предусмотрено самим DE и приложениями, но возможно к ней можно приблизиться.
Высказывайтесь, что думаете.