Pull to refresh

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

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

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

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

Проблема «очеловечивания» Скайпа в том, что все иконки зашиты глубоко внутри приложения, хотя звуки для уведомлений доступны всем желающим в папке /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 для желающих получить всё и сразу.
Tags:
Hubs:
Total votes 29: ↑17 and ↓12+5
Comments10

Articles