Приводим иконки Скайпа к общему стилю системы

от автора

В интерфейсе каждой операционной системы существует такое понятие, как область уведомлений.

Там присутствуют различные индикаторы и переключатели, например, индикатор громкости. Большинство индикаторов следуют рекомендациям, но только не Скайп. Таллинские Редмондские программисты настолько суровы, что имеют своё мнение о том, как должны выглядеть их иконки в панели индикаторов. Впрочем, одной строки кода достаточно, чтобы привести их иконки в соответствие.

Иконка скайпа до и после

Проблема «очеловечивания» Скайпа в том, что все иконки зашиты глубоко внутри приложения, хотя звуки для уведомлений доступны всем желающим в папке /usr/share/skype. Нет возможности просто взять и положить нужные иконки в ~/.local/share/icons. Я, как наверное и многие другие пользователи Скайпа, относился к этим явно выбивающемуся из общего стиля иконкам как к неибежному злу.

До тех пор, как на одном из компьютеров, при обновлении с 32-х разрядной системы на 64-х разрядную, Скайп вообще перестал проявляться в панели индикаторов. Небольшое исследование показало, что виной этому отсутствие библиотеки sni-qt, волшебный образом превращиющей QSystemTrayIcon в StatusNotifierItems.
А это значит, что между проприетарным скайпом и панелью индикаторов находится маленькая бибилиотека с открытым кодом.

Скачиваем:

apt-get source sni-qt && cd sni-qt*

В каталоге src нас ждут два десятка файлов, в числе которых iconcache.cpp

Поиск слова «save» даёт ровно один результат:

        QPixmap pix = icon.pixmap(size);         QString dirName = QString("hicolor/%1x%1/apps").arg(size.width());         if (!dir.exists(dirName)) {             if (!dir.mkpath(dirName)) {                 qWarning("Could not create '%s' dir in '%s'",                     qPrintable(m_themePath), qPrintable(dirName));                 continue;             }         }         QString pixPath = QString("%1/%2/%3.png")             .arg(m_themePath).arg(dirName).arg(key);         if (!pix.save(pixPath, "png")) {             qWarning("Could not save icon as '%s'", qPrintable(pixPath));         } 

Всё, что нужно сделать, это заменить

-        QPixmap pix = icon.pixmap(size);

на

+        QPixmap pix = icon.pixmap(size, QIcon::Disabled);

Это превратит все цветные иконки в серые. Примерно такие, какие нужны для темы humanity-dark.
Для humanity, темы по-умолчанию в версиях Ubuntu до 10.04, нужно перевести палитру на тёмную сторону силы.

Собираем и запускаем:

 sudo apt-get build-dep sni-qt mkdir build && cmake --build=build . make && sudo make install 

Вот и всё. Иконка Скайпа более не мозолит глаза и вполне удовлетворительно выглядит.

Patch файл для желающих попробовать apt-build —patch mono.patch install sni-qt
sni-qt_0.2.6-0ubuntu1_i386.deb для желающих получить всё и сразу.

ссылка на оригинал статьи http://habrahabr.ru/post/181934/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *