summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gabriel <[email protected]>2018-01-18 04:06:28 +0100
committerMartin Wimpress <[email protected]>2018-01-18 03:06:28 +0000
commit9d6ee461f95e059a42aea9392c37f5a752e9be3d (patch)
tree4ab51362e50400e1f8e533de40d0e139e26be2fc
parent9ae2153657e2aee44fa6c6a70c9f3c4693a3ea20 (diff)
downloadmate-indicator-applet-9d6ee461f95e059a42aea9392c37f5a752e9be3d.tar.bz2
mate-indicator-applet-9d6ee461f95e059a42aea9392c37f5a752e9be3d.tar.xz
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.
-rw-r--r--configure.ac202
-rw-r--r--src/Makefile.am13
-rw-r--r--src/applet-main.c77
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 <http://www.gnu.org/licenses/>.
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
+#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 <libindicator/indicator-object.h>
+#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 <libayatana-indicator/indicator-object.h>
+#endif
/* For new style indicators */
-#if HAVE_INDICATOR_NG
+
+#if HAVE_UBUNTU_INDICATOR && HAVE_UBUNTU_INDICATOR_NG
+
#include <libido/libido.h>
#include <libindicator/indicator-ng.h>
+
+#define INDICATOR_SERVICE_DIR "/usr/share/unity/indicators"
+
+#endif
+
+#if HAVE_AYATANA_INDICATOR && HAVE_AYATANA_INDICATOR_NG
+
+#include <libayatana-ido/libayatana-ido.h>
+#include <libayatana-indicator/indicator-ng.h>
+
+#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