В принципе, форк от оригинала отделяют только 78 коммитов, но сделано уже довольно много.
На новость не тянет, т.к. до релиза еще пилить и пилить, так что пишу в толксы.
Для апплета панели задач:
- Возможность отображать только иконку, только заголовок или оба.
- Опциональное отображение кнопки закрытия.
- Режим для отображения заголовка только активного окна. (Панель задач в роли заменителя заголовка окна, если они отключены в WM.)
- Если включена опция «Показывать окна всех рабочих мест», то кроме заголовка окна, также отображается и название рабочего места, на котором он находится.
- Доработки контекстного меню: два пункта Максимизировать/Восстановить объединены в один, меняющий название в зависимоти от режима окна; пункт «Значком» отображается неактивным, если окно уже свернуто; в подменю «Переместить на рабочее место» отображаются реальные имена рабочих мест вместо номеров.
- Возможность назначить на ЛКМ, СКМ и ПКМ, а также на прокрутку колесом любые действия из следующего списка:
На прокрутку колесом в конфиге по умолчанию назначено листание окон вперед-назад, т.е. панель задач имеет feel, сложий с привычными табами.
enum TASKBAR_ACTION { ACTION_NONE, ACTION_MENU, ACTION_CLOSE, ACTION_RAISEICONIFY, ACTION_ICONIFY, ACTION_MAXIMIZE, ACTION_SHADE, ACTION_UNDECORATE, ACTION_FULLSCREEN, ACTION_STICK, ACTION_SHOW_WINDOW_LIST, ACTION_SHOW_SIMILAR_WINDOW_LIST, ACTION_NEXT_WINDOW, ACTION_PREV_WINDOW, ACTION_NEXT_WINDOW_IN_CURRENT_GROUP, ACTION_PREV_WINDOW_IN_CURRENT_GROUP, ACTION_NEXT_WINDOW_IN_GROUP, ACTION_PREV_WINDOW_IN_GROUP };
- Группировать окна можно не только по WM_CLASS, но по рабочему столу, а также по состоянию окна (видимое/свернутое).
- Параметр GroupThreshold указывает количество однотипных окон, после достижения которого они будут объединенны в одну кнопку. 1 — делать объединяющую кнопку даже если окно не имеет однотипных «товарищей»; 2 — делать объединяющую кнопку, если есть 2 однотипных окна; и т.п. Если значение равно 0, то окна никогда не скрываются под общей кнопкой, а просто сортируются на панели, чтобы были рядом (временно сломано, работает не всегда).
- Возвращены на законное место опции «Show mapped windows» и «Show iconified windows», которые изначально присутствовали в fbpanel, но были выпилены разработчиками lxde после их форка.
- Интегрирован стороний патч для lxpanel, предотвращающий растягивание слишком маленькой иконки окна (лучше мелко, но чётко, чем мыло).
Скриншот панели и диалога настроек: http://s010.radikal.ru/i311/1108/83/6edd7c6d6069.png
Также в целом проведена оптимизация отрисовки панели задач и существенно снижены моргания при переключении окон и рабочих мест.
Реализован новый плагин «Кнопка запуска»:
- Можно назначить команды, запускаемые по ЛКМ, СКМ и ПКМ.
- Можно задать название и иконку. Оба опциональны.
- Можно задать всплывающую подсказку для кнопки. Если не указана, автоматически формируется из команд, указанных для ЛКМ, СКМ, ПКМ.
В других частях кода панели:
- Из lxpanel перенесены несколько фиксов багов, выполненных после точки форка, включая баги для апплета заряда батареи и часов.
- Оптимизация модуля icon-grid, используемого такими апплетами как панель задач, трей и переключатель рабочих мест.
- В диалоги конфигурации апплетов добавлена возможность работать с выпадающими списками а также делать выравнивание элементов управления при помощи таблицы.
- Добавлена возможность запускать lxpanelx в kiosk mode. Включается параметром KioskMode=true в секции General в файле ~/.config/lxpanel/<PROFILE_NAME>/config. При работе в kiosk mode полностью блокируется возможность изменять во время работы любые настройки панели. Это позволит применять lxpanelx в общедоступных компьютерах организаций, школах и т.п.
- Апплеты на панели теперь выравниваются относительно центральной линии, а не сидят у верхнего края.
Что запланировано:
Пока еще имеется некоторое количество неприятных багов, в первую очередь, связанных с отрисовкой. Также, не выполнена локализация для новых строк в интерфейсе. Ядро панели нуждается в интенсивном рефакторинге (еще со времен форка от fbpanel нуждается).
Планы относительно новых функций:
- Возможность гибко настраивать меню для панели задач (указывать, какие именно пункты отображать, из всех возможных действий для окна).
- Группировка окон по произвольному свойству окна, указанному в настройках. (Для интеграции с какой-либо внешней утилитой, которая будет выполнять группировку.)
- Возможность сортировать окна по нескольким параметрам, либо по параметрам, указанным в кустомном свойстве окна. (Аналогично предыдущему, для интеграции с внешним сортировщиком.) А также возможность перетаскивать мышой окна на панели.
- Аналогично предыдущему, фильтрация списка окон.
- Возможность указать в настройках собственные команды-действия и назначить их на кнопки мыши или колесо.
- Возможность читать кустомный список действий из свойств окна и добавлять его в контекстное меню.
- В переключатель рабочих мест добавить возможность отображать только имена рабочих мест, а не их миниатюры.
- Добавление в ядро панели модуля регистрации внутренних команд, доступных апплетам, и средства для назначения глобальных хоткеев на эти команды. Команды будут обрабатываться в exec-стиле, т.е. могут иметь произвольный список аргументов (как эти аргументы интерпретировать — зависит от апплета). Например панель задач сможет выполнять забинженные команды типа Alt-1 -> raise_and_focus #1, Alt-2 -> raise_and_focus #2 и т.п. для активации окон хоткеями по их номеру (WM этого делать не может, т.к. не знает, как панель отсортировала окна.)
- Появление/скрытие панели по хоткею.
- Апплет «кнопка запуска» планируется научить получать данные от stdout запущенного процесса или из именованного пайпа. Апплет будет парсить поступающие данные и изменять любые из своих параметров (назначенные команды, иконку, заголовок, подпись). Таким образом, это будет интерактивная кнопка, управляемая внешним скриптом в unixway-стиле.
- Также запланировано добавление апплета, позволяющего выполнять embedding окон на панель.
Теперь, что касается означенных в заголовке «свистелок современного десктопа». Windows 7 давно умеет, а недавно и Unity научилась использовать «умный» док, позволяющий делать «spawn or raise», а также отображать в контекстном меню кнопок разные плюшки, такие как список недавних документов приложения и специфичные для него команды. Также вспомним про двигло zeitgeist и умный журнал действий пользователя в Gnome3, который на том двигле работает. Всё это тяжко ворочается через dbus, скрипя библиотеками, и кое-где подпёрто питоном.
Как всё это счастье _правильно_ интегрировать с lxpanelx, не строгая новых апплетов и не тягая в зависимостях зоопарка левых либ? Ответ прост: пустить данные через иксовые свойства окна.
1. Пусть там нужно показать кнопку, которая будет делать «spawn or raise». Создаём фейковое окно, которое и отображается в таскбаре в роли такой кнопки. При попытке активации этого окна, скрипт запустит настоящее приложение, а фейковое окно спрячет. Когда приложение завершится, скрипт покажет окно обратно. И никаких зависимостей.
2. Теперь пусть для окна (не важно, фейкового или настоящего) надо показать особенное контекстное меню, содержащее специфичные пункты. У окна есть такая замечательная вещь, как WM_CLASS позволяющая идентифицировать его как принадлежащее некоторому приложению. Ну а дальше — просто. Зная приложение, получаем для него это меню и пишем в некоторое свойство окна. Этим будет заниматься соответствующий скрипт. А панель задач, как выше было обозначено в TODO, в скором времени научится читать определенное свойство окна и добавлять пункты оттуда в своё контекстное меню. И опять — никаких зависимостей.