aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-07-13 11:09:55 -0500
committerTed Gould <ted@gould.cx>2010-07-13 11:09:55 -0500
commit127dd570e0f0ccb2b07ffb5ee39c89f9446f3c8a (patch)
tree0111433be8c7f822f61b8dcb6ad5d6da63d97c06
parentdbcc98fc883c5e5d71d560dd8761018614e38f60 (diff)
parentdcdce69d38c1838a73f12d78d35d5e48e52ce742 (diff)
downloadayatana-indicator-datetime-127dd570e0f0ccb2b07ffb5ee39c89f9446f3c8a.tar.gz
ayatana-indicator-datetime-127dd570e0f0ccb2b07ffb5ee39c89f9446f3c8a.tar.bz2
ayatana-indicator-datetime-127dd570e0f0ccb2b07ffb5ee39c89f9446f3c8a.zip
* Merge upstream
* Change menus to come from the service * Autogen update
-rwxr-xr-xconfigure52
-rw-r--r--configure.ac4
-rw-r--r--data/Makefile.am11
-rw-r--r--data/Makefile.in85
-rw-r--r--data/indicator-datetime.service.in3
-rw-r--r--debian/changelog8
-rw-r--r--src/Makefile.am4
-rw-r--r--src/Makefile.in9
-rw-r--r--src/datetime-service.c182
-rw-r--r--src/dbus-shared.h29
-rw-r--r--src/indicator-datetime.c115
11 files changed, 369 insertions, 133 deletions
diff --git a/configure b/configure
index fbeb00a..321a6be 100755
--- a/configure
+++ b/configure
@@ -8693,10 +8693,6 @@ _lt_linker_boilerplate=`cat conftest.err`
$RM -r conftest*
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
if test -n "$compiler"; then
lt_prog_compiler_no_builtin_flag=
@@ -8722,11 +8718,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8725: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8721: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:8729: \$? = $ac_status" >&5
+ echo "$as_me:8725: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -9061,11 +9057,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:9064: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9060: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:9068: \$? = $ac_status" >&5
+ echo "$as_me:9064: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -9166,11 +9162,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:9169: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9165: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:9173: \$? = $ac_status" >&5
+ echo "$as_me:9169: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -9221,11 +9217,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:9224: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9220: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:9228: \$? = $ac_status" >&5
+ echo "$as_me:9224: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -11605,7 +11601,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11608 "configure"
+#line 11604 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11701,7 +11697,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11704 "configure"
+#line 11700 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12149,6 +12145,7 @@ fi
INDICATOR_REQUIRED_VERSION=0.3.0
DBUSMENUGLIB_REQUIRED_VERSION=0.1.1
+DBUSMENUGTK_REQUIRED_VERSION=0.1.1
pkg_failed=no
@@ -12161,14 +12158,17 @@ if test -n "$PKG_CONFIG"; then
else
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"indicator >= \$INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= \$DBUSMENUGLIB_REQUIRED_VERSION\""; } >&5
+ dbusmenu-glib >= \$DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= \$DBUSMENUGTK_REQUIRED_VERSION\""; } >&5
($PKG_CONFIG --exists --print-errors "indicator >= $INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION") 2>&5
+ dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_INDICATOR_CFLAGS=`$PKG_CONFIG --cflags "indicator >= $INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION" 2>/dev/null`
+ dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -12182,14 +12182,17 @@ if test -n "$PKG_CONFIG"; then
else
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"indicator >= \$INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= \$DBUSMENUGLIB_REQUIRED_VERSION\""; } >&5
+ dbusmenu-glib >= \$DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= \$DBUSMENUGTK_REQUIRED_VERSION\""; } >&5
($PKG_CONFIG --exists --print-errors "indicator >= $INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION") 2>&5
+ dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_INDICATOR_LIBS=`$PKG_CONFIG --libs "indicator >= $INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION" 2>/dev/null`
+ dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -12209,16 +12212,19 @@ else
fi
if test $_pkg_short_errors_supported = yes; then
INDICATOR_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "indicator >= $INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION"`
+ dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION"`
else
INDICATOR_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "indicator >= $INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION"`
+ dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION"`
fi
# Put the nasty error message in config.log where it belongs
echo "$INDICATOR_PKG_ERRORS" >&5
as_fn_error "Package requirements (indicator >= $INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION) were not met:
+ dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION) were not met:
$INDICATOR_PKG_ERRORS
diff --git a/configure.ac b/configure.ac
index c011422..9bf0a3c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -34,9 +34,11 @@ PKG_PROG_PKG_CONFIG
INDICATOR_REQUIRED_VERSION=0.3.0
DBUSMENUGLIB_REQUIRED_VERSION=0.1.1
+DBUSMENUGTK_REQUIRED_VERSION=0.1.1
PKG_CHECK_MODULES(INDICATOR, indicator >= $INDICATOR_REQUIRED_VERSION
- dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION)
+ dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION
+ dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION)
AC_SUBST(INDICATOR_CFLAGS)
AC_SUBST(INDICATOR_LIBS)
diff --git a/data/Makefile.am b/data/Makefile.am
index e69de29..b19cee4 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -0,0 +1,11 @@
+#SUBDIRS = icons
+
+dbus_servicesdir = $(DBUSSERVICEDIR)
+dbus_services_DATA = indicator-datetime.service
+
+%.service: %.service.in
+ sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
+
+EXTRA_DIST = indicator-datetime.service.in
+
+CLEANFILES = indicator-datetime.service
diff --git a/data/Makefile.in b/data/Makefile.in
index 5c06fd9..dfd7b2e 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -14,6 +14,9 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
+
+#SUBDIRS = icons
+
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -36,10 +39,7 @@ host_triplet = @host@
subdir = data
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \
- $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
- $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
- $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -54,6 +54,29 @@ am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
SOURCES =
DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(dbus_servicesdir)"
+DATA = $(dbus_services_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -200,6 +223,10 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+dbus_servicesdir = $(DBUSSERVICEDIR)
+dbus_services_DATA = indicator-datetime.service
+EXTRA_DIST = indicator-datetime.service.in
+CLEANFILES = indicator-datetime.service
all: all-am
.SUFFIXES:
@@ -239,6 +266,26 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
+install-dbus_servicesDATA: $(dbus_services_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(dbus_servicesdir)" || $(MKDIR_P) "$(DESTDIR)$(dbus_servicesdir)"
+ @list='$(dbus_services_DATA)'; test -n "$(dbus_servicesdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dbus_servicesdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbus_servicesdir)" || exit $$?; \
+ done
+
+uninstall-dbus_servicesDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dbus_services_DATA)'; test -n "$(dbus_servicesdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(dbus_servicesdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(dbus_servicesdir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -278,8 +325,11 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile
+all-am: Makefile $(DATA)
installdirs:
+ for dir in "$(DESTDIR)$(dbus_servicesdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
@@ -297,6 +347,7 @@ install-strip:
mostlyclean-generic:
clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -325,7 +376,7 @@ info: info-am
info-am:
-install-data-am:
+install-data-am: install-dbus_servicesDATA
install-dvi: install-dvi-am
@@ -369,21 +420,25 @@ ps: ps-am
ps-am:
-uninstall-am:
+uninstall-am: uninstall-dbus_servicesDATA
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-dvi install-dvi-am \
- install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-man install-pdf \
- install-pdf-am install-ps install-ps-am install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
-
+ install-data install-data-am install-dbus_servicesDATA \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-dbus_servicesDATA
+
+
+%.service: %.service.in
+ sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/data/indicator-datetime.service.in b/data/indicator-datetime.service.in
new file mode 100644
index 0000000..bcb70e3
--- /dev/null
+++ b/data/indicator-datetime.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.ayatana.indicator.datetime
+Exec=@libexecdir@/indicator-datetime-service
diff --git a/debian/changelog b/debian/changelog
index 9d82a81..673c8a3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+indicator-datetime (0.0.3-0ubuntu2~ppa1) UNRELEASED; urgency=low
+
+ * Merge upstream
+ * Change menus to come from the service
+ * Autogen update
+
+ -- Ted Gould <ted@ubuntu.com> Tue, 13 Jul 2010 11:09:29 -0500
+
indicator-datetime (0.0.3-0ubuntu1) maverick; urgency=low
[ Ted Gould ]
diff --git a/src/Makefile.am b/src/Makefile.am
index bf9093d..fe3db2e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,7 +2,8 @@
libexec_PROGRAMS = indicator-datetime-service
indicator_datetime_service_SOURCES = \
- datetime-service.c
+ datetime-service.c \
+ dbus-shared.h
indicator_datetime_service_CFLAGS = \
-Wall \
-Werror \
@@ -13,6 +14,7 @@ indicator_datetime_service_LDADD = \
datetimelibdir = $(INDICATORDIR)
datetimelib_LTLIBRARIES = libdatetime.la
libdatetime_la_SOURCES = \
+ dbus-shared.h \
indicator-datetime.c
libdatetime_la_CFLAGS = \
$(INDICATOR_CFLAGS) \
diff --git a/src/Makefile.in b/src/Makefile.in
index 80e7b27..a1a5ba6 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -39,10 +39,7 @@ libexec_PROGRAMS = indicator-datetime-service$(EXEEXT)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/intltool.m4 \
- $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
- $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
- $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -273,7 +270,8 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
indicator_datetime_service_SOURCES = \
- datetime-service.c
+ datetime-service.c \
+ dbus-shared.h
indicator_datetime_service_CFLAGS = \
-Wall \
@@ -286,6 +284,7 @@ indicator_datetime_service_LDADD = \
datetimelibdir = $(INDICATORDIR)
datetimelib_LTLIBRARIES = libdatetime.la
libdatetime_la_SOURCES = \
+ dbus-shared.h \
indicator-datetime.c
libdatetime_la_CFLAGS = \
diff --git a/src/datetime-service.c b/src/datetime-service.c
index 39a256d..2137065 100644
--- a/src/datetime-service.c
+++ b/src/datetime-service.c
@@ -19,9 +19,191 @@ You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <config.h>
+#include <libindicator/indicator-service.h>
+
+#include <glib/gi18n.h>
+
+#include <libdbusmenu-glib/server.h>
+#include <libdbusmenu-glib/client.h>
+#include <libdbusmenu-glib/menuitem.h>
+
+#include "dbus-shared.h"
+
+static IndicatorService * service = NULL;
+static GMainLoop * mainloop = NULL;
+static DbusmenuServer * server = NULL;
+static DbusmenuMenuitem * root = NULL;
+
+/* Global Items */
+static DbusmenuMenuitem * date = NULL;
+static DbusmenuMenuitem * calendar = NULL;
+static DbusmenuMenuitem * settings = NULL;
+
+/* Updates the label in the date menuitem */
+static gboolean
+update_datetime (gpointer user_data)
+{
+ g_debug("Updating Date/Time");
+
+ gchar longstr[128];
+ time_t t;
+ struct tm *ltime;
+
+ t = time(NULL);
+ ltime = localtime(&t);
+ if (ltime == NULL) {
+ g_warning("Error getting local time");
+ dbusmenu_menuitem_property_set(date, DBUSMENU_MENUITEM_PROP_LABEL, _("Error getting time"));
+ return FALSE;
+ }
+
+ /* Note: may require some localization tweaks */
+ strftime(longstr, 128, "%A, %e %B %Y", ltime);
+
+ gchar * utf8 = g_locale_to_utf8(longstr, -1, NULL, NULL, NULL);
+ dbusmenu_menuitem_property_set(date, DBUSMENU_MENUITEM_PROP_LABEL, utf8);
+ g_free(utf8);
+
+ return FALSE;
+}
+
+/* Run a particular program based on an activation */
+static void
+activate_cb (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command)
+{
+ GError * error = NULL;
+
+ g_debug("Issuing command '%s'", command);
+ if (!g_spawn_command_line_async(command, &error)) {
+ g_warning("Unable to start %s: %s", (char *)command, error->message);
+ g_error_free(error);
+ }
+}
+
+/* Looks for the calendar application and enables the item if
+ we have one */
+static gboolean
+check_for_calendar (gpointer user_data)
+{
+ g_return_val_if_fail (calendar != NULL, FALSE);
+
+ gchar *evo = g_find_program_in_path("evolution");
+ if (evo != NULL) {
+ g_debug("Found the calendar application: %s", evo);
+ dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE);
+ dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE);
+ g_free(evo);
+ } else {
+ g_debug("Unable to find calendar app.");
+ dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE);
+ }
+
+ return FALSE;
+}
+
+/* Looks for the time and date admin application and enables the
+ item we have one */
+static gboolean
+check_for_timeadmin (gpointer user_data)
+{
+ g_return_val_if_fail (settings != NULL, FALSE);
+
+ gchar * timeadmin = g_find_program_in_path("time-admin");
+ if (timeadmin != NULL) {
+ g_debug("Found the time-admin application: %s", timeadmin);
+ dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE);
+ g_free(timeadmin);
+ } else {
+ g_debug("Unable to find time-admin app.");
+ dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
+ }
+
+ return FALSE;
+}
+
+/* Does the work to build the default menu, really calls out
+ to other functions but this is the core to clean up the
+ main function. */
+static void
+build_menus (DbusmenuMenuitem * root)
+{
+ g_debug("Building Menus.");
+ if (date == NULL) {
+ date = dbusmenu_menuitem_new();
+ dbusmenu_menuitem_property_set (date, DBUSMENU_MENUITEM_PROP_LABEL, _("No date yet..."));
+ dbusmenu_menuitem_property_set_bool(date, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
+ dbusmenu_menuitem_child_append(root, date);
+
+ g_idle_add(update_datetime, NULL);
+ /* TODO: Set up updating daily */
+ }
+
+ if (calendar == NULL) {
+ calendar = dbusmenu_menuitem_new();
+ dbusmenu_menuitem_property_set (calendar, DBUSMENU_MENUITEM_PROP_LABEL, _("Open Calendar"));
+ /* insensitive until we check for available apps */
+ dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
+ g_signal_connect (G_OBJECT(calendar), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
+ G_CALLBACK (activate_cb), "evolution -c calendar");
+ dbusmenu_menuitem_child_append(root, calendar);
+
+ g_idle_add(check_for_calendar, NULL);
+ }
+
+ DbusmenuMenuitem * separator = dbusmenu_menuitem_new();
+ dbusmenu_menuitem_property_set(separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR);
+ dbusmenu_menuitem_child_append(root, separator);
+
+ settings = dbusmenu_menuitem_new();
+ dbusmenu_menuitem_property_set (settings, DBUSMENU_MENUITEM_PROP_LABEL, _("Set Time and Date..."));
+ /* insensitive until we check for available apps */
+ dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
+ g_signal_connect(G_OBJECT(settings), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_cb), "time-admin");
+ dbusmenu_menuitem_child_append(root, settings);
+ g_idle_add(check_for_timeadmin, NULL);
+
+ return;
+}
+
+/* Repsonds to the service object saying it's time to shutdown.
+ It stops the mainloop. */
+static void
+service_shutdown (IndicatorService * service, gpointer user_data)
+{
+ g_warning("Shutting down service!");
+ g_main_loop_quit(mainloop);
+ return;
+}
+
+/* Function to build everything up. Entry point from asm. */
int
main (int argc, char ** argv)
{
+ g_type_init();
+
+ /* Acknowledging the service init and setting up the interface */
+ service = indicator_service_new_version(SERVICE_NAME, SERVICE_VERSION);
+ g_signal_connect(service, INDICATOR_SERVICE_SIGNAL_SHUTDOWN, G_CALLBACK(service_shutdown), NULL);
+
+ /* Setting up i18n and gettext. Apparently, we need
+ all of these. */
+ setlocale (LC_ALL, "");
+ bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
+ textdomain (GETTEXT_PACKAGE);
+
+ /* Building the base menu */
+ server = dbusmenu_server_new(MENU_OBJ);
+ root = dbusmenu_menuitem_new();
+ dbusmenu_server_set_root(server, root);
+ build_menus(root);
+
+ mainloop = g_main_loop_new(NULL, FALSE);
+ g_main_loop_run(mainloop);
+
+ g_object_unref(G_OBJECT(service));
+ g_object_unref(G_OBJECT(server));
+ g_object_unref(G_OBJECT(root));
return 0;
}
diff --git a/src/dbus-shared.h b/src/dbus-shared.h
new file mode 100644
index 0000000..aa6d933
--- /dev/null
+++ b/src/dbus-shared.h
@@ -0,0 +1,29 @@
+/*
+An indicator to show date and time information.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+ Ted Gould <ted@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 3, as published
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#define SERVICE_NAME "org.ayatana.indicator.datetime"
+#define SERVICE_IFACE "org.ayatana.indicator.datetime.service"
+#define SERVICE_OBJ "/org/ayatana/indicator/datetime/service"
+#define SERVICE_VERSION 1
+
+#define MENU_OBJ "/org/ayatana/indicator/datetime/menu"
+
diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c
index be4db10..6b32f1a 100644
--- a/src/indicator-datetime.c
+++ b/src/indicator-datetime.c
@@ -31,6 +31,12 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
/* Indicator Stuff */
#include <libindicator/indicator.h>
#include <libindicator/indicator-object.h>
+#include <libindicator/indicator-service-manager.h>
+
+/* DBusMenu */
+#include <libdbusmenu-gtk/menu.h>
+
+#include "dbus-shared.h"
#define INDICATOR_DATETIME_TYPE (indicator_datetime_get_type ())
@@ -55,12 +61,13 @@ struct _IndicatorDatetime {
struct _IndicatorDatetimePrivate {
GtkLabel * label;
- GtkMenuItem * date;
- GtkMenuItem * calendar;
guint timer;
guint idle_measure;
gint max_width;
+
+ IndicatorServiceManager * sm;
+ DbusmenuGtkMenu * menu;
};
#define INDICATOR_DATETIME_GET_PRIVATE(o) \
@@ -105,13 +112,16 @@ indicator_datetime_init (IndicatorDatetime *self)
self->priv = INDICATOR_DATETIME_GET_PRIVATE(self);
self->priv->label = NULL;
- self->priv->date = NULL;
- self->priv->calendar = NULL;
self->priv->timer = 0;
self->priv->idle_measure = 0;
self->priv->max_width = 0;
+ self->priv->sm = NULL;
+ self->priv->menu = NULL;
+
+ self->priv->sm = indicator_service_manager_new_version(SERVICE_NAME, SERVICE_VERSION);
+
return;
}
@@ -125,16 +135,6 @@ indicator_datetime_dispose (GObject *object)
self->priv->label = NULL;
}
- if (self->priv->date != NULL) {
- g_object_unref(self->priv->date);
- self->priv->date = NULL;
- }
-
- if (self->priv->calendar != NULL) {
- g_object_unref(self->priv->calendar);
- self->priv->calendar = NULL;
- }
-
if (self->priv->timer != 0) {
g_source_remove(self->priv->timer);
self->priv->timer = 0;
@@ -145,6 +145,16 @@ indicator_datetime_dispose (GObject *object)
self->priv->idle_measure = 0;
}
+ if (self->priv->menu != NULL) {
+ g_object_unref(G_OBJECT(self->priv->menu));
+ self->priv->menu = NULL;
+ }
+
+ if (self->priv->sm != NULL) {
+ g_object_unref(G_OBJECT(self->priv->sm));
+ self->priv->sm = NULL;
+ }
+
G_OBJECT_CLASS (indicator_datetime_parent_class)->dispose (object);
return;
}
@@ -209,15 +219,6 @@ update_label (IndicatorDatetime * io)
self->priv->idle_measure = g_idle_add(idle_measure, io);
}
- if (self->priv->date == NULL) return;
-
- /* Note: may require some localization tweaks */
- strftime(longstr, 128, "%A, %e %B %Y", ltime);
-
- utf8 = g_locale_to_utf8(longstr, -1, NULL, NULL, NULL);
- gtk_menu_item_set_label(self->priv->date, utf8);
- g_free(utf8);
-
return;
}
@@ -238,17 +239,6 @@ minute_timer_func (gpointer user_data)
return FALSE;
}
-static void
-activate_cb (GtkWidget *widget, const gchar *command)
-{
- GError * error = NULL;
-
- if (!g_spawn_command_line_async(command, &error)) {
- g_warning("Unable to start %s: %s", (char *)command, error->message);
- g_error_free(error);
- }
-}
-
/* Does a quick meausre of how big the string is in
pixels with a Pango layout */
static gint
@@ -332,65 +322,14 @@ get_label (IndicatorObject * io)
return self->priv->label;
}
-static void
-check_for_calendar_application (IndicatorDatetime * self)
-{
- GtkMenuItem * item = self->priv->calendar;
- g_return_if_fail (item != NULL);
-
- gchar *evo = g_find_program_in_path("evolution");
- if (evo != NULL) {
- g_signal_connect (GTK_MENU_ITEM (item), "activate",
- G_CALLBACK (activate_cb), "evolution -c calendar");
- gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE);
- gtk_widget_show(GTK_WIDGET(item));
- g_free(evo);
- } else {
- gtk_widget_hide(GTK_WIDGET(item));
- }
-}
-
static GtkMenu *
get_menu (IndicatorObject * io)
{
IndicatorDatetime * self = INDICATOR_DATETIME(io);
- GtkWidget * menu = NULL;
- GtkWidget * item = NULL;
-
- menu = gtk_menu_new();
-
- if (self->priv->date == NULL) {
- item = gtk_menu_item_new_with_label("No date yet...");
- gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
- self->priv->date = GTK_MENU_ITEM (item);
- update_label(self);
+ if (self->priv->menu == NULL) {
+ self->priv->menu = dbusmenu_gtkmenu_new(SERVICE_NAME, MENU_OBJ);
}
- if (self->priv->calendar == NULL) {
- item = gtk_menu_item_new_with_label(_("Open Calendar"));
- /* insensitive until we check for available apps */
- gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
- self->priv->calendar = GTK_MENU_ITEM (item);
- }
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu),
- gtk_separator_menu_item_new ());
-
- GtkWidget *settings_mi = gtk_menu_item_new_with_label (_("Set Time and Date..."));
- g_signal_connect (GTK_MENU_ITEM (settings_mi), "activate",
- G_CALLBACK (activate_cb), "time-admin");
- gtk_menu_shell_append (GTK_MENU_SHELL(menu), settings_mi);
- gtk_widget_show(settings_mi);
-
- /* show_all to reveal the separator */
- gtk_widget_show_all(menu);
-
- /* Note: maybe should move that to an idle loop if that helps with
- boot performance */
- check_for_calendar_application (self);
-
- return GTK_MENU(menu);
+ return GTK_MENU(self->priv->menu);
}