diff options
-rw-r--r-- | ChangeLog | 128 | ||||
-rwxr-xr-x | configure | 20 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | docs/reference/html/ch01.html | 2 | ||||
-rw-r--r-- | docs/reference/html/index.html | 2 | ||||
-rw-r--r-- | docs/reference/html/libappindicator-app-indicator.html | 110 | ||||
-rw-r--r-- | docs/reference/html/object-tree.html | 2 | ||||
-rw-r--r-- | docs/reference/libappindicator-docs.sgml | 2 | ||||
-rw-r--r-- | docs/reference/tmpl/app-indicator.sgml | 2 | ||||
-rw-r--r-- | docs/reference/version.xml | 2 | ||||
-rw-r--r-- | docs/reference/xml/app-indicator.xml | 4 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/Makefile.in | 1 | ||||
-rw-r--r-- | src/application-service-appstore.c | 125 | ||||
-rw-r--r-- | src/application-service-appstore.h | 14 | ||||
-rw-r--r-- | src/application-service-watcher.c | 14 | ||||
-rw-r--r-- | src/dbus-shared.h | 2 | ||||
-rw-r--r-- | src/notification-approver.xml | 22 | ||||
-rw-r--r-- | src/notification-watcher.xml | 7 | ||||
-rw-r--r-- | tests/Makefile.am | 28 | ||||
-rw-r--r-- | tests/Makefile.in | 70 | ||||
-rw-r--r-- | tests/test-approver.c | 179 |
22 files changed, 642 insertions, 99 deletions
@@ -1,5 +1,133 @@ # Generated by Makefile. Do not edit. +2010-07-13 Ted Gould <ted@gould.cx> + + Adjusting the tests so they can deal with slow systems better. + +2010-07-12 Ted Gould <ted@gould.cx> + + Ignoring the tester script + +2010-07-12 Ted Gould <ted@gould.cx> + + Add a fail timeout so this test can't block. + +2010-07-12 Ted Gould <ted@gould.cx> + + Adding in setting the environment variable to adjust the timeout to be twice as long for slow systems. + +2010-07-12 Ted Gould <ted@gould.cx> + + Putting in a basic approver API. + +2010-07-09 Ted Gould <ted@gould.cx> + + Need the built headers too + +2010-07-09 Ted Gould <ted@gould.cx> + + Oops, with a menu we're all GTK now. + +2010-07-09 Ted Gould <ted@gould.cx> + + Building up to a formal test + +2010-07-09 Ted Gould <ted@gould.cx> + + Filling out the approve function. + +2010-07-09 Ted Gould <ted@gould.cx> + + Filling out the approver prototype + +2010-07-09 Ted Gould <ted@gould.cx> + + Building an application indicator too! + +2010-07-09 Ted Gould <ted@gould.cx> + + Making the registration async to clean things up, and async is better anyway. + +2010-07-09 Ted Gould <ted@gould.cx> + + Some more error handling and better debug messages. + +2010-07-09 Ted Gould <ted@gould.cx> + + Helpful debug info + +2010-07-09 Ted Gould <ted@gould.cx> + + Okay, so now we're detecing when the watcher comes up, and registering ourselves as the approver. + +2010-07-09 Ted Gould <ted@gould.cx> + + Adding a new sample approver + +2010-07-09 Ted Gould <ted@gould.cx> + + When we have new apps we can ask the approver about them. + +2010-07-09 Ted Gould <ted@gould.cx> + + Looking at all the applications when we get a new approver. + +2010-07-09 Ted Gould <ted@gould.cx> + + Building the approver structure and putting it in the list. + +2010-07-09 Ted Gould <ted@gould.cx> + + Comments + +2010-07-09 Ted Gould <ted@gould.cx> + + Adding some structures for approvers and making them real. + +2010-07-09 Ted Gould <ted@gould.cx> + + For DBus to real objects, the signal shall travel. + +2010-07-09 Ted Gould <ted@gould.cx> + + Adding a function to bring in approvers + +2010-07-09 Ted Gould <ted@gould.cx> + + Sync to trunk + +2010-07-01 Ted Gould <ted@gould.cx> + + Return a boolean + +2010-06-25 Ted Gould <ted@gould.cx> + + Adding in a template function to register approvers. + +2010-06-25 Ted Gould <ted@gould.cx> + + Adding a function to register an approver. + +2010-06-25 Ted Gould <ted@gould.cx> + + Adding an approver interface. + +2010-07-08 Ted Gould <ted@gould.cx> + + Use a private pointer instead of a lookup. + +2010-07-08 Sense Hofstede <qense@ubuntu.com> + + Removed all but one calls to the APPLICATION_SERVICE_APPSTORE_GET_PRIVATE() macro + + All references to the APPLICATION_SERVICE_APPSTORE_GET_PRIVATE() macro were removed + from src/application-service-appstore.c. This makes this file comply with the + recommended practise, which should reduce overhead. + +2010-07-08 Ted Gould <ted@gould.cx> + + 0.2.2 + 2010-07-07 Ted Gould <ted@gould.cx> Merging this branch, but I think it's fixes must have gone in with another. @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for indicator-application 0.2.2. +# Generated by GNU Autoconf 2.65 for indicator-application 0.2.3. # # Report bugs to <ted@canonical.com>. # @@ -703,8 +703,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='indicator-application' PACKAGE_TARNAME='indicator-application' -PACKAGE_VERSION='0.2.2' -PACKAGE_STRING='indicator-application 0.2.2' +PACKAGE_VERSION='0.2.3' +PACKAGE_STRING='indicator-application 0.2.3' PACKAGE_BUGREPORT='ted@canonical.com' PACKAGE_URL='' @@ -1505,7 +1505,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures indicator-application 0.2.2 to adapt to many kinds of systems. +\`configure' configures indicator-application 0.2.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1576,7 +1576,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of indicator-application 0.2.2:";; + short | recursive ) echo "Configuration of indicator-application 0.2.3:";; esac cat <<\_ACEOF @@ -1709,7 +1709,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -indicator-application configure 0.2.2 +indicator-application configure 0.2.3 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. @@ -1989,7 +1989,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by indicator-application $as_me 0.2.2, which was +It was created by indicator-application $as_me 0.2.3, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -2803,7 +2803,7 @@ fi # Define the identity of the package. PACKAGE=indicator-application - VERSION=0.2.2 + VERSION=0.2.3 cat >>confdefs.h <<_ACEOF @@ -13684,7 +13684,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by indicator-application $as_me 0.2.2, which was +This file was extended by indicator-application $as_me 0.2.3, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13750,7 +13750,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -indicator-application config.status 0.2.2 +indicator-application config.status 0.2.3 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 86c60e7..9ac78ec 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ -AC_INIT(indicator-application, 0.2.2, ted@canonical.com) +AC_INIT(indicator-application, 0.2.3, ted@canonical.com) AC_COPYRIGHT([Copyright 2009, 2010 Canonical]) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-application, 0.2.2) +AM_INIT_AUTOMAKE(indicator-application, 0.2.3) AM_MAINTAINER_MODE diff --git a/docs/reference/html/ch01.html b/docs/reference/html/ch01.html index 482df68..ea82870 100644 --- a/docs/reference/html/ch01.html +++ b/docs/reference/html/ch01.html @@ -21,7 +21,7 @@ </tr></table> <div class="chapter" title="Base Classes for Applications"> <div class="titlepage"><div><div><h2 class="title"> -<a name="id460829"></a>Base Classes for Applications</h2></div></div></div> +<a name="id495610"></a>Base Classes for Applications</h2></div></div></div> <div class="toc"><dl><dt> <span class="refentrytitle"><a href="libappindicator-app-indicator.html">AppIndicator</a></span><span class="refpurpose"> — An object to put application information into the panel.</span> diff --git a/docs/reference/html/index.html b/docs/reference/html/index.html index b189675..34550b7 100644 --- a/docs/reference/html/index.html +++ b/docs/reference/html/index.html @@ -15,7 +15,7 @@ <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libappindicator Reference Manual</p></th></tr></table></div> <div><p class="releaseinfo"> - for libappindicator 0.2.0 + for libappindicator 0.2.2 </p></div> </div> <hr> diff --git a/docs/reference/html/libappindicator-app-indicator.html b/docs/reference/html/libappindicator-app-indicator.html index f94b82e..a9f5812 100644 --- a/docs/reference/html/libappindicator-app-indicator.html +++ b/docs/reference/html/libappindicator-app-indicator.html @@ -66,48 +66,48 @@ enum <a class="link" href="libappindicator-app-indicator.html#App <a class="link" href="libappindicator-app-indicator.html#AppIndicatorPrivate" title="AppIndicatorPrivate">AppIndicatorPrivate</a>; <a class="link" href="libappindicator-app-indicator.html#AppIndicator-struct" title="AppIndicator">AppIndicator</a>; <a class="link" href="libappindicator-app-indicator.html#AppIndicatorClass" title="AppIndicatorClass">AppIndicatorClass</a>; -<a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-type" title="app_indicator_get_type ()">app_indicator_get_type</a> (<em class="parameter"><code><span class="type">void</span></code></em>); -<a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="returnvalue">AppIndicator</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-new" title="app_indicator_new ()">app_indicator_new</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>, +<a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-type" title="app_indicator_get_type ()">app_indicator_get_type</a> (<em class="parameter"><code><span class="type">void</span></code></em>); +<a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="returnvalue">AppIndicator</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-new" title="app_indicator_new ()">app_indicator_new</a> (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id</code></em>, + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>, <em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicatorCategory" title="enum AppIndicatorCategory"><span class="type">AppIndicatorCategory</span></a> category</code></em>); -<a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="returnvalue">AppIndicator</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-new-with-path" title="app_indicator_new_with_path ()">app_indicator_new_with_path</a> (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>, +<a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="returnvalue">AppIndicator</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-new-with-path" title="app_indicator_new_with_path ()">app_indicator_new_with_path</a> (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id</code></em>, + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>, <em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicatorCategory" title="enum AppIndicatorCategory"><span class="type">AppIndicatorCategory</span></a> category</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_path</code></em>); + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_path</code></em>); <span class="returnvalue">void</span> <a class="link" href="libappindicator-app-indicator.html#app-indicator-set-status" title="app_indicator_set_status ()">app_indicator_set_status</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>, <em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicatorStatus" title="enum AppIndicatorStatus"><span class="type">AppIndicatorStatus</span></a> status</code></em>); <span class="returnvalue">void</span> <a class="link" href="libappindicator-app-indicator.html#app-indicator-set-attention-icon" title="app_indicator_set_attention_icon ()">app_indicator_set_attention_icon</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>); + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>); <span class="returnvalue">void</span> <a class="link" href="libappindicator-app-indicator.html#app-indicator-set-menu" title="app_indicator_set_menu ()">app_indicator_set_menu</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>, <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk/GtkMenu.html"><span class="type">GtkMenu</span></a> *menu</code></em>); <span class="returnvalue">void</span> <a class="link" href="libappindicator-app-indicator.html#app-indicator-set-icon" title="app_indicator_set_icon ()">app_indicator_set_icon</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>); -const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-id" title="app_indicator_get_id ()">app_indicator_get_id</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>); + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>); +const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-id" title="app_indicator_get_id ()">app_indicator_get_id</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>); <a class="link" href="libappindicator-app-indicator.html#AppIndicatorCategory" title="enum AppIndicatorCategory"><span class="returnvalue">AppIndicatorCategory</span></a> <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-category" title="app_indicator_get_category ()">app_indicator_get_category</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>); <a class="link" href="libappindicator-app-indicator.html#AppIndicatorStatus" title="enum AppIndicatorStatus"><span class="returnvalue">AppIndicatorStatus</span></a> <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-status" title="app_indicator_get_status ()">app_indicator_get_status</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>); -const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-icon" title="app_indicator_get_icon ()">app_indicator_get_icon</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>); -const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-attention-icon" title="app_indicator_get_attention_icon ()">app_indicator_get_attention_icon</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>); +const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-icon" title="app_indicator_get_icon ()">app_indicator_get_icon</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>); +const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-attention-icon" title="app_indicator_get_attention_icon ()">app_indicator_get_attention_icon</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>); <a href="/usr/share/gtk-doc/html/gtk/GtkMenu.html"><span class="returnvalue">GtkMenu</span></a> * <a class="link" href="libappindicator-app-indicator.html#app-indicator-get-menu" title="app_indicator_get_menu ()">app_indicator_get_menu</a> (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>); </pre> </div> <div class="refsect1" title="Object Hierarchy"> <a name="libappindicator-app-indicator.object-hierarchy"></a><h2>Object Hierarchy</h2> <pre class="synopsis"> - <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a> + <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a> +----AppIndicator </pre> </div> <div class="refsect1" title="Properties"> <a name="libappindicator-app-indicator.properties"></a><h2>Properties</h2> <pre class="synopsis"> - "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--attention-icon-name" title='The "attention-icon-name" property'>attention-icon-name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write - "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--category" title='The "category" property'>category</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only - "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--connected" title='The "connected" property'>connected</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read - "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--icon-name" title='The "icon-name" property'>icon-name</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct - "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--icon-theme-path" title='The "icon-theme-path" property'>icon-theme-path</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only - "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--id" title='The "id" property'>id</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only + "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--attention-icon-name" title='The "attention-icon-name" property'>attention-icon-name</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write + "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--category" title='The "category" property'>category</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only + "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--connected" title='The "connected" property'>connected</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read + "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--icon-name" title='The "icon-name" property'>icon-name</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write + "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--icon-theme-path" title='The "icon-theme-path" property'>icon-theme-path</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only + "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--id" title='The "id" property'>id</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--menu" title='The "menu" property'>menu</a>" <span class="type">DBusGObjectPath</span>* : Read - "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--status" title='The "status" property'>status</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write + "<a class="link" href="libappindicator-app-indicator.html#AppIndicator--status" title='The "status" property'>status</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write </pre> </div> <div class="refsect1" title="Signals"> @@ -139,7 +139,7 @@ An application indicator is a way for an application to put <pre class="programlisting">#define APP_INDICATOR_TYPE (app_indicator_get_type ()) </pre> <p> -Get the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for a <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a>. +Get the <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for a <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a>. </p> </div> <hr> @@ -148,7 +148,7 @@ Get the <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-In <pre class="programlisting">#define APP_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APP_INDICATOR_TYPE, AppIndicator)) </pre> <p> -Safely convert a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> into an <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a>. +Safely convert a <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> into an <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a>. </p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> @@ -165,14 +165,14 @@ Safely convert a <a href="http://library.gnome.org/devel/gobject/unstable/gobjec <pre class="programlisting">#define APP_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APP_INDICATOR_TYPE, AppIndicatorClass)) </pre> <p> -Safely convert a <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> into a <a class="link" href="libappindicator-app-indicator.html#AppIndicatorClass" title="AppIndicatorClass"><span class="type">AppIndicatorClass</span></a>. +Safely convert a <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> into a <a class="link" href="libappindicator-app-indicator.html#AppIndicatorClass" title="AppIndicatorClass"><span class="type">AppIndicatorClass</span></a>. </p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td> <td> -<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> based class to convert. +<a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> based class to convert. </td> </tr></tbody> </table></div> @@ -189,7 +189,7 @@ Checks to see if <em class="parameter"><code>obj</code></em> is in the object hi <col align="left" valign="top"> <tbody><tr> <td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td> -<td>An <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> to check +<td>An <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> to check </td> </tr></tbody> </table></div> @@ -206,7 +206,7 @@ Checks to see if <em class="parameter"><code>klass</code></em> is in the object <col align="left" valign="top"> <tbody><tr> <td><p><span class="term"><em class="parameter"><code>klass</code></em> :</span></p></td> -<td>An <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> to check +<td>An <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> to check </td> </tr></tbody> </table></div> @@ -223,7 +223,7 @@ Gets a pointer to the <a class="link" href="libappindicator-app-indicator.html#A <col align="left" valign="top"> <tbody><tr> <td><p><span class="term"><em class="parameter"><code>obj</code></em> :</span></p></td> -<td>A <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> in the class hierarchy of <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a>. +<td>A <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> in the class hierarchy of <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a>. </td> </tr></tbody> </table></div> @@ -405,7 +405,7 @@ The signals and external functions that make up the <a class="link" href="libapp <col align="left" valign="top"> <tbody> <tr> -<td><p><span class="term"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> <em class="structfield"><code><a name="AppIndicatorClass.parent-class"></a>parent_class</code></em>;</span></p></td> +<td><p><span class="term"><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> <em class="structfield"><code><a name="AppIndicatorClass.parent-class"></a>parent_class</code></em>;</span></p></td> <td>Mia familia </td> </tr> @@ -457,15 +457,15 @@ The signals and external functions that make up the <a class="link" href="libapp <hr> <div class="refsect2" title="app_indicator_get_type ()"> <a name="app-indicator-get-type"></a><h3>app_indicator_get_type ()</h3> -<pre class="programlisting"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> app_indicator_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre> +<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a> app_indicator_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre> <p> -Generates or returns the unique <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a>. +Generates or returns the unique <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a>. </p> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> -<td> A unique <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> objects. +<td> A unique <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> for <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> objects. </td> </tr></tbody> </table></div> @@ -473,8 +473,8 @@ Generates or returns the unique <a href="http://library.gnome.org/devel/gobject/ <hr> <div class="refsect2" title="app_indicator_new ()"> <a name="app-indicator-new"></a><h3>app_indicator_new ()</h3> -<pre class="programlisting"><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="returnvalue">AppIndicator</span></a> * app_indicator_new (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>, +<pre class="programlisting"><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="returnvalue">AppIndicator</span></a> * app_indicator_new (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id</code></em>, + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>, <em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicatorCategory" title="enum AppIndicatorCategory"><span class="type">AppIndicatorCategory</span></a> category</code></em>);</pre> <p> Creates a new <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> setting the properties: @@ -511,10 +511,10 @@ Creates a new <a class="link" href="libappindicator-app-indicator.html#AppIndica <hr> <div class="refsect2" title="app_indicator_new_with_path ()"> <a name="app-indicator-new-with-path"></a><h3>app_indicator_new_with_path ()</h3> -<pre class="programlisting"><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="returnvalue">AppIndicator</span></a> * app_indicator_new_with_path (<em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>, +<pre class="programlisting"><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="returnvalue">AppIndicator</span></a> * app_indicator_new_with_path (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *id</code></em>, + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>, <em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicatorCategory" title="enum AppIndicatorCategory"><span class="type">AppIndicatorCategory</span></a> category</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_path</code></em>);</pre> + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_path</code></em>);</pre> <p> Creates a new <a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> setting the properties: <a class="link" href="libappindicator-app-indicator.html#AppIndicator--id" title='The "id" property'><span class="type">"id"</span></a> with <em class="parameter"><code>id</code></em>, <a class="link" href="libappindicator-app-indicator.html#AppIndicator--category" title='The "category" property'><span class="type">"category"</span></a> @@ -580,7 +580,7 @@ Wrapper function for property <a class="link" href="libappindicator-app-indicato <div class="refsect2" title="app_indicator_set_attention_icon ()"> <a name="app-indicator-set-attention-icon"></a><h3>app_indicator_set_attention_icon ()</h3> <pre class="programlisting"><span class="returnvalue">void</span> app_indicator_set_attention_icon (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>);</pre> + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>);</pre> <p> Wrapper function for property <a class="link" href="libappindicator-app-indicator.html#AppIndicator--attention-icon-name" title='The "attention-icon-name" property'><span class="type">"attention-icon-name"</span></a>. </p> @@ -632,7 +632,7 @@ Sets the menu that should be shown when the Application Indicator <div class="refsect2" title="app_indicator_set_icon ()"> <a name="app-indicator-set-icon"></a><h3>app_indicator_set_icon ()</h3> <pre class="programlisting"><span class="returnvalue">void</span> app_indicator_set_icon (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>, - <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>);</pre> + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *icon_name</code></em>);</pre> <p> Sets the default icon to use when the status is active but not set to attention. In most cases, this should be the @@ -658,7 +658,7 @@ Sets the default icon to use when the status is active but <hr> <div class="refsect2" title="app_indicator_get_id ()"> <a name="app-indicator-get-id"></a><h3>app_indicator_get_id ()</h3> -<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * app_indicator_get_id (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>);</pre> +<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * app_indicator_get_id (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>);</pre> <p> Wrapper function for property <a class="link" href="libappindicator-app-indicator.html#AppIndicator--id" title='The "id" property'><span class="type">"id"</span></a>. </p> @@ -727,7 +727,7 @@ Wrapper function for property <a class="link" href="libappindicator-app-indicato <hr> <div class="refsect2" title="app_indicator_get_icon ()"> <a name="app-indicator-get-icon"></a><h3>app_indicator_get_icon ()</h3> -<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * app_indicator_get_icon (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>);</pre> +<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * app_indicator_get_icon (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>);</pre> <p> Wrapper function for property <a class="link" href="libappindicator-app-indicator.html#AppIndicator--icon-name" title='The "icon-name" property'><span class="type">"icon-name"</span></a>. </p> @@ -750,7 +750,7 @@ Wrapper function for property <a class="link" href="libappindicator-app-indicato <hr> <div class="refsect2" title="app_indicator_get_attention_icon ()"> <a name="app-indicator-get-attention-icon"></a><h3>app_indicator_get_attention_icon ()</h3> -<pre class="programlisting">const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * app_indicator_get_attention_icon (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>);</pre> +<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * app_indicator_get_attention_icon (<em class="parameter"><code><a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *self</code></em>);</pre> <p> Wrapper function for property <a class="link" href="libappindicator-app-indicator.html#AppIndicator--attention-icon-name" title='The "attention-icon-name" property'><span class="type">"attention-icon-name"</span></a>. </p> @@ -788,7 +788,7 @@ Gets the menu being used for this application indicator. </tr> <tr> <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td> -<td> A <a href="/usr/share/gtk-doc/html/gtk/GtkMenu.html"><span class="type">GtkMenu</span></a> object or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if one hasn't been set. +<td> A <a href="/usr/share/gtk-doc/html/gtk/GtkMenu.html"><span class="type">GtkMenu</span></a> object or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if one hasn't been set. </td> </tr> </tbody> @@ -799,7 +799,7 @@ Gets the menu being used for this application indicator. <a name="libappindicator-app-indicator.property-details"></a><h2>Property Details</h2> <div class="refsect2" title='The "attention-icon-name" property'> <a name="AppIndicator--attention-icon-name"></a><h3>The <code class="literal">"attention-icon-name"</code> property</h3> -<pre class="programlisting"> "attention-icon-name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre> +<pre class="programlisting"> "attention-icon-name" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre> <p> If the indicator sets it's status to <a class="link" href="libappindicator-app-indicator.html#APP-INDICATOR-STATUS-ATTENTION:CAPS"><code class="literal">APP_INDICATOR_STATUS_ATTENTION</code></a> then this icon is shown. @@ -809,7 +809,7 @@ If the indicator sets it's status to <a class="link" href="libappindicator-app-i <hr> <div class="refsect2" title='The "category" property'> <a name="AppIndicator--category"></a><h3>The <code class="literal">"category"</code> property</h3> -<pre class="programlisting"> "category" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre> +<pre class="programlisting"> "category" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre> <p> The type of indicator that this represents. Please don't use 'Other'. Defaults to 'ApplicationStatus'. @@ -819,9 +819,9 @@ The type of indicator that this represents. Please don't use 'Other'. <hr> <div class="refsect2" title='The "connected" property'> <a name="AppIndicator--connected"></a><h3>The <code class="literal">"connected"</code> property</h3> -<pre class="programlisting"> "connected" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre> +<pre class="programlisting"> "connected" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read</pre> <p> -Pretty simple, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if we have a reasonable expectation of being +Pretty simple, <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if we have a reasonable expectation of being displayed through this object. You should hide your TrayIcon if so. </p> <p>Default value: FALSE</p> @@ -829,7 +829,7 @@ Pretty simple, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standa <hr> <div class="refsect2" title='The "icon-name" property'> <a name="AppIndicator--icon-name"></a><h3>The <code class="literal">"icon-name"</code> property</h3> -<pre class="programlisting"> "icon-name" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct</pre> +<pre class="programlisting"> "icon-name" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre> <p> The name of the regular icon that is shown for the indicator. </p> @@ -838,7 +838,7 @@ The name of the regular icon that is shown for the indicator. <hr> <div class="refsect2" title='The "icon-theme-path" property'> <a name="AppIndicator--icon-theme-path"></a><h3>The <code class="literal">"icon-theme-path"</code> property</h3> -<pre class="programlisting"> "icon-theme-path" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre> +<pre class="programlisting"> "icon-theme-path" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre> <p> An additional place to look for icon names that may be installed by the application. @@ -848,7 +848,7 @@ An additional place to look for icon names that may be installed by the <hr> <div class="refsect2" title='The "id" property'> <a name="AppIndicator--id"></a><h3>The <code class="literal">"id"</code> property</h3> -<pre class="programlisting"> "id" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre> +<pre class="programlisting"> "id" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write / Construct Only</pre> <p> The ID for this indicator, which should be unique, but used consistently by this program and its indicator. @@ -866,7 +866,7 @@ A method for getting the menu path as a string for DBus. <hr> <div class="refsect2" title='The "status" property'> <a name="AppIndicator--status"></a><h3>The <code class="literal">"status"</code> property</h3> -<pre class="programlisting"> "status" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre> +<pre class="programlisting"> "status" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read / Write</pre> <p> Whether the indicator is shown or requests attention. Defaults to 'Passive'. @@ -879,8 +879,8 @@ Whether the indicator is shown or requests attention. Defaults to <div class="refsect2" title='The "connection-changed" signal'> <a name="AppIndicator-connection-changed"></a><h3>The <code class="literal">"connection-changed"</code> signal</h3> <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *arg0, - <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> arg1, - <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last</pre> + <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> arg1, + <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last</pre> <p> Signaled when we connect to a watcher, or when it drops away. </p> @@ -908,7 +908,7 @@ Signaled when we connect to a watcher, or when it drops away. <div class="refsect2" title='The "new-attention-icon" signal'> <a name="AppIndicator-new-attention-icon"></a><h3>The <code class="literal">"new-attention-icon"</code> signal</h3> <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *arg0, - <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last</pre> + <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last</pre> <p> Emitted when <a class="link" href="libappindicator-app-indicator.html#AppIndicator--attention-icon-name" title='The "attention-icon-name" property'><span class="type">"attention-icon-name"</span></a> is changed </p> @@ -931,7 +931,7 @@ Emitted when <a class="link" href="libappindicator-app-indicator.html#AppIndicat <div class="refsect2" title='The "new-icon" signal'> <a name="AppIndicator-new-icon"></a><h3>The <code class="literal">"new-icon"</code> signal</h3> <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *arg0, - <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last</pre> + <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last</pre> <p> Emitted when <a class="link" href="libappindicator-app-indicator.html#AppIndicator--icon-name" title='The "icon-name" property'><span class="type">"icon-name"</span></a> is changed </p> @@ -954,8 +954,8 @@ Emitted when <a class="link" href="libappindicator-app-indicator.html#AppIndicat <div class="refsect2" title='The "new-status" signal'> <a name="AppIndicator-new-status"></a><h3>The <code class="literal">"new-status"</code> signal</h3> <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="libappindicator-app-indicator.html#AppIndicator"><span class="type">AppIndicator</span></a> *arg0, - <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg1, - <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last</pre> + <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *arg1, + <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last</pre> <p> Emitted when <a class="link" href="libappindicator-app-indicator.html#AppIndicator--status" title='The "status" property'><span class="type">"status"</span></a> is changed </p> diff --git a/docs/reference/html/object-tree.html b/docs/reference/html/object-tree.html index 5412b9e..fbc9bcc 100644 --- a/docs/reference/html/object-tree.html +++ b/docs/reference/html/object-tree.html @@ -23,7 +23,7 @@ <div class="titlepage"><div><div><h2 class="title"> <a name="object-tree"></a>Object Hierarchy</h2></div></div></div> <pre class="screen"> - <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a> + <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a> <a class="link" href="libappindicator-app-indicator.html#AppIndicator">AppIndicator</a> </pre> </div> diff --git a/docs/reference/libappindicator-docs.sgml b/docs/reference/libappindicator-docs.sgml index 255e9ec..2e1c2c2 100644 --- a/docs/reference/libappindicator-docs.sgml +++ b/docs/reference/libappindicator-docs.sgml @@ -8,7 +8,7 @@ <bookinfo> <title>libappindicator Reference Manual</title> <releaseinfo> - for libappindicator 0.2.2 + for libappindicator 0.2.3 </releaseinfo> </bookinfo> diff --git a/docs/reference/tmpl/app-indicator.sgml b/docs/reference/tmpl/app-indicator.sgml index 3fe1f6e..283e58d 100644 --- a/docs/reference/tmpl/app-indicator.sgml +++ b/docs/reference/tmpl/app-indicator.sgml @@ -9,13 +9,11 @@ AppIndicator </para> - <!-- ##### SECTION See_Also ##### --> <para> </para> - <!-- ##### SECTION Stability_Level ##### --> diff --git a/docs/reference/version.xml b/docs/reference/version.xml index ee1372d..7179039 100644 --- a/docs/reference/version.xml +++ b/docs/reference/version.xml @@ -1 +1 @@ -0.2.2 +0.2.3 diff --git a/docs/reference/xml/app-indicator.xml b/docs/reference/xml/app-indicator.xml index 4740918..b65ed7b 100644 --- a/docs/reference/xml/app-indicator.xml +++ b/docs/reference/xml/app-indicator.xml @@ -80,7 +80,7 @@ const <link linkend="gchar"><returnvalue>gchar</returnvalue></link> * <lin "<link linkend="AppIndicator--attention-icon-name">attention-icon-name</link>" <link linkend="gchar"><type>gchar</type></link>* : Read / Write "<link linkend="AppIndicator--category">category</link>" <link linkend="gchar"><type>gchar</type></link>* : Read / Write / Construct Only "<link linkend="AppIndicator--connected">connected</link>" <link linkend="gboolean"><type>gboolean</type></link> : Read - "<link linkend="AppIndicator--icon-name">icon-name</link>" <link linkend="gchar"><type>gchar</type></link>* : Read / Write / Construct + "<link linkend="AppIndicator--icon-name">icon-name</link>" <link linkend="gchar"><type>gchar</type></link>* : Read / Write "<link linkend="AppIndicator--icon-theme-path">icon-theme-path</link>" <link linkend="gchar"><type>gchar</type></link>* : Read / Write / Construct Only "<link linkend="AppIndicator--id">id</link>" <link linkend="gchar"><type>gchar</type></link>* : Read / Write / Construct Only "<link linkend="AppIndicator--menu">menu</link>" <link linkend="DBusGObjectPath"><type>DBusGObjectPath</type></link>* : Read @@ -614,7 +614,7 @@ Pretty simple, <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> if we ha </refsect2> <refsect2 id="AppIndicator--icon-name" role="property"><title>The <literal>"icon-name"</literal> property</title> <indexterm zone="AppIndicator--icon-name"><primary>AppIndicator:icon-name</primary></indexterm> -<programlisting> "icon-name" <link linkend="gchar"><type>gchar</type></link>* : Read / Write / Construct</programlisting> +<programlisting> "icon-name" <link linkend="gchar"><type>gchar</type></link>* : Read / Write</programlisting> <para> The name of the regular icon that is shown for the indicator. </para><para>Default value: NULL</para> diff --git a/src/Makefile.am b/src/Makefile.am index 787ba2f..68be1c0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -116,6 +116,7 @@ libappindicator_la_LIBADD = \ DBUS_SPECS = \ dbus-properties.xml \ application-service.xml \ + notification-approver.xml \ notification-item.xml \ notification-watcher.xml diff --git a/src/Makefile.in b/src/Makefile.in index 2d50887..598f335 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -462,6 +462,7 @@ libappindicator_la_LIBADD = \ DBUS_SPECS = \ dbus-properties.xml \ application-service.xml \ + notification-approver.xml \ notification-item.xml \ notification-watcher.xml diff --git a/src/application-service-appstore.c b/src/application-service-appstore.c index 15abea3..311fcb1 100644 --- a/src/application-service-appstore.c +++ b/src/application-service-appstore.c @@ -31,6 +31,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include "application-service-marshal.h" #include "dbus-properties-client.h" #include "dbus-shared.h" +#include "notification-approver-client.h" /* DBus Prototypes */ static gboolean _application_service_server_get_applications (ApplicationServiceAppstore * appstore, GPtrArray ** apps, GError ** error); @@ -50,13 +51,18 @@ static gboolean _application_service_server_get_applications (ApplicationService #define NOTIFICATION_ITEM_SIG_NEW_STATUS "NewStatus" /* Private Stuff */ -typedef struct _ApplicationServiceAppstorePrivate ApplicationServiceAppstorePrivate; struct _ApplicationServiceAppstorePrivate { DBusGConnection * bus; GList * applications; + GList * approvers; AppLruFile * lrufile; }; +typedef struct _Approver Approver; +struct _Approver { + DBusGProxy * proxy; +}; + typedef struct _Application Application; struct _Application { gchar * id; @@ -95,6 +101,9 @@ static void application_service_appstore_dispose (GObject *object); static void application_service_appstore_finalize (GObject *object); static AppIndicatorStatus string_to_status(const gchar * status_string); static void apply_status (Application * app, AppIndicatorStatus status); +static void approver_free (gpointer papprover, gpointer user_data); +static void check_with_new_approver (gpointer papp, gpointer papprove); +static void check_with_old_approver (gpointer papprove, gpointer papp); G_DEFINE_TYPE (ApplicationServiceAppstore, application_service_appstore, G_TYPE_OBJECT); @@ -139,9 +148,11 @@ application_service_appstore_class_init (ApplicationServiceAppstoreClass *klass) static void application_service_appstore_init (ApplicationServiceAppstore *self) { - ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE(self); + + ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE (self); priv->applications = NULL; + priv->approvers = NULL; priv->lrufile = NULL; GError * error = NULL; @@ -155,6 +166,8 @@ application_service_appstore_init (ApplicationServiceAppstore *self) dbus_g_connection_register_g_object(priv->bus, INDICATOR_APPLICATION_DBUS_OBJ, G_OBJECT(self)); + + self->priv = priv; return; } @@ -162,7 +175,7 @@ application_service_appstore_init (ApplicationServiceAppstore *self) static void application_service_appstore_dispose (GObject *object) { - ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE(object); + ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE(object)->priv; while (priv->applications != NULL) { application_service_appstore_application_remove(APPLICATION_SERVICE_APPSTORE(object), @@ -170,6 +183,12 @@ application_service_appstore_dispose (GObject *object) ((Application *)priv->applications->data)->dbus_object); } + if (priv->approvers != NULL) { + g_list_foreach(priv->approvers, approver_free, NULL); + g_list_free(priv->approvers); + priv->approvers = NULL; + } + G_OBJECT_CLASS (application_service_appstore_parent_class)->dispose (object); return; } @@ -209,7 +228,7 @@ get_all_properties_cb (DBusGProxy * proxy, GHashTable * properties, GError * err app->id = g_value_dup_string(g_hash_table_lookup(properties, NOTIFICATION_ITEM_PROP_ID)); app->category = g_value_dup_string(g_hash_table_lookup(properties, NOTIFICATION_ITEM_PROP_CATEGORY)); - ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE(app->appstore); + ApplicationServiceAppstorePrivate * priv = app->appstore->priv; app_lru_file_touch(priv->lrufile, app->id, app->category); app->icon = g_value_dup_string(g_hash_table_lookup(properties, NOTIFICATION_ITEM_PROP_ICON_NAME)); @@ -234,11 +253,23 @@ get_all_properties_cb (DBusGProxy * proxy, GHashTable * properties, GError * err app->icon_path = g_strdup(""); } + /* TODO: Calling approvers, but we're ignoring the results. So, eh. */ + g_list_foreach(priv->approvers, check_with_old_approver, app); + apply_status(app, string_to_status(g_value_get_string(g_hash_table_lookup(properties, NOTIFICATION_ITEM_PROP_STATUS)))); return; } +/* Check the application against an approver */ +static void +check_with_old_approver (gpointer papprove, gpointer papp) +{ + /* Funny the parallels, eh? */ + check_with_new_approver(papp, papprove); + return; +} + /* Simple translation function -- could be optimized */ static AppIndicatorStatus string_to_status(const gchar * status_string) @@ -265,7 +296,7 @@ string_to_status(const gchar * status_string) static gint get_position (Application * app) { ApplicationServiceAppstore * appstore = app->appstore; - ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE(appstore); + ApplicationServiceAppstorePrivate * priv = appstore->priv; GList * applistitem = g_list_find(priv->applications, app); if (applistitem == NULL) { @@ -384,7 +415,7 @@ apply_status (Application * app, AppIndicatorStatus status) g_debug("Changing app status to: %d", status); ApplicationServiceAppstore * appstore = app->appstore; - ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE(appstore); + ApplicationServiceAppstorePrivate * priv = appstore->priv; /* This means we're going off line */ if (status == APP_INDICATOR_STATUS_PASSIVE) { @@ -567,7 +598,7 @@ application_service_appstore_application_add (ApplicationServiceAppstore * appst g_return_if_fail(IS_APPLICATION_SERVICE_APPSTORE(appstore)); g_return_if_fail(dbus_name != NULL && dbus_name[0] != '\0'); g_return_if_fail(dbus_object != NULL && dbus_object[0] != '\0'); - ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE(appstore); + ApplicationServiceAppstorePrivate * priv = appstore->priv; /* Build the application entry. This will be carried along until we're sure we've got everything. */ @@ -665,7 +696,7 @@ application_service_appstore_application_remove (ApplicationServiceAppstore * ap g_return_if_fail(dbus_name != NULL && dbus_name[0] != '\0'); g_return_if_fail(dbus_object != NULL && dbus_object[0] != '\0'); - ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE(appstore); + ApplicationServiceAppstorePrivate * priv = appstore->priv; GList * listpntr; for (listpntr = priv->applications; listpntr != NULL; listpntr = g_list_next(listpntr)) { @@ -687,7 +718,7 @@ application_service_appstore_new (AppLruFile * lrufile) { g_return_val_if_fail(IS_APP_LRU_FILE(lrufile), NULL); ApplicationServiceAppstore * appstore = APPLICATION_SERVICE_APPSTORE(g_object_new(APPLICATION_SERVICE_APPSTORE_TYPE, NULL)); - ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE(appstore); + ApplicationServiceAppstorePrivate * priv = appstore->priv; priv->lrufile = lrufile; return appstore; } @@ -696,7 +727,7 @@ application_service_appstore_new (AppLruFile * lrufile) static gboolean _application_service_server_get_applications (ApplicationServiceAppstore * appstore, GPtrArray ** apps, GError ** error) { - ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE(appstore); + ApplicationServiceAppstorePrivate * priv = appstore->priv; *apps = g_ptr_array_new(); GList * listpntr; @@ -743,3 +774,77 @@ _application_service_server_get_applications (ApplicationServiceAppstore * appst return TRUE; } +/* Frees the data associated with an approver */ +static void +approver_free (gpointer papprover, gpointer user_data) +{ + Approver * approver = (Approver *)papprover; + g_return_if_fail(approver != NULL); + + if (approver->proxy != NULL) { + g_object_unref(approver->proxy); + approver->proxy = NULL; + } + + g_free(approver); + return; +} + +/* What did the approver tell us? */ +static void +approver_request_cb (DBusGProxy *proxy, gboolean OUT_approved, GError *error, gpointer userdata) +{ + g_debug("Approver responded: %s", OUT_approved ? "approve" : "rejected"); + return; +} + +/* Run the applications through the new approver */ +static void +check_with_new_approver (gpointer papp, gpointer papprove) +{ + Application * app = (Application *)papp; + Approver * approver = (Approver *)papprove; + + org_ayatana_StatusNotifierApprover_approve_item_async(approver->proxy, + app->id, + app->category, + 0, + app->dbus_name, + app->dbus_object, + approver_request_cb, + app); + + return; +} + +/* Adds a new approver to the app store */ +void +application_service_appstore_approver_add (ApplicationServiceAppstore * appstore, const gchar * dbus_name, const gchar * dbus_object) +{ + g_return_if_fail(IS_APPLICATION_SERVICE_APPSTORE(appstore)); + g_return_if_fail(dbus_name != NULL); + g_return_if_fail(dbus_object != NULL); + ApplicationServiceAppstorePrivate * priv = APPLICATION_SERVICE_APPSTORE_GET_PRIVATE (appstore); + + Approver * approver = g_new0(Approver, 1); + + GError * error = NULL; + approver->proxy = dbus_g_proxy_new_for_name_owner(priv->bus, + dbus_name, + dbus_object, + NOTIFICATION_APPROVER_DBUS_IFACE, + &error); + if (error != NULL) { + g_warning("Unable to get approver interface on '%s:%s' : %s", dbus_name, dbus_object, error->message); + g_error_free(error); + g_free(approver); + return; + } + + priv->approvers = g_list_prepend(priv->approvers, approver); + + g_list_foreach(priv->applications, check_with_new_approver, approver); + + return; +} + diff --git a/src/application-service-appstore.h b/src/application-service-appstore.h index d2e0013..e8ba8c1 100644 --- a/src/application-service-appstore.h +++ b/src/application-service-appstore.h @@ -38,6 +38,7 @@ G_BEGIN_DECLS typedef struct _ApplicationServiceAppstore ApplicationServiceAppstore; typedef struct _ApplicationServiceAppstoreClass ApplicationServiceAppstoreClass; +typedef struct _ApplicationServiceAppstorePrivate ApplicationServiceAppstorePrivate; struct _ApplicationServiceAppstoreClass { GObjectClass parent_class; @@ -49,16 +50,21 @@ struct _ApplicationServiceAppstoreClass { struct _ApplicationServiceAppstore { GObject parent; + + ApplicationServiceAppstorePrivate * priv; }; ApplicationServiceAppstore * application_service_appstore_new (AppLruFile * lrufile); GType application_service_appstore_get_type (void); void application_service_appstore_application_add (ApplicationServiceAppstore * appstore, - const gchar * dbus_name, - const gchar * dbus_object); + const gchar * dbus_name, + const gchar * dbus_object); void application_service_appstore_application_remove (ApplicationServiceAppstore * appstore, - const gchar * dbus_name, - const gchar * dbus_object); + const gchar * dbus_name, + const gchar * dbus_object); +void application_service_appstore_approver_add (ApplicationServiceAppstore * appstore, + const gchar * dbus_name, + const gchar * dbus_object); G_END_DECLS diff --git a/src/application-service-watcher.c b/src/application-service-watcher.c index eff249d..4fe3bc7 100644 --- a/src/application-service-watcher.c +++ b/src/application-service-watcher.c @@ -34,6 +34,7 @@ static gboolean _notification_watcher_server_register_status_notifier_item (Appl static gboolean _notification_watcher_server_registered_status_notifier_items (ApplicationServiceWatcher * appwatcher, GArray ** apps); static gboolean _notification_watcher_server_protocol_version (ApplicationServiceWatcher * appwatcher, char ** version); static gboolean _notification_watcher_server_register_notification_host (ApplicationServiceWatcher * appwatcher, const gchar * host); +static gboolean _notification_watcher_server_register_notification_approver (ApplicationServiceWatcher * appwatcher, const gchar * path, const GArray * categories, DBusGMethodInvocation * method); static gboolean _notification_watcher_server_is_notification_host_registered (ApplicationServiceWatcher * appwatcher, gboolean * haveHost); static void get_name_cb (DBusGProxy * proxy, guint status, GError * error, gpointer data); @@ -249,3 +250,16 @@ get_name_cb (DBusGProxy * proxy, guint status, GError * error, gpointer data) return; } + +static gboolean +_notification_watcher_server_register_notification_approver (ApplicationServiceWatcher * appwatcher, const gchar * path, const GArray * categories, DBusGMethodInvocation * method) +{ + ApplicationServiceWatcherPrivate * priv = APPLICATION_SERVICE_WATCHER_GET_PRIVATE(appwatcher); + + application_service_appstore_approver_add(priv->appstore, + dbus_g_method_get_sender(method), + path); + + dbus_g_method_return(method, G_TYPE_NONE); + return TRUE; +} diff --git a/src/dbus-shared.h b/src/dbus-shared.h index f158b1c..1d8d89c 100644 --- a/src/dbus-shared.h +++ b/src/dbus-shared.h @@ -31,3 +31,5 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #define NOTIFICATION_ITEM_DBUS_IFACE "org.kde.StatusNotifierItem" #define NOTIFICATION_ITEM_DEFAULT_OBJ "/StatusNotifierItem" +#define NOTIFICATION_APPROVER_DBUS_IFACE "org.ayatana.StatusNotifierApprover" + diff --git a/src/notification-approver.xml b/src/notification-approver.xml new file mode 100644 index 0000000..b1e69b9 --- /dev/null +++ b/src/notification-approver.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<node name="/"> + <interface name="org.ayatana.StatusNotifierApprover"> + +<!-- Methods --> + <method name="ApproveItem"> + <!-- KSNI ID --> + <arg type="s" name="id" direction="in" /> + <!-- KSNI Category --> + <arg type="s" name="category" direction="in" /> + <!-- Application PID --> + <arg type="u" name="pid" direction="in" /> + <!-- Application DBus Address --> + <arg type="s" name="address" direction="in" /> + <!-- Application DBus Path for KSNI interface --> + <arg type="o" name="path" direction="in" /> + <!-- So, what do you think? --> + <arg type="b" name="approved" direction="out" /> + </method> + + </interface> +</node> diff --git a/src/notification-watcher.xml b/src/notification-watcher.xml index c2324f1..cc7882d 100644 --- a/src/notification-watcher.xml +++ b/src/notification-watcher.xml @@ -22,6 +22,13 @@ <method name="IsNotificationHostRegistered"> <arg type="b" name="hasHost" direction="out" /> </method> + <method name="RegisterNotificationApprover"> + <annotation name="org.freedesktop.DBus.GLib.Async" value="true" /> + <!-- The path where to find the approver interface --> + <arg type="o" name="path" direction="in" /> + <!-- List of categories to approve, none represents all --> + <arg type="as" name="categories" direction="in" /> + </method> <!-- Signals --> <signal name="ServiceRegistered"> diff --git a/tests/Makefile.am b/tests/Makefile.am index 8d356bc..f2bdbb2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,5 +1,6 @@ check_PROGRAMS = \ + test-approver \ test-libappindicator \ test-libappindicator-dbus-client \ test-libappindicator-dbus-server \ @@ -99,6 +100,33 @@ test_libappindicator_status_server_LDADD = \ $(top_builddir)/src/libappindicator.la ######################################### +## test-approver +######################################### + +test_approver_SOURCES = \ + test-approver.c + +test_approver_CFLAGS = \ + $(INDICATOR_CFLAGS) \ + -Wall -Werror \ + -I$(top_srcdir)/src \ + -I$(top_builddir)/src + +test_approver_LDADD = \ + $(INDICATOR_LIBS) \ + $(top_builddir)/src/libappindicator.la + +test-approver-tester: test-approver Makefile.am + @echo "#!/bin/bash" > $@ + @echo export INDICATOR_SERVICE_SHUTDOWN_TIMEOUT=1000 >> $@ + @echo . $(srcdir)/run-xvfb.sh >> $@ + @echo $(DBUS_RUNNER) --task $(builddir)/test-approver --task-name Approver --task $(top_builddir)/src/indicator-application-service --task-name Service --ignore-return >> $@ + @chmod +x $@ + +TESTS += test-approver-tester + + +######################################### ## test-libappindicator-fallback ######################################### diff --git a/tests/Makefile.in b/tests/Makefile.in index edc828f..dc4be9b 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -33,7 +33,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -check_PROGRAMS = test-libappindicator$(EXEEXT) \ +check_PROGRAMS = test-approver$(EXEEXT) test-libappindicator$(EXEEXT) \ test-libappindicator-dbus-client$(EXEEXT) \ test-libappindicator-dbus-server$(EXEEXT) \ test-libappindicator-status-client$(EXEEXT) \ @@ -52,15 +52,22 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = -am_test_libappindicator_OBJECTS = \ - test_libappindicator-test-libappindicator.$(OBJEXT) -test_libappindicator_OBJECTS = $(am_test_libappindicator_OBJECTS) +am_test_approver_OBJECTS = test_approver-test-approver.$(OBJEXT) +test_approver_OBJECTS = $(am_test_approver_OBJECTS) am__DEPENDENCIES_1 = -test_libappindicator_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +test_approver_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(top_builddir)/src/libappindicator.la AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent +test_approver_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_approver_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_test_libappindicator_OBJECTS = \ + test_libappindicator-test-libappindicator.$(OBJEXT) +test_libappindicator_OBJECTS = $(am_test_libappindicator_OBJECTS) +test_libappindicator_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(top_builddir)/src/libappindicator.la test_libappindicator_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(test_libappindicator_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ @@ -154,7 +161,7 @@ am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(test_libappindicator_SOURCES) \ +SOURCES = $(test_approver_SOURCES) $(test_libappindicator_SOURCES) \ $(test_libappindicator_dbus_client_SOURCES) \ $(test_libappindicator_dbus_server_SOURCES) \ $(test_libappindicator_fallback_item_SOURCES) \ @@ -162,7 +169,8 @@ SOURCES = $(test_libappindicator_SOURCES) \ $(test_libappindicator_status_client_SOURCES) \ $(test_libappindicator_status_server_SOURCES) \ $(test_simple_app_SOURCES) -DIST_SOURCES = $(test_libappindicator_SOURCES) \ +DIST_SOURCES = $(test_approver_SOURCES) \ + $(test_libappindicator_SOURCES) \ $(test_libappindicator_dbus_client_SOURCES) \ $(test_libappindicator_dbus_server_SOURCES) \ $(test_libappindicator_fallback_item_SOURCES) \ @@ -341,8 +349,9 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -TESTS = test-libappindicator-fallback libappindicator-tests \ - test-libappindicator-dbus test-libappindicator-status +TESTS = test-approver-tester test-libappindicator-fallback \ + libappindicator-tests test-libappindicator-dbus \ + test-libappindicator-status DISTCLEANFILES = $(TESTS) $(XML_REPORT) $(HTML_REPORT) \ libappindicator-tests-gtester EXTRA_DIST = run-xvfb.sh @@ -428,6 +437,22 @@ test_libappindicator_status_server_LDADD = \ ######################################### ######################################### +test_approver_SOURCES = \ + test-approver.c + +test_approver_CFLAGS = \ + $(INDICATOR_CFLAGS) \ + -Wall -Werror \ + -I$(top_srcdir)/src \ + -I$(top_builddir)/src + +test_approver_LDADD = \ + $(INDICATOR_LIBS) \ + $(top_builddir)/src/libappindicator.la + + +######################################### +######################################### test_libappindicator_fallback_watcher_SOURCES = \ test-libappindicator-fallback-watcher.c @@ -516,6 +541,9 @@ clean-checkPROGRAMS: list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list +test-approver$(EXEEXT): $(test_approver_OBJECTS) $(test_approver_DEPENDENCIES) + @rm -f test-approver$(EXEEXT) + $(AM_V_CCLD)$(test_approver_LINK) $(test_approver_OBJECTS) $(test_approver_LDADD) $(LIBS) test-libappindicator$(EXEEXT): $(test_libappindicator_OBJECTS) $(test_libappindicator_DEPENDENCIES) @rm -f test-libappindicator$(EXEEXT) $(AM_V_CCLD)$(test_libappindicator_LINK) $(test_libappindicator_OBJECTS) $(test_libappindicator_LDADD) $(LIBS) @@ -547,6 +575,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_approver-test-approver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_libappindicator-test-libappindicator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_libappindicator_dbus_client-test-libappindicator-dbus-client.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_libappindicator_dbus_server-test-libappindicator-dbus-server.Po@am__quote@ @@ -580,6 +609,22 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +test_approver-test-approver.o: test-approver.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_approver_CFLAGS) $(CFLAGS) -MT test_approver-test-approver.o -MD -MP -MF $(DEPDIR)/test_approver-test-approver.Tpo -c -o test_approver-test-approver.o `test -f 'test-approver.c' || echo '$(srcdir)/'`test-approver.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_approver-test-approver.Tpo $(DEPDIR)/test_approver-test-approver.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test-approver.c' object='test_approver-test-approver.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_approver_CFLAGS) $(CFLAGS) -c -o test_approver-test-approver.o `test -f 'test-approver.c' || echo '$(srcdir)/'`test-approver.c + +test_approver-test-approver.obj: test-approver.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_approver_CFLAGS) $(CFLAGS) -MT test_approver-test-approver.obj -MD -MP -MF $(DEPDIR)/test_approver-test-approver.Tpo -c -o test_approver-test-approver.obj `if test -f 'test-approver.c'; then $(CYGPATH_W) 'test-approver.c'; else $(CYGPATH_W) '$(srcdir)/test-approver.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_approver-test-approver.Tpo $(DEPDIR)/test_approver-test-approver.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test-approver.c' object='test_approver-test-approver.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_approver_CFLAGS) $(CFLAGS) -c -o test_approver-test-approver.obj `if test -f 'test-approver.c'; then $(CYGPATH_W) 'test-approver.c'; else $(CYGPATH_W) '$(srcdir)/test-approver.c'; fi` + test_libappindicator-test-libappindicator.o: test-libappindicator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libappindicator_CFLAGS) $(CFLAGS) -MT test_libappindicator-test-libappindicator.o -MD -MP -MF $(DEPDIR)/test_libappindicator-test-libappindicator.Tpo -c -o test_libappindicator-test-libappindicator.o `test -f 'test-libappindicator.c' || echo '$(srcdir)/'`test-libappindicator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_libappindicator-test-libappindicator.Tpo $(DEPDIR)/test_libappindicator-test-libappindicator.Po @@ -1008,6 +1053,13 @@ uninstall-am: tags uninstall uninstall-am +test-approver-tester: test-approver Makefile.am + @echo "#!/bin/bash" > $@ + @echo export INDICATOR_SERVICE_SHUTDOWN_TIMEOUT=1000 >> $@ + @echo . $(srcdir)/run-xvfb.sh >> $@ + @echo $(DBUS_RUNNER) --task $(builddir)/test-approver --task-name Approver --task $(top_builddir)/src/indicator-application-service --task-name Service --ignore-return >> $@ + @chmod +x $@ + test-libappindicator-fallback: test-libappindicator-fallback-watcher test-libappindicator-fallback-item Makefile.am @echo "#!/bin/bash" > $@ @echo . $(srcdir)/run-xvfb.sh >> $@ diff --git a/tests/test-approver.c b/tests/test-approver.c new file mode 100644 index 0000000..bc25761 --- /dev/null +++ b/tests/test-approver.c @@ -0,0 +1,179 @@ +#include <glib.h> +#include <glib-object.h> + +#include <dbus/dbus-glib-bindings.h> + +#include "notification-watcher-client.h" +#include "dbus-shared.h" +#include "app-indicator.h" + +#define APPROVER_PATH "/my/approver" + +#define INDICATOR_ID "test-indicator-id" +#define INDICATOR_ICON "test-indicator-icon-name" +#define INDICATOR_CATEGORY APP_INDICATOR_CATEGORY_APPLICATION_STATUS + +#define TEST_APPROVER_TYPE (test_approver_get_type ()) +#define TEST_APPROVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_APPROVER_TYPE, TestApprover)) +#define TEST_APPROVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_APPROVER_TYPE, TestApproverClass)) +#define IS_TEST_APPROVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_APPROVER_TYPE)) +#define IS_TEST_APPROVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_APPROVER_TYPE)) +#define TEST_APPROVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_APPROVER_TYPE, TestApproverClass)) + +typedef struct _TestApprover TestApprover; +typedef struct _TestApproverClass TestApproverClass; + +struct _TestApproverClass { + GObjectClass parent_class; +}; + +struct _TestApprover { + GObject parent; +}; + +GType test_approver_get_type (void); + +static void test_approver_class_init (TestApproverClass *klass); +static void test_approver_init (TestApprover *self); +static gboolean _notification_approver_server_approve_item (TestApprover * ta, const gchar * id, const gchar * category, guint pid, const gchar * address, const gchar * path, gboolean * approved, GError ** error); + +#include "../src/notification-approver-server.h" + +GMainLoop * main_loop = NULL; +DBusGConnection * session_bus = NULL; +DBusGProxy * bus_proxy = NULL; +AppIndicator * app_indicator = NULL; +gboolean passed = FALSE; + +G_DEFINE_TYPE (TestApprover, test_approver, G_TYPE_OBJECT); + +static void +test_approver_class_init (TestApproverClass *klass) +{ + dbus_g_object_type_install_info(TEST_APPROVER_TYPE, + &dbus_glib__notification_approver_server_object_info); + + return; +} + +static void +test_approver_init (TestApprover *self) +{ + dbus_g_connection_register_g_object(session_bus, + APPROVER_PATH, + G_OBJECT(self)); + + return; +} + +static gboolean +_notification_approver_server_approve_item (TestApprover * ta, const gchar * id, const gchar * category, guint pid, const gchar * address, const gchar * path, gboolean * approved, GError ** error) +{ + *approved = TRUE; + g_debug("Asked to approve indicator"); + + if (g_strcmp0(id, INDICATOR_ID) == 0) { + passed = TRUE; + } + + g_main_loop_quit(main_loop); + + return TRUE; +} + +static void +register_cb (DBusGProxy * proxy, GError * error, gpointer user_data) +{ + if (error != NULL) { + g_warning("Unable to register approver: %s", error->message); + g_error_free(error); + g_main_loop_quit(main_loop); + return; + } + + g_debug("Building App Indicator"); + app_indicator = app_indicator_new(INDICATOR_ID, INDICATOR_ICON, INDICATOR_CATEGORY); + + GtkWidget * menu = gtk_menu_new(); + GtkWidget * mi = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); + + app_indicator_set_menu(app_indicator, GTK_MENU(menu)); + + return; +} + +gint owner_count = 0; +gboolean +check_for_service (gpointer user_data) +{ + g_debug("Checking for Watcher"); + + if (owner_count > 100) { + g_warning("Couldn't find watcher after 100 tries."); + g_main_loop_quit(main_loop); + return FALSE; + } + + owner_count++; + + gboolean has_owner = FALSE; + org_freedesktop_DBus_name_has_owner(bus_proxy, NOTIFICATION_WATCHER_DBUS_ADDR, &has_owner, NULL); + + if (has_owner) { + const char * cats = NULL; + DBusGProxy * proxy = dbus_g_proxy_new_for_name(session_bus, + NOTIFICATION_WATCHER_DBUS_ADDR, + NOTIFICATION_WATCHER_DBUS_OBJ, + NOTIFICATION_WATCHER_DBUS_IFACE); + + g_debug("Registering Approver"); + org_kde_StatusNotifierWatcher_register_notification_approver_async (proxy, APPROVER_PATH, &cats, register_cb, NULL); + + return FALSE; + } + + return TRUE; +} + +gboolean +fail_timeout (gpointer user_data) +{ + g_debug("Failure timeout initiated."); + g_main_loop_quit(main_loop); + return FALSE; +} + +int +main (int argc, char ** argv) +{ + GError * error = NULL; + + gtk_init(&argc, &argv); + g_debug("Initing"); + + session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error); + if (error != NULL) { + g_warning("Unable to get session bus: %s", error->message); + g_error_free(error); + return -1; + } + + TestApprover * approver = g_object_new(TEST_APPROVER_TYPE, NULL); + + bus_proxy = dbus_g_proxy_new_for_name(session_bus, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); + + g_timeout_add(100, check_for_service, NULL); + g_timeout_add_seconds(2, fail_timeout, NULL); + + main_loop = g_main_loop_new(NULL, FALSE); + g_main_loop_run(main_loop); + + g_object_unref(approver); + + if (!passed) { + return -1; + } + + return 0; +} |