From 3551eb170dd87fbe11148136813e1bb580b90604 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Wed, 6 Oct 2010 12:08:49 -0400 Subject: instead of always building gtk2 and gtk3, add a --with-gtk= flag to configure to specify which to build with --- configure.ac | 47 ++++++++++++++--------- src/Makefile.am | 92 +++++++++++++++++++-------------------------- src/app-indicator.c | 16 ++++++-- src/indicator-application.c | 7 ++++ 4 files changed, 88 insertions(+), 74 deletions(-) diff --git a/configure.ac b/configure.ac index 42b545e..4abdd9d 100644 --- a/configure.ac +++ b/configure.ac @@ -38,29 +38,39 @@ AC_CONFIG_MACRO_DIR(m4) ########################### GTK_REQUIRED_VERSION=2.18 -GTK3_REQUIRED_VERSION=2.90 +GTK3_REQUIRED_VERSION=2.91 INDICATOR_REQUIRED_VERSION=0.3.5 DBUSMENUGTK_REQUIRED_VERSION=0.2.2 JSON_GLIB_REQUIRED_VERSION=0.7.6 DBUS_GLIB_REQUIRED_VERSION=0.82 -PKG_CHECK_MODULES(INDICATOR, gtk+-2.0 >= $GTK_REQUIRED_VERSION - indicator >= $INDICATOR_REQUIRED_VERSION - json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION - dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION - dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION) - -AC_SUBST(INDICATOR_CFLAGS) -AC_SUBST(INDICATOR_LIBS) - -PKG_CHECK_MODULES(INDICATOR3, gtk+-3.0 >= $GTK3_REQUIRED_VERSION - indicator3 >= $INDICATOR_REQUIRED_VERSION - json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION - dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION - dbusmenu-gtk3 >= $DBUSMENUGTK_REQUIRED_VERSION) - -AC_SUBST(INDICATOR3_CFLAGS) -AC_SUBST(INDICATOR3_LIBS) +AC_ARG_WITH([gtk], + [AS_HELP_STRING([--with-gtk], + [Which version of gtk to use @<:@default=2@:>@])], + [], + [with_gtk=2]) +AS_IF([test "x$with_gtk" = x3], + [PKG_CHECK_MODULES(INDICATOR, gtk+-3.0 >= $GTK3_REQUIRED_VERSION + indicator3 >= $INDICATOR_REQUIRED_VERSION + json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION + dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + dbusmenu-gtk3 >= $DBUSMENUGTK_REQUIRED_VERSION) + AC_SUBST(INDICATOR_CFLAGS) + AC_SUBST(INDICATOR_LIBS) + AC_DEFINE(HAVE_GTK3, 1, [whether gtk3 is available]) + ], + [test "x$with_gtk" = x2], + [PKG_CHECK_MODULES(INDICATOR, gtk+-2.0 >= $GTK_REQUIRED_VERSION + indicator >= $INDICATOR_REQUIRED_VERSION + json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION + dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION) + AC_SUBST(INDICATOR_CFLAGS) + AC_SUBST(INDICATOR_LIBS) + ], + [AC_MSG_FAILURE([Value for --with-gtk was neither 2 nor 3])] +) +AM_CONDITIONAL(USE_GTK3, [test "x$with_gtk" = x3]) ########################### # GObject Introspection @@ -228,4 +238,5 @@ Application Indicator Configuration: Prefix: $prefix Indicator Dir: $INDICATORDIR + GTK+ Version: $with_gtk ]) diff --git a/src/Makefile.am b/src/Makefile.am index 2f0a061..55942d3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,7 +1,19 @@ +if USE_GTK3 +VER=3 +lib_LTLIBRARIES = libappindicator3.la +GTKGIR = Gtk-3.0 +GTKVAPI = gtk+-3.0 +else +VER= +lib_LTLIBRARIES = libappindicator.la +GTKGIR = Gtk-2.0 +GTKVAPI = gtk+-2.0 +endif + CLEANFILES = DISTCLEANFILES = BUILT_SOURCES = -EXTRA_DIST = appindicator-0.1.pc.in appindicator3-0.1.pc.in +EXTRA_DIST = appindicator$(VER)-0.1.pc.in include $(top_srcdir)/Makefile.am.enum include $(top_srcdir)/Makefile.am.marshal @@ -26,19 +38,6 @@ libapplication_la_CFLAGS = $(INDICATOR_CFLAGS) \ libapplication_la_LIBADD = $(INDICATOR_LIBS) libapplication_la_LDFLAGS = -module -avoid-version -applicationlib1dir = $(INDICATORDIR) -applicationlib1_LTLIBRARIES = libapplication3.la -libapplication3_la_SOURCES = $(libapplication_la_SOURCES) -libapplication3_la_CFLAGS = $(INDICATOR3_CFLAGS) \ - -Wall \ - -Wl,-Bsymbolic-functions \ - -Wl,-z,defs \ - -Wl,--as-needed \ - -Werror \ - -DG_LOG_DOMAIN=\"Indicator-Application\" -libapplication3_la_LIBADD = $(INDICATOR3_LIBS) -libapplication3_la_LDFLAGS = $(libapplication_la_LDFLAGS) - ################################## # Service ################################## @@ -70,7 +69,7 @@ indicator_application_service_CFLAGS = \ -DG_LOG_DOMAIN=\"indicator-application-service\" indicator_application_service_LDADD = \ $(INDICATOR_LIBS) \ - libappindicator.la + libappindicator$(VER).la glib_marshal_list = application-service-marshal.list glib_marshal_prefix = _application_service_marshal @@ -79,7 +78,7 @@ glib_marshal_prefix = _application_service_marshal # Library ################################## -pkgconfig_DATA = appindicator-0.1.pc appindicator3-0.1.pc +pkgconfig_DATA = appindicator$(VER)-0.1.pc pkgconfigdir = $(libdir)/pkgconfig glib_enum_h = app-indicator-enum-types.h @@ -88,12 +87,7 @@ glib_enum_headers = $(addprefix $(srcdir)/, $(libappindicator_headers)) DISTCLEANFILES += app-indicator-enum-types.c -lib_LTLIBRARIES = \ - libappindicator.la \ - libappindicator3.la - -libappindicatorincludedir=$(includedir)/libappindicator-0.1/libappindicator -libappindicator3includedir=$(includedir)/libappindicator3-0.1/libappindicator +libappindicatorincludedir=$(includedir)/libappindicator$(VER)-0.1/libappindicator libappindicator_headers = \ app-indicator.h @@ -102,8 +96,6 @@ libappindicatorinclude_HEADERS = \ $(libappindicator_headers) \ $(glib_enum_h) -libappindicator3include_HEADERS = $(libappindicatorinclude_HEADERS) - BUILT_SOURCES += \ notification-watcher-client.h \ notification-item-server.h @@ -112,27 +104,30 @@ libappindicator_la_SOURCES = \ $(libappindicator_headers) \ app-indicator-enum-types.c \ app-indicator.c -libappindicator3_la_SOURCES = $(libappindicator_la_SOURCES) libappindicator_la_LDFLAGS = \ -version-info 0:0:0 \ -no-undefined \ -export-symbols-regex "^[^_d].*" -libappindicator3_la_LDFLAGS = $(libappindicator_la_LDFLAGS) libappindicator_la_CFLAGS = \ $(INDICATOR_CFLAGS) \ -Wall -Werror \ -DG_LOG_DOMAIN=\"libappindicator\" -libappindicator3_la_CFLAGS = \ - $(INDICATOR3_CFLAGS) \ - -Wall -Werror \ - -DG_LOG_DOMAIN=\"libappindicator\" libappindicator_la_LIBADD = \ $(INDICATOR_LIBS) -libappindicator3_la_LIBADD = \ - $(INDICATOR3_LIBS) + +# We duplicate these here because Automake won't let us use $(VER) on the left hand side. +# Since we carefully use $(VER) in the right hand side above, we can assign the same values. +# Only one version of the library is every compiled at the same time, so it is safe to reuse +# the right hand sides like this. +libappindicator3includedir = $(libappindicatorincludedir) +libappindicator3include_HEADERS = $(libappindicatorinclude_HEADERS) +libappindicator3_la_SOURCES = $(libappindicator_la_SOURCES) +libappindicator3_la_LDFLAGS = $(libappindicator_la_LDFLAGS) +libappindicator3_la_CFLAGS = $(libappindicator_la_CFLAGS) +libappindicator3_la_LIBADD = $(libappindicator_la_LIBADD) ################################## # DBus Specs @@ -183,23 +178,20 @@ introspection_sources = \ $(addprefix $(srcdir)/,$(libappindicator_headers)) \ $(addprefix $(top_builddir)/src/, $(glib_enum_h)) -AppIndicator-0.1.gir: libappindicator.la $(glib_enum_h) +AppIndicator$(VER)-0.1.gir: libappindicator$(VER).la $(glib_enum_h) AppIndicator_0_1_gir_INCLUDES = \ GObject-2.0 \ - Gtk-2.0 + $(GTKGIR) AppIndicator_0_1_gir_CFLAGS = $(INDICATOR_CFLAGS) -I$(srcdir) -I$(top_builddir)/src -AppIndicator_0_1_gir_LIBS = libappindicator.la +AppIndicator_0_1_gir_LIBS = libappindicator$(VER).la AppIndicator_0_1_gir_FILES = $(introspection_sources) -AppIndicator3-0.1.gir: libappindicator3.la $(glib_enum_h) -AppIndicator3_0_1_gir_INCLUDES = \ - GObject-2.0 \ - Gtk-3.0 -AppIndicator3_0_1_gir_CFLAGS = $(INDICATOR3_CFLAGS) -I$(srcdir) -I$(top_builddir)/src -AppIndicator3_0_1_gir_LIBS = libappindicator3.la -AppIndicator3_0_1_gir_FILES = $(introspection_sources) +AppIndicator3_0_1_gir_INCLUDES = $(AppIndicator_0_1_gir_INCLUDES) +AppIndicator3_0_1_gir_CFLAGS = $(AppIndicator_0_1_gir_CFLAGS) +AppIndicator3_0_1_gir_LIBS = $(AppIndicator_0_1_gir_LIBS) +AppIndicator3_0_1_gir_FILES = $(AppIndicator_0_1_gir_FILES) -INTROSPECTION_GIRS += AppIndicator-0.1.gir AppIndicator3-0.1.gir +INTROSPECTION_GIRS += AppIndicator$(VER)-0.1.gir girdir = $(datadir)/gir-1.0 gir_DATA = $(INTROSPECTION_GIRS) @@ -218,17 +210,11 @@ endif if HAVE_INTROSPECTION vapidir = $(datadir)/vala/vapi -vapi_DATA = AppIndicator-0.1.vapi AppIndicator3-0.1.vapi - -AppIndicator-0.1.vapi: AppIndicator-0.1.gir Makefile.am - $(VALA_API_GEN) --library=AppIndicator-0.1 \ - --pkg gtk+-2.0 \ - --vapidir=$(top_builddir)/src \ - $< +vapi_DATA = AppIndicator$(VER)-0.1.vapi -AppIndicator3-0.1.vapi: AppIndicator3-0.1.gir Makefile.am - $(VALA_API_GEN) --library=AppIndicator3-0.1 \ - --pkg gtk+-3.0 \ +AppIndicator$(VER)-0.1.vapi: AppIndicator$(VER)-0.1.gir Makefile.am + $(VALA_API_GEN) --library=AppIndicator$(VER)-0.1 \ + --pkg $(GTKVAPI) \ --vapidir=$(top_builddir)/src \ $< diff --git a/src/app-indicator.c b/src/app-indicator.c index 939ca9a..a52a063 100644 --- a/src/app-indicator.c +++ b/src/app-indicator.c @@ -33,7 +33,11 @@ License version 3 and version 2.1 along with this program. If not, see #include #include +#ifdef HAVE_GTK3 +#include +#else #include +#endif #include "app-indicator.h" #include "app-indicator-enum-types.h" @@ -1194,13 +1198,17 @@ static void update_icon_name (DbusmenuMenuitem *menuitem, GtkImage *image) { + const gchar *icon_name = NULL; + if (gtk_image_get_storage_type (image) != GTK_IMAGE_ICON_NAME) return; + gtk_image_get_icon_name (image, &icon_name, NULL); + if (should_show_image (image)) dbusmenu_menuitem_property_set (menuitem, DBUSMENU_MENUITEM_PROP_ICON_NAME, - image->data.name.icon_name); + icon_name); else dbusmenu_menuitem_property_remove (menuitem, DBUSMENU_MENUITEM_PROP_ICON_NAME); @@ -1212,16 +1220,18 @@ update_stock_item (DbusmenuMenuitem *menuitem, GtkImage *image) { GtkStockItem stock; + gchar *stock_id = NULL; if (gtk_image_get_storage_type (image) != GTK_IMAGE_STOCK) return FALSE; - gtk_stock_lookup (image->data.stock.stock_id, &stock); + gtk_image_get_stock (image, &stock_id, NULL); + gtk_stock_lookup (stock_id, &stock); if (should_show_image (image)) dbusmenu_menuitem_property_set (menuitem, DBUSMENU_MENUITEM_PROP_ICON_NAME, - image->data.stock.stock_id); + stock_id); else dbusmenu_menuitem_property_remove (menuitem, DBUSMENU_MENUITEM_PROP_ICON_NAME); diff --git a/src/indicator-application.c b/src/indicator-application.c index 16c3a9f..7735539 100644 --- a/src/indicator-application.c +++ b/src/indicator-application.c @@ -21,6 +21,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /* G Stuff */ #include @@ -29,7 +32,11 @@ with this program. If not, see . /* DBus Stuff */ #include +#ifdef HAVE_GTK3 +#include +#else #include +#endif /* Indicator Stuff */ #include -- cgit v1.2.3