X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=icons%2FCMakeLists.txt;h=35eae344aa3ab50a069ebd804779df265e3da750;hp=89b286c1fdcaa20ed9616b1d9e93e927e220aa41;hb=e6217df3a59b911d2c449d2a7b997a799d233ed4;hpb=f0efd6b5fa2839c9290a36c5a0397f439166f532 diff --git a/icons/CMakeLists.txt b/icons/CMakeLists.txt index 89b286c1..35eae344 100644 --- a/icons/CMakeLists.txt +++ b/icons/CMakeLists.txt @@ -1,63 +1,71 @@ # Install icons -# -# We put the bundled oxygen icon theme in DATADIR rather than ICONDIR, -# in order to avoid conflicts. As we add this directory to XDG_DATA_DIRS at runtime, -# the bundled theme will be found by Qt only if there is no oxygen theme installed -# in system directories. -# -# The hicolor folder contains icons vital for the Quassel UI (such as in the channel and nick -# lists). It is installed into the system icon directory (in order to allow overriding) and -# additionally always embedded as a fallback resource. if (WANT_MONO OR WANT_QTCLIENT) - set(ICON_RCS ${CMAKE_CURRENT_SOURCE_DIR}/hicolor.qrc) # always embed those + if (NOT WITH_BUNDLED_ICONS AND NOT WITH_OXYGEN_ICONS) + message(WARNING "Not including bundled icon themes. Ensure that the Breeze or Oxygen icon theme is installed!") + endif() + + set(BUNDLED_ICON_THEME_DIR ${CMAKE_SOURCE_DIR}/3rdparty/icons) + + # Always embed a hicolor fallback containing the most important (e.g. tray) icons. + # The .qrc contains aliases, so it's best to keep this manually written rather than autogenerated. + quassel_add_module(Resource::HicolorIcons STATIC) + target_sources(${TARGET} PRIVATE hicolor_icons.qrc) + set_target_properties(${TARGET} PROPERTIES AUTOMOC OFF AUTOUIC OFF) if (EMBED_DATA) - if (WITH_OXYGEN) - message(STATUS "Embedding bundled Oxygen icons") - set(ICON_RCS ${ICON_RCS} ${CMAKE_CURRENT_SOURCE_DIR}/oxygen.qrc) + # Always embed quassel-specific icons + message(STATUS "Embedding Quassel-specific icons") + set(patterns breeze*/*.svg) + if (WITH_OXYGEN_ICONS) + list(APPEND patterns oxygen/*.png) endif() - if (WITH_BREEZE) - message(STATUS "Embedding bundled Breeze icons") - set(ICON_RCS ${ICON_RCS} ${CMAKE_CURRENT_SOURCE_DIR}/breeze.qrc) - endif() - if (WITH_BREEZE_DARK) - message(STATUS "Embedding bundled Breeze Dark icons") - set(ICON_RCS ${ICON_RCS} ${CMAKE_CURRENT_SOURCE_DIR}/breezedark.qrc) + quassel_add_resource(Icons PREFIX icons PATTERNS ${patterns}) + + if (WITH_BUNDLED_ICONS) + message(STATUS "Embedding bundled Breeze icon theme") + set(patterns breeze*/*.svg breeze*/index.theme) + if (WITH_OXYGEN_ICONS) + message(STATUS "Embedding bundled Oxygen icon theme") + list(APPEND patterns oxygen/*.png oxygen/index.theme) + endif() endif() + quassel_add_resource(IconThemes PREFIX icons PATTERNS ${patterns} BASEDIR ${BUNDLED_ICON_THEME_DIR}) + else() - install(DIRECTORY hicolor DESTINATION ${CMAKE_INSTALL_ICONDIR}) - if (WITH_OXYGEN) - message(STATUS "Installing bundled Oxygen icons") + # Always install quassel-specific icons + install(DIRECTORY breeze breeze-dark DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel/icons) + if (WITH_OXYGEN_ICONS) install(DIRECTORY oxygen DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel/icons) endif() - if (WITH_BREEZE) - message(STATUS "Installing bundled Breeze icons") - install(DIRECTORY breeze DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel/icons) - endif() - if (WITH_BREEZE_DARK) - message(STATUS "Installing bundled Breeze Dark icons") - install(DIRECTORY breezedark DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel/icons) - endif() - endif() - if (NOT WITH_OXYGEN) - message(STATUS "Not installing bundled Oxygen icons") - endif() - - if (NOT WITH_BREEZE) - message(STATUS "Not installing bundled Breeze icons") - endif() - - if (NOT WITH_BREEZE_DARK) - message(STATUS "Not installing bundled Breeze Dark icons") + # Install bundled icon themes into our data dir (instead of CMAKE_INSTALL_ICONDIR) to avoid conflicts + # with themes provided by the system + if (WITH_BUNDLED_ICONS) + message(STATUS "Installing bundled Breeze icon theme") + install(DIRECTORY ${BUNDLED_ICON_THEME_DIR}/breeze + ${BUNDLED_ICON_THEME_DIR}/breeze-dark + DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel/icons + ) + if (WITH_OXYGEN_ICONS) + message(STATUS "Installing bundled Oxygen icon theme") + install(DIRECTORY ${BUNDLED_ICON_THEME_DIR}/oxygen DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel/icons) + endif() + endif() endif() - set(CLIENT_RCS ${CLIENT_RCS} ${ICON_RCS} PARENT_SCOPE) - # Application icon if (HAVE_KDE OR (UNIX AND NOT APPLE)) - install(FILES hicolor/48x48/apps/quassel.png DESTINATION ${CMAKE_INSTALL_ICONDIR}/hicolor/48x48/apps) + # hicolor contains the application icon in all relevant sizes + install(DIRECTORY hicolor DESTINATION ${CMAKE_INSTALL_ICONDIR}) + + if (Qt5Core_VERSION VERSION_LESS 5.5.0) + # Qt < 5.5 doesn't seem to correctly load icons from injected themes + # Install Quassel-specific ones from Oxygen into hicolor as fallback + install(DIRECTORY oxygen/ DESTINATION ${CMAKE_INSTALL_ICONDIR}/hicolor) + endif() + + # For a system install, also copy to pixmaps if (CMAKE_INSTALL_PREFIX STREQUAL "/usr") install(FILES hicolor/48x48/apps/quassel.png DESTINATION /usr/share/pixmaps) endif()