aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am16
-rwxr-xr-xautogen.sh3
-rw-r--r--configure.ac11
-rw-r--r--debian/changelog8
-rw-r--r--docs/Makefile.am1
-rw-r--r--docs/reference/Makefile.am95
-rw-r--r--docs/reference/libappindicator-docs.sgml32
-rw-r--r--docs/reference/libappindicator-sections.txt30
-rw-r--r--docs/reference/libappindicator.types1
-rw-r--r--docs/reference/tmpl/libappindicator-unused.sgml0
-rw-r--r--docs/reference/version.xml.in1
-rw-r--r--example/simple-client.c14
-rw-r--r--gtk-doc.local.make194
-rw-r--r--src/Makefile.am5
-rw-r--r--src/libappindicator/app-indicator.c74
-rw-r--r--src/libappindicator/appindicator-0.1.pc.in14
16 files changed, 489 insertions, 10 deletions
diff --git a/Makefile.am b/Makefile.am
index 33f9f3e..d63fda6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,9 +1,15 @@
-SUBDIRS = data \
- src \
- example \
- tests
+SUBDIRS = data \
+ src \
+ example \
+ tests \
+ docs
-DISTCHECK_CONFIGURE_FLAGS = --enable-localinstall
+EXTRA_DIST = \
+ gtk-doc.make \
+ omf.make \
+ xmldocs.make
+
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-localinstall
dist-hook:
@if test -d "$(top_srcdir)/.bzr"; \
diff --git a/autogen.sh b/autogen.sh
index 6480bd3..741ac76 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -8,4 +8,5 @@ which gnome-autogen.sh || {
}
USE_GNOME2_MACROS=1 \
-. gnome-autogen.sh
+USE_COMMON_DOC_BUILD=yes \
+. gnome-autogen.sh --enable-gtk-doc
diff --git a/configure.ac b/configure.ac
index 1b5e120..74cef75 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,6 +26,13 @@ AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
PKG_PROG_PKG_CONFIG
###########################
+# GTK Doc
+###########################
+
+GTK_DOC_CHECK([1.9])
+AC_CONFIG_MACRO_DIR(m4)
+
+###########################
# Dependencies
###########################
@@ -79,9 +86,13 @@ AC_SUBST(DBUSSERVICEDIR)
AC_OUTPUT([
Makefile
src/Makefile
+src/libappindicator/appindicator-0.1.pc
data/Makefile
tests/Makefile
example/Makefile
+docs/Makefile
+docs/reference/Makefile
+docs/reference/version.xml
])
###########################
diff --git a/debian/changelog b/debian/changelog
index c376b3b..87356a5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+indicator-application (0.0.2-0ubuntu1~ppa2) UNRELEASED; urgency=low
+
+ * Upstream update
+ * Adding in documentation
+ * Adding a pkg-config .pc file for libappindicator
+
+ -- Ted Gould <ted@ubuntu.com> Wed, 09 Dec 2009 12:01:29 -0600
+
indicator-application (0.0.2-0ubuntu1~ppa1) karmic; urgency=low
* Upstream release 0.0.2
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644
index 0000000..f3ddc22
--- /dev/null
+++ b/docs/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = reference
diff --git a/docs/reference/Makefile.am b/docs/reference/Makefile.am
new file mode 100644
index 0000000..e2a02cd
--- /dev/null
+++ b/docs/reference/Makefile.am
@@ -0,0 +1,95 @@
+## Process this file with automake to produce Makefile.in
+
+# We require automake 1.6 at least.
+AUTOMAKE_OPTIONS = 1.6
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE=libappindicator
+
+# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
+#DOC_MODULE_VERSION=2
+
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR=../../src/libappindicator
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS=--nogtkinit --type-init-func="g_type_init()"
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+#SCAN_OPTIONS=--rebuild-types --rebuild-sections
+SCAN_OPTIONS=
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS=--sgml-mode --output-format=xml
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS=
+
+# Extra options to supply to gtkdoc-mkhtml
+MKHTML_OPTIONS=
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS=
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB=$(top_srcdir)/src/libappindicator/*.h
+CFILE_GLOB=$(top_srcdir)/src/libappindicator/*.c
+
+# Header files to ignore when scanning.
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES=app-indicator-enum-types.h application-service-appstore.h application-service-client.h application-service-marshal.h application-service-server.h application-service-watcher.h dbus-properties-client.h dbus-properties-server.h dbus-shared.h notification-item-client.h notification-item-server.h notification-watcher-client.h notification-watcher-server.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES=
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files=version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files=
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_srcdir)/src -I$(top_srcdir)/src/libappindicator $(INDICATOR_CFLAGS)
+GTKDOC_LIBS=$(top_builddir)/src/libappindicator.la $(top_builddir)/src/libapplication.la
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.local.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST += version.xml.in
+
+# Files not to distribute
+# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
+# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
+#DISTCLEANFILES +=
+
+# Comment this out if you want your docs-status tested during 'make check'
+#TESTS = $(GTKDOC_CHECK)
+
diff --git a/docs/reference/libappindicator-docs.sgml b/docs/reference/libappindicator-docs.sgml
new file mode 100644
index 0000000..a8eb058
--- /dev/null
+++ b/docs/reference/libappindicator-docs.sgml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+ <!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
+]>
+<book id="index">
+ <bookinfo>
+ <title>libappindicator Reference Manual</title>
+ <releaseinfo>
+ for libappindicator [VERSION]
+ The latest version of this documentation can be found on-line at
+ <ulink role="online-location" url="http://[SERVER]/libappindicator/index.html">http://[SERVER]/libappindicator/</ulink>.
+ </releaseinfo>
+ </bookinfo>
+
+ <chapter>
+ <title>[Insert title here]</title>
+ <xi:include href="xml/app-indicator.xml"/>
+
+ </chapter>
+ <chapter id="object-tree">
+ <title>Object Hierarchy</title>
+ <xi:include href="xml/tree_index.sgml"/>
+ </chapter>
+ <index id="api-index-full">
+ <title>API Index</title>
+ <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+ </index>
+
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+</book>
diff --git a/docs/reference/libappindicator-sections.txt b/docs/reference/libappindicator-sections.txt
new file mode 100644
index 0000000..d64f53a
--- /dev/null
+++ b/docs/reference/libappindicator-sections.txt
@@ -0,0 +1,30 @@
+<SECTION>
+<FILE>app-indicator</FILE>
+APP_INDICATOR_TYPE
+APP_INDICATOR
+APP_INDICATOR_CLASS
+IS_APP_INDICATOR
+IS_APP_INDICATOR_CLASS
+APP_INDICATOR_GET_CLASS
+APP_INDICATOR_SIGNAL_NEW_ICON
+APP_INDICATOR_SIGNAL_NEW_ATTENTION_ICON
+APP_INDICATOR_SIGNAL_NEW_STATUS
+APP_INDICATOR_SIGNAL_CONNECTION_CHANGED
+AppIndicatorCategory
+AppIndicatorStatus
+AppIndicatorPrivate
+<TITLE>AppIndicator</TITLE>
+AppIndicator
+app_indicator_get_type
+app_indicator_new
+app_indicator_set_status
+app_indicator_set_attention_icon
+app_indicator_set_menu
+app_indicator_set_icon
+app_indicator_get_id
+app_indicator_get_category
+app_indicator_get_status
+app_indicator_get_icon
+app_indicator_get_attention_icon
+</SECTION>
+
diff --git a/docs/reference/libappindicator.types b/docs/reference/libappindicator.types
new file mode 100644
index 0000000..5000a2d
--- /dev/null
+++ b/docs/reference/libappindicator.types
@@ -0,0 +1 @@
+app_indicator_get_type
diff --git a/docs/reference/tmpl/libappindicator-unused.sgml b/docs/reference/tmpl/libappindicator-unused.sgml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/reference/tmpl/libappindicator-unused.sgml
diff --git a/docs/reference/version.xml.in b/docs/reference/version.xml.in
new file mode 100644
index 0000000..d78bda9
--- /dev/null
+++ b/docs/reference/version.xml.in
@@ -0,0 +1 @@
+@VERSION@
diff --git a/example/simple-client.c b/example/simple-client.c
index ab2e24d..ea4da9d 100644
--- a/example/simple-client.c
+++ b/example/simple-client.c
@@ -26,6 +26,14 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
GMainLoop * mainloop = NULL;
+static void
+item_clicked_cb (GtkWidget *widget, gpointer data)
+{
+ const gchar *text = (const gchar *)data;
+
+ g_print ("%s clicked!\n", text);
+}
+
int
main (int argc, char ** argv)
{
@@ -46,12 +54,18 @@ main (int argc, char ** argv)
menu = gtk_menu_new ();
GtkWidget *item = gtk_menu_item_new_with_label ("1");
+ g_signal_connect (item, "activate",
+ G_CALLBACK (item_clicked_cb), "1");
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
item = gtk_menu_item_new_with_label ("2");
+ g_signal_connect (item, "activate",
+ G_CALLBACK (item_clicked_cb), "2");
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
item = gtk_menu_item_new_with_label ("3");
+ g_signal_connect (item, "activate",
+ G_CALLBACK (item_clicked_cb), "3");
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
app_indicator_set_menu (ci, GTK_MENU (menu));
diff --git a/gtk-doc.local.make b/gtk-doc.local.make
new file mode 100644
index 0000000..3dcda60
--- /dev/null
+++ b/gtk-doc.local.make
@@ -0,0 +1,194 @@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN = $(LIBTOOL) --mode=execute
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN = sh -c
+endif
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+EXTRA_DIST = \
+ $(content_files) \
+ $(HTML_IMAGES) \
+ $(DOC_MAIN_SGML_FILE)
+
+DOC_STAMPS=scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+ $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES = \
+ $(DOC_MODULE).args \
+ $(DOC_MODULE).hierarchy \
+ $(DOC_MODULE).interfaces \
+ $(DOC_MODULE).prerequisites \
+ $(DOC_MODULE).signals
+
+REPORT_FILES = \
+ $(DOC_MODULE)-undocumented.txt \
+ $(DOC_MODULE)-undeclared.txt \
+ $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+
+if ENABLE_GTK_DOC
+all-local: html-build.stamp
+else
+all-local:
+endif
+
+docs: html-build.stamp
+
+$(REPORT_FILES): sgml-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+ @echo 'gtk-doc: Scanning header files'
+ @-chmod -R u+w $(srcdir)
+ cd $(srcdir) && \
+ gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+ else \
+ cd $(srcdir) ; \
+ for i in $(SCANOBJ_FILES) ; do \
+ test -f $$i || touch $$i ; \
+ done \
+ fi
+ touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+ @true
+
+#### templates ####
+
+tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+ @echo 'gtk-doc: Rebuilding template files'
+ @-chmod -R u+w $(srcdir)
+ cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+ touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+ @true
+
+tmpl/*.sgml:
+ @true
+
+
+#### xml ####
+
+sgml-build.stamp: tmpl.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
+ @echo 'gtk-doc: Building XML'
+ @-chmod -R u+w $(srcdir)
+ cd $(srcdir) && \
+ gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS)
+ touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+ @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ @echo 'gtk-doc: Building HTML'
+ @-chmod -R u+w $(srcdir)
+ rm -rf $(srcdir)/html
+ mkdir $(srcdir)/html
+ mkhtml_options=""; \
+ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \
+ if test "$(?)" = "0"; then \
+ mkhtml_options=--path="$(srcdir)"; \
+ fi
+ cd $(srcdir)/html && gtkdoc-mkhtml $(mkhtml_options) $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+ @echo 'gtk-doc: Fixing cross-references'
+ cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ touch html-build.stamp
+
+##############
+
+clean-local:
+ rm -f *~ *.bak
+ rm -rf .libs
+
+distclean-local:
+ cd $(srcdir) && \
+ rm -rf xml $(REPORT_FILES) \
+ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+maintainer-clean-local: clean
+ cd $(srcdir) && rm -rf xml html
+
+install-data-local:
+ installfiles=`echo $(srcdir)/html/*`; \
+ if test "$$installfiles" = '$(srcdir)/html/*'; \
+ then echo '-- Nothing to install' ; \
+ else \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ $(mkinstalldirs) $${installdir} ; \
+ for i in $$installfiles; do \
+ echo '-- Installing '$$i ; \
+ $(INSTALL_DATA) $$i $${installdir}; \
+ done; \
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
+ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
+ mv -f $${installdir}/$(DOC_MODULE).devhelp \
+ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp; \
+ fi; \
+ ! which gtkdoc-rebase >/dev/null 2>&1 || \
+ gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir} ; \
+ fi
+
+uninstall-local:
+ if test -n "$(DOC_MODULE_VERSION)"; then \
+ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
+ else \
+ installdir="$(DESTDIR)$(TARGET_DIR)"; \
+ fi; \
+ rm -rf $${installdir}
+
+#
+# Require gtk-doc when making dist
+#
+if ENABLE_GTK_DOC
+dist-check-gtkdoc:
+else
+dist-check-gtkdoc:
+ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+ @false
+endif
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+ mkdir $(distdir)/tmpl
+ mkdir $(distdir)/xml
+ mkdir $(distdir)/html
+ -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+ -cp $(srcdir)/xml/*.xml $(distdir)/xml
+ -cp $(srcdir)/html/* $(distdir)/html
+ -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+ -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+ cd $(distdir) && rm -f $(DISTCLEANFILES)
+ ! which gtkdoc-rebase >/dev/null 2>&1 || \
+ gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
diff --git a/src/Makefile.am b/src/Makefile.am
index 1c19d91..f1878a4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,7 +1,7 @@
CLEANFILES =
DISTCLEANFILES =
BUILT_SOURCES =
-EXTRA_DIST =
+EXTRA_DIST = appindicator-0.1.pc.in
include $(top_srcdir)/Makefile.am.enum
include $(top_srcdir)/Makefile.am.marshal
@@ -57,6 +57,9 @@ glib_marshal_prefix = _application_service_marshal
# Library
##################################
+pkgconfig_DATA = libappindicator/appindicator-0.1.pc
+pkgconfigdir = $(libdir)/pkgconfig
+
glib_enum_h = libappindicator/app-indicator-enum-types.h
glib_enum_c = libappindicator/app-indicator-enum-types.c
glib_enum_headers = $(libappindicator_headers)
diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c
index f61723d..6f4a6fd 100644
--- a/src/libappindicator/app-indicator.c
+++ b/src/libappindicator/app-indicator.c
@@ -633,16 +633,84 @@ app_indicator_set_icon (AppIndicator *self, const gchar *icon_name)
}
static void
+activate_menuitem (DbusmenuMenuitem *mi, gpointer user_data)
+{
+ GtkWidget *widget = (GtkWidget *)user_data;
+
+ gtk_menu_item_activate (GTK_MENU_ITEM (widget));
+}
+
+static void
+menuitem_iterate (GtkWidget *widget,
+ gpointer data)
+{
+ if (GTK_IS_LABEL (widget))
+ {
+ DbusmenuMenuitem *child = (DbusmenuMenuitem *)data;
+
+ dbusmenu_menuitem_property_set (child,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ gtk_label_get_text (GTK_LABEL (widget)));
+ }
+}
+
+static void
container_iterate (GtkWidget *widget,
gpointer data)
{
DbusmenuMenuitem *root = (DbusmenuMenuitem *)data;
DbusmenuMenuitem *child;
+ const gchar *label;
+ gboolean label_set = FALSE;
+
+ label = gtk_menu_item_get_label (GTK_MENU_ITEM (widget));
child = dbusmenu_menuitem_new ();
- dbusmenu_menuitem_property_set (child,
- DBUSMENU_MENUITEM_PROP_LABEL,
- gtk_menu_item_get_label (GTK_MENU_ITEM (widget)));
+
+ if (GTK_IS_IMAGE_MENU_ITEM (widget))
+ {
+ GtkWidget *image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (widget));
+
+ if (gtk_image_get_storage_type (GTK_IMAGE (image)) == GTK_IMAGE_STOCK)
+ {
+ GtkStockItem stock;
+
+ gtk_stock_lookup (GTK_IMAGE (image)->data.stock.stock_id, &stock);
+
+ dbusmenu_menuitem_property_set (child,
+ DBUSMENU_MENUITEM_PROP_ICON,
+ GTK_IMAGE (image)->data.stock.stock_id);
+
+ if (stock.label != NULL)
+ {
+ dbusmenu_menuitem_property_set (child,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ stock.label);
+ label_set = TRUE;
+ }
+ }
+ }
+
+ if (!label_set)
+ {
+ if (label != NULL)
+ {
+ dbusmenu_menuitem_property_set (child,
+ DBUSMENU_MENUITEM_PROP_LABEL,
+ label);
+ }
+ else
+ {
+ /* find label child widget */
+ gtk_container_forall (GTK_CONTAINER (widget),
+ menuitem_iterate,
+ child);
+ }
+ }
+
+ g_signal_connect (G_OBJECT (child),
+ DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
+ G_CALLBACK (activate_menuitem), widget);
dbusmenu_menuitem_child_append (root, child);
}
diff --git a/src/libappindicator/appindicator-0.1.pc.in b/src/libappindicator/appindicator-0.1.pc.in
new file mode 100644
index 0000000..b80fded
--- /dev/null
+++ b/src/libappindicator/appindicator-0.1.pc.in
@@ -0,0 +1,14 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+bindir=@bindir@
+includedir=@includedir@
+
+Cflags: -I${includedir}/libappindicator-0.1
+Requires: dbusmenu-glib gtk+-2.0
+Libs: -L${libdir} -lappindicator
+
+Name: appindicator-0.1
+Description: Application indicators
+Version: @VERSION@
+