From 9d6ee461f95e059a42aea9392c37f5a752e9be3d Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Thu, 18 Jan 2018 04:06:28 +0100 Subject: Support building against Ayatana Indicators and Ubuntu Indicators alike. (#24) * If only Ayatana Indicators are present in the build env, build against them. * If only Ubuntu Indicators are present in the build env, build against them. * If both Indicator implementations are present in the build env, then we build against Ayatana Indicators. A build against this or that implementation can be enforced by configure options (--with-ayatana-indicators=yes or --with-ubuntu-indicators=yes). * If either implementation is present, but the other -with-*-indicator configure option is given, an error is thrown at configure time. * No Indicator implementation present in the build env, of course, also throws an error at configure time. --- configure.ac | 202 ++++++++++++++++++++++++++++++++++++++++++++++++------ src/Makefile.am | 13 ++++ src/applet-main.c | 77 ++++++++++++++++----- 3 files changed, 256 insertions(+), 36 deletions(-) diff --git a/configure.ac b/configure.ac index 918cef4..da97d3a 100644 --- a/configure.ac +++ b/configure.ac @@ -26,8 +26,12 @@ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) GTK_REQUIRED_VERSION=3.14.0 PANEL_REQUIRED_VERSION=1.17.0 -INDICATOR_REQUIRED_VERSION=0.3.90 -INDICATOR_NG_VERSION=12.10.2 + +UBUNTU_INDICATOR_REQUIRED_VERSION=0.3.90 +UBUNTU_INDICATOR_NG_VERSION=12.10.2 + +AYATANA_INDICATOR_REQUIRED_VERSION=0.6.0 +AYATANA_INDICATOR_NG_VERSION=0.6.0 PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= $GTK_REQUIRED_VERSION x11 @@ -37,20 +41,148 @@ PKG_CHECK_MODULES(APPLET, gtk+-3.0 >= $GTK_REQUIRED_VERSION AC_SUBST(APPLET_CFLAGS) AC_SUBST(APPLET_LIBS) -PKG_CHECK_EXISTS(indicator3-0.4 >= $INDICATOR_NG_VERSION, - [have_indicator_ng="yes"], - [have_indicator_ng="no"]) +# Which Indicator implementation shall we use? + +AC_ARG_WITH([ayatana-indicators], + [AS_HELP_STRING([--with-ayatana-indicators], + [build against Ayatana Indicators])], + [with_ayatana_indicators='yes'], + [with_ayatana_indicators='no'] +) + +AC_ARG_WITH([ubuntu-indicators], + [AS_HELP_STRING([--with-ubuntu-indicators], + [build against Ubuntu Indicators])], + [with_ubuntu_indicators='yes'], + [with_ubuntu_indicators='no'] +) + +### +### Look for Ayatana Indicators +### + +PKG_CHECK_EXISTS(ayatana-indicator3-0.4, + [have_ayatanaindicator="yes"], + [have_ayatanaindicator="no"]) + +PKG_CHECK_EXISTS(ayatana-indicator3-0.4 >= $AYATANA_INDICATOR_NG_VERSION, + [have_ayatanaindicator_ng="yes"], + [have_ayatanaindicator_ng="no"]) + +### +### Look for Ubuntu Indicators +### + +PKG_CHECK_EXISTS(indicator3-0.4, + [have_ubuntuindicator="yes"], + [have_ubuntuindicator="no"]) + +PKG_CHECK_EXISTS(indicator3-0.4 >= $UBUNTU_INDICATOR_NG_VERSION, + [have_ubuntuindicator_ng="yes"], + [have_ubuntuindicator_ng="no"]) + +### decide on what Indicators implementation to use... + +if test "x$have_ayatanaindicator" == "xyes" && + test "x$have_ubuntuindicator" != "xyes" && + test "x$with_ubuntu_indicators" != "xyes"; then + + # use Ayatana Indicators (because they are present, and noone is enforcing Ubuntu Indicators) + use_ayatanaindicator="yes"; + indicator_enforced="no"; + +elif test "x$have_ubuntuindicator" == "xyes" && + test "x$have_ayatanaindicator" != "xyes" && + test "x$with_ayatana_indicators" != "xyes"; then + + # use Ubuntu Indicators (because they are present, and noone is enforcing Ayatana Indicators) + use_ubuntuindicator="yes"; + indicator_enforced="no"; + +elif test "x$have_ubuntuindicator" == "xyes" && + test "x$have_ayatanaindicator" == "xyes" && + test "x$with_ayatana_indicators" == "xyes"; then + + # both Indicator implementations are present, and we are asked to use Ayatana Indicators + use_ayatanaindicator=yes; + indicator_enforced=yes; + +elif test "x$have_ubuntuindicator" == "xyes" && + test "x$have_ayatanaindicator" == "xyes" && + test "x$with_ubuntu_indicators" == "xyes"; then + + # both Indicator implementations are present, and we are asked to use Ubuntu Indicators + use_ubuntuindicator=yes; + indicator_enforced=yes; + +elif test "x$have_ubuntuindicator" == "xyes" && + test "x$have_ayatanaindicator" != "xyes" && + test "x$with_ayatana_indicators" == "xyes"; then + + AC_MSG_ERROR([Ubuntu Indicators are present, but you want to build mate-indicator-applet against Ayatana Indicators. This does not match.]) + +elif test "x$have_ubuntuindicator" != "xyes" && + test "x$have_ayatanaindicator" == "xyes" && + test "x$with_ubuntu_indicators" == "xyes"; then + + AC_MSG_ERROR([Ayatana Indicators are present, but you want to build mate-indicator-applet against Ubuntu Indicators. This does not match.]) -if test "x$have_indicator_ng" = "xyes"; then - PKG_CHECK_MODULES(INDICATOR, indicator3-0.4 >= $INDICATOR_NG_VERSION - libido3-0.1 >= 13.10, - [AC_DEFINE(HAVE_INDICATOR_NG, 1, "New style indicators support")]) else - PKG_CHECK_MODULES(INDICATOR, indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION) + + AC_MSG_ERROR([Either Ayatana Indicators or Ubuntu Indicators are required to build mate-indicator-applet.]) + fi -AC_SUBST(INDICATOR_CFLAGS) -AC_SUBST(INDICATOR_LIBS) +### prepare Ayatana or Ubuntu Indicators implementation for the build, regarding to the decision reached above... + +if test "x$use_ayatanaindicator" == "xyes"; then + + AM_CONDITIONAL(WITH_AYATANA_INDICATOR, true) + AM_CONDITIONAL(WITH_UBUNTU_INDICATOR, false) + AC_DEFINE(HAVE_AYATANA_INDICATOR, 1, "Ayatana Indicators Support") + + if test "x$indicator_enforced" == "xyes"; then + AC_MSG_NOTICE([Using Ayatana Indicators for this build (as requested via configure option).]) + else + AC_MSG_NOTICE([Using Ayatana Indicators for this build.]) + fi + + if test "x$have_ayatanaindicator_ng" = "xyes"; then + PKG_CHECK_MODULES(AYATANA_INDICATOR_NG, ayatana-indicator3-0.4 >= $AYATANA_INDICATOR_NG_VERSION + libayatana-ido3-0.4 >= 0.4.0, + [AC_DEFINE(HAVE_AYATANA_INDICATOR_NG, 1, "New style indicators support")]) + elif test "x$have_ayatanaindicator" = "xyes"; then + PKG_CHECK_MODULES(AYATANA_INDICATOR, ayatana-indicator3-0.4 >= $AYATANA_INDICATOR_REQUIRED_VERSION) + fi + + AC_SUBST(AYATANA_INDICATOR_CFLAGS) + AC_SUBST(AYATANA_INDICATOR_LIBS) + +elif test "x$use_ubuntuindicator" == "xyes"; then + + # both Indicator implementations are present, and we are asked to use Ubuntu Indicators + AM_CONDITIONAL(WITH_UBUNTU_INDICATOR, true) + AM_CONDITIONAL(WITH_AYATANA_INDICATOR, false) + AC_DEFINE(HAVE_UBUNTU_INDICATOR, 1, "Ubuntu Indicators Support") + + if test "x$indicator_enforced" == "xyes"; then + AC_MSG_NOTICE([Using Ubuntu Indicators for this build (as requested via configure option).]) + else + AC_MSG_NOTICE([Using Ubuntu Indicators for this build.]) + fi + + if test "x$have_ubuntuindicator_ng" = "xyes"; then + PKG_CHECK_MODULES(UBUNTU_INDICATOR_NG, indicator3-0.4 >= $UBUNTU_INDICATOR_NG_VERSION + libido3-0.1 >= 13.10, + [AC_DEFINE(HAVE_UBUNTU_INDICATOR_NG, 1, "New style indicators support")]) + elif test "x$have_ubuntuindicator" = "xyes"; then + PKG_CHECK_MODULES(UBUNTU_INDICATOR, indicator3-0.4 >= $UBUNTU_INDICATOR_REQUIRED_VERSION) + fi + + AC_SUBST(UBUNTU_INDICATOR_CFLAGS) + AC_SUBST(UBUNTU_INDICATOR_LIBS) + +fi ########################### # Check to see if we're local @@ -63,12 +195,24 @@ AC_ARG_ENABLE(localinstall, AS_HELP_STRING([--enable-localinstall], [install all # Indicator Info ########################### -if test "x$with_localinstall" = "xyes"; then - INDICATORDIR="${libdir}/indicators/2/" - INDICATORICONSDIR="${datadir}/indicator-applet/icons/" -else - INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4` - INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4` +if test "x$use_ubuntuindicator" = "xyes"; then + if test "x$with_localinstall" = "xyes"; then + INDICATORDIR="${libdir}/indicators3/7/" + INDICATORICONSDIR="${datadir}/indicator-applet/icons/" + else + INDICATORDIR=`$PKG_CONFIG --variable=indicatordir indicator3-0.4` + INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir indicator3-0.4` + fi +fi + +if test "x$use_ayatanaindicator" = "xyes"; then + if test "x$with_localinstall" = "xyes"; then + INDICATORDIR="${libdir}/ayatana-indicators3/7/" + INDICATORICONSDIR="${datadir}/ayatana-indicator-applet/icons/" + else + INDICATORDIR=`$PKG_CONFIG --variable=indicatordir ayatana-indicator3-0.4` + INDICATORICONSDIR=`$PKG_CONFIG --variable=iconsdir ayatana-indicator3-0.4` + fi fi AC_SUBST(INDICATORDIR) @@ -147,10 +291,28 @@ po/Makefile.in # Results ########################### +if (test "x$use_ayatanaindicator" == "xyes" && + test "x$have_ayatanaindicator_ng" == "xyes") || + (test "x$use_ubuntuindicator" == "xyes" && + test "x$have_ubuntuindicator_ng" == "xyes"); then + have_indicator_ng="yes" +else + have_indicator_ng="no" +fi + +if test "x$use_ayatanaindicator" == "xyes"; then + indicator_implementation="Ayatana Indicators" +elif test "x$use_ubuntuindicator" == "xyes"; then + indicator_implementation="Ubuntu Indicators" +fi + AC_MSG_NOTICE([ Indicator Applet Configuration: - Prefix: $prefix - Indicator-ng support: $have_indicator_ng + Prefix: $prefix + Indicator implementation: $indicator_implementation + Indicator NG support: $have_indicator_ng + Indicator Directory: $INDICATORDIR + Indicator Icons Directory: $INDICATORICONSDIR ]) diff --git a/src/Makefile.am b/src/Makefile.am index 63458e0..e60f286 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,3 +1,16 @@ +if WITH_AYATANA_INDICATOR +INDICATOR_CFLAGS = $(AYATANA_INDICATOR_CFLAGS) \ + $(AYATANA_INDICATOR_NG_CFLAGS) +INDICATOR_LIBS = $(AYATANA_INDICATOR_LIBS) \ + $(AYATANA_INDICATOR_NG_LIBS) +endif + +if WITH_UBUNTU_INDICATOR +INDICATOR_CFLAGS = $(UBUNTU_INDICATOR_CFLAGS) \ + $(UBUNTU_INDICATOR_NG_CFLAGS) +INDICATOR_LIBS = $(UBUNTU_INDICATOR_LIBS) \ + $(UBUNTU_INDICATOR_NG_LIBS) +endif libexec_PROGRAMS = \ mate-indicator-applet \ diff --git a/src/applet-main.c b/src/applet-main.c index 459be2a..327becd 100644 --- a/src/applet-main.c +++ b/src/applet-main.c @@ -28,22 +28,69 @@ with this program. If not, see . #include #include +#if HAVE_UBUNTU_INDICATOR + +#define INDICATOR_SERVICE_APPMENU "libappmenu.so" +#define INDICATOR_SERVICE_ME "libme.so" +#define INDICATOR_SERVICE_DATETIME "libdatetime.so" + +#define INDICATOR_SERVICE_APPMENU_NG "com.canonical.indicator.appmenu" +#define INDICATOR_SERVICE_ME_NG "com.canonical.indicator.me" +#define INDICATOR_SERVICE_DATETIME_NG "com.canonical.indicator.datetime" + #include +#endif + +#if HAVE_AYATANA_INDICATOR + +#define INDICATOR_SERVICE_APPMENU "libayatana-appmenu.so" +#define INDICATOR_SERVICE_ME "libayatana-me.so" +#define INDICATOR_SERVICE_DATETIME "libayatana-datetime.so" + +#define INDICATOR_SERVICE_APPMENU_NG "org.ayatana.indicator.appmenu" +#define INDICATOR_SERVICE_ME_NG "org.ayatana.indicator.me" +#define INDICATOR_SERVICE_DATETIME_NG "org.ayatana.indicator.datetime" + +#include +#endif /* For new style indicators */ -#if HAVE_INDICATOR_NG + +#if HAVE_UBUNTU_INDICATOR && HAVE_UBUNTU_INDICATOR_NG + #include #include + +#define INDICATOR_SERVICE_DIR "/usr/share/unity/indicators" + +#endif + +#if HAVE_AYATANA_INDICATOR && HAVE_AYATANA_INDICATOR_NG + +#include +#include + +#define INDICATOR_SERVICE_DIR "/usr/share/ayatana/indicators" + #endif #include "tomboykeybinder.h" static gchar * indicator_order[] = { +#if HAVE_UBUNTU_INDICATOR "libapplication.so", "libmessaging.so", "libsoundmenu.so", "libdatetime.so", "libsession.so", +#endif +#if HAVE_AYATANA_INDICATOR + "libayatana-application.so", + "libayatana-messaging.so", + "libayatana-soundmenu.so", + "libayatana-datetime.so", + "libayatana-session.so", +#endif NULL }; @@ -511,7 +558,7 @@ load_indicator (GtkWidget * menubar, IndicatorObject *io, const gchar *name) indicator_object_set_environment(io, (const GStrv)indicator_env); /* Attach the 'name' to the object */ -#if HAVE_INDICATOR_NG +#if HAVE_AYATANA_INDICATOR_NG || HAVE_UBUNTU_INDICATOR_NG int pos = 5000 - indicator_object_get_position(io); if (pos > 5000) { pos = name2order(name); @@ -573,19 +620,19 @@ load_modules (GtkWidget *menubar, gint *indicators_loaded) gint count = 0; while ((name = g_dir_read_name(dir)) != NULL) { #ifdef INDICATOR_APPLET_APPMENU - if (g_strcmp0(name, "libappmenu.so")) { + if (g_strcmp0(name, INDICATOR_SERVICE_APPMENU)) { continue; } #else - if (!g_strcmp0(name, "libappmenu.so")) { + if (!g_strcmp0(name, INDICATOR_SERVICE_APPMENU)) { continue; } #endif #ifdef INDICATOR_APPLET - if (!g_strcmp0(name, "libme.so")) { + if (!g_strcmp0(name, INDICATOR_SERVICE_ME)) { continue; } - if (!g_strcmp0(name, "libdatetime.so")) { + if (!g_strcmp0(name, INDICATOR_SERVICE_DATETIME)) { continue; } #endif @@ -600,9 +647,7 @@ load_modules (GtkWidget *menubar, gint *indicators_loaded) } } -#if HAVE_INDICATOR_NG - -#define INDICATOR_SERVICE_DIR "/usr/share/unity/indicators" +#if HAVE_AYATANA_INDICATOR_NG || HAVE_UBUNTU_INDICATOR_NG static void load_indicators_from_indicator_files (GtkWidget *menubar, gint *indicators_loaded) @@ -630,19 +675,19 @@ load_indicators_from_indicator_files (GtkWidget *menubar, gint *indicators_loade g_free (filename); #ifdef INDICATOR_APPLET_APPMENU - if (g_strcmp0(name, "com.canonical.indicator.appmenu")) { + if (g_strcmp0(name, INDICATOR_SERVICE_APPMENU_NG)) { continue; } #else - if (!g_strcmp0(name, "com.canonical.indicator.appmenu")) { + if (!g_strcmp0(name, INDICATOR_SERVICE_APPMENU_NG)) { continue; } #endif #ifdef INDICATOR_APPLET - if (!g_strcmp0(name, "com.canonical.indicator.me")) { + if (!g_strcmp0(name, INDICATOR_SERVICE_ME_NG)) { continue; } - if (!g_strcmp0(name, "com.canonical.indicator.datetime")) { + if (!g_strcmp0(name, INDICATOR_SERVICE_DATETIME_NG)) { continue; } #endif @@ -660,7 +705,7 @@ load_indicators_from_indicator_files (GtkWidget *menubar, gint *indicators_loade g_dir_close (dir); } -#endif /* HAVE_INDICATOR_NG */ +#endif /* HAVE_AYATANA_INDICATOR_NG || HAVE_UBUNTU_INDICATOR_NG */ static void hotkey_filter (char * keystring G_GNUC_UNUSED, gpointer data) @@ -885,7 +930,7 @@ static gboolean applet_fill_cb (MatePanelApplet * applet, const gchar * iid G_GNUC_UNUSED, gpointer data G_GNUC_UNUSED) { -#if HAVE_INDICATOR_NG +#if HAVE_AYATANA_INDICATOR_NG || HAVE_UBUNTU_INDICATOR_NG ido_init(); #endif @@ -966,7 +1011,7 @@ applet_fill_cb (MatePanelApplet * applet, const gchar * iid G_GNUC_UNUSED, tomboy_keybinder_bind(hotkey_keycode, hotkey_filter, menubar); load_modules(menubar, &indicators_loaded); -#if HAVE_INDICATOR_NG +#if HAVE_AYATANA_INDICATOR_NG || HAVE_UBUNTU_INDICATOR_NG load_indicators_from_indicator_files(menubar, &indicators_loaded); #endif -- cgit v1.2.1