diff options
-rw-r--r-- | Makefile.am | 22 | ||||
-rwxr-xr-x | autogen.sh | 3 | ||||
-rw-r--r-- | configure.ac | 19 | ||||
-rw-r--r-- | docs/Makefile.am | 1 | ||||
-rw-r--r-- | docs/reference/Makefile.am | 102 | ||||
-rw-r--r-- | docs/reference/libappindicator-docs.sgml.in | 30 | ||||
-rw-r--r-- | docs/reference/libappindicator-sections.txt | 31 | ||||
-rw-r--r-- | docs/reference/libappindicator.types | 1 | ||||
-rw-r--r-- | docs/reference/tmpl/libappindicator-unused.sgml | 0 | ||||
-rw-r--r-- | docs/reference/version.xml.in | 1 | ||||
-rw-r--r-- | gtk-doc.local.make | 194 | ||||
-rw-r--r-- | src/Makefile.am | 5 | ||||
-rw-r--r-- | src/libappindicator/app-indicator.c | 112 | ||||
-rw-r--r-- | src/libappindicator/app-indicator.h | 72 | ||||
-rw-r--r-- | src/libappindicator/appindicator-0.1.pc.in | 14 |
15 files changed, 583 insertions, 24 deletions
diff --git a/Makefile.am b/Makefile.am index aee7109..a9b445c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,11 +1,19 @@ -SUBDIRS = \ - data \ - src \ - bindings \ - example \ - tests +SUBDIRS = data \ + src \ + bindings \ + example \ + tests \ + docs -DISTCHECK_CONFIGURE_FLAGS = --enable-localinstall +EXTRA_DIST = \ + gtk-doc.make \ + omf.make \ + xmldocs.make \ + autogen.sh \ + COPYING.LGPL.2.1 \ + COPYING.LGPL.3 + +DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-localinstall dist-hook: @if test -d "$(top_srcdir)/.bzr"; \ @@ -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 8044d24..456ca87 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ -AC_INIT(indicator-application, 0.0.2, ted@canonical.com) +AC_INIT(indicator-application, 0.0.4, ted@canonical.com) AC_COPYRIGHT([Copyright 2009 Canonical]) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-application, 0.0.2) +AM_INIT_AUTOMAKE(indicator-application, 0.0.4) AM_MAINTAINER_MODE @@ -26,11 +26,19 @@ AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal]) PKG_PROG_PKG_CONFIG ########################### +# GTK Doc +########################### + +GTK_DOC_CHECK([1.9]) +AC_CONFIG_MACRO_DIR(m4) + + +########################### # Dependencies ########################### GTK_REQUIRED_VERSION=2.12 -INDICATOR_REQUIRED_VERSION=0.2.0 +INDICATOR_REQUIRED_VERSION=0.3.0 DBUSMENUGTK_REQUIRED_VERSION=0.1.1 PKG_CHECK_MODULES(INDICATOR, gtk+-2.0 >= $GTK_REQUIRED_VERSION @@ -128,6 +136,7 @@ AC_SUBST(DBUSSERVICEDIR) AC_OUTPUT([ Makefile src/Makefile +src/libappindicator/appindicator-0.1.pc bindings/Makefile bindings/mono/Makefile bindings/mono/appindicator-sharp.dll.config @@ -135,6 +144,10 @@ bindings/mono/appindicator-sharp.pc data/Makefile tests/Makefile example/Makefile +docs/Makefile +docs/reference/Makefile +docs/reference/version.xml +docs/reference/libappindicator-docs.sgml ]) ########################### 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..1292f4d --- /dev/null +++ b/docs/reference/Makefile.am @@ -0,0 +1,102 @@ +## 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 libappindicator-docs.sgml.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-in-srcdir + +gtkdoc-in-srcdir: Makefile.am + @echo "#!/bin/sh" > $@ + @echo "cd \"$(srcdir)\"" >> $@ + @echo "$(GTKDOC_CHECK)" >> $@ + @chmod +x $@ +DISTCLEANFILES = gtkdoc-in-srcdir + diff --git a/docs/reference/libappindicator-docs.sgml.in b/docs/reference/libappindicator-docs.sgml.in new file mode 100644 index 0000000..3a8e5de --- /dev/null +++ b/docs/reference/libappindicator-docs.sgml.in @@ -0,0 +1,30 @@ +<?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@ + </releaseinfo> + </bookinfo> + + <chapter> + <title>Base Classes for Applications</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..b994297 --- /dev/null +++ b/docs/reference/libappindicator-sections.txt @@ -0,0 +1,31 @@ +<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 +AppIndicatorClass +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/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..ee4b7a7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,7 +1,7 @@ CLEANFILES = DISTCLEANFILES = BUILT_SOURCES = -EXTRA_DIST = +EXTRA_DIST = libappindicator/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 bd72499..791f9ff 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -33,6 +33,7 @@ License version 3 and version 2.1 along with this program. If not, see #include <dbus/dbus-glib.h> #include <libdbusmenu-glib/server.h> +#include <libdbusmenu-gtk/client.h> #include "libappindicator/app-indicator.h" #include "libappindicator/app-indicator-enum-types.h" @@ -549,7 +550,12 @@ category_from_enum (AppIndicatorCategory category) @icon_name: The icon name for this indicator @category: The category of indicator. - @returns: A pointer to a new #AppIndicator object. + Creates a new #AppIndicator setting the properties: + #AppIndicator::id with @id, #AppIndicator::category + with @category and #AppIndicator::icon-name with + @icon_name. + + Return value: A pointer to a new #AppIndicator object. */ AppIndicator * app_indicator_new (const gchar *id, @@ -566,8 +572,16 @@ app_indicator_new (const gchar *id, } /** + app_indicator_get_type: + + Generates or returns the unique #GType for #AppIndicator. + + Return value: A unique #GType for #AppIndicator objects. +*/ + +/** app_indicator_set_status: - @ci: The #AppIndicator object to use + @self: The #AppIndicator object to use @status: The status to set for this indicator Wrapper function for property #AppIndicator::status. @@ -588,7 +602,7 @@ app_indicator_set_status (AppIndicator *self, AppIndicatorStatus status) /** app_indicator_set_attention_icon: - @ci: The #AppIndicator object to use + @self: The #AppIndicator object to use @icon_name: The name of the attention icon to set for this indicator Wrapper function for property #AppIndicator::attention-icon. @@ -614,6 +628,10 @@ app_indicator_set_attention_icon (AppIndicator *self, const gchar *icon_name) app_indicator_set_icon: @self: The #AppIndicator object to use @icon_name: The icon name to set. + + Sets the default icon to use when the status is active but + not set to attention. In most cases, this should be the + application icon for the program. **/ void app_indicator_set_icon (AppIndicator *self, const gchar *icon_name) @@ -641,17 +659,83 @@ activate_menuitem (DbusmenuMenuitem *mi, gpointer user_data) } 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 = NULL; + gboolean label_set = FALSE; child = dbusmenu_menuitem_new (); - dbusmenu_menuitem_property_set (child, - DBUSMENU_MENUITEM_PROP_LABEL, - gtk_menu_item_get_label (GTK_MENU_ITEM (widget))); - g_signal_connect (G_OBJECT(child), + + if (GTK_IS_SEPARATOR_MENU_ITEM (widget)) + { + dbusmenu_menuitem_property_set (child, + "type", + DBUSMENU_CLIENT_TYPES_SEPARATOR); + } + else + { + 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); @@ -678,6 +762,10 @@ setup_dbusmenu (AppIndicator *self) app_indicator_set_menu: @self: The #AppIndicator @menu: A #GtkMenu to set + + Sets the menu that should be shown when the Application Indicator + is clicked on in the panel. An application indicator will not + be rendered unless it has a menu. **/ void app_indicator_set_menu (AppIndicator *self, GtkMenu *menu) @@ -704,7 +792,7 @@ app_indicator_set_menu (AppIndicator *self, GtkMenu *menu) /** app_indicator_get_id: - @ci: The #AppIndicator object to use + @self: The #AppIndicator object to use Wrapper function for property #AppIndicator::id. @@ -720,7 +808,7 @@ app_indicator_get_id (AppIndicator *self) /** app_indicator_get_category: - @ci: The #AppIndicator object to use + @self: The #AppIndicator object to use Wrapper function for property #AppIndicator::category. @@ -736,7 +824,7 @@ app_indicator_get_category (AppIndicator *self) /** app_indicator_get_status: - @ci: The #AppIndicator object to use + @self: The #AppIndicator object to use Wrapper function for property #AppIndicator::status. @@ -752,7 +840,7 @@ app_indicator_get_status (AppIndicator *self) /** app_indicator_get_icon: - @ci: The #AppIndicator object to use + @self: The #AppIndicator object to use Wrapper function for property #AppIndicator::icon-name. @@ -768,7 +856,7 @@ app_indicator_get_icon (AppIndicator *self) /** app_indicator_get_attention_icon: - @ci: The #AppIndicator object to use + @self: The #AppIndicator object to use Wrapper function for property #AppIndicator::attention-icon-name. diff --git a/src/libappindicator/app-indicator.h b/src/libappindicator/app-indicator.h index 6a961fe..e966a49 100644 --- a/src/libappindicator/app-indicator.h +++ b/src/libappindicator/app-indicator.h @@ -34,6 +34,41 @@ License version 3 and version 2.1 along with this program. If not, see G_BEGIN_DECLS +/** + APP_INDICATOR_TYPE: + + Get the #GType for a #AppIndicator. +*/ +/** + APP_INDICATOR: + @obj: The object to convert + + Safely convert a #GObject into an #AppIndicator. +*/ +/** + APP_INDICATOR_CLASS: + @klass: #GObjectClass based class to convert. + + Safely convert a #GObjectClass into a #AppIndicatorClass. +*/ +/** + IS_APP_INDICATOR: + @obj: An #GObject to check + + Checks to see if @obj is in the object hierarchy of #AppIndicator. +*/ +/** + IS_APP_INDICATOR_CLASS: + @klass: An #GObjectClass to check + + Checks to see if @klass is in the object class hierarchy of #AppIndicatorClass. +*/ +/** + APP_INDICATOR_GET_CLASS: + @obj: A #GObject in the class hierarchy of #AppIndicator. + + Gets a pointer to the #AppIndicatorClass for the object @obj. +*/ #define APP_INDICATOR_TYPE (app_indicator_get_type ()) #define APP_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APP_INDICATOR_TYPE, AppIndicator)) #define APP_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APP_INDICATOR_TYPE, AppIndicatorClass)) @@ -41,6 +76,26 @@ G_BEGIN_DECLS #define IS_APP_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), APP_INDICATOR_TYPE)) #define APP_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), APP_INDICATOR_TYPE, AppIndicatorClass)) +/** + APP_INDICATOR_SIGNAL_NEW_ICON: + + String identifier for the #AppIndicator::new-icon signal. +*/ +/** + APP_INDICATOR_SIGNAL_NEW_ATTENTION_ICON: + + String identifier for the #AppIndicator::new-attention-icon signal. +*/ +/** + APP_INDICATOR_SIGNAL_NEW_STATUS: + + String identifier for the #AppIndicator::new-status signal. +*/ +/** + APP_INDICATOR_SIGNAL_CONNECTION_CHANGED: + + String identifier for the #AppIndicator::connection-changed signal. +*/ #define APP_INDICATOR_SIGNAL_NEW_ICON "new-icon" #define APP_INDICATOR_SIGNAL_NEW_ATTENTION_ICON "new-attention-icon" #define APP_INDICATOR_SIGNAL_NEW_STATUS "new-status" @@ -167,4 +222,21 @@ const gchar * app_indicator_get_attention_icon (AppIndicator * G_END_DECLS +/** + SECTION:app-indicator + @short_description: An object to put application information + into the panel. + @stability: Unstable + @include: libappindicator/app-indicator.h + + An application indicator is a way for an application to put + a menu into the panel on the user's screen. This allows the + user to interact with the application even though it might + not be visible to the user at the time. In most cases this + is not a good solution as there are other ways to inform the + user. It should only be use if persistence is a desired + feature for the user (not for your marketing purpose of + having your logo in the panel). +*/ + #endif 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@ + |