diff options
author | Ted Gould <ted@gould.cx> | 2010-07-13 11:09:55 -0500 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2010-07-13 11:09:55 -0500 |
commit | 127dd570e0f0ccb2b07ffb5ee39c89f9446f3c8a (patch) | |
tree | 0111433be8c7f822f61b8dcb6ad5d6da63d97c06 | |
parent | dbcc98fc883c5e5d71d560dd8761018614e38f60 (diff) | |
parent | dcdce69d38c1838a73f12d78d35d5e48e52ce742 (diff) | |
download | ayatana-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-x | configure | 52 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | data/Makefile.am | 11 | ||||
-rw-r--r-- | data/Makefile.in | 85 | ||||
-rw-r--r-- | data/indicator-datetime.service.in | 3 | ||||
-rw-r--r-- | debian/changelog | 8 | ||||
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/Makefile.in | 9 | ||||
-rw-r--r-- | src/datetime-service.c | 182 | ||||
-rw-r--r-- | src/dbus-shared.h | 29 | ||||
-rw-r--r-- | src/indicator-datetime.c | 115 |
11 files changed, 369 insertions, 133 deletions
@@ -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); } |