diff --git a/CMakeLists.txt b/CMakeLists.txt index c56b45048..643716132 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,6 @@ set(EVENT2_MINIMUM 2.1.0) set(GIOMM_MINIMUM 2.26.0) set(GLIBMM_MINIMUM 2.60.0) set(GTKMM_MINIMUM 3.24.0) -set(LIBAPPINDICATOR_MINIMUM 0.4.90) set(OPENSSL_MINIMUM 0.9.7) set(POLARSSL_MINIMUM 1.3) set(PSL_MINIMUM 0.21.1) @@ -65,7 +64,7 @@ tr_list_option(USE_QT_VERSION "Use specific Qt version" AUTO 5 6) tr_list_option(WITH_CRYPTO "Use specified crypto library" AUTO ccrypto cyassl mbedtls openssl polarssl wolfssl) tr_auto_option(WITH_INOTIFY "Enable inotify support (on systems that support it)" AUTO) tr_auto_option(WITH_KQUEUE "Enable kqueue support (on systems that support it)" AUTO) -tr_auto_option(WITH_LIBAPPINDICATOR "Use libappindicator in GTK+ client" AUTO) +tr_auto_option(WITH_APPINDICATOR "Use appindicator for system tray icon in GTK client (GTK+ 3 only)" AUTO) tr_auto_option(WITH_SYSTEMD "Add support for systemd startup notification (on systems that support it)" AUTO) set(TR_NAME ${PROJECT_NAME}) @@ -291,15 +290,15 @@ if(ENABLE_GTK) tr_fixup_auto_option(ENABLE_GTK GTK_FOUND GTK_IS_REQUIRED) - if(ENABLE_GTK AND WITH_LIBAPPINDICATOR AND GTK_VERSION EQUAL 3) - tr_get_required_flag(WITH_LIBAPPINDICATOR LIBAPPINDICATOR_IS_REQUIRED) - pkg_check_modules(LIBAPPINDICATOR appindicator3-0.1>=${LIBAPPINDICATOR_MINIMUM}) - tr_fixup_auto_option(WITH_LIBAPPINDICATOR LIBAPPINDICATOR_FOUND LIBAPPINDICATOR_IS_REQUIRED) + if(ENABLE_GTK AND WITH_APPINDICATOR AND GTK_VERSION EQUAL 3) + tr_get_required_flag(WITH_APPINDICATOR APPINDICATOR_IS_REQUIRED) + find_package(APPINDICATOR ${APPINDICATOR_IS_REQUIRED}) + tr_fixup_auto_option(WITH_APPINDICATOR APPINDICATOR_FOUND APPINDICATOR_IS_REQUIRED) else() - set(WITH_LIBAPPINDICATOR OFF) + set(WITH_APPINDICATOR OFF) endif() else() - set(WITH_LIBAPPINDICATOR OFF) + set(WITH_APPINDICATOR OFF) endif() if(ENABLE_QT) diff --git a/cmake/FindAPPINDICATOR.cmake b/cmake/FindAPPINDICATOR.cmake new file mode 100644 index 000000000..91c04e141 --- /dev/null +++ b/cmake/FindAPPINDICATOR.cmake @@ -0,0 +1,30 @@ +find_package(PkgConfig QUIET) + +pkg_check_modules(PC_AYATANA_APPINDICATOR QUIET ayatana-appindicator3-0.1) +find_path(AYATANA_APPINDICATOR_INCLUDE_DIR NAMES libayatana-appindicator/app-indicator.h HINTS ${PC_AYATANA_APPINDICATOR_INCLUDE_DIRS}) +find_library(AYATANA_APPINDICATOR_LIBRARY NAMES ayatana-appindicator3 ayatana-appindicator HINTS ${PC_AYATANA_APPINDICATOR_LIBRARY_DIRS}) + +if(AYATANA_APPINDICATOR_INCLUDE_DIR AND AYATANA_APPINDICATOR_LIBRARY) + set(APPINDICATOR_INCLUDE_DIR ${AYATANA_APPINDICATOR_INCLUDE_DIR}) + set(APPINDICATOR_LIBRARY ${AYATANA_APPINDICATOR_LIBRARY}) + set(APPINDICATOR_IS_AYATANA ON) +else() + pkg_check_modules(PC_APPINDICATOR QUIET appindicator3-0.1) + find_path(APPINDICATOR_INCLUDE_DIR NAMES libappindicator/app-indicator.h HINTS ${PC_APPINDICATOR_INCLUDE_DIRS}) + find_library(APPINDICATOR_LIBRARY NAMES appindicator3 appindicator HINTS ${PC_APPINDICATOR_LIBRARY_DIRS}) + set(APPINDICATOR_IS_AYATANA OFF) +endif() + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(APPINDICATOR + REQUIRED_VARS + APPINDICATOR_LIBRARY + APPINDICATOR_INCLUDE_DIR +) + +mark_as_advanced(AYATANA_APPINDICATOR_INCLUDE_DIR AYATANA_APPINDICATOR_LIBRARY) +mark_as_advanced(APPINDICATOR_INCLUDE_DIR APPINDICATOR_LIBRARY) + +set(APPINDICATOR_INCLUDE_DIRS ${APPINDICATOR_INCLUDE_DIR}) +set(APPINDICATOR_LIBRARIES ${APPINDICATOR_LIBRARY}) diff --git a/gtk/CMakeLists.txt b/gtk/CMakeLists.txt index 9cf399afa..9bad254fa 100644 --- a/gtk/CMakeLists.txt +++ b/gtk/CMakeLists.txt @@ -2,10 +2,6 @@ project(trgtk) add_compile_options(${C_WARNING_FLAGS}) -if(WITH_LIBAPPINDICATOR) - add_definitions(-DHAVE_LIBAPPINDICATOR) -endif() - execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable glib_compile_resources @@ -170,8 +166,8 @@ include_directories( ${EVENT2_INCLUDE_DIRS} ) -if(WITH_LIBAPPINDICATOR) - include_directories(SYSTEM ${LIBAPPINDICATOR_INCLUDE_DIRS}) +if(WITH_APPINDICATOR) + include_directories(SYSTEM ${APPINDICATOR_INCLUDE_DIRS}) endif() link_directories( @@ -198,6 +194,13 @@ add_definitions( ${GTK${GTK_VERSION}_CFLAGS_OTHER} ) +if(WITH_APPINDICATOR) + set_property(SOURCE SystemTrayIcon.cc APPEND PROPERTY COMPILE_DEFINITIONS HAVE_APPINDICATOR) + if(APPINDICATOR_IS_AYATANA) + set_property(SOURCE SystemTrayIcon.cc APPEND PROPERTY COMPILE_DEFINITIONS APPINDICATOR_IS_AYATANA) + endif() +endif() + tr_win32_app_info(${PROJECT_NAME}_WIN32_RC_FILE "Transmission GTK+ Client" "${TR_NAME}-gtk" @@ -219,8 +222,8 @@ target_link_libraries(${TR_NAME}-gtk ${EVENT2_LIBRARIES} ) -if(WITH_LIBAPPINDICATOR) - target_link_libraries(${TR_NAME}-gtk ${LIBAPPINDICATOR_LIBRARIES}) +if(WITH_APPINDICATOR) + target_link_libraries(${TR_NAME}-gtk ${APPINDICATOR_LIBRARIES}) endif() if(NOT MSVC) diff --git a/gtk/SystemTrayIcon.cc b/gtk/SystemTrayIcon.cc index fb824b5fb..7f45703a6 100644 --- a/gtk/SystemTrayIcon.cc +++ b/gtk/SystemTrayIcon.cc @@ -13,9 +13,13 @@ #include #include -#ifdef HAVE_LIBAPPINDICATOR +#ifdef HAVE_APPINDICATOR +#ifdef APPINDICATOR_IS_AYATANA +#include +#else #include #endif +#endif #include #include @@ -29,7 +33,7 @@ #define TR_SYS_TRAY_IMPL_APPINDICATOR 1 #define TR_SYS_TRAY_IMPL_STATUS_ICON 2 -#ifdef HAVE_LIBAPPINDICATOR +#ifdef HAVE_APPINDICATOR #define TR_SYS_TRAY_IMPL TR_SYS_TRAY_IMPL_APPINDICATOR #elif !GTKMM_CHECK_VERSION(4, 0, 0) #define TR_SYS_TRAY_IMPL TR_SYS_TRAY_IMPL_STATUS_ICON